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