diff --git a/internal/agent/coordinator.go b/internal/agent/coordinator.go index 3dea024a844f20ecb48dca5c6efae3842bf1de32..aed5624e178d80310784f5a2014b92b32afcacd8 100644 --- a/internal/agent/coordinator.go +++ b/internal/agent/coordinator.go @@ -346,13 +346,18 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy. options[google.Name] = parsed } case openaicompat.Name, hyper.Name: + extraBody := make(map[string]any) + _, hasReasoningEffort := mergedOptions["reasoning_effort"] if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" { - mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort + switch providerCfg.ID { + case string(catwalk.InferenceProviderIoNet): + extraBody["reasoning"] = map[string]string{"effort": model.ModelCfg.ReasoningEffort} + default: + mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort + } } - extraBody := make(map[string]any) - // "reasoning effort" is a standard OpenAI field, but "thinking" is not. // Setting it in the right way for each provider. // TODO: Abstract this in Fantasy somehow? @@ -361,8 +366,12 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy. case hyper.Name: extraBody["thinking"] = model.ModelCfg.Think case string(catwalk.InferenceProviderIoNet): - extraBody["chat_template_kwargs"] = map[string]any{ - "thinking": model.ModelCfg.Think, + if _, ok := extraBody["reasoning"]; !ok && model.CatwalkCfg.CanReason { + if model.ModelCfg.Think { + extraBody["reasoning"] = map[string]string{"effort": "medium"} + } else { + extraBody["reasoning"] = map[string]string{"effort": "none"} + } } case string(catwalk.InferenceProviderZAI), string(catwalk.InferenceProviderDeepSeek): if model.ModelCfg.Think {