lobe-chat
102 строки · 2.9 Кб
1import type { Migration, MigrationData } from '@/migrations/VersionController';2import { transformToChatModelCards } from '@/utils/parseModels';3
4import { V3ConfigState, V3LegacyConfig, V3OpenAIConfig, V3Settings } from './types/v3';5import { V4AzureOpenAIConfig, V4ConfigState, V4ProviderConfig, V4Settings } from './types/v4';6
7export class MigrationV3ToV4 implements Migration {8// from this version to start migration9version = 3;10
11migrate(data: MigrationData<V3ConfigState>): MigrationData<V4ConfigState> {12const { settings } = data.state;13
14return {15...data,16state: {17...data.state,18settings: !settings ? undefined : MigrationV3ToV4.migrateSettings(settings),19},20};21}22
23static migrateSettings = (settings: V3Settings): V4Settings => {24const { languageModel } = settings;25
26if (!languageModel) return { ...settings, languageModel: undefined };27
28const { openAI, togetherai, openrouter, ollama, ...res } = languageModel;29const { openai, azure } = this.migrateOpenAI(openAI);30
31return {32...settings,33languageModel: {34...res,35azure,36ollama: ollama && this.migrateProvider(ollama),37openai,38openrouter: openrouter && this.migrateProvider(openrouter),39togetherai: togetherai && this.migrateProvider(togetherai),40},41};42};43
44static migrateOpenAI = (45openai?: V3OpenAIConfig,46): { azure: V4AzureOpenAIConfig; openai: V4ProviderConfig } => {47if (!openai)48return {49azure: { apiKey: '', enabled: false },50openai: { apiKey: '', enabled: true },51};52
53if (openai.useAzure) {54return {55azure: {56apiKey: openai.OPENAI_API_KEY,57apiVersion: openai.azureApiVersion,58enabled: true,59endpoint: openai.endpoint,60},61openai: { apiKey: '', enabled: true, endpoint: '' },62};63}64
65const customModelCards = transformToChatModelCards({66defaultChatModels: [],67modelString: openai.customModelName,68});69
70return {71azure: {72apiKey: '',73enabled: false,74endpoint: '',75},76openai: {77apiKey: openai.OPENAI_API_KEY,78customModelCards:79customModelCards && customModelCards.length > 0 ? customModelCards : undefined,80enabled: true,81endpoint: openai.endpoint,82},83};84};85
86static migrateProvider = (provider: V3LegacyConfig): V4ProviderConfig => {87const customModelCards = transformToChatModelCards({88defaultChatModels: [],89modelString: provider.customModelName,90});91
92return {93apiKey: provider.apiKey,94customModelCards:95customModelCards && customModelCards.length > 0 ? customModelCards : undefined,96enabled: provider.enabled,97endpoint: provider.endpoint,98};99};100}
101
102export const MigrationLLMSettings = MigrationV3ToV4;103