feat: support Anthropic adaptive thinking (#7356)
Signed-off-by: rabi <ramishra@redhat.com>
This commit is contained in:
@@ -22,6 +22,7 @@ use goose::config::{
|
||||
use goose::model::ModelConfig;
|
||||
use goose::posthog::{get_telemetry_choice, TELEMETRY_ENABLED_KEY};
|
||||
use goose::providers::base::ConfigKey;
|
||||
use goose::providers::formats::anthropic::supports_adaptive_thinking;
|
||||
use goose::providers::provider_test::test_provider_configuration;
|
||||
use goose::providers::{create, providers, retry_operation, RetryConfig};
|
||||
use goose::session::SessionType;
|
||||
@@ -761,6 +762,53 @@ pub async fn configure_provider_dialog() -> anyhow::Result<bool> {
|
||||
config.set_gemini3_thinking_level(thinking_level)?;
|
||||
}
|
||||
|
||||
if model.to_lowercase().starts_with("claude-") {
|
||||
let supports_adaptive = supports_adaptive_thinking(&model);
|
||||
|
||||
let mut thinking_select = cliclack::select("Select extended thinking mode for Claude:");
|
||||
if supports_adaptive {
|
||||
thinking_select = thinking_select.item(
|
||||
"adaptive",
|
||||
"Adaptive - Claude decides when and how much to think (recommended)",
|
||||
"",
|
||||
);
|
||||
}
|
||||
thinking_select = thinking_select
|
||||
.item("enabled", "Enabled - Fixed token budget for thinking", "")
|
||||
.item("disabled", "Disabled - No extended thinking", "");
|
||||
if supports_adaptive {
|
||||
thinking_select = thinking_select.initial_value("adaptive");
|
||||
} else {
|
||||
thinking_select = thinking_select.initial_value("disabled");
|
||||
}
|
||||
let thinking_type: &str = thinking_select.interact()?;
|
||||
config.set_claude_thinking_type(thinking_type)?;
|
||||
|
||||
if thinking_type == "adaptive" {
|
||||
let effort: &str = cliclack::select("Select adaptive thinking effort level:")
|
||||
.item("low", "Low - Minimal thinking, fastest responses", "")
|
||||
.item("medium", "Medium - Moderate thinking", "")
|
||||
.item("high", "High - Deep reasoning (default)", "")
|
||||
.item(
|
||||
"max",
|
||||
"Max - No constraints on thinking depth (Opus 4.6 only)",
|
||||
"",
|
||||
)
|
||||
.initial_value("high")
|
||||
.interact()?;
|
||||
config.set_claude_thinking_effort(effort)?;
|
||||
} else if thinking_type == "enabled" {
|
||||
let budget: String = cliclack::input("Enter thinking budget (tokens):")
|
||||
.default_input("16000")
|
||||
.validate(|input: &String| match input.parse::<i32>() {
|
||||
Ok(n) if n > 0 => Ok(()),
|
||||
_ => Err("Please enter a valid positive number"),
|
||||
})
|
||||
.interact()?;
|
||||
config.set_claude_thinking_budget(budget.parse::<i32>()?)?;
|
||||
}
|
||||
}
|
||||
|
||||
// Test the configuration
|
||||
let spin = spinner();
|
||||
spin.start("Checking your configuration...");
|
||||
|
||||
Reference in New Issue
Block a user