fix: use thinking.adaptive for Opus 4.7 in ReasoningEffort and Reasoning paths

Opus 4.7 rejects thinking.type="enabled". The effort-suffix and
-thinking suffix paths already handled this, but the ReasoningEffort
and Reasoning parameter paths still sent "enabled". Now all paths
use "adaptive" + output_config.effort for Opus 4.7.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-18 21:51:06 +08:00
co-authored by Claude Opus 4.6
parent 3728dc0e89
commit 21545c7d7f
+36 -18
View File
@@ -204,22 +204,32 @@ func RequestOpenAI2ClaudeMessage(c *gin.Context, textRequest dto.GeneralOpenAIRe
} }
} }
isOpus47 := strings.HasPrefix(claudeRequest.Model, "claude-opus-4-7")
if textRequest.ReasoningEffort != "" { if textRequest.ReasoningEffort != "" {
switch textRequest.ReasoningEffort { if isOpus47 {
case "low": claudeRequest.Thinking = &dto.Thinking{Type: "adaptive", Display: "summarized"}
claudeRequest.Thinking = &dto.Thinking{ claudeRequest.OutputConfig = json.RawMessage(fmt.Sprintf(`{"effort":"%s"}`, textRequest.ReasoningEffort))
Type: "enabled", claudeRequest.Temperature = nil
BudgetTokens: common.GetPointer[int](1280), claudeRequest.TopP = nil
} claudeRequest.TopK = nil
case "medium": } else {
claudeRequest.Thinking = &dto.Thinking{ switch textRequest.ReasoningEffort {
Type: "enabled", case "low":
BudgetTokens: common.GetPointer[int](2048), claudeRequest.Thinking = &dto.Thinking{
} Type: "enabled",
case "high": BudgetTokens: common.GetPointer[int](1280),
claudeRequest.Thinking = &dto.Thinking{ }
Type: "enabled", case "medium":
BudgetTokens: common.GetPointer[int](4096), claudeRequest.Thinking = &dto.Thinking{
Type: "enabled",
BudgetTokens: common.GetPointer[int](2048),
}
case "high":
claudeRequest.Thinking = &dto.Thinking{
Type: "enabled",
BudgetTokens: common.GetPointer[int](4096),
}
} }
} }
} }
@@ -233,9 +243,17 @@ func RequestOpenAI2ClaudeMessage(c *gin.Context, textRequest dto.GeneralOpenAIRe
budgetTokens := reasoning.MaxTokens budgetTokens := reasoning.MaxTokens
if budgetTokens > 0 { if budgetTokens > 0 {
claudeRequest.Thinking = &dto.Thinking{ if isOpus47 {
Type: "enabled", claudeRequest.Thinking = &dto.Thinking{Type: "adaptive", Display: "summarized"}
BudgetTokens: &budgetTokens, claudeRequest.OutputConfig = json.RawMessage(`{"effort":"high"}`)
claudeRequest.Temperature = nil
claudeRequest.TopP = nil
claudeRequest.TopK = nil
} else {
claudeRequest.Thinking = &dto.Thinking{
Type: "enabled",
BudgetTokens: &budgetTokens,
}
} }
} }
} }