mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 04:50:52 +08:00
fix(util): align reasoning effort handling with registry
This commit is contained in:
@@ -113,45 +113,3 @@ func defaultReasoningLevel(levels []string) string {
|
|||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// standardReasoningEfforts defines the canonical set of reasoning effort levels.
|
|
||||||
// This serves as the single source of truth for valid effort values.
|
|
||||||
var standardReasoningEfforts = []string{"none", "auto", "minimal", "low", "medium", "high", "xhigh"}
|
|
||||||
|
|
||||||
// IsValidReasoningEffort checks if the given effort string is a valid reasoning effort level.
|
|
||||||
// This is a registry-independent check against the standard effort levels.
|
|
||||||
func IsValidReasoningEffort(effort string) bool {
|
|
||||||
if effort == "" {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
lowered := strings.ToLower(strings.TrimSpace(effort))
|
|
||||||
for _, e := range standardReasoningEfforts {
|
|
||||||
if e == lowered {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// NormalizeReasoningEffort normalizes a reasoning effort string to its canonical form.
|
|
||||||
// It first tries registry-based normalization if a model is provided, then falls back
|
|
||||||
// to the standard effort levels. Returns empty string and false if invalid.
|
|
||||||
func NormalizeReasoningEffort(model, effort string) (string, bool) {
|
|
||||||
if effort == "" {
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
lowered := strings.ToLower(strings.TrimSpace(effort))
|
|
||||||
|
|
||||||
if model != "" {
|
|
||||||
if normalized, ok := NormalizeReasoningEffortLevel(model, effort); ok {
|
|
||||||
return normalized, true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, e := range standardReasoningEfforts {
|
|
||||||
if e == lowered {
|
|
||||||
return e, true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -58,11 +58,14 @@ func NormalizeThinkingModel(modelName string) (string, map[string]any) {
|
|||||||
baseModel = modelName[:idx]
|
baseModel = modelName[:idx]
|
||||||
budgetOverride = &parsed
|
budgetOverride = &parsed
|
||||||
matched = true
|
matched = true
|
||||||
} else if IsValidReasoningEffort(value) {
|
} else {
|
||||||
baseModel = modelName[:idx]
|
baseModel = modelName[:idx]
|
||||||
effort := strings.ToLower(strings.TrimSpace(value))
|
if normalized, ok := NormalizeReasoningEffortLevel(baseModel, value); ok {
|
||||||
reasoningEffort = &effort
|
reasoningEffort = &normalized
|
||||||
matched = true
|
matched = true
|
||||||
|
} else {
|
||||||
|
baseModel = modelName
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if strings.HasSuffix(lower, "-thinking") {
|
} else if strings.HasSuffix(lower, "-thinking") {
|
||||||
@@ -186,9 +189,7 @@ func ReasoningEffortFromMetadata(metadata map[string]any) (string, bool) {
|
|||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
if effort != nil && *effort != "" {
|
if effort != nil && *effort != "" {
|
||||||
if IsValidReasoningEffort(*effort) {
|
return strings.ToLower(strings.TrimSpace(*effort)), true
|
||||||
return strings.ToLower(strings.TrimSpace(*effort)), true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if budget != nil {
|
if budget != nil {
|
||||||
switch *budget {
|
switch *budget {
|
||||||
@@ -210,9 +211,9 @@ func ThinkingEffortToBudget(model, effort string) (int, bool) {
|
|||||||
if effort == "" {
|
if effort == "" {
|
||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
normalized, ok := NormalizeReasoningEffort(model, effort)
|
normalized, ok := NormalizeReasoningEffortLevel(model, effort)
|
||||||
if !ok {
|
if !ok {
|
||||||
return 0, false
|
normalized = strings.ToLower(strings.TrimSpace(effort))
|
||||||
}
|
}
|
||||||
switch normalized {
|
switch normalized {
|
||||||
case "none":
|
case "none":
|
||||||
|
|||||||
Reference in New Issue
Block a user