on main help sign in
feat: prepare alibaba migration to `/messages` (#3067)

Add code to handle thinking for Alibaba via `/messages`, while still keeping the code for `/chat/completions`. This way, it keeps working before and after the migration on Catwalk.

commitf6b8592a5acaffa144dd35c2cd78f24fa270b77e authorAndrey Nering <andreynering@users.noreply.github.com> dateTue 2 Jun 2026, 18:34 (4 months ago) parent9e1c9d5
1 file changed+24−5
internal/agent/coordinator.go+24−5
internal/agent/coordinator.go+24−5
@@ -358,13 +358,32 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
358358 var (
359359 _, hasEffort = mergedOptions["effort"]
360360 _, hasThink = mergedOptions["thinking"]
361+ extraBody = make(map[string]any)
361362 )
362− switch {
363− case !hasEffort && shouldSetEffort:
364− mergedOptions["effort"] = model.ModelCfg.ReasoningEffort
365− case !hasThink && model.ModelCfg.Think:
366− mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000}
363+
364+ switch providerCfg.ID {
365+ case string(catwalk.InferenceProviderAlibabaSingapore):
366+ switch {
367+ case !hasEffort && shouldSetEffort:
368+ extraBody["reasoning_effort"] = model.ModelCfg.ReasoningEffort
369+ case !hasThink && model.CatwalkCfg.CanReason:
370+ if model.ModelCfg.Think {
371+ extraBody["thinking"] = map[string]any{"type": "enabled"}
372+ } else {
373+ extraBody["thinking"] = map[string]any{"type": "disabled"}
374+ }
375+ }
376+ mergedOptions["extra_body"] = extraBody
377+
378+ default:
379+ switch {
380+ case !hasEffort && shouldSetEffort:
381+ mergedOptions["effort"] = model.ModelCfg.ReasoningEffort
382+ case !hasThink && model.ModelCfg.Think:
383+ mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000}
384+ }
367385 }
386+
368387 parsed, err := anthropic.ParseOptions(mergedOptions)
369388 if err == nil {
370389 options[anthropic.Name] = parsed