Files
ai-center/src/provider/index.ts

64 lines
1.8 KiB
TypeScript

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);
}
}