From 92a09ecf2557e276858986e92ee0a21a7ee39d45 Mon Sep 17 00:00:00 2001 From: Jowell Young Date: Mon, 29 Sep 2025 19:38:55 +0800 Subject: [PATCH] x_ai: Add support for tools and images with custom models (#38792) After the change, we can add "supports_images", "supports_tools" and "parallel_tool_calls" properties to set up new models. Our `settings.json` will be as follows: ```json "language_models": { "x_ai": { "api_url": "https://api.x.ai/v1", "available_models": [ { "name": "grok-4-fast-reasoning", "display_name": "Grok 4 Fast Reasoning", "max_tokens": 2000000, "max_output_tokens": 64000, "supports_tools": true, "parallel_tool_calls": true, }, { "name": "grok-4-fast-non-reasoning", "display_name": "Grok 4 Fast Non-Reasoning", "max_tokens": 2000000, "max_output_tokens": 64000, "supports_images": true, } ] } } ``` Closes https://github.com/zed-industries/zed/issues/38752 Release Notes: - xAI: Added support for for configuring tool and image support for custom model configurations --- crates/language_models/src/provider/x_ai.rs | 3 +++ .../src/settings_content/language_model.rs | 3 +++ crates/x_ai/src/x_ai.rs | 20 ++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/crates/language_models/src/provider/x_ai.rs b/crates/language_models/src/provider/x_ai.rs index 4e9f5917077086cbbcf7e095eaf58b977e4037ab..243a2e3e0217f10d580a278d25e7168f4f62fe21 100644 --- a/crates/language_models/src/provider/x_ai.rs +++ b/crates/language_models/src/provider/x_ai.rs @@ -158,6 +158,9 @@ impl LanguageModelProvider for XAiLanguageModelProvider { max_tokens: model.max_tokens, max_output_tokens: model.max_output_tokens, max_completion_tokens: model.max_completion_tokens, + supports_images: model.supports_images, + supports_tools: model.supports_tools, + parallel_tool_calls: model.parallel_tool_calls, }, ); } diff --git a/crates/settings/src/settings_content/language_model.rs b/crates/settings/src/settings_content/language_model.rs index 8e20821cfd687f6464fe52c3b75b89fde2907ec3..7139aac5eaca5c521007b21dbbb665bb4855347a 100644 --- a/crates/settings/src/settings_content/language_model.rs +++ b/crates/settings/src/settings_content/language_model.rs @@ -301,6 +301,9 @@ pub struct XaiAvailableModel { pub max_tokens: u64, pub max_output_tokens: Option, pub max_completion_tokens: Option, + pub supports_images: Option, + pub supports_tools: Option, + pub parallel_tool_calls: Option, } #[skip_serializing_none] diff --git a/crates/x_ai/src/x_ai.rs b/crates/x_ai/src/x_ai.rs index a0bfca6f774d663a3e2e5d6ae71cc669907ef8a5..f22677b70b6e2d91261c7c103c8b2b271a34ba1d 100644 --- a/crates/x_ai/src/x_ai.rs +++ b/crates/x_ai/src/x_ai.rs @@ -30,6 +30,9 @@ pub enum Model { max_tokens: u64, max_output_tokens: Option, max_completion_tokens: Option, + supports_images: Option, + supports_tools: Option, + parallel_tool_calls: Option, }, } @@ -107,6 +110,10 @@ impl Model { | Self::Grok3Fast | Self::Grok3MiniFast | Self::Grok4 => true, + Self::Custom { + parallel_tool_calls: Some(support), + .. + } => *support, Self::GrokCodeFast1 | Model::Custom { .. } => false, } } @@ -124,11 +131,22 @@ impl Model { | Self::Grok3MiniFast | Self::Grok4 | Self::GrokCodeFast1 => true, + Self::Custom { + supports_tools: Some(support), + .. + } => *support, Model::Custom { .. } => false, } } pub fn supports_images(&self) -> bool { - matches!(self, Self::Grok2Vision) + match self { + Self::Grok2Vision => true, + Self::Custom { + supports_images: Some(support), + .. + } => *support, + _ => false, + } } }