mirror of
https://mirror.skon.top/github.com/router-for-me/CLIProxyAPI
synced 2026-04-21 01:10:14 +08:00
- Deleted `iflow` provider implementation, including thinking configuration (`apply.go`) and authentication modules. - Removed iFlow-specific tests, executors, and helpers across SDK and internal components. - Updated all references to exclude iFlow functionality.
64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
// 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 found
|
|
func 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 "gemini-cli", "antigravity":
|
|
paths = []string{"request.generationConfig.thinkingConfig"}
|
|
case "openai":
|
|
paths = []string{"reasoning_effort"}
|
|
case "kimi":
|
|
paths = []string{
|
|
"reasoning_effort",
|
|
"thinking",
|
|
}
|
|
case "codex":
|
|
paths = []string{"reasoning.effort"}
|
|
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
|
|
}
|