- 前端用户列表:synced 用户显式取 synced_quota 字段作为剩余额度 - 各 OpenAI handler 中记录 relayChatID 用于日志追踪 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>master
| @@ -63,6 +63,8 @@ func OaiResponsesToChatHandler(c *gin.Context, info *relaycommon.RelayInfo, resp | |||||
| return nil, apiErr | return nil, apiErr | ||||
| } | } | ||||
| relaycommon.SetRelayChatID(c, responsesResp.ID) | |||||
| chatId := helper.GetResponseID(c) | chatId := helper.GetResponseID(c) | ||||
| chatResp, usage, err := service.ResponsesResponseToChatCompletionsResponse(&responsesResp, chatId) | chatResp, usage, err := service.ResponsesResponseToChatCompletionsResponse(&responsesResp, chatId) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -189,6 +189,7 @@ func OaiStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http.Re | |||||
| applyUsagePostProcessing(info, usage, common.StringToByteSlice(lastStreamData)) | applyUsagePostProcessing(info, usage, common.StringToByteSlice(lastStreamData)) | ||||
| HandleFinalResponse(c, info, lastStreamData, responseId, createAt, model, systemFingerprint, usage, containStreamUsage) | HandleFinalResponse(c, info, lastStreamData, responseId, createAt, model, systemFingerprint, usage, containStreamUsage) | ||||
| relaycommon.SetRelayChatID(c, responseId) | |||||
| return usage, nil | 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) | return nil, types.NewOpenAIError(err, types.ErrorCodeBadResponseBody, http.StatusInternalServerError) | ||||
| } | } | ||||
| relaycommon.SetRelayChatID(c, simpleResponse.Id) | |||||
| if oaiError := simpleResponse.GetOpenAIError(); oaiError != nil && oaiError.Type != "" { | if oaiError := simpleResponse.GetOpenAIError(); oaiError != nil && oaiError.Type != "" { | ||||
| return nil, types.WithOpenAIError(*oaiError, resp.StatusCode) | return nil, types.WithOpenAIError(*oaiError, resp.StatusCode) | ||||
| } | } | ||||
| @@ -38,6 +38,8 @@ func OaiResponsesHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http | |||||
| return nil, apiErr | return nil, apiErr | ||||
| } | } | ||||
| relaycommon.SetRelayChatID(c, responsesResponse.ID) | |||||
| if responsesResponse.HasImageGenerationCall() { | if responsesResponse.HasImageGenerationCall() { | ||||
| c.Set("image_generation_call", true) | c.Set("image_generation_call", true) | ||||
| c.Set("image_generation_call_quality", responsesResponse.GetQuality()) | 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 | usage.PromptTokensDetails.CachedTokens = streamResponse.Response.Usage.InputTokensDetails.CachedTokens | ||||
| } | } | ||||
| } | } | ||||
| relaycommon.SetRelayChatID(c, streamResponse.Response.ID) | |||||
| if streamResponse.Response.HasImageGenerationCall() { | if streamResponse.Response.HasImageGenerationCall() { | ||||
| c.Set("image_generation_call", true) | c.Set("image_generation_call", true) | ||||
| c.Set("image_generation_call_quality", streamResponse.Response.GetQuality()) | c.Set("image_generation_call_quality", streamResponse.Response.GetQuality()) | ||||
| @@ -137,7 +137,9 @@ const renderStatistics = (text, record, showEnableDisableModal, t) => { | |||||
| const renderQuotaUsage = (text, record, t) => { | const renderQuotaUsage = (text, record, t) => { | ||||
| const { Paragraph } = Typography; | const { Paragraph } = Typography; | ||||
| const used = parseInt(record.used_quota) || 0; | 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 total = used + remain; | ||||
| const percent = total > 0 ? (remain / total) * 100 : 0; | const percent = total > 0 ? (remain / total) * 100 : 0; | ||||
| const popoverContent = ( | const popoverContent = ( | ||||