on main help sign in
fix: fix thinking on/off toggle for certain openai-compat providers
commitc7368b7c9bd5fb53d350bb8987bbc39a60e4522b authorAndrey Nering <andreynering@users.noreply.github.com> dateThu 30 Apr 2026, 12:22 (6 months ago) parent59e9233
3 files changed+35−7
go.mod+2−2 go.sum+4−4 internal/agent/coordinator.go+29−1
go.mod+2−2
@@ -5,9 +5,9 @@ go 1.26.2
55require (
66 charm.land/bubbles/v2 v2.1.0
77 charm.land/bubbletea/v2 v2.0.6
8− charm.land/catwalk v0.38.0
8+ charm.land/catwalk v0.39.1
99 charm.land/fang/v2 v2.0.1
10− charm.land/fantasy v0.22.0
10+ charm.land/fantasy v0.23.0
1111 charm.land/glamour/v2 v2.0.0
1212 charm.land/lipgloss/v2 v2.0.3
1313 charm.land/log/v2 v2.0.0
go.sum+4−4
@@ -2,12 +2,12 @@ charm.land/bubbles/v2 v2.1.0 h1:YSnNh5cPYlYjPxRrzs5VEn3vwhtEn3jVGRBT3M7/I0g=
22charm.land/bubbles/v2 v2.1.0/go.mod h1:l97h4hym2hvWBVfmJDtrEHHCtkIKeTEb3TTJ4ZOB3wY=
33charm.land/bubbletea/v2 v2.0.6 h1:UHN/91OyuhaOFGSrBXQ/hMZD8IO1Uc4BvHlgHXL2WJo=
44charm.land/bubbletea/v2 v2.0.6/go.mod h1:MH/D8ZLlN3op37vQvijKuU29g3rqTp+aQapURFonF9g=
5−charm.land/catwalk v0.38.0 h1:GAceUURVv7o3DQFAiS5z+UbLP0Xwkr70QvDIfqC7pyw=
6−charm.land/catwalk v0.38.0/go.mod h1:IvMXm7qMKvYuWWlN5A4dA0bTgYg4clG1GAeU9/NlY0w=
5+charm.land/catwalk v0.39.1 h1:jhMgnJQzYULdxoU7jf+Ct+ickBfGrxVEaylonIKCLWE=
6+charm.land/catwalk v0.39.1/go.mod h1:IvMXm7qMKvYuWWlN5A4dA0bTgYg4clG1GAeU9/NlY0w=
77charm.land/fang/v2 v2.0.1 h1:zQCM8JQJ1JnQX/66B5jlCYBUxL2as5JXQZ2KJ6EL0mY=
88charm.land/fang/v2 v2.0.1/go.mod h1:S1GmkpcvK+OB5w9caywUnJcsMew45Ot8FXqoz8ALrII=
9−charm.land/fantasy v0.22.0 h1:5HrjUr+52o0DW90//Vx1wYg+qcxaN21c2PeYeGVTb4U=
10−charm.land/fantasy v0.22.0/go.mod h1:4yzSsd9XmFEVjRnF1P0LTEbLTmQX6OLnPkrHaf7iruo=
9+charm.land/fantasy v0.23.0 h1:pocjwC5CxfEg1Bpwb0raML2d5ijo3op33Mmd6hYJyo4=
10+charm.land/fantasy v0.23.0/go.mod h1:4yzSsd9XmFEVjRnF1P0LTEbLTmQX6OLnPkrHaf7iruo=
1111charm.land/glamour/v2 v2.0.0 h1:IDBoqLEy7Hdpb9VOXN+khLP/XSxtJy1VsHuW/yF87+U=
1212charm.land/glamour/v2 v2.0.0/go.mod h1:kjq9WB0s8vuUYZNYey2jp4Lgd9f4cKdzAw88FZtpj/w=
1313charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU=
internal/agent/coordinator.go+29−1
@@ -361,11 +361,39 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
361361 if err == nil {
362362 options[google.Name] = parsed
363363 }
364− case openaicompat.Name:
364+ case openaicompat.Name, hyper.Name:
365365 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
366366 if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" {
367367 mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort
368368 }
369+
370+ extraBody := make(map[string]any)
371+
372+ // "reasoning effort" is a standard OpenAI field, but "thinking" is not.
373+ // Setting it in the right way for each provider.
374+ // TODO: Abstract this in Fantasy somehow?
375+ // TODO: Allow custom providers to specify how to set this?
376+ switch providerCfg.ID {
377+ case hyper.Name:
378+ extraBody["thinking"] = model.ModelCfg.Think
379+ case string(catwalk.InferenceProviderIoNet):
380+ extraBody["chat_template_kwargs"] = map[string]any{
381+ "thinking": model.ModelCfg.Think,
382+ }
383+ case string(catwalk.InferenceProviderZAI):
384+ if model.ModelCfg.Think {
385+ extraBody["thinking"] = map[string]any{
386+ "type": "enabled",
387+ }
388+ } else {
389+ extraBody["thinking"] = map[string]any{
390+ "type": "disabled",
391+ }
392+ }
393+ }
394+
395+ mergedOptions["extra_body"] = extraBody
396+
369397 parsed, err := openaicompat.ParseOptions(mergedOptions)
370398 if err == nil {
371399 options[openaicompat.Name] = parsed