From 708b85a6a4b853f6db3c488c0c84701edf1e7929 Mon Sep 17 00:00:00 2001 From: shaw Date: Sat, 5 Sep 2026 14:18:13 +0800 Subject: [PATCH] fix: complete upstream request id handling --- backend/internal/service/admin_account.go | 6 ++++++ backend/internal/service/antigravity_gateway_upstream.go | 1 + backend/internal/service/upstream_request_id.go | 7 +++++++ frontend/src/components/account/CreateAccountModal.vue | 1 + 4 files changed, 15 insertions(+) diff --git a/backend/internal/service/admin_account.go b/backend/internal/service/admin_account.go index f421090d3a..4e91fa40bc 100644 --- a/backend/internal/service/admin_account.go +++ b/backend/internal/service/admin_account.go @@ -474,6 +474,9 @@ func (s *adminServiceImpl) CreateAccount(ctx context.Context, input *CreateAccou if err != nil { return nil, err } + if err := ValidateUpstreamRequestIDHeaderExtra(accountExtra); err != nil { + return nil, err + } // 绑定分组 groupIDs := input.GroupIDs @@ -571,6 +574,9 @@ func (s *adminServiceImpl) UpdateAccount(ctx context.Context, id int64, input *U if err != nil { return nil, err } + if err := ValidateUpstreamRequestIDHeaderExtra(normalizedExtra); err != nil { + return nil, err + } } previousProbeIdentity := upstreamBillingProbeIdentity(account) previousOllamaUsageIdentity := ollamaCloudUsageIdentity(account) diff --git a/backend/internal/service/antigravity_gateway_upstream.go b/backend/internal/service/antigravity_gateway_upstream.go index 7254745698..e6b9a73fa8 100644 --- a/backend/internal/service/antigravity_gateway_upstream.go +++ b/backend/internal/service/antigravity_gateway_upstream.go @@ -150,6 +150,7 @@ func (s *AntigravityGatewayService) ForwardUpstream(ctx context.Context, c *gin. Duration: duration, FirstTokenMs: firstTokenMs, ClientDisconnect: clientDisconnect, + UpstreamHeaders: resp.Header, Usage: ClaudeUsage{ InputTokens: usage.InputTokens, OutputTokens: usage.OutputTokens, diff --git a/backend/internal/service/upstream_request_id.go b/backend/internal/service/upstream_request_id.go index 1906601d35..0e4fcb6970 100644 --- a/backend/internal/service/upstream_request_id.go +++ b/backend/internal/service/upstream_request_id.go @@ -3,6 +3,7 @@ package service import ( "net/http" "strings" + "unicode/utf8" infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors" "golang.org/x/net/http/httpguts" @@ -51,6 +52,12 @@ func usageUpstreamRequestIDPtr(account *Account, h http.Header, wsMode bool) *st } if len(id) > maxUsageUpstreamRequestIDLen { id = id[:maxUsageUpstreamRequestIDLen] + for len(id) > 0 && !utf8.ValidString(id) { + id = id[:len(id)-1] + } + } + if id == "" { + return nil } return &id } diff --git a/frontend/src/components/account/CreateAccountModal.vue b/frontend/src/components/account/CreateAccountModal.vue index a8db1d4e59..4692c78e86 100644 --- a/frontend/src/components/account/CreateAccountModal.vue +++ b/frontend/src/components/account/CreateAccountModal.vue @@ -5120,6 +5120,7 @@ const resetForm = () => { adaptiveBaseUrls.value = { chat_completions: '', anthropic: '', responses: '' } apiKeyBaseUrl.value = 'https://api.anthropic.com' apiKeyValue.value = '' + upstreamRequestIdHeader.value = '' upstreamBillingAutoProbeEnabled.value = true editQuotaLimit.value = null editQuotaDailyLimit.value = null