export * from './core/index.ts'; import { BaseChat } from './core/chat.ts'; import { Ollama } from './chat-adapter/ollama.ts'; import { SiliconFlow } from './chat-adapter/siliconflow.ts'; import { Custom } from './chat-adapter/custom.ts'; import { Volces } from './chat-adapter/volces.ts'; import { DeepSeek } from './chat-adapter/deepseek.ts'; import { ModelScope } from './chat-adapter/model-scope.ts'; import { ChatMessage } from './core/type.ts'; export const OllamaProvider = Ollama; export const SiliconFlowProvider = SiliconFlow; export const CustomProvider = Custom; export const VolcesProvider = Volces; export const DeepSeekProvider = DeepSeek; export const ModelScopeProvider = ModelScope; export const ProviderMap = { Ollama: OllamaProvider, SiliconFlow: SiliconFlowProvider, Custom: CustomProvider, Volces: VolcesProvider, DeepSeek: DeepSeekProvider, ModelScope: ModelScopeProvider, BaseChat: BaseChat, }; type ProviderManagerConfig = { provider: string; model: string; apiKey: string; baseURL?: string; }; export class ProviderManager { provider: BaseChat; constructor(config: ProviderManagerConfig) { const { provider, model, apiKey, baseURL } = config; const Provider = ProviderMap[provider] as typeof BaseChat; if (!Provider) { throw new Error(`Provider ${provider} not found`); } const providerConfig = { model, apiKey, baseURL, }; if (!providerConfig.baseURL) { delete providerConfig.baseURL; } this.provider = new Provider(providerConfig); } static async createProvider(config: ProviderManagerConfig) { if (!config.baseURL) { delete config.baseURL; } const pm = new ProviderManager(config); return pm.provider; } async chat(messages: ChatMessage[]) { return this.provider.chat(messages); } }