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