From ba7c34d412502ed144dcb1d8dcc3edaf59141a0f Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Tue, 20 Jan 2026 14:22:39 -0300 Subject: [PATCH] fix: reasoning Signed-off-by: Carlos Alexandro Becker --- cmd/copilot/main.go | 36 ++++++++++++++++++------- internal/providers/configs/copilot.json | 12 +++++++++ 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/cmd/copilot/main.go b/cmd/copilot/main.go index 9bf4443d306a3508d9b39347fd315f51618ad60a..8954c307fff681b111bd3d465132ac889ebd8afd 100644 --- a/cmd/copilot/main.go +++ b/cmd/copilot/main.go @@ -172,24 +172,42 @@ func modelToCatwalk(m Model) catwalk.Model { } func detectReasoningCapabilities(m Model) (canReason bool, levels []string, defaultLevel string) { - // Models with thinking budget (Claude, Gemini) support extended thinking without levels - if m.Capabilities.Supports.MaxThinkingBudget > 0 { + // Claude models with reasoning support + if m.ID == "claude-3.7-sonnet" || + m.ID == "claude-haiku-4.5" || + m.ID == "claude-opus-4.5" || + m.ID == "claude-sonnet-4" || + m.ID == "claude-sonnet-4.5" { return true, nil, "" } - // OpenAI o-series and GPT-5+ models support reasoning with effort levels - if strings.HasPrefix(m.ID, "o1") || - strings.HasPrefix(m.ID, "o3") || - strings.HasPrefix(m.ID, "o4") || - strings.HasPrefix(m.ID, "gpt-5") { + // Gemini models with reasoning support + if strings.HasPrefix(m.ID, "gemini-2.5-") || strings.HasPrefix(m.ID, "gemini-3-") { return true, []string{"low", "medium", "high"}, "medium" } - // Grok models support reasoning without effort levels - if strings.HasPrefix(m.ID, "grok") { + // GPT-5 series with reasoning levels + if strings.HasPrefix(m.ID, "gpt-5") && !strings.Contains(m.ID, "chat") { + return true, []string{"low", "medium", "high"}, "medium" + } + + // OpenAI o-series with reasoning levels + if strings.HasPrefix(m.ID, "o3-") || strings.HasPrefix(m.ID, "o4-") { + return true, []string{"low", "medium", "high"}, "medium" + } + + // DeepSeek R1 models + if strings.HasPrefix(m.ID, "deepseek-r1") { return true, nil, "" } + // Grok models with reasoning + if m.ID == "grok-3-mini" || m.ID == "grok-3-mini-beta" || + strings.HasPrefix(m.ID, "grok-4") || + m.ID == "grok-code-fast-1" { + return true, []string{"low", "medium", "high"}, "medium" + } + return false, nil, "" } diff --git a/internal/providers/configs/copilot.json b/internal/providers/configs/copilot.json index f90ead1a14b1a5b27b6566f73e325f322672d6a2..266c8294424f3628051aa434b1debec603e2dd94 100644 --- a/internal/providers/configs/copilot.json +++ b/internal/providers/configs/copilot.json @@ -68,6 +68,12 @@ "context_window": 128000, "default_max_tokens": 64000, "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", "supports_attachments": true, "options": {} }, @@ -240,6 +246,12 @@ "context_window": 128000, "default_max_tokens": 64000, "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", "supports_attachments": false, "options": {} }