diff --git a/internal/agent/coordinator.go b/internal/agent/coordinator.go index 152f008c20014174e9f528b29f55147f42d66590..75087e11fe96e13b51eb03c51fee46c8f8618bcb 100644 --- a/internal/agent/coordinator.go +++ b/internal/agent/coordinator.go @@ -358,13 +358,32 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy. var ( _, hasEffort = mergedOptions["effort"] _, hasThink = mergedOptions["thinking"] + extraBody = make(map[string]any) ) - switch { - case !hasEffort && shouldSetEffort: - mergedOptions["effort"] = model.ModelCfg.ReasoningEffort - case !hasThink && model.ModelCfg.Think: - mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000} + + switch providerCfg.ID { + case string(catwalk.InferenceProviderAlibabaSingapore): + switch { + case !hasEffort && shouldSetEffort: + extraBody["reasoning_effort"] = model.ModelCfg.ReasoningEffort + case !hasThink && model.CatwalkCfg.CanReason: + if model.ModelCfg.Think { + extraBody["thinking"] = map[string]any{"type": "enabled"} + } else { + extraBody["thinking"] = map[string]any{"type": "disabled"} + } + } + mergedOptions["extra_body"] = extraBody + + default: + switch { + case !hasEffort && shouldSetEffort: + mergedOptions["effort"] = model.ModelCfg.ReasoningEffort + case !hasThink && model.ModelCfg.Think: + mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000} + } } + parsed, err := anthropic.ParseOptions(mergedOptions) if err == nil { options[anthropic.Name] = parsed