UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

72 lines (62 loc) 2.49 kB
import * as AiModels from '@/config/aiModels'; import { getLLMConfig } from '@/config/llm'; import { ModelProvider } from '@/libs/model-runtime'; import { AiFullModelCard } from '@/types/aiModel'; import { ProviderConfig } from '@/types/user/settings'; import { extractEnabledModels, transformToAiModelList } from '@/utils/parseModels'; interface ProviderSpecificConfig { enabled?: boolean; enabledKey?: string; fetchOnClient?: boolean; modelListKey?: string; withDeploymentName?: boolean; } export const genServerAiProvidersConfig = async ( specificConfig: Record<any, ProviderSpecificConfig>, ) => { const llmConfig = getLLMConfig() as Record<string, any>; // 并发处理所有 providers const providerConfigs = await Promise.all( Object.values(ModelProvider).map(async (provider) => { const providerUpperCase = provider.toUpperCase(); const aiModels = AiModels[provider] as AiFullModelCard[]; if (!aiModels) throw new Error( `Provider [${provider}] not found in aiModels, please make sure you have exported the provider in the \`aiModels/index.ts\``, ); const providerConfig = specificConfig[provider as keyof typeof specificConfig] || {}; const modelString = process.env[providerConfig.modelListKey ?? `${providerUpperCase}_MODEL_LIST`]; // 并发处理 extractEnabledModels 和 transformToAiModelList const [enabledModels, serverModelLists] = await Promise.all([ extractEnabledModels(provider, modelString, providerConfig.withDeploymentName || false), transformToAiModelList({ defaultModels: aiModels || [], modelString, providerId: provider, withDeploymentName: providerConfig.withDeploymentName || false, }), ]); return { config: { enabled: typeof providerConfig.enabled !== 'undefined' ? providerConfig.enabled : llmConfig[providerConfig.enabledKey || `ENABLED_${providerUpperCase}`], enabledModels, serverModelLists, ...(providerConfig.fetchOnClient !== undefined && { fetchOnClient: providerConfig.fetchOnClient, }), }, provider, }; }), ); // 将结果转换为对象 const config = {} as Record<string, ProviderConfig>; for (const { provider, config: providerConfig } of providerConfigs) { config[provider] = providerConfig; } return config; };