fix(aws): cancel Bedrock requests on client disconnect (#6589)
* fix(aws): cancel Bedrock requests on client disconnect * fix(billing): log effective usage billing path
This commit is contained in:
+11
-15
@@ -25,36 +25,32 @@ func effectiveBillingUsage(usage *dto.Usage) *dto.Usage {
|
||||
}
|
||||
|
||||
func usageBillingPathForLog(isLocalCountTokens bool, usage *dto.Usage) string {
|
||||
if isLocalCountTokens {
|
||||
return usageBillingPathLocal
|
||||
}
|
||||
if usage == nil || usage.BillingUsage == nil {
|
||||
effectiveUsage, ok := usageFromBillingUsage(usage)
|
||||
if !ok {
|
||||
if isLocalCountTokens {
|
||||
return usageBillingPathLocal
|
||||
}
|
||||
return usageBillingPathUpstream
|
||||
}
|
||||
source := strings.TrimSpace(usage.BillingUsage.Source)
|
||||
semantic := strings.TrimSpace(usage.BillingUsage.Semantic)
|
||||
if strings.EqualFold(source, dto.BillingUsageSourceOAIChat) ||
|
||||
strings.EqualFold(source, dto.BillingUsageSourceOAIResponses) ||
|
||||
strings.EqualFold(semantic, dto.BillingUsageSemanticOpenAI) {
|
||||
|
||||
switch effectiveUsage.UsageSemantic {
|
||||
case dto.BillingUsageSemanticOpenAI:
|
||||
if usage.BillingUsage.Estimated {
|
||||
return usageBillingPathOpenAIEstimated
|
||||
}
|
||||
return usageBillingPathOpenAI
|
||||
}
|
||||
if strings.EqualFold(source, dto.BillingUsageSourceClaudeMessages) ||
|
||||
strings.EqualFold(semantic, dto.BillingUsageSemanticAnthropic) {
|
||||
case dto.BillingUsageSemanticAnthropic:
|
||||
if usage.BillingUsage.Estimated {
|
||||
return usageBillingPathAnthropicEstimated
|
||||
}
|
||||
return usageBillingPathAnthropic
|
||||
}
|
||||
if strings.EqualFold(source, dto.BillingUsageSourceGeminiChat) ||
|
||||
strings.EqualFold(semantic, dto.BillingUsageSemanticGemini) {
|
||||
case dto.BillingUsageSemanticGemini:
|
||||
if usage.BillingUsage.Estimated {
|
||||
return usageBillingPathGeminiEstimated
|
||||
}
|
||||
return usageBillingPathGemini
|
||||
}
|
||||
|
||||
return usageBillingPathUpstream
|
||||
}
|
||||
|
||||
|
||||
@@ -284,9 +284,18 @@ func TestCalculateTextQuotaSummaryUsesOpenAIBillingUsageBeforeTopLevelUsage(t *t
|
||||
}
|
||||
|
||||
func TestUsageBillingPathForLog(t *testing.T) {
|
||||
require.Equal(t, usageBillingPathLocal, usageBillingPathForLog(true, &dto.Usage{
|
||||
require.Equal(t, usageBillingPathAnthropic, usageBillingPathForLog(true, &dto.Usage{
|
||||
BillingUsage: dto.NewClaudeMessagesBillingUsage(&dto.ClaudeUsage{InputTokens: 1}),
|
||||
}))
|
||||
invalidBillingUsage := &dto.Usage{
|
||||
PromptTokens: 1,
|
||||
BillingUsage: &dto.BillingUsage{
|
||||
Source: dto.BillingUsageSourceClaudeMessages,
|
||||
Semantic: dto.BillingUsageSemanticAnthropic,
|
||||
},
|
||||
}
|
||||
require.Equal(t, usageBillingPathLocal, usageBillingPathForLog(true, invalidBillingUsage))
|
||||
require.Equal(t, usageBillingPathUpstream, usageBillingPathForLog(false, invalidBillingUsage))
|
||||
require.Equal(t, usageBillingPathUpstream, usageBillingPathForLog(false, &dto.Usage{}))
|
||||
require.Equal(t, usageBillingPathOpenAI, usageBillingPathForLog(false, &dto.Usage{
|
||||
BillingUsage: dto.NewOpenAIChatBillingUsage(&dto.Usage{PromptTokens: 1}),
|
||||
@@ -297,7 +306,7 @@ func TestUsageBillingPathForLog(t *testing.T) {
|
||||
require.Equal(t, usageBillingPathGemini, usageBillingPathForLog(false, &dto.Usage{
|
||||
BillingUsage: dto.NewGeminiChatBillingUsage(&dto.GeminiUsageMetadata{PromptTokenCount: 1}),
|
||||
}))
|
||||
require.Equal(t, usageBillingPathGeminiEstimated, usageBillingPathForLog(false, &dto.Usage{
|
||||
require.Equal(t, usageBillingPathGeminiEstimated, usageBillingPathForLog(true, &dto.Usage{
|
||||
BillingUsage: dto.NewEstimatedGeminiChatBillingUsage(&dto.Usage{PromptTokens: 1}),
|
||||
}))
|
||||
}
|
||||
@@ -306,7 +315,7 @@ func TestAppendUsageBillingPathForLogWritesAdminInfo(t *testing.T) {
|
||||
other := map[string]interface{}{
|
||||
"admin_info": map[string]interface{}{},
|
||||
}
|
||||
appendUsageBillingPathForLog(other, false, &dto.Usage{
|
||||
appendUsageBillingPathForLog(other, true, &dto.Usage{
|
||||
BillingUsage: dto.NewClaudeMessagesBillingUsage(&dto.ClaudeUsage{InputTokens: 1}),
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user