From 86cf8551c769e6a62245532c06eb15d6461a069a Mon Sep 17 00:00:00 2001 From: Christopher Petito Date: Sat, 17 Jan 2026 22:45:26 +0100 Subject: [PATCH] Remove interleaved thinking if thinking is explicitly disabled Signed-off-by: Christopher Petito --- pkg/config/latest/types.go | 2 +- pkg/model/provider/clone.go | 3 --- pkg/model/provider/provider.go | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pkg/config/latest/types.go b/pkg/config/latest/types.go index 599168a08..ef3f6c09b 100644 --- a/pkg/config/latest/types.go +++ b/pkg/config/latest/types.go @@ -143,7 +143,7 @@ type ModelConfig struct { BaseURL string `json:"base_url,omitempty"` ParallelToolCalls *bool `json:"parallel_tool_calls,omitempty"` TokenKey string `json:"token_key,omitempty"` - // ProviderOpts allows provider-specific options. Currently used for "dmr" provider only. + // ProviderOpts allows provider-specific options. ProviderOpts map[string]any `json:"provider_opts,omitempty"` TrackUsage *bool `json:"track_usage,omitempty"` // ThinkingBudget controls reasoning effort/budget: diff --git a/pkg/model/provider/clone.go b/pkg/model/provider/clone.go index 7010a77f1..6d518373d 100644 --- a/pkg/model/provider/clone.go +++ b/pkg/model/provider/clone.go @@ -25,9 +25,6 @@ func CloneWithOptions(ctx context.Context, base Provider, opts ...options.Opt) P opt(tempOpts) mt := tempOpts.MaxTokens() modelConfig.MaxTokens = &mt - if t := tempOpts.Thinking(); t != nil && !*t { - modelConfig.ThinkingBudget = nil - } } clone, err := New(ctx, &modelConfig, config.Env, mergedOpts...) diff --git a/pkg/model/provider/provider.go b/pkg/model/provider/provider.go index ed1d74e19..168fcaf71 100644 --- a/pkg/model/provider/provider.go +++ b/pkg/model/provider/provider.go @@ -211,6 +211,20 @@ func createDirectProvider(ctx context.Context, cfg *latest.ModelConfig, env envi // Apply defaults from custom providers (from config) or built-in aliases enhancedCfg := applyProviderDefaults(cfg, globalOptions.Providers()) + if thinking := globalOptions.Thinking(); thinking != nil && !*thinking { + enhancedCfg.ThinkingBudget = nil + + // with thinking explicitly disabled, also remove the interleaved_thinking provider option + if enhancedCfg.ProviderOpts != nil { + // Copy to avoid mutating shared ProviderOpts in the original config + optsCopy := make(map[string]any, len(enhancedCfg.ProviderOpts)) + for key, value := range enhancedCfg.ProviderOpts { + optsCopy[key] = value + } + delete(optsCopy, "interleaved_thinking") + enhancedCfg.ProviderOpts = optsCopy + } + } // Apply overrides (e.g., disable thinking if requested by session) enhancedCfg = applyOverrides(enhancedCfg, &globalOptions)