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, + } } }