diff --git a/src/server/chat/completions.rs b/src/server/chat/completions.rs index c7ff7dd..037b3c9 100644 --- a/src/server/chat/completions.rs +++ b/src/server/chat/completions.rs @@ -240,9 +240,11 @@ impl Shortcut { (P::NvidiaNim, "deepseek-ai/deepseek-v4.1-flash".into()), (P::HuggingFace, "deepseek-ai/DeepSeek-V4.1-Flash".into()), (P::OpenCode, "deepseek-v4.1-flash-free".into()), + (P::VercelAiGateway, "minimax/minimax-m3.1-flash".into()), (P::OpenRouter, "minimax/minimax-m3.1-flash:free".into()), (P::VercelAiGateway, "inclusionai/ling-3.1-flash".into()), (P::HuggingFace, "inclusionAI/Ling-3.1-flash".into()), + (P::VercelAiGateway, "reflection/beam-free".into()), (P::Ollama, "beam".into()), (P::OpenCode, "beam-free".into()), (P::VercelAiGateway, "xiaomi/mimo-v2.6-flash".into()), @@ -270,6 +272,7 @@ impl Shortcut { (P::HuggingFace, "zai-org/GLM-5.3".into()), (P::CloudflareWorkersAi, "@cf/zai-org/glm-5.3".into()), (P::Mistral, "zai-glm-5-3".into()), + (P::VercelAiGateway, "deepseek/deepseek-v4.1-flash-1017".into()), (P::OpenCode, "muse-spark-1.3-contributor-free".into()), (P::NvidiaNim, "moonshotai/kimi-k3".into()), (P::HuggingFace, "moonshotai/Kimi-K3".into()), diff --git a/src/server/embeddings.rs b/src/server/embeddings.rs index 53a0056..48b4a86 100644 --- a/src/server/embeddings.rs +++ b/src/server/embeddings.rs @@ -63,6 +63,7 @@ enum Provider { Mistral, NvidiaNim, OpenRouter, + VercelAiGateway, } impl Shortcut { @@ -72,9 +73,16 @@ impl Shortcut { match self { S::CodestralEmbed2505 => vec![(P::Mistral, "codestral-embed-2505".into())], - S::CohereEmbedV4_0 => vec![(P::Cohere, "embed-v4.0".into())], - S::CohereEmbedV5_0Fast => vec![(P::Cohere, "embed-v5.0-fast".into())], - S::CohereEmbedV5_0Pro => vec![(P::Cohere, "embed-v5.0-pro".into())], + S::CohereEmbedV4_0 => vec![(P::Cohere, "embed-v4.0".into()), + (P::VercelAiGateway, "cohere/embed-v4.0".into())], + S::CohereEmbedV5_0Fast => vec![ + (P::Cohere, "embed-v5.0-fast".into()), + (P::VercelAiGateway, "cohere/embed-v5.0-fast".into()), + ], + S::CohereEmbedV5_0Pro => vec![ + (P::Cohere, "embed-v5.0-pro".into()), + (P::VercelAiGateway, "cohere/embed-v5.0-pro".into()), + ], S::GeminiEmbedding2 => vec![(P::GoogleAiStudio, "gemini-embedding-2".into())], S::Lfm2_5Embedding350M => { vec![(P::OpenRouter, "liquid/lfm-2.5-embedding-350m:free".into())] @@ -201,6 +209,18 @@ pub async fn create_embeddings( .build() }) .collect(), + Provider::VercelAiGateway => state + .app_args + .vercel_ai_gateway_api_key + .iter() + .cloned() + .map(|api_key| { + Upstream::builder() + .url("https://ai-gateway.vercel.sh/v1/embeddings".parse().expect("TODO")) + .api_key(api_key) + .build() + }) + .collect(), }; if let Ok(upstreams) = Vec1::try_from(upstreams) { diff --git a/src/server/system_one.rs b/src/server/system_one.rs index da7306b..4f2f202 100644 --- a/src/server/system_one.rs +++ b/src/server/system_one.rs @@ -33,6 +33,7 @@ pub struct V1SystemOnePath; pub enum Shortcut { S, M, + L, } #[derive(Debug, Clone)] @@ -52,6 +53,7 @@ impl Shortcut { match self { S::S => { vec![ + (P::VercelAiGateway, "perplexity/pplx-decider-flash-v1.2".into()), (P::LiquidAi, "d1:free".into()), (P::CloudflareWorkersAi, "clef-omni".into()), (P::CloudflareWorkersAi, "clef-flash".into()), @@ -65,10 +67,17 @@ impl Shortcut { S::M => { vec![ (P::OpenCode, "jev-1.13-free".into()), + (P::VercelAiGateway, "perplexity/pplx-decider-v1.2".into()), (P::CloudflareWorkersAi, "clef".into()), (P::OpenRouter, "inception/mercury-decide:free".into()), ] } + + S::L => { + vec![ + (P::VercelAiGateway, "liquid/d1-ultra".into()) + ] + } } } }