assistant: Make it easier to define custom models (#15442)
This PR makes it easier to specify custom models for the Google, OpenAI, and Anthropic provider: Before (google): ```json { "language_models": { "google": { "available_models": [ { "custom": { "name": "my-custom-google-model", "max_tokens": 12345 } } ] } } } ``` After (google): ```json { "language_models": { "google": { "available_models": [ { "name": "my-custom-google-model", "max_tokens": 12345 } ] } } } ``` Before (anthropic): ```json { "language_models": { "anthropic": { "available_models": [ { "custom": { "name": "my-custom-anthropic-model", "max_tokens": 12345 } } ] } } } ``` After (anthropic): ```json { "language_models": { "anthropic": { "version": "1", "available_models": [ { "name": "my-custom-anthropic-model", "max_tokens": 12345 } ] } } } ``` The settings will be auto-upgraded so the old versions will continue to work (except for Google since that one has not been released). /cc @as-cii Release Notes: - N/A --------- Co-authored-by: Thorsten <thorsten@zed.dev>
This commit is contained in:
parent
13dcb42c1c
commit
2ada2964c5
10 changed files with 256 additions and 47 deletions
|
@ -110,11 +110,15 @@ impl AssistantSettingsContent {
|
|||
move |content, _| {
|
||||
if content.anthropic.is_none() {
|
||||
content.anthropic =
|
||||
Some(language_model::settings::AnthropicSettingsContent {
|
||||
api_url,
|
||||
low_speed_timeout_in_seconds,
|
||||
..Default::default()
|
||||
});
|
||||
Some(language_model::settings::AnthropicSettingsContent::Versioned(
|
||||
language_model::settings::VersionedAnthropicSettingsContent::V1(
|
||||
language_model::settings::AnthropicSettingsContentV1 {
|
||||
api_url,
|
||||
low_speed_timeout_in_seconds,
|
||||
available_models: None
|
||||
}
|
||||
)
|
||||
));
|
||||
}
|
||||
},
|
||||
),
|
||||
|
@ -145,12 +149,27 @@ impl AssistantSettingsContent {
|
|||
cx,
|
||||
move |content, _| {
|
||||
if content.openai.is_none() {
|
||||
let available_models = available_models.map(|models| {
|
||||
models
|
||||
.into_iter()
|
||||
.filter_map(|model| match model {
|
||||
open_ai::Model::Custom { name, max_tokens } => {
|
||||
Some(language_model::provider::open_ai::AvailableModel { name, max_tokens })
|
||||
}
|
||||
_ => None,
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
});
|
||||
content.openai =
|
||||
Some(language_model::settings::OpenAiSettingsContent {
|
||||
api_url,
|
||||
low_speed_timeout_in_seconds,
|
||||
available_models,
|
||||
});
|
||||
Some(language_model::settings::OpenAiSettingsContent::Versioned(
|
||||
language_model::settings::VersionedOpenAiSettingsContent::V1(
|
||||
language_model::settings::OpenAiSettingsContentV1 {
|
||||
api_url,
|
||||
low_speed_timeout_in_seconds,
|
||||
available_models
|
||||
}
|
||||
)
|
||||
));
|
||||
}
|
||||
},
|
||||
),
|
||||
|
@ -377,6 +396,7 @@ fn providers_schema(_: &mut schemars::gen::SchemaGenerator) -> schemars::schema:
|
|||
schemars::schema::SchemaObject {
|
||||
enum_values: Some(vec![
|
||||
"anthropic".into(),
|
||||
"google".into(),
|
||||
"ollama".into(),
|
||||
"openai".into(),
|
||||
"zed.dev".into(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue