From 8945f8c39e356210530309074fc999bdc5ad8f2a Mon Sep 17 00:00:00 2001 From: fengsilin Date: Wed, 6 May 2026 16:30:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20synced=20=E7=94=A8=E6=88=B7=E5=89=A9?= =?UTF-8?q?=E4=BD=99=E9=A2=9D=E5=BA=A6=E5=8F=96=20synced=5Fquota=20+=20?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=20chat=20ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 前端用户列表:synced 用户显式取 synced_quota 字段作为剩余额度 - 各 OpenAI handler 中记录 relayChatID 用于日志追踪 Co-Authored-By: Claude Opus 4.7 --- relay/channel/openai/chat_via_responses.go | 2 ++ relay/channel/openai/relay-openai.go | 3 +++ relay/channel/openai/relay_responses.go | 3 +++ web/src/components/table/users/UsersColumnDefs.jsx | 4 +++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/relay/channel/openai/chat_via_responses.go b/relay/channel/openai/chat_via_responses.go index a93c390..7bfe52a 100644 --- a/relay/channel/openai/chat_via_responses.go +++ b/relay/channel/openai/chat_via_responses.go @@ -63,6 +63,8 @@ func OaiResponsesToChatHandler(c *gin.Context, info *relaycommon.RelayInfo, resp return nil, apiErr } + relaycommon.SetRelayChatID(c, responsesResp.ID) + chatId := helper.GetResponseID(c) chatResp, usage, err := service.ResponsesResponseToChatCompletionsResponse(&responsesResp, chatId) if err != nil { diff --git a/relay/channel/openai/relay-openai.go b/relay/channel/openai/relay-openai.go index a4de161..1ef6166 100644 --- a/relay/channel/openai/relay-openai.go +++ b/relay/channel/openai/relay-openai.go @@ -189,6 +189,7 @@ func OaiStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Re applyUsagePostProcessing(info, usage, common.StringToByteSlice(lastStreamData)) HandleFinalResponse(c, info, lastStreamData, responseId, createAt, model, systemFingerprint, usage, containStreamUsage) + relaycommon.SetRelayChatID(c, responseId) return usage, nil } @@ -225,6 +226,8 @@ func OpenaiHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Respo return nil, types.NewOpenAIError(err, types.ErrorCodeBadResponseBody, http.StatusInternalServerError) } + relaycommon.SetRelayChatID(c, simpleResponse.Id) + if oaiError := simpleResponse.GetOpenAIError(); oaiError != nil && oaiError.Type != "" { return nil, types.WithOpenAIError(*oaiError, resp.StatusCode) } diff --git a/relay/channel/openai/relay_responses.go b/relay/channel/openai/relay_responses.go index 1b88457..152c7ef 100644 --- a/relay/channel/openai/relay_responses.go +++ b/relay/channel/openai/relay_responses.go @@ -38,6 +38,8 @@ func OaiResponsesHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http return nil, apiErr } + relaycommon.SetRelayChatID(c, responsesResponse.ID) + if responsesResponse.HasImageGenerationCall() { c.Set("image_generation_call", true) c.Set("image_generation_call_quality", responsesResponse.GetQuality()) @@ -106,6 +108,7 @@ func OaiResponsesStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp usage.PromptTokensDetails.CachedTokens = streamResponse.Response.Usage.InputTokensDetails.CachedTokens } } + relaycommon.SetRelayChatID(c, streamResponse.Response.ID) if streamResponse.Response.HasImageGenerationCall() { c.Set("image_generation_call", true) c.Set("image_generation_call_quality", streamResponse.Response.GetQuality()) diff --git a/web/src/components/table/users/UsersColumnDefs.jsx b/web/src/components/table/users/UsersColumnDefs.jsx index dc3e6f3..c3ccfcf 100644 --- a/web/src/components/table/users/UsersColumnDefs.jsx +++ b/web/src/components/table/users/UsersColumnDefs.jsx @@ -137,7 +137,9 @@ const renderStatistics = (text, record, showEnableDisableModal, t) => { const renderQuotaUsage = (text, record, t) => { const { Paragraph } = Typography; const used = parseInt(record.used_quota) || 0; - const remain = parseInt(record.quota) || 0; + const remain = record.source === 'synced' + ? (parseInt(record.synced_quota) || 0) + : (parseInt(record.quota) || 0); const total = used + remain; const percent = total > 0 ? (remain / total) * 100 : 0; const popoverContent = (