import { Config } from '../config/schema'; import { Message, LLMResponse, ToolDefinition, ProviderConfig, StreamChunk } from '../types'; import { ProviderError } from '../utils/errors'; import { logger } from '../utils/logger'; import { OpenRouterProvider } from './base'; /** * Provider manager - OpenRouter only */ export class ProviderManager { private provider: OpenRouterProvider; constructor(config: Config) { const providerConfig = config.providers?.openrouter as ProviderConfig | undefined; if (!providerConfig || !providerConfig.apiKey) { throw new ProviderError('OpenRouter provider is not configured (missing apiKey)'); } this.provider = new OpenRouterProvider(providerConfig.apiKey, providerConfig.apiBase); logger.info('OpenRouter provider initialized'); } async complete( messages: Message[], model: string, temperature?: number, maxTokens?: number, tools?: ToolDefinition[] ): Promise { logger.info( { model, messageCount: messages.length }, 'Completing chat via OpenRouter' ); return this.provider.complete(messages, model, temperature, maxTokens, tools); } async *stream( messages: Message[], model: string, temperature?: number, maxTokens?: number, tools?: ToolDefinition[] ): AsyncGenerator { logger.info( { model, messageCount: messages.length }, 'Streaming chat via OpenRouter' ); yield* this.provider.stream(messages, model, temperature, maxTokens, tools); } }