@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
text/typescript
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;
};