diff --git a/src/modules/ai/gateway/ai-gateway.service.ts b/src/modules/ai/gateway/ai-gateway.service.ts index cb4f8bc..cef040e 100644 --- a/src/modules/ai/gateway/ai-gateway.service.ts +++ b/src/modules/ai/gateway/ai-gateway.service.ts @@ -5,6 +5,8 @@ import { PromptTemplateService } from '../prompts/prompt-template.service'; import { AiCostCalculatorService } from '../usage/ai-cost-calculator.service'; import { AiUsageLogService } from '../usage/ai-usage-log.service'; import { ContentSafetyService } from '../../content-safety/content-safety.service'; +import { EventBusService } from '../../../common/event-bus/event-bus.service'; +import { BaseDomainEvent } from '../../../common/events/base-domain.event'; import type { AiProvider } from '../providers/ai-provider.interface'; import type { GatewayRequest, GatewayResponse, ModelTier } from './ai-gateway.types'; @@ -20,6 +22,7 @@ export class AiGatewayService { private readonly usageLog: AiUsageLogService, private readonly providers: Map, private readonly contentSafety?: ContentSafetyService, + private readonly eventBus?: EventBusService, ) {} async generate(request: GatewayRequest, timeoutMs = this.DEFAULT_TIMEOUT_MS): Promise { @@ -60,6 +63,8 @@ export class AiGatewayService { output.usage.outputTokens, ); + this.eventBus?.publish(new (class extends BaseDomainEvent { eventType = 'ai.usage.recorded'; data: any; constructor(d: any) { super(); this.data = d; } })({ userId: request.userId, provider: target.provider, model: target.model, tier: request.tier, inputTokens: output.usage.inputTokens, outputTokens: output.usage.outputTokens, estimatedCost, latencyMs: output.latencyMs })); + this.usageLog.log({ userId: request.userId, feature: request.feature, @@ -96,7 +101,9 @@ export class AiGatewayService { } } - this.usageLog.log({ + this.eventBus?.publish(new (class extends BaseDomainEvent { eventType = 'ai.usage.recorded'; data: any; constructor(d: any) { super(); this.data = d; } })({ userId: request.userId, provider: target.provider, model: target.model, tier: request.tier, inputTokens: output.usage.inputTokens, outputTokens: output.usage.outputTokens, estimatedCost, latencyMs: output.latencyMs })); + + this.usageLog.log({ userId: request.userId, feature: request.feature, provider: tierConfig.preferred.provider,