mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-01 23:15:27 +08:00
93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package util
|
|
|
|
import "strings"
|
|
|
|
func ResolveThinkingEnabled(req map[string]any, defaultEnabled bool) bool {
|
|
if enabled, ok := ResolveThinkingOverride(req); ok {
|
|
return enabled
|
|
}
|
|
return defaultEnabled
|
|
}
|
|
|
|
func ResolveThinkingOverride(req map[string]any) (bool, bool) {
|
|
if req == nil {
|
|
return false, false
|
|
}
|
|
if enabled, ok := parseThinkingSetting(req["thinking"]); ok {
|
|
return enabled, true
|
|
}
|
|
if enabled, ok := parseReasoningSetting(req["reasoning"]); ok {
|
|
return enabled, true
|
|
}
|
|
if extraBody, ok := req["extra_body"].(map[string]any); ok {
|
|
if enabled, ok := parseThinkingSetting(extraBody["thinking"]); ok {
|
|
return enabled, true
|
|
}
|
|
if enabled, ok := parseReasoningSetting(extraBody["reasoning"]); ok {
|
|
return enabled, true
|
|
}
|
|
if enabled, ok := parseReasoningEffort(extraBody["reasoning_effort"]); ok {
|
|
return enabled, true
|
|
}
|
|
}
|
|
if enabled, ok := parseReasoningEffort(req["reasoning_effort"]); ok {
|
|
return enabled, true
|
|
}
|
|
return false, false
|
|
}
|
|
|
|
func parseThinkingSetting(raw any) (bool, bool) {
|
|
switch v := raw.(type) {
|
|
case bool:
|
|
return v, true
|
|
case string:
|
|
switch strings.ToLower(strings.TrimSpace(v)) {
|
|
case "enabled", "enable", "on", "true":
|
|
return true, true
|
|
case "disabled", "disable", "off", "false", "none":
|
|
return false, true
|
|
default:
|
|
return false, false
|
|
}
|
|
case map[string]any:
|
|
if typ, ok := v["type"]; ok {
|
|
return parseThinkingSetting(typ)
|
|
}
|
|
}
|
|
return false, false
|
|
}
|
|
|
|
func parseReasoningSetting(raw any) (bool, bool) {
|
|
switch v := raw.(type) {
|
|
case bool:
|
|
return v, true
|
|
case string:
|
|
return parseReasoningEffort(v)
|
|
case map[string]any:
|
|
for _, key := range []string{"effort", "type", "enabled"} {
|
|
if enabled, ok := parseReasoningSetting(v[key]); ok {
|
|
return enabled, true
|
|
}
|
|
}
|
|
}
|
|
return false, false
|
|
}
|
|
|
|
func parseReasoningEffort(raw any) (bool, bool) {
|
|
switch strings.ToLower(strings.TrimSpace(toString(raw))) {
|
|
case "minimal", "low", "medium", "high", "xhigh":
|
|
return true, true
|
|
case "none", "disabled", "disable", "off", "false":
|
|
return false, true
|
|
default:
|
|
return false, false
|
|
}
|
|
}
|
|
|
|
func toString(raw any) string {
|
|
if s, ok := raw.(string); ok {
|
|
return s
|
|
}
|
|
return ""
|
|
}
|