Add support for Vercel as a language model provider (#33292)

Vercel v0 is an OpenAI-compatible model, so this is mostly a dupe of the
OpenAI provider files with some adaptations for v0, including going
ahead and using the custom endpoint for the API URL field.

Release Notes:

- Added support for Vercel as a language model provider.
This commit is contained in:
Danilo Leal 2025-06-24 11:02:06 -03:00 committed by GitHub
parent 0d70bcb88c
commit 94735aef69
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 1394 additions and 0 deletions

View file

@ -20,6 +20,7 @@ use crate::provider::{
ollama::OllamaSettings,
open_ai::OpenAiSettings,
open_router::OpenRouterSettings,
vercel::VercelSettings,
};
/// Initializes the language model settings.
@ -64,6 +65,7 @@ pub struct AllLanguageModelSettings {
pub open_router: OpenRouterSettings,
pub zed_dot_dev: ZedDotDevSettings,
pub google: GoogleSettings,
pub vercel: VercelSettings,
pub lmstudio: LmStudioSettings,
pub deepseek: DeepSeekSettings,
@ -82,6 +84,7 @@ pub struct AllLanguageModelSettingsContent {
pub zed_dot_dev: Option<ZedDotDevSettingsContent>,
pub google: Option<GoogleSettingsContent>,
pub deepseek: Option<DeepseekSettingsContent>,
pub vercel: Option<VercelSettingsContent>,
pub mistral: Option<MistralSettingsContent>,
}
@ -259,6 +262,12 @@ pub struct OpenAiSettingsContentV1 {
pub available_models: Option<Vec<provider::open_ai::AvailableModel>>,
}
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema)]
pub struct VercelSettingsContent {
pub api_url: Option<String>,
pub available_models: Option<Vec<provider::vercel::AvailableModel>>,
}
#[derive(Default, Clone, Debug, Serialize, Deserialize, PartialEq, JsonSchema)]
pub struct GoogleSettingsContent {
pub api_url: Option<String>,
@ -385,6 +394,18 @@ impl settings::Settings for AllLanguageModelSettings {
&mut settings.openai.available_models,
openai.as_ref().and_then(|s| s.available_models.clone()),
);
// Vercel
let vercel = value.vercel.clone();
merge(
&mut settings.vercel.api_url,
vercel.as_ref().and_then(|s| s.api_url.clone()),
);
merge(
&mut settings.vercel.available_models,
vercel.as_ref().and_then(|s| s.available_models.clone()),
);
merge(
&mut settings.zed_dot_dev.available_models,
value