language_model: Add supports_tools method to LanguageModel (#27867)

This PR adds a new `supports_tools` method to the `LanguageModel` trait
to indicate whether a given model supports tool use.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2025-04-01 15:56:05 -04:00 committed by GitHub
parent 4ff07bf789
commit 5880271b11
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 56 additions and 0 deletions

View file

@ -153,6 +153,10 @@ impl LanguageModel for FakeLanguageModel {
provider_name()
}
fn supports_tools(&self) -> bool {
false
}
fn telemetry_id(&self) -> String {
"fake".to_string()
}

View file

@ -185,6 +185,9 @@ pub trait LanguageModel: Send + Sync {
LanguageModelAvailability::Public
}
/// Whether this model supports tools.
fn supports_tools(&self) -> bool;
fn tool_input_format(&self) -> LanguageModelToolSchemaFormat {
LanguageModelToolSchemaFormat::JsonSchema
}

View file

@ -400,6 +400,10 @@ impl LanguageModel for AnthropicModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
true
}
fn telemetry_id(&self) -> String {
format!("anthropic/{}", self.model.id())
}

View file

@ -365,6 +365,10 @@ impl LanguageModel for BedrockModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
true
}
fn telemetry_id(&self) -> String {
format!("bedrock/{}", self.model.id())
}

View file

@ -557,6 +557,14 @@ impl LanguageModel for CloudLanguageModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
match self.model {
CloudModel::Anthropic(_) => true,
CloudModel::Google(_) => true,
CloudModel::OpenAi(_) => false,
}
}
fn telemetry_id(&self) -> String {
format!("zed.dev/{}", self.model.id())
}

View file

@ -180,6 +180,15 @@ impl LanguageModel for CopilotChatLanguageModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
match self.model {
CopilotChatModel::Claude3_5Sonnet
| CopilotChatModel::Claude3_7Sonnet
| CopilotChatModel::Claude3_7SonnetThinking => true,
_ => false,
}
}
fn telemetry_id(&self) -> String {
format!("copilot_chat/{}", self.model.id())
}

View file

@ -279,6 +279,10 @@ impl LanguageModel for DeepSeekLanguageModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
false
}
fn telemetry_id(&self) -> String {
format!("deepseek/{}", self.model.id())
}

View file

@ -296,6 +296,10 @@ impl LanguageModel for GoogleLanguageModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
true
}
fn tool_input_format(&self) -> LanguageModelToolSchemaFormat {
LanguageModelToolSchemaFormat::JsonSchemaSubset
}

View file

@ -273,6 +273,10 @@ impl LanguageModel for LmStudioLanguageModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
false
}
fn telemetry_id(&self) -> String {
format!("lmstudio/{}", self.model.id())
}

View file

@ -291,6 +291,10 @@ impl LanguageModel for MistralLanguageModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
false
}
fn telemetry_id(&self) -> String {
format!("mistral/{}", self.model.id())
}

View file

@ -300,6 +300,10 @@ impl LanguageModel for OllamaLanguageModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
false
}
fn telemetry_id(&self) -> String {
format!("ollama/{}", self.model.id())
}

View file

@ -290,6 +290,10 @@ impl LanguageModel for OpenAiLanguageModel {
LanguageModelProviderName(PROVIDER_NAME.into())
}
fn supports_tools(&self) -> bool {
false
}
fn telemetry_id(&self) -> String {
format!("openai/{}", self.model.id())
}