chore(openai): add missing constants and checks for some thinking effort levels (#186)

Michael Suchacz and Andrey Nering created

We were missing some "none", "minimal" and "xhigh" constants, for the `openai`, `openaicompat` and `openrouter` packages.

Added the missing checks to ensure they work as well.

Co-authored-by: Andrey Nering <andreynering@users.noreply.github.com>

Change summary

providers/openai/language_model_hooks.go       | 4 ++++
providers/openai/provider_options.go           | 4 ++++
providers/openaicompat/language_model_hooks.go | 4 ++++
providers/openrouter/provider_options.go       | 6 ++++++
4 files changed, 18 insertions(+)

Detailed changes

providers/openai/language_model_hooks.go 🔗

@@ -111,6 +111,8 @@ func DefaultPrepareCallFunc(model fantasy.LanguageModel, params *openai.ChatComp
 
 	if providerOptions.ReasoningEffort != nil {
 		switch *providerOptions.ReasoningEffort {
+		case ReasoningEffortNone:
+			params.ReasoningEffort = shared.ReasoningEffortNone
 		case ReasoningEffortMinimal:
 			params.ReasoningEffort = shared.ReasoningEffortMinimal
 		case ReasoningEffortLow:
@@ -119,6 +121,8 @@ func DefaultPrepareCallFunc(model fantasy.LanguageModel, params *openai.ChatComp
 			params.ReasoningEffort = shared.ReasoningEffortMedium
 		case ReasoningEffortHigh:
 			params.ReasoningEffort = shared.ReasoningEffortHigh
+		case ReasoningEffortXHigh:
+			params.ReasoningEffort = shared.ReasoningEffortXhigh
 		default:
 			return nil, fmt.Errorf("reasoning model `%s` not supported", *providerOptions.ReasoningEffort)
 		}

providers/openai/provider_options.go 🔗

@@ -12,6 +12,8 @@ import (
 type ReasoningEffort string
 
 const (
+	// ReasoningEffortNone represents ReasoningEffortNone reasoning effort.
+	ReasoningEffortNone ReasoningEffort = "none"
 	// ReasoningEffortMinimal represents minimal reasoning effort.
 	ReasoningEffortMinimal ReasoningEffort = "minimal"
 	// ReasoningEffortLow represents low reasoning effort.
@@ -20,6 +22,8 @@ const (
 	ReasoningEffortMedium ReasoningEffort = "medium"
 	// ReasoningEffortHigh represents high reasoning effort.
 	ReasoningEffortHigh ReasoningEffort = "high"
+	// ReasoningEffortXHigh represents extra-high reasoning effort.
+	ReasoningEffortXHigh ReasoningEffort = "xhigh"
 )
 
 // Global type identifiers for OpenAI-specific provider data.

providers/openaicompat/language_model_hooks.go 🔗

@@ -27,6 +27,8 @@ func PrepareCallFunc(_ fantasy.LanguageModel, params *openaisdk.ChatCompletionNe
 
 	if providerOptions.ReasoningEffort != nil {
 		switch *providerOptions.ReasoningEffort {
+		case openai.ReasoningEffortNone:
+			params.ReasoningEffort = shared.ReasoningEffortNone
 		case openai.ReasoningEffortMinimal:
 			params.ReasoningEffort = shared.ReasoningEffortMinimal
 		case openai.ReasoningEffortLow:
@@ -35,6 +37,8 @@ func PrepareCallFunc(_ fantasy.LanguageModel, params *openaisdk.ChatCompletionNe
 			params.ReasoningEffort = shared.ReasoningEffortMedium
 		case openai.ReasoningEffortHigh:
 			params.ReasoningEffort = shared.ReasoningEffortHigh
+		case openai.ReasoningEffortXHigh:
+			params.ReasoningEffort = shared.ReasoningEffortXhigh
 		default:
 			return nil, fmt.Errorf("reasoning model `%s` not supported", *providerOptions.ReasoningEffort)
 		}

providers/openrouter/provider_options.go 🔗

@@ -11,12 +11,18 @@ import (
 type ReasoningEffort string
 
 const (
+	// ReasoningEffortNone represents ReasoningEffortNone reasoning effort.
+	ReasoningEffortNone ReasoningEffort = "none"
+	// ReasoningEffortMinimal represents minimal reasoning effort.
+	ReasoningEffortMinimal ReasoningEffort = "minimal"
 	// ReasoningEffortLow represents low reasoning effort.
 	ReasoningEffortLow ReasoningEffort = "low"
 	// ReasoningEffortMedium represents medium reasoning effort.
 	ReasoningEffortMedium ReasoningEffort = "medium"
 	// ReasoningEffortHigh represents high reasoning effort.
 	ReasoningEffortHigh ReasoningEffort = "high"
+	// ReasoningEffortXHigh represents extra high reasoning effort.
+	ReasoningEffortXHigh ReasoningEffort = "xhigh"
 )
 
 // Global type identifiers for OpenRouter-specific provider data.