import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { ModelRouter } from './model-router'; import { PromptTemplateService } from './prompts/prompt-template.service'; import { AiCostCalculatorService } from './usage/ai-cost-calculator.service'; import { AiUsageLogService } from './usage/ai-usage-log.service'; import { AiGatewayService } from './gateway/ai-gateway.service'; import { ActiveRecallAnalysisWorkflow } from './workflows/active-recall-analysis.workflow'; import { AiController } from './ai.controller'; import { MockAiProvider } from './providers/mock-ai.provider'; import { DeepSeekProvider } from './providers/deepseek.provider'; import { MiniMaxProvider } from './providers/minimax.provider'; import type { AiProvider } from './providers/ai-provider.interface'; @Module({ imports: [ConfigModule], controllers: [AiController], providers: [ ModelRouter, PromptTemplateService, AiCostCalculatorService, AiUsageLogService, MockAiProvider, DeepSeekProvider, MiniMaxProvider, { provide: 'AI_PROVIDERS', useFactory: ( mock: MockAiProvider, deepseek: DeepSeekProvider, minimax: MiniMaxProvider, ): Map => { const map = new Map(); map.set(mock.name, mock); map.set(deepseek.name, deepseek); map.set(minimax.name, minimax); return map; }, inject: [MockAiProvider, DeepSeekProvider, MiniMaxProvider], }, { provide: AiGatewayService, useFactory: ( modelRouter: ModelRouter, promptTemplate: PromptTemplateService, costCalculator: AiCostCalculatorService, usageLog: AiUsageLogService, providers: Map, ) => { return new AiGatewayService( modelRouter, promptTemplate, costCalculator, usageLog, providers, ); }, inject: [ ModelRouter, PromptTemplateService, AiCostCalculatorService, AiUsageLogService, 'AI_PROVIDERS', ], }, ActiveRecallAnalysisWorkflow, ], exports: [AiGatewayService, ActiveRecallAnalysisWorkflow], }) export class AiModule {}