Merge pull request #2922 from gsh20040816/codex/fix-openai-ws-usage-dedup
fix: avoid OpenAI WS usage dedup conflicts
This commit is contained in:
commit
7ad2dc74dd
@ -721,6 +721,37 @@ func TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamReque
|
|||||||
require.Equal(t, "client:openai-client-stable-123", usageRepo.lastLog.RequestID)
|
require.Equal(t, "client:openai-client-stable-123", usageRepo.lastLog.RequestID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID(t *testing.T) {
|
||||||
|
usageRepo := &openAIRecordUsageLogRepoStub{}
|
||||||
|
billingRepo := &openAIRecordUsageBillingRepoStub{result: &UsageBillingApplyResult{Applied: true}}
|
||||||
|
userRepo := &openAIRecordUsageUserRepoStub{}
|
||||||
|
subRepo := &openAIRecordUsageSubRepoStub{}
|
||||||
|
svc := newOpenAIRecordUsageServiceWithBillingRepoForTest(usageRepo, billingRepo, userRepo, subRepo, nil)
|
||||||
|
|
||||||
|
ctx := context.WithValue(context.Background(), ctxkey.ClientRequestID, "openai-ws-connection-123")
|
||||||
|
err := svc.RecordUsage(ctx, &OpenAIRecordUsageInput{
|
||||||
|
Result: &OpenAIForwardResult{
|
||||||
|
RequestID: "resp_openai_ws_turn_456",
|
||||||
|
OpenAIWSMode: true,
|
||||||
|
Usage: OpenAIUsage{
|
||||||
|
InputTokens: 8,
|
||||||
|
OutputTokens: 4,
|
||||||
|
},
|
||||||
|
Model: "gpt-5.1",
|
||||||
|
Duration: time.Second,
|
||||||
|
},
|
||||||
|
APIKey: &APIKey{ID: 10050},
|
||||||
|
User: &User{ID: 20050},
|
||||||
|
Account: &Account{ID: 30050},
|
||||||
|
})
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotNil(t, billingRepo.lastCmd)
|
||||||
|
require.Equal(t, "resp_openai_ws_turn_456", billingRepo.lastCmd.RequestID)
|
||||||
|
require.NotNil(t, usageRepo.lastLog)
|
||||||
|
require.Equal(t, "resp_openai_ws_turn_456", usageRepo.lastLog.RequestID)
|
||||||
|
}
|
||||||
|
|
||||||
func TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing(t *testing.T) {
|
func TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing(t *testing.T) {
|
||||||
usageRepo := &openAIRecordUsageLogRepoStub{}
|
usageRepo := &openAIRecordUsageLogRepoStub{}
|
||||||
billingRepo := &openAIRecordUsageBillingRepoStub{result: &UsageBillingApplyResult{Applied: true}}
|
billingRepo := &openAIRecordUsageBillingRepoStub{result: &UsageBillingApplyResult{Applied: true}}
|
||||||
|
|||||||
@ -5707,6 +5707,11 @@ func (s *OpenAIGatewayService) RecordUsage(ctx context.Context, input *OpenAIRec
|
|||||||
durationMs := int(result.Duration.Milliseconds())
|
durationMs := int(result.Duration.Milliseconds())
|
||||||
accountRateMultiplier := account.BillingRateMultiplier()
|
accountRateMultiplier := account.BillingRateMultiplier()
|
||||||
requestID := resolveUsageBillingRequestID(ctx, result.RequestID)
|
requestID := resolveUsageBillingRequestID(ctx, result.RequestID)
|
||||||
|
if result.OpenAIWSMode {
|
||||||
|
if upstreamRequestID := strings.TrimSpace(result.RequestID); upstreamRequestID != "" {
|
||||||
|
requestID = upstreamRequestID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 确定 RequestedModel(渠道映射前的原始模型)
|
// 确定 RequestedModel(渠道映射前的原始模型)
|
||||||
requestedModel := result.Model
|
requestedModel := result.Model
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user