settings.rs

  1use std::sync::Arc;
  2
  3use collections::HashMap;
  4use settings::RegisterSetting;
  5
  6use crate::provider::{
  7    bedrock::AmazonBedrockSettings, cloud::ZedDotDevSettings, deepseek::DeepSeekSettings,
  8    google::GoogleSettings, lmstudio::LmStudioSettings, mistral::MistralSettings,
  9    ollama::OllamaSettings, open_ai::OpenAiSettings, open_ai_compatible::OpenAiCompatibleSettings,
 10    open_router::OpenRouterSettings, vercel::VercelSettings, x_ai::XAiSettings,
 11};
 12
 13#[derive(Debug, RegisterSetting)]
 14pub struct AllLanguageModelSettings {
 15    pub bedrock: AmazonBedrockSettings,
 16    pub deepseek: DeepSeekSettings,
 17    pub google: GoogleSettings,
 18    pub lmstudio: LmStudioSettings,
 19    pub mistral: MistralSettings,
 20    pub ollama: OllamaSettings,
 21    pub open_router: OpenRouterSettings,
 22    pub openai: OpenAiSettings,
 23    pub openai_compatible: HashMap<Arc<str>, OpenAiCompatibleSettings>,
 24    pub vercel: VercelSettings,
 25    pub x_ai: XAiSettings,
 26    pub zed_dot_dev: ZedDotDevSettings,
 27}
 28
 29impl settings::Settings for AllLanguageModelSettings {
 30    const PRESERVED_KEYS: Option<&'static [&'static str]> = Some(&["version"]);
 31
 32    fn from_settings(content: &settings::SettingsContent) -> Self {
 33        let language_models = content.language_models.clone().unwrap();
 34        let bedrock = language_models.bedrock.unwrap();
 35        let deepseek = language_models.deepseek.unwrap();
 36        let google = language_models.google.unwrap();
 37        let lmstudio = language_models.lmstudio.unwrap();
 38        let mistral = language_models.mistral.unwrap();
 39        let ollama = language_models.ollama.unwrap();
 40        let open_router = language_models.open_router.unwrap();
 41        let openai = language_models.openai.unwrap();
 42        let openai_compatible = language_models.openai_compatible.unwrap();
 43        let vercel = language_models.vercel.unwrap();
 44        let x_ai = language_models.x_ai.unwrap();
 45        let zed_dot_dev = language_models.zed_dot_dev.unwrap();
 46        Self {
 47            bedrock: AmazonBedrockSettings {
 48                available_models: bedrock.available_models.unwrap_or_default(),
 49                region: bedrock.region,
 50                endpoint: bedrock.endpoint_url, // todo(should be api_url)
 51                profile_name: bedrock.profile,
 52                role_arn: None, // todo(was never a setting for this...)
 53                authentication_method: bedrock.authentication_method.map(Into::into),
 54                allow_global: bedrock.allow_global,
 55            },
 56            deepseek: DeepSeekSettings {
 57                api_url: deepseek.api_url.unwrap(),
 58                available_models: deepseek.available_models.unwrap_or_default(),
 59            },
 60            google: GoogleSettings {
 61                api_url: google.api_url.unwrap(),
 62                available_models: google.available_models.unwrap_or_default(),
 63            },
 64            lmstudio: LmStudioSettings {
 65                api_url: lmstudio.api_url.unwrap(),
 66                available_models: lmstudio.available_models.unwrap_or_default(),
 67            },
 68            mistral: MistralSettings {
 69                api_url: mistral.api_url.unwrap(),
 70                available_models: mistral.available_models.unwrap_or_default(),
 71            },
 72            ollama: OllamaSettings {
 73                api_url: ollama.api_url.unwrap(),
 74                available_models: ollama.available_models.unwrap_or_default(),
 75            },
 76            open_router: OpenRouterSettings {
 77                api_url: open_router.api_url.unwrap(),
 78                available_models: open_router.available_models.unwrap_or_default(),
 79            },
 80            openai: OpenAiSettings {
 81                api_url: openai.api_url.unwrap(),
 82                available_models: openai.available_models.unwrap_or_default(),
 83            },
 84            openai_compatible: openai_compatible
 85                .into_iter()
 86                .map(|(key, value)| {
 87                    (
 88                        key,
 89                        OpenAiCompatibleSettings {
 90                            api_url: value.api_url,
 91                            available_models: value.available_models,
 92                        },
 93                    )
 94                })
 95                .collect(),
 96            vercel: VercelSettings {
 97                api_url: vercel.api_url.unwrap(),
 98                available_models: vercel.available_models.unwrap_or_default(),
 99            },
100            x_ai: XAiSettings {
101                api_url: x_ai.api_url.unwrap(),
102                available_models: x_ai.available_models.unwrap_or_default(),
103            },
104            zed_dot_dev: ZedDotDevSettings {
105                available_models: zed_dot_dev.available_models.unwrap_or_default(),
106            },
107        }
108    }
109}