@@ -683,6 +683,20 @@ type ThinkingBudget struct {
683683 Tokens int `json:"tokens,omitempty"`
684684}
685685
686+ // validThinkingEfforts lists all accepted string values for thinking_budget.
687+ const validThinkingEfforts = "none, minimal, low, medium, high, max, adaptive"
688+
689+ // isValidThinkingEffort reports whether s (case-insensitive, trimmed) is a
690+ // recognised thinking_budget effort level.
691+ func isValidThinkingEffort (s string ) bool {
692+ switch strings .ToLower (strings .TrimSpace (s )) {
693+ case "none" , "minimal" , "low" , "medium" , "high" , "max" , "adaptive" :
694+ return true
695+ default :
696+ return false
697+ }
698+ }
699+
686700func (t * ThinkingBudget ) UnmarshalYAML (unmarshal func (any ) error ) error {
687701 // Try integer tokens first
688702 var n int
@@ -694,6 +708,9 @@ func (t *ThinkingBudget) UnmarshalYAML(unmarshal func(any) error) error {
694708 // Try string level
695709 var s string
696710 if err := unmarshal (& s ); err == nil {
711+ if ! isValidThinkingEffort (s ) {
712+ return fmt .Errorf ("invalid thinking_budget effort %q: must be one of %s" , s , validThinkingEfforts )
713+ }
697714 * t = ThinkingBudget {Effort : s }
698715 return nil
699716 }
@@ -793,6 +810,9 @@ func (t *ThinkingBudget) UnmarshalJSON(data []byte) error {
793810 // Try string level
794811 var s string
795812 if err := json .Unmarshal (data , & s ); err == nil {
813+ if ! isValidThinkingEffort (s ) {
814+ return fmt .Errorf ("invalid thinking_budget effort %q: must be one of %s" , s , validThinkingEfforts )
815+ }
796816 * t = ThinkingBudget {Effort : s }
797817 return nil
798818 }
0 commit comments