settings: Use a derive macro for refine (#38451)
When we refactored settings to not pass JSON blobs around, we ended up needing to write *a lot* of code that just merged things (like json merge used to do). Use a derive macro to prevent typos in this logic. Release Notes: - N/A
This commit is contained in:
@@ -3,7 +3,6 @@ use std::sync::Arc;
|
||||
use collections::HashMap;
|
||||
use gpui::App;
|
||||
use settings::Settings;
|
||||
use util::MergeFrom;
|
||||
|
||||
use crate::provider::{
|
||||
anthropic::AnthropicSettings, bedrock::AmazonBedrockSettings, cloud::ZedDotDevSettings,
|
||||
@@ -37,7 +36,7 @@ pub struct AllLanguageModelSettings {
|
||||
impl settings::Settings for AllLanguageModelSettings {
|
||||
const PRESERVED_KEYS: Option<&'static [&'static str]> = Some(&["version"]);
|
||||
|
||||
fn from_defaults(content: &settings::SettingsContent, _cx: &mut App) -> Self {
|
||||
fn from_settings(content: &settings::SettingsContent, _cx: &mut App) -> Self {
|
||||
let language_models = content.language_models.clone().unwrap();
|
||||
let anthropic = language_models.anthropic.unwrap();
|
||||
let bedrock = language_models.bedrock.unwrap();
|
||||
@@ -118,113 +117,4 @@ impl settings::Settings for AllLanguageModelSettings {
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
fn refine(&mut self, content: &settings::SettingsContent, _cx: &mut App) {
|
||||
let Some(models) = content.language_models.as_ref() else {
|
||||
return;
|
||||
};
|
||||
|
||||
if let Some(anthropic) = models.anthropic.as_ref() {
|
||||
self.anthropic
|
||||
.available_models
|
||||
.merge_from(&anthropic.available_models);
|
||||
self.anthropic.api_url.merge_from(&anthropic.api_url);
|
||||
}
|
||||
|
||||
if let Some(bedrock) = models.bedrock.clone() {
|
||||
self.bedrock
|
||||
.available_models
|
||||
.merge_from(&bedrock.available_models);
|
||||
|
||||
if let Some(endpoint_url) = bedrock.endpoint_url {
|
||||
self.bedrock.endpoint = Some(endpoint_url)
|
||||
}
|
||||
|
||||
if let Some(region) = bedrock.region {
|
||||
self.bedrock.region = Some(region)
|
||||
}
|
||||
|
||||
if let Some(profile_name) = bedrock.profile {
|
||||
self.bedrock.profile_name = Some(profile_name);
|
||||
}
|
||||
|
||||
if let Some(auth_method) = bedrock.authentication_method {
|
||||
self.bedrock.authentication_method = Some(auth_method.into());
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(deepseek) = models.deepseek.as_ref() {
|
||||
self.deepseek
|
||||
.available_models
|
||||
.merge_from(&deepseek.available_models);
|
||||
self.deepseek.api_url.merge_from(&deepseek.api_url);
|
||||
}
|
||||
|
||||
if let Some(google) = models.google.as_ref() {
|
||||
self.google
|
||||
.available_models
|
||||
.merge_from(&google.available_models);
|
||||
self.google.api_url.merge_from(&google.api_url);
|
||||
}
|
||||
|
||||
if let Some(lmstudio) = models.lmstudio.as_ref() {
|
||||
self.lmstudio
|
||||
.available_models
|
||||
.merge_from(&lmstudio.available_models);
|
||||
self.lmstudio.api_url.merge_from(&lmstudio.api_url);
|
||||
}
|
||||
|
||||
if let Some(mistral) = models.mistral.as_ref() {
|
||||
self.mistral
|
||||
.available_models
|
||||
.merge_from(&mistral.available_models);
|
||||
self.mistral.api_url.merge_from(&mistral.api_url);
|
||||
}
|
||||
if let Some(ollama) = models.ollama.as_ref() {
|
||||
self.ollama
|
||||
.available_models
|
||||
.merge_from(&ollama.available_models);
|
||||
self.ollama.api_url.merge_from(&ollama.api_url);
|
||||
}
|
||||
if let Some(open_router) = models.open_router.as_ref() {
|
||||
self.open_router
|
||||
.available_models
|
||||
.merge_from(&open_router.available_models);
|
||||
self.open_router.api_url.merge_from(&open_router.api_url);
|
||||
}
|
||||
if let Some(openai) = models.openai.as_ref() {
|
||||
self.openai
|
||||
.available_models
|
||||
.merge_from(&openai.available_models);
|
||||
self.openai.api_url.merge_from(&openai.api_url);
|
||||
}
|
||||
if let Some(openai_compatible) = models.openai_compatible.clone() {
|
||||
for (name, value) in openai_compatible {
|
||||
self.openai_compatible.insert(
|
||||
name,
|
||||
OpenAiCompatibleSettings {
|
||||
api_url: value.api_url,
|
||||
available_models: value.available_models,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
if let Some(vercel) = models.vercel.as_ref() {
|
||||
self.vercel
|
||||
.available_models
|
||||
.merge_from(&vercel.available_models);
|
||||
self.vercel.api_url.merge_from(&vercel.api_url);
|
||||
}
|
||||
if let Some(x_ai) = models.x_ai.as_ref() {
|
||||
self.x_ai
|
||||
.available_models
|
||||
.merge_from(&x_ai.available_models);
|
||||
self.x_ai.api_url.merge_from(&x_ai.api_url);
|
||||
}
|
||||
if let Some(zed_dot_dev) = models.zed_dot_dev.as_ref() {
|
||||
self.zed_dot_dev
|
||||
.available_models
|
||||
.merge_from(&zed_dot_dev.available_models);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user