Something went wrong. Try again.
sloproxy
Something went wrong. Try again.
2.2 kB · 74 lines
Go
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475// Package thinking provides unified thinking configuration processing.package thinking
import ( "github.com/tidwall/gjson" "github.com/tidwall/sjson")
// StripThinkingConfig removes thinking configuration fields from request body.//// This function is used when a model doesn't support thinking but the request// contains thinking configuration. The configuration is silently removed to// prevent upstream API errors.//// Parameters:// - body: Original request body JSON// - provider: Provider name (determines which fields to strip)//// Returns:// - Modified request body JSON with thinking configuration removed// - Original body is returned unchanged if:// - body is empty or invalid JSON// - provider is unknown// - no thinking configuration foundfunc StripThinkingConfig(body []byte, provider string) []byte { if len(body) == 0 || !gjson.ValidBytes(body) { return body }
var paths []string switch provider { case "claude": paths = []string{"thinking", "output_config.effort"} case "gemini": paths = []string{"generationConfig.thinkingConfig"} case "antigravity": paths = []string{"request.generationConfig.thinkingConfig"} case "interactions": paths = []string{ "generation_config.thinking_level", "generation_config.thinkingLevel", "generation_config.thinking_budget", "generation_config.thinkingBudget", "generation_config.thinking_summaries", "generation_config.thinkingSummaries", "generation_config.thinking_config", "generation_config.thinkingConfig", } case "openai": paths = []string{"reasoning_effort", "reasoning"} case "kimi": paths = []string{ "reasoning_effort", "thinking", } case "codex", "xai": paths = []string{"reasoning"} default: return body }
result := body for _, path := range paths { result, _ = sjson.DeleteBytes(result, path) }
// Avoid leaving an empty output_config object for Claude when effort was the only field. if provider == "claude" { if oc := gjson.GetBytes(result, "output_config"); oc.Exists() && oc.IsObject() && len(oc.Map()) == 0 { result, _ = sjson.DeleteBytes(result, "output_config") } } return result}