fix(openai): record zero-cost usage for unpriced models
This commit is contained in:
@@ -5273,7 +5273,19 @@ func (s *OpenAIGatewayService) RecordUsage(ctx context.Context, input *OpenAIRec
|
||||
}
|
||||
cost, err = s.calculateOpenAIRecordUsageCost(ctx, result, apiKey, billingModels, multiplier, imageMultiplier, tokens, serviceTier)
|
||||
if err != nil {
|
||||
return err
|
||||
if !isUsagePricingUnavailableError(err) {
|
||||
return err
|
||||
}
|
||||
logger.L().With(
|
||||
zap.String("component", "service.openai_gateway"),
|
||||
zap.Strings("billing_models", billingModels),
|
||||
zap.String("requested_model", input.OriginalModel),
|
||||
zap.String("mapped_model", input.ChannelMappedModel),
|
||||
zap.String("upstream_model", result.UpstreamModel),
|
||||
zap.Int64("api_key_id", apiKey.ID),
|
||||
zap.Int64("account_id", account.ID),
|
||||
).Warn("openai_usage.pricing_missing_record_zero_cost", zap.Error(err))
|
||||
cost = &CostBreakdown{BillingMode: string(BillingModeToken)}
|
||||
}
|
||||
|
||||
// Determine billing type
|
||||
@@ -5439,6 +5451,17 @@ func (s *OpenAIGatewayService) calculateOpenAIRecordUsageCost(
|
||||
return nil, fmt.Errorf("calculate OpenAI usage cost failed for billing models %s: %w", strings.Join(billingModels, ","), lastErr)
|
||||
}
|
||||
|
||||
func isUsagePricingUnavailableError(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
if errors.Is(err, ErrModelPricingUnavailable) {
|
||||
return true
|
||||
}
|
||||
msg := strings.ToLower(err.Error())
|
||||
return strings.Contains(msg, "no pricing available") || strings.Contains(msg, "pricing not found")
|
||||
}
|
||||
|
||||
func (s *OpenAIGatewayService) calculateOpenAIRecordUsageTokenCost(
|
||||
ctx context.Context,
|
||||
apiKey *APIKey,
|
||||
|
||||
Reference in New Issue
Block a user