fix: reasoning

Carlos Alexandro Becker created

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>

Change summary

cmd/copilot/main.go                     | 36 ++++++++++++++++++++------
internal/providers/configs/copilot.json | 12 +++++++++
2 files changed, 39 insertions(+), 9 deletions(-)

Detailed changes

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

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": {}
     }