From 77933f83e5175872551a4363a27ef2be1271d250 Mon Sep 17 00:00:00 2001 From: David Kleingeld Date: Wed, 15 Oct 2025 22:54:57 +0200 Subject: [PATCH] Decouple cloud provider from Model in Zed (#40281) Release Notes: - N/A Co-authored-by: Marshall Bowers --- .../cloud_llm_client/src/cloud_llm_client.rs | 3 +++ crates/language_models/src/provider/cloud.rs | 20 ++++++------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/crates/cloud_llm_client/src/cloud_llm_client.rs b/crates/cloud_llm_client/src/cloud_llm_client.rs index 4ae72ce0a4..bb77c3a5b7 100644 --- a/crates/cloud_llm_client/src/cloud_llm_client.rs +++ b/crates/cloud_llm_client/src/cloud_llm_client.rs @@ -322,6 +322,9 @@ pub struct LanguageModel { pub supports_images: bool, pub supports_thinking: bool, pub supports_max_mode: bool, + // only used by OpenAI and xAI + #[serde(default)] + pub supports_parallel_tool_calls: bool, } #[derive(Debug, Serialize, Deserialize)] diff --git a/crates/language_models/src/provider/cloud.rs b/crates/language_models/src/provider/cloud.rs index 1c21e566d6..d85533ecce 100644 --- a/crates/language_models/src/provider/cloud.rs +++ b/crates/language_models/src/provider/cloud.rs @@ -810,15 +810,11 @@ impl LanguageModel for CloudLanguageModel { } cloud_llm_client::LanguageModelProvider::OpenAi => { let client = self.client.clone(); - let model = match open_ai::Model::from_id(&self.model.id.0) { - Ok(model) => model, - Err(err) => return async move { Err(anyhow!(err).into()) }.boxed(), - }; let request = into_open_ai( request, - model.id(), - model.supports_parallel_tool_calls(), - model.supports_prompt_cache_key(), + &self.model.id.0, + self.model.supports_parallel_tool_calls, + true, None, None, ); @@ -860,15 +856,11 @@ impl LanguageModel for CloudLanguageModel { } cloud_llm_client::LanguageModelProvider::XAi => { let client = self.client.clone(); - let model = match x_ai::Model::from_id(&self.model.id.0) { - Ok(model) => model, - Err(err) => return async move { Err(anyhow!(err).into()) }.boxed(), - }; let request = into_open_ai( request, - model.id(), - model.supports_parallel_tool_calls(), - model.supports_prompt_cache_key(), + &self.model.id.0, + self.model.supports_parallel_tool_calls, + false, None, None, );