lobe-chat

Форк
0
102 строки · 2.9 Кб
1
import type { Migration, MigrationData } from '@/migrations/VersionController';
2
import { transformToChatModelCards } from '@/utils/parseModels';
3

4
import { V3ConfigState, V3LegacyConfig, V3OpenAIConfig, V3Settings } from './types/v3';
5
import { V4AzureOpenAIConfig, V4ConfigState, V4ProviderConfig, V4Settings } from './types/v4';
6

7
export class MigrationV3ToV4 implements Migration {
8
  // from this version to start migration
9
  version = 3;
10

11
  migrate(data: MigrationData<V3ConfigState>): MigrationData<V4ConfigState> {
12
    const { settings } = data.state;
13

14
    return {
15
      ...data,
16
      state: {
17
        ...data.state,
18
        settings: !settings ? undefined : MigrationV3ToV4.migrateSettings(settings),
19
      },
20
    };
21
  }
22

23
  static migrateSettings = (settings: V3Settings): V4Settings => {
24
    const { languageModel } = settings;
25

26
    if (!languageModel) return { ...settings, languageModel: undefined };
27

28
    const { openAI, togetherai, openrouter, ollama, ...res } = languageModel;
29
    const { openai, azure } = this.migrateOpenAI(openAI);
30

31
    return {
32
      ...settings,
33
      languageModel: {
34
        ...res,
35
        azure,
36
        ollama: ollama && this.migrateProvider(ollama),
37
        openai,
38
        openrouter: openrouter && this.migrateProvider(openrouter),
39
        togetherai: togetherai && this.migrateProvider(togetherai),
40
      },
41
    };
42
  };
43

44
  static migrateOpenAI = (
45
    openai?: V3OpenAIConfig,
46
  ): { azure: V4AzureOpenAIConfig; openai: V4ProviderConfig } => {
47
    if (!openai)
48
      return {
49
        azure: { apiKey: '', enabled: false },
50
        openai: { apiKey: '', enabled: true },
51
      };
52

53
    if (openai.useAzure) {
54
      return {
55
        azure: {
56
          apiKey: openai.OPENAI_API_KEY,
57
          apiVersion: openai.azureApiVersion,
58
          enabled: true,
59
          endpoint: openai.endpoint,
60
        },
61
        openai: { apiKey: '', enabled: true, endpoint: '' },
62
      };
63
    }
64

65
    const customModelCards = transformToChatModelCards({
66
      defaultChatModels: [],
67
      modelString: openai.customModelName,
68
    });
69

70
    return {
71
      azure: {
72
        apiKey: '',
73
        enabled: false,
74
        endpoint: '',
75
      },
76
      openai: {
77
        apiKey: openai.OPENAI_API_KEY,
78
        customModelCards:
79
          customModelCards && customModelCards.length > 0 ? customModelCards : undefined,
80
        enabled: true,
81
        endpoint: openai.endpoint,
82
      },
83
    };
84
  };
85

86
  static migrateProvider = (provider: V3LegacyConfig): V4ProviderConfig => {
87
    const customModelCards = transformToChatModelCards({
88
      defaultChatModels: [],
89
      modelString: provider.customModelName,
90
    });
91

92
    return {
93
      apiKey: provider.apiKey,
94
      customModelCards:
95
        customModelCards && customModelCards.length > 0 ? customModelCards : undefined,
96
      enabled: provider.enabled,
97
      endpoint: provider.endpoint,
98
    };
99
  };
100
}
101

102
export const MigrationLLMSettings = MigrationV3ToV4;
103

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.