fix: record reasoning effort consistently in usage logs (#6641)

This commit is contained in:
Seefs
2026-08-10 12:48:14 +08:00
committed by GitHub
parent 7dd1000a19
commit eab18a8357
10 changed files with 333 additions and 14 deletions
+51
View File
@@ -30,6 +30,11 @@ var paramOverrideSensitivePathPrefixes = []string{
"model",
"original_model",
"upstream_model",
"reasoning",
"reasoning_effort",
"output_config",
"generationConfig.thinkingConfig",
"generation_config.thinking_config",
"service_tier",
"inference_geo",
"speed",
@@ -191,6 +196,7 @@ func ApplyParamOverrideWithRelayInfo(jsonData []byte, info *RelayInfo) ([]byte,
if err != nil {
return nil, err
}
syncReasoningEffortAfterParamOverride(info, jsonData, result)
syncRuntimeHeaderOverrideFromContext(info, overrideCtx)
if info != nil {
if recorder != nil {
@@ -202,6 +208,51 @@ func ApplyParamOverrideWithRelayInfo(jsonData []byte, info *RelayInfo) ([]byte,
return result, nil
}
func syncReasoningEffortAfterParamOverride(info *RelayInfo, before, after []byte) {
if info == nil {
return
}
_, existedBefore := extractReasoningEffortFromJSON(info.GetFinalRequestRelayFormat(), before)
effort, existsAfter := extractReasoningEffortFromJSON(info.GetFinalRequestRelayFormat(), after)
if existsAfter {
info.SetReasoningEffort(effort)
return
}
if existedBefore {
info.SetReasoningEffort("")
}
}
func extractReasoningEffortFromJSON(format types.RelayFormat, data []byte) (string, bool) {
var paths []string
switch format {
case types.RelayFormatOpenAI:
paths = []string{"reasoning_effort", "reasoning.effort"}
case types.RelayFormatOpenAIResponses:
paths = []string{"reasoning.effort"}
case types.RelayFormatClaude:
paths = []string{"output_config.effort"}
case types.RelayFormatGemini:
paths = []string{
"generationConfig.thinkingConfig.thinkingLevel",
"generation_config.thinking_config.thinking_level",
}
default:
return "", false
}
for _, path := range paths {
value := gjson.GetBytes(data, path)
if !value.Exists() {
continue
}
if value.Type != gjson.String {
return "", true
}
return strings.TrimSpace(value.String()), true
}
return "", false
}
func shouldEnableParamOverrideAudit(paramOverride map[string]interface{}) bool {
if common.DebugEnabled {
return true