From c0187d50fff888808d2e953c8268077eb907f976 Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Fri, 5 Sep 2025 13:58:24 +0800 Subject: [PATCH 1/2] fix: add error handling for missing built-in tools and validate response in stream handler --- relay/channel/openai/relay_responses.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/relay/channel/openai/relay_responses.go b/relay/channel/openai/relay_responses.go index 88fb88083..2414fca28 100644 --- a/relay/channel/openai/relay_responses.go +++ b/relay/channel/openai/relay_responses.go @@ -48,7 +48,12 @@ func OaiResponsesHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http } // 解析 Tools 用量 for _, tool := range responsesResponse.Tools { - info.ResponsesUsageInfo.BuiltInTools[common.Interface2String(tool["type"])].CallCount++ + buildToolinfo, ok := info.ResponsesUsageInfo.BuiltInTools[common.Interface2String(tool["type"])] + if !ok { + logger.LogError(c, fmt.Sprintf("BuiltInTools not found for tool type: %v", tool["type"])) + continue + } + buildToolinfo.CallCount++ } return &usage, nil } @@ -72,7 +77,7 @@ func OaiResponsesStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp sendResponsesStreamData(c, streamResponse, data) switch streamResponse.Type { case "response.completed": - if streamResponse.Response.Usage != nil { + if streamResponse.Response != nil && streamResponse.Response.Usage != nil { if streamResponse.Response.Usage.InputTokens != 0 { usage.PromptTokens = streamResponse.Response.Usage.InputTokens } From a77a88308aea7cad6350c013ad8b0eeefcb992be Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Sun, 7 Sep 2025 07:42:25 +0800 Subject: [PATCH 2/2] fix: enhance tool usage parsing with additional nil checks and error logging --- relay/channel/openai/relay_responses.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/relay/channel/openai/relay_responses.go b/relay/channel/openai/relay_responses.go index 2414fca28..e188889e4 100644 --- a/relay/channel/openai/relay_responses.go +++ b/relay/channel/openai/relay_responses.go @@ -46,10 +46,13 @@ func OaiResponsesHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http usage.PromptTokensDetails.CachedTokens = responsesResponse.Usage.InputTokensDetails.CachedTokens } } + if info == nil || info.ResponsesUsageInfo == nil || info.ResponsesUsageInfo.BuiltInTools == nil { + return &usage, nil + } // 解析 Tools 用量 for _, tool := range responsesResponse.Tools { buildToolinfo, ok := info.ResponsesUsageInfo.BuiltInTools[common.Interface2String(tool["type"])] - if !ok { + if !ok || buildToolinfo == nil { logger.LogError(c, fmt.Sprintf("BuiltInTools not found for tool type: %v", tool["type"])) continue }