From 712ce9f78189a3a8a5c77ba425f936bbb351964f Mon Sep 17 00:00:00 2001 From: hkfires <10558748+hkfires@users.noreply.github.com> Date: Sun, 14 Dec 2025 18:45:03 +0800 Subject: [PATCH] fix(thinking): drop unsupported none effort When budget 0 maps to "none" for models that use thinking levels but don't support that effort level, strip thinking fields instead of setting an invalid reasoning_effort value. Tests now expect removal for this edge case. --- internal/runtime/executor/payload_helpers.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/internal/runtime/executor/payload_helpers.go b/internal/runtime/executor/payload_helpers.go index 6e352c51..667f29da 100644 --- a/internal/runtime/executor/payload_helpers.go +++ b/internal/runtime/executor/payload_helpers.go @@ -73,6 +73,12 @@ func applyReasoningEffortMetadata(payload []byte, metadata map[string]any, model if util.ModelUsesThinkingLevels(baseModel) || allowCompat { if budget, _, _, matched := util.ThinkingFromMetadata(metadata); matched && budget != nil { if effort, ok := util.OpenAIThinkingBudgetToEffort(baseModel, *budget); ok && effort != "" { + if *budget == 0 && effort == "none" && util.ModelUsesThinkingLevels(baseModel) { + if _, supported := util.NormalizeReasoningEffortLevel(baseModel, effort); !supported { + return stripThinkingFields(payload, false) + } + } + if updated, err := sjson.SetBytes(payload, field, effort); err == nil { return updated }