Detailed changes
@@ -1496,6 +1496,10 @@ impl AgentPanel {
{
update_settings_file(self.fs.clone(), cx, move |settings, _| {
let provider = model.provider_id().0.to_string();
+ let enable_thinking = model.supports_thinking();
+ let effort = model
+ .default_effort_level()
+ .map(|effort| effort.value.to_string());
let model = model.id().0.to_string();
settings
.agent
@@ -1503,8 +1507,8 @@ impl AgentPanel {
.set_model(LanguageModelSelection {
provider: LanguageModelProviderSetting(provider),
model,
- enable_thinking: false,
- effort: None,
+ enable_thinking,
+ effort,
})
});
}
@@ -515,6 +515,10 @@ impl LanguageModel for AnthropicModel {
}
}
+ fn supports_thinking(&self) -> bool {
+ matches!(self.model.mode(), AnthropicModelMode::Thinking { .. })
+ }
+
fn telemetry_id(&self) -> String {
format!("anthropic/{}", self.model.id())
}
@@ -640,6 +640,13 @@ impl LanguageModel for BedrockModel {
self.model.supports_images()
}
+ fn supports_thinking(&self) -> bool {
+ matches!(
+ self.model.mode(),
+ BedrockModelMode::Thinking { .. } | BedrockModelMode::AdaptiveThinking { .. }
+ )
+ }
+
fn supports_tool_choice(&self, choice: LanguageModelToolChoice) -> bool {
match choice {
LanguageModelToolChoice::Auto | LanguageModelToolChoice::Any => {
@@ -283,6 +283,10 @@ impl LanguageModel for GoogleLanguageModel {
self.model.supports_images()
}
+ fn supports_thinking(&self) -> bool {
+ matches!(self.model.mode(), GoogleModelMode::Thinking { .. })
+ }
+
fn supports_tool_choice(&self, choice: LanguageModelToolChoice) -> bool {
match choice {
LanguageModelToolChoice::Auto
@@ -443,6 +443,10 @@ impl LanguageModel for OllamaLanguageModel {
self.model.supports_vision.unwrap_or(false)
}
+ fn supports_thinking(&self) -> bool {
+ self.model.supports_thinking.unwrap_or(false)
+ }
+
fn supports_tool_choice(&self, choice: LanguageModelToolChoice) -> bool {
match choice {
LanguageModelToolChoice::Auto => false,
@@ -327,6 +327,10 @@ impl LanguageModel for OpenAiLanguageModel {
}
}
+ fn supports_thinking(&self) -> bool {
+ self.model.reasoning_effort().is_some()
+ }
+
fn supports_split_token_display(&self) -> bool {
true
}
@@ -314,6 +314,10 @@ impl LanguageModel for OpenRouterLanguageModel {
self.model.supports_tool_calls()
}
+ fn supports_thinking(&self) -> bool {
+ matches!(self.model.mode, OpenRouterModelMode::Thinking { .. })
+ }
+
fn tool_input_format(&self) -> LanguageModelToolSchemaFormat {
let model_id = self.model.id().trim().to_lowercase();
if model_id.contains("gemini") || model_id.contains("grok") {