feat: prepare alibaba migration to `/messages` (#3067)
Andrey Nering
created 2 weeks ago
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.
Change summary
internal/agent/coordinator.go | 29 ++++++++++++++++++++++++-----
1 file changed, 24 insertions(+), 5 deletions(-)
Detailed changes
@@ -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