@lobehub/chat 1.45.4 → 1.45.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/changelog/v1.json +18 -0
  3. package/locales/ar/modelProvider.json +1 -1
  4. package/locales/bg-BG/modelProvider.json +1 -1
  5. package/locales/de-DE/modelProvider.json +1 -1
  6. package/locales/en-US/modelProvider.json +1 -1
  7. package/locales/es-ES/modelProvider.json +1 -1
  8. package/locales/fa-IR/modelProvider.json +1 -1
  9. package/locales/fr-FR/modelProvider.json +1 -1
  10. package/locales/it-IT/modelProvider.json +1 -1
  11. package/locales/ja-JP/modelProvider.json +1 -1
  12. package/locales/ko-KR/modelProvider.json +1 -1
  13. package/locales/nl-NL/modelProvider.json +1 -1
  14. package/locales/pl-PL/modelProvider.json +1 -1
  15. package/locales/pt-BR/modelProvider.json +1 -1
  16. package/locales/ru-RU/modelProvider.json +1 -1
  17. package/locales/tr-TR/modelProvider.json +1 -1
  18. package/locales/vi-VN/modelProvider.json +1 -1
  19. package/locales/zh-CN/modelProvider.json +1 -1
  20. package/locales/zh-TW/modelProvider.json +1 -1
  21. package/package.json +4 -4
  22. package/src/app/(main)/chat/(workspace)/features/TelemetryNotification.tsx +1 -1
  23. package/src/app/(main)/files/(content)/@menu/features/KnowledgeBase/EmptyStatus.tsx +1 -1
  24. package/src/app/(main)/files/[id]/Header.tsx +1 -1
  25. package/src/app/(main)/settings/sync/features/WebRTC/SyncSwitch/index.tsx +7 -7
  26. package/src/components/BubblesLoading/index.tsx +3 -3
  27. package/src/config/aiModels/index.ts +38 -0
  28. package/src/config/modelProviders/index.ts +3 -0
  29. package/src/database/repositories/aiInfra/index.ts +3 -1
  30. package/src/features/Conversation/Messages/Assistant/FileChunks/index.tsx +1 -1
  31. package/src/features/Conversation/components/History/index.tsx +1 -1
  32. package/src/features/InitClientDB/PGliteIcon.tsx +1 -1
  33. package/src/libs/agent-runtime/utils/openaiCompatibleFactory/index.ts +1 -0
  34. package/src/locales/default/modelProvider.ts +1 -1
  35. package/src/migrations/FromV3ToV4/index.ts +1 -1
  36. package/src/server/globalConfig/{genServerLLMConfig.test.ts → _deprecated.test.ts} +2 -4
  37. package/src/server/globalConfig/{genServerLLMConfig.ts → _deprecated.ts} +1 -1
  38. package/src/server/globalConfig/genServerAiProviderConfig.ts +42 -0
  39. package/src/server/globalConfig/index.ts +23 -1
  40. package/src/server/routers/lambda/aiModel.ts +2 -2
  41. package/src/server/routers/lambda/aiProvider.ts +2 -2
  42. package/src/types/aiModel.ts +1 -0
  43. package/src/types/serverConfig.ts +1 -0
  44. package/src/types/user/settings/modelProvider.ts +2 -0
  45. package/src/utils/__snapshots__/parseModels.test.ts.snap +37 -5
  46. package/src/utils/_deprecated/__snapshots__/parseModels.test.ts.snap +112 -0
  47. package/src/utils/_deprecated/parseModels.test.ts +276 -0
  48. package/src/utils/_deprecated/parseModels.ts +161 -0
  49. package/src/utils/parseModels.test.ts +153 -46
  50. package/src/utils/parseModels.ts +34 -21
package/CHANGELOG.md CHANGED
@@ -2,6 +2,56 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ### [Version 1.45.6](https://github.com/lobehub/lobe-chat/compare/v1.45.5...v1.45.6)
6
+
7
+ <sup>Released on **2025-01-10**</sup>
8
+
9
+ #### 🐛 Bug Fixes
10
+
11
+ - **misc**: Fix `*_MODEL_LIST` env in new provider.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### What's fixed
19
+
20
+ - **misc**: Fix `*_MODEL_LIST` env in new provider, closes [#5350](https://github.com/lobehub/lobe-chat/issues/5350) ([2b1b2a2](https://github.com/lobehub/lobe-chat/commit/2b1b2a2))
21
+
22
+ </details>
23
+
24
+ <div align="right">
25
+
26
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
27
+
28
+ </div>
29
+
30
+ ### [Version 1.45.5](https://github.com/lobehub/lobe-chat/compare/v1.45.4...v1.45.5)
31
+
32
+ <sup>Released on **2025-01-09**</sup>
33
+
34
+ #### 🐛 Bug Fixes
35
+
36
+ - **misc**: Revert officeparser.
37
+
38
+ <br/>
39
+
40
+ <details>
41
+ <summary><kbd>Improvements and Fixes</kbd></summary>
42
+
43
+ #### What's fixed
44
+
45
+ - **misc**: Revert officeparser, closes [#5370](https://github.com/lobehub/lobe-chat/issues/5370) ([ea116c2](https://github.com/lobehub/lobe-chat/commit/ea116c2))
46
+
47
+ </details>
48
+
49
+ <div align="right">
50
+
51
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
52
+
53
+ </div>
54
+
5
55
  ### [Version 1.45.4](https://github.com/lobehub/lobe-chat/compare/v1.45.3...v1.45.4)
6
56
 
7
57
  <sup>Released on **2025-01-09**</sup>
package/changelog/v1.json CHANGED
@@ -1,4 +1,22 @@
1
1
  [
2
+ {
3
+ "children": {
4
+ "fixes": [
5
+ "Fix *_MODEL_LIST env in new provider."
6
+ ]
7
+ },
8
+ "date": "2025-01-10",
9
+ "version": "1.45.6"
10
+ },
11
+ {
12
+ "children": {
13
+ "fixes": [
14
+ "Revert officeparser."
15
+ ]
16
+ },
17
+ "date": "2025-01-09",
18
+ "version": "1.45.5"
19
+ },
2
20
  {
3
21
  "children": {
4
22
  "fixes": [
@@ -151,7 +151,7 @@
151
151
  "title": "جارٍ تنزيل النموذج {{model}} "
152
152
  },
153
153
  "endpoint": {
154
- "desc": "أدخل عنوان واجهة برمجة التطبيقات الخاص بـ Ollama، إذا لم يتم تحديده محليًا، يمكن تركه فارغًا",
154
+ "desc": "يجب أن تحتوي على http(s)://، يمكن تركها فارغة إذا لم يتم تحديدها محليًا",
155
155
  "title": "عنوان وكيل الواجهة"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Изтегляне на модел {{model}} "
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Въведете адрес на Ollama интерфейсния прокси, оставете празно, ако локално не е указано специално",
154
+ "desc": "Трябва да съдържа http(s)://, местният адрес може да остане празен, ако не е зададен допълнително",
155
155
  "title": "Адрес на прокси интерфейс"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Lade Modell {{model}} herunter"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Geben Sie die Proxy-Adresse der Ollama-Schnittstelle ein, leer lassen, wenn lokal nicht spezifiziert",
154
+ "desc": "Muss http(s):// enthalten, kann leer gelassen werden, wenn lokal nicht zusätzlich angegeben.",
155
155
  "title": "Schnittstellen-Proxy-Adresse"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Downloading model {{model}}"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Enter the Ollama interface proxy address, leave blank if not specified locally",
154
+ "desc": "Must include http(s)://; can be left blank if not specified locally.",
155
155
  "title": "Interface proxy address"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Descargando el modelo {{model}} "
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Introduce la dirección del proxy de la interfaz de Ollama, déjalo en blanco si no se ha especificado localmente",
154
+ "desc": "Debe incluir http(s)://, se puede dejar vacío si no se especifica localmente",
155
155
  "title": "Dirección del proxy de la interfaz"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "در حال دانلود مدل {{model}} "
152
152
  },
153
153
  "endpoint": {
154
- "desc": "آدرس پروکسی رابط Ollama را وارد کنید، اگر به صورت محلی تنظیم نشده است، می‌توانید خالی بگذارید",
154
+ "desc": "باید شامل http(s):// باشد، اگر محلی به طور اضافی مشخص نشده باشد می‌توان خالی گذاشت",
155
155
  "title": "آدرس سرویس Ollama"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Téléchargement du modèle {{model}} en cours"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Saisissez l'adresse du proxy Ollama, laissez vide si non spécifié localement",
154
+ "desc": "Doit inclure http(s)://, peut rester vide si non spécifié localement",
155
155
  "title": "Adresse du proxy"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Download del modello in corso {{model}}"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Inserisci l'indirizzo del proxy dell'interfaccia Ollama. Lascia vuoto se non specificato localmente",
154
+ "desc": "Deve includere http(s)://, può rimanere vuoto se non specificato localmente",
155
155
  "title": "Indirizzo del proxy dell'interfaccia"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "モデル{{model}}をダウンロード中"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Ollamaプロキシインターフェースアドレスを入力してください。ローカルで追加の指定がない場合は空白のままにしてください",
154
+ "desc": "http(s)://を含める必要があります。ローカルで特に指定がない場合は空白のままで構いません",
155
155
  "title": "プロキシインターフェースアドレス"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "모델 {{model}} 다운로드 중"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Ollama 인터페이스 프록시 주소를 입력하세요. 로컬에서 별도로 지정하지 않은 경우 비워둘 수 있습니다",
154
+ "desc": "http(s)://를 포함해야 하며, 로컬에서 추가로 지정하지 않은 경우 비워둘 수 있습니다.",
155
155
  "title": "인터페이스 프록시 주소"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Model {{model}} wordt gedownload"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Voer het Ollama interface proxyadres in, laat leeg indien niet specifiek aangegeven",
154
+ "desc": "Moet http(s):// bevatten, kan leeg gelaten worden als lokaal niet specifiek opgegeven",
155
155
  "title": "Interface Proxyadres"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Pobieranie modelu {{model}}"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Wprowadź adres rest API Ollama, jeśli lokalnie nie określono, pozostaw puste",
154
+ "desc": "Musi zawierać http(s)://, lokalnie, jeśli nie określono inaczej, można pozostawić puste",
155
155
  "title": "Adres proxy API"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Baixando o modelo {{model}} "
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Insira o endereço do proxy de interface da Ollama, se não foi especificado localmente, pode deixar em branco",
154
+ "desc": "Deve incluir http(s)://, pode deixar em branco se não houver especificação local adicional",
155
155
  "title": "Endereço do Proxy de Interface"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Загрузка модели {{model}} "
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Введите адрес прокси-интерфейса Ollama, если локально не указано иное, можете оставить пустым",
154
+ "desc": "Должен содержать http(s)://, если локально не указано иное, можно оставить пустым",
155
155
  "title": "Адрес прокси-интерфейса"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "正在下载模型 {{model}} "
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Ollama arayüz proxy adresini girin, yerel olarak belirtilmemişse boş bırakılabilir",
154
+ "desc": "http(s):// içermelidir, yerel olarak belirtilmemişse boş bırakılabilir",
155
155
  "title": "Arayüz Proxy Adresi"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "Đang tải mô hình {{model}}"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "Nhập địa chỉ proxy API của Ollama, có thể để trống nếu không chỉ định cụ thể",
154
+ "desc": "Phải bao gồm http(s)://, có thể để trống nếu không chỉ định thêm cho địa phương",
155
155
  "title": "Địa chỉ proxy API"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "正在下载模型 {{model}} "
152
152
  },
153
153
  "endpoint": {
154
- "desc": "填入 Ollama 接口代理地址,本地未额外指定可留空",
154
+ "desc": "必须包含http(s)://,本地未额外指定可留空",
155
155
  "title": "Ollama 服务地址"
156
156
  },
157
157
  "setup": {
@@ -151,7 +151,7 @@
151
151
  "title": "正在下載模型 {{model}}"
152
152
  },
153
153
  "endpoint": {
154
- "desc": "填入 Ollama 接口代理地址,本地未額外指定可留空",
154
+ "desc": "必須包含http(s)://,本地未額外指定可留空",
155
155
  "title": "接口代理地址"
156
156
  },
157
157
  "setup": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.45.4",
3
+ "version": "1.45.6",
4
4
  "description": "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.",
5
5
  "keywords": [
6
6
  "framework",
@@ -129,7 +129,7 @@
129
129
  "@lobehub/chat-plugins-gateway": "^1.9.0",
130
130
  "@lobehub/icons": "^1.61.1",
131
131
  "@lobehub/tts": "^1.28.0",
132
- "@lobehub/ui": "^1.163.0",
132
+ "@lobehub/ui": "^1.164.2",
133
133
  "@neondatabase/serverless": "^0.10.4",
134
134
  "@next/third-parties": "^15.1.4",
135
135
  "@react-spring/web": "^9.7.5",
@@ -182,7 +182,7 @@
182
182
  "nextjs-toploader": "^3.7.15",
183
183
  "numeral": "^2.0.6",
184
184
  "nuqs": "^1.20.0",
185
- "officeparser": "^5.1.1",
185
+ "officeparser": "^4.2.0",
186
186
  "ollama": "^0.5.11",
187
187
  "openai": "^4.77.3",
188
188
  "openapi-fetch": "^0.13.4",
@@ -244,7 +244,7 @@
244
244
  "@edge-runtime/vm": "^5.0.0",
245
245
  "@huggingface/tasks": "^0.13.13",
246
246
  "@lobehub/i18n-cli": "^1.20.3",
247
- "@lobehub/lint": "^1.25.3",
247
+ "@lobehub/lint": "^1.25.5",
248
248
  "@lobehub/seo-cli": "^1.4.3",
249
249
  "@next/bundle-analyzer": "^15.1.4",
250
250
  "@next/eslint-plugin-next": "^15.1.4",
@@ -53,7 +53,7 @@ const TelemetryNotification = memo<{ mobile?: boolean }>(({ mobile }) => {
53
53
  avatar={<TelescopeIcon />}
54
54
  background={theme.geekblue1}
55
55
  style={{ color: theme.geekblue7 }}
56
- ></Avatar>
56
+ />
57
57
  </Flexbox>
58
58
  <Flexbox gap={16}>
59
59
  <Flexbox gap={12}>
@@ -34,7 +34,7 @@ const LineIcon: IconType = forwardRef(({ size = 130, style, ...rest }, ref) => (
34
34
  xmlns="http://www.w3.org/2000/svg"
35
35
  {...rest}
36
36
  >
37
- <path d="M.5 63a.5.5 0 001 0h-1zM122 1l-2.887 5h5.774L122 1zM1.5 62.042a.5.5 0 10-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.916a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 101 0h-1zm1-1.916a.5.5 0 10-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.916a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 101 0h-1zm1.063-1.938a.5.5 0 10-.991-.13l.991.13zm-.418-2.274a.5.5 0 00.924.383l-.924-.383zm1.904-1.312a.5.5 0 10-.793-.609l.793.61zm.776-2.178a.5.5 0 00.61.793l-.61-.793zm2.304-.187a.5.5 0 00-.383-.924l.383.924zm1.761-1.497a.5.5 0 00.13.991l-.13-.991zm2.12.928a.5.5 0 100-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 000-1v1zm2.018-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 100-1v1zm2.019-1a.5.5 0 100 1v-1zm2.019 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.018 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 100-1v1zm2.02-1a.5.5 0 100 1v-1zm2.018 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 100-1v1zm2.02-1a.5.5 0 100 1v-1zm2.018 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 100-1v1zm2.018-1a.5.5 0 100 1v-1zm2.02 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 100-1v1zm2.018-1a.5.5 0 100 1v-1zm2.02 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 000-1v1zm2.018-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 100-1v1zm2.019-1a.5.5 0 100 1v-1zm2.019 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 100 1v-1zm2.019 1a.5.5 0 100-1v1zm2.02-1a.5.5 0 100 1v-1zm2.018 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 100 1v-1zm2.018 1a.5.5 0 100-1v1zm2.02-1a.5.5 0 100 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.12.928a.501.501 0 00-.13-.991l.13.991zm1.761-1.497a.501.501 0 00.383.924l-.383-.924zm2.304-.187a.5.5 0 00-.609-.793l.609.793zm.776-2.178a.5.5 0 10.793.609l-.793-.61zm1.904-1.312a.5.5 0 10-.924-.383l.924.383zm-.418-2.274a.5.5 0 10.991.13l-.991-.13zm1.063-1.938a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.916a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.916a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.916a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 001 0h-1zM1.5 63v-.958h-1V63h1zm0-2.875v-1.917h-1v1.917h1zm0-3.833v-1.917h-1v1.917h1zm0-3.834v-1.916h-1v1.916h1zm0-3.833v-1.917h-1v1.917h1zm0-3.833v-1.917h-1v1.917h1zm0-3.834V40h-1v.958h1zm0-.958c0-.333.022-.66.063-.98l-.991-.13A8.574 8.574 0 00.5 40h1zm.569-2.87c.253-.61.584-1.18.98-1.696l-.793-.609a8.49 8.49 0 00-1.11 1.921l.923.383zm2.365-3.08a7.487 7.487 0 011.695-.981l-.383-.924a8.495 8.495 0 00-1.92 1.111l.608.793zm3.586-1.487c.32-.041.648-.063.98-.063v-1c-.376 0-.746.024-1.11.072l.13.991zM9 32.5h1.01v-1H9v1zm3.029 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.019v-1h-2.019v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.019v1zm4.038 0H114v-1h-1.01v1zm1.01 0c.376 0 .746-.024 1.11-.072l-.13-.991c-.32.041-.648.063-.98.063v1zm3.254-.645a8.506 8.506 0 001.921-1.111l-.609-.793a7.519 7.519 0 01-1.695.98l.383.924zm3.49-2.68a8.516 8.516 0 001.111-1.921l-.924-.383a7.527 7.527 0 01-.98 1.695l.793.609zm1.684-4.066c.048-.363.072-.733.072-1.109h-1c0 .332-.022.66-.063.98l.991.13zM122.5 24v-.958h-1V24h1zm0-2.875v-1.917h-1v1.917h1zm0-3.833v-1.917h-1v1.917h1zm0-3.834v-1.916h-1v1.916h1zm0-3.833V7.708h-1v1.917h1zm0-3.833V3.875h-1v1.917h1z"></path>
37
+ <path d="M.5 63a.5.5 0 001 0h-1zM122 1l-2.887 5h5.774L122 1zM1.5 62.042a.5.5 0 10-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.916a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 101 0h-1zm1-1.916a.5.5 0 10-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.916a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 101 0h-1zm1.063-1.938a.5.5 0 10-.991-.13l.991.13zm-.418-2.274a.5.5 0 00.924.383l-.924-.383zm1.904-1.312a.5.5 0 10-.793-.609l.793.61zm.776-2.178a.5.5 0 00.61.793l-.61-.793zm2.304-.187a.5.5 0 00-.383-.924l.383.924zm1.761-1.497a.5.5 0 00.13.991l-.13-.991zm2.12.928a.5.5 0 100-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 000-1v1zm2.018-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 100-1v1zm2.019-1a.5.5 0 100 1v-1zm2.019 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.018 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 100-1v1zm2.02-1a.5.5 0 100 1v-1zm2.018 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 100-1v1zm2.02-1a.5.5 0 100 1v-1zm2.018 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 100-1v1zm2.018-1a.5.5 0 100 1v-1zm2.02 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 100-1v1zm2.018-1a.5.5 0 100 1v-1zm2.02 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 000-1v1zm2.018-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 100-1v1zm2.019-1a.5.5 0 100 1v-1zm2.019 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 100 1v-1zm2.019 1a.5.5 0 100-1v1zm2.02-1a.5.5 0 100 1v-1zm2.018 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.02-1a.5.5 0 100 1v-1zm2.018 1a.5.5 0 100-1v1zm2.02-1a.5.5 0 100 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.02 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.019 1a.5.5 0 000-1v1zm2.019-1a.5.5 0 000 1v-1zm2.12.928a.501.501 0 00-.13-.991l.13.991zm1.761-1.497a.501.501 0 00.383.924l-.383-.924zm2.304-.187a.5.5 0 00-.609-.793l.609.793zm.776-2.178a.5.5 0 10.793.609l-.793-.61zm1.904-1.312a.5.5 0 10-.924-.383l.924.383zm-.418-2.274a.5.5 0 10.991.13l-.991-.13zm1.063-1.938a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.916a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.916a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.916a.5.5 0 001 0h-1zm1-1.917a.5.5 0 00-1 0h1zm-1-1.917a.5.5 0 001 0h-1zM1.5 63v-.958h-1V63h1zm0-2.875v-1.917h-1v1.917h1zm0-3.833v-1.917h-1v1.917h1zm0-3.834v-1.916h-1v1.916h1zm0-3.833v-1.917h-1v1.917h1zm0-3.833v-1.917h-1v1.917h1zm0-3.834V40h-1v.958h1zm0-.958c0-.333.022-.66.063-.98l-.991-.13A8.574 8.574 0 00.5 40h1zm.569-2.87c.253-.61.584-1.18.98-1.696l-.793-.609a8.49 8.49 0 00-1.11 1.921l.923.383zm2.365-3.08a7.487 7.487 0 011.695-.981l-.383-.924a8.495 8.495 0 00-1.92 1.111l.608.793zm3.586-1.487c.32-.041.648-.063.98-.063v-1c-.376 0-.746.024-1.11.072l.13.991zM9 32.5h1.01v-1H9v1zm3.029 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.02v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.02v1zm4.038 0h2.019v-1h-2.019v1zm4.038 0h2.02v-1h-2.02v1zm4.039 0h2.019v-1h-2.019v1zm4.038 0H114v-1h-1.01v1zm1.01 0c.376 0 .746-.024 1.11-.072l-.13-.991c-.32.041-.648.063-.98.063v1zm3.254-.645a8.506 8.506 0 001.921-1.111l-.609-.793a7.519 7.519 0 01-1.695.98l.383.924zm3.49-2.68a8.516 8.516 0 001.111-1.921l-.924-.383a7.527 7.527 0 01-.98 1.695l.793.609zm1.684-4.066c.048-.363.072-.733.072-1.109h-1c0 .332-.022.66-.063.98l.991.13zM122.5 24v-.958h-1V24h1zm0-2.875v-1.917h-1v1.917h1zm0-3.833v-1.917h-1v1.917h1zm0-3.834v-1.916h-1v1.916h1zm0-3.833V7.708h-1v1.917h1zm0-3.833V3.875h-1v1.917h1z" />
38
38
  </svg>
39
39
  ));
40
40
 
@@ -32,7 +32,7 @@ const Header = memo<HeaderProps>(({ filename, url }) => {
32
32
  >
33
33
  <Flexbox align={'baseline'} horizontal>
34
34
  <Button
35
- icon={<Icon icon={ArrowLeftIcon}></Icon>}
35
+ icon={<Icon icon={ArrowLeftIcon} />}
36
36
  onClick={() => {
37
37
  router.push('/files');
38
38
  }}
@@ -19,15 +19,15 @@ const SyncSwitch = memo<SyncSwitchProps>(({ value, onChange }) => {
19
19
  role="switch"
20
20
  type="checkbox"
21
21
  />
22
- <span className="switch__base-outer"></span>
23
- <span className="switch__base-inner"></span>
22
+ <span className="switch__base-outer" />
23
+ <span className="switch__base-inner" />
24
24
  <svg className="switch__base-neon" height="24px" viewBox="0 0 40 24" width="40px">
25
25
  <defs>
26
26
  <filter id="switch-glow">
27
- <feGaussianBlur result="coloredBlur" stdDeviation="1"></feGaussianBlur>
27
+ <feGaussianBlur result="coloredBlur" stdDeviation="1" />
28
28
  <feMerge>
29
- <feMergeNode in="coloredBlur"></feMergeNode>
30
- <feMergeNode in="SourceGraphic"></feMergeNode>
29
+ <feMergeNode in="coloredBlur" />
30
+ <feMergeNode in="SourceGraphic" />
31
31
  </feMerge>
32
32
  </filter>
33
33
  <linearGradient id="switch-gradient1" x1="0" x2="1" y1="0" y2="0">
@@ -51,7 +51,7 @@ const SyncSwitch = memo<SyncSwitchProps>(({ value, onChange }) => {
51
51
  strokeWidth="1"
52
52
  />
53
53
  </svg>
54
- <span className="switch__knob-shadow"></span>
54
+ <span className="switch__knob-shadow" />
55
55
  <span className="switch__knob-container">
56
56
  <span className="switch__knob">
57
57
  <svg className="switch__knob-neon" height="48px" viewBox="0 0 48 48" width="48px">
@@ -69,7 +69,7 @@ const SyncSwitch = memo<SyncSwitchProps>(({ value, onChange }) => {
69
69
  </svg>
70
70
  </span>
71
71
  </span>
72
- <span className="switch__led"></span>
72
+ <span className="switch__led" />
73
73
  <span className="switch__text">Power</span>
74
74
  </label>
75
75
  </div>
@@ -49,9 +49,9 @@ const BubblesLoadingIcon: IconType = forwardRef(
49
49
  xmlns="http://www.w3.org/2000/svg"
50
50
  {...rest}
51
51
  >
52
- <circle cx="7" cy="16" r="6"></circle>
53
- <circle cx="30" cy="16" r="6"></circle>
54
- <circle cx="53" cy="16" r="6"></circle>
52
+ <circle cx="7" cy="16" r="6" />
53
+ <circle cx="30" cy="16" r="6" />
54
+ <circle cx="53" cy="16" r="6" />
55
55
  </svg>
56
56
  );
57
57
  },
@@ -96,3 +96,41 @@ export const LOBE_DEFAULT_MODEL_LIST = buildDefaultModelList({
96
96
  zeroone,
97
97
  zhipu,
98
98
  });
99
+
100
+ export { default as ai21 } from './ai21';
101
+ export { default as ai360 } from './ai360';
102
+ export { default as anthropic } from './anthropic';
103
+ export { default as azure } from './azure';
104
+ export { default as baichuan } from './baichuan';
105
+ export { default as bedrock } from './bedrock';
106
+ export { default as cloudflare } from './cloudflare';
107
+ export { default as deepseek } from './deepseek';
108
+ export { default as fireworksai } from './fireworksai';
109
+ export { default as giteeai } from './giteeai';
110
+ export { default as github } from './github';
111
+ export { default as google } from './google';
112
+ export { default as groq } from './groq';
113
+ export { default as higress } from './higress';
114
+ export { default as huggingface } from './huggingface';
115
+ export { default as hunyuan } from './hunyuan';
116
+ export { default as internlm } from './internlm';
117
+ export { default as minimax } from './minimax';
118
+ export { default as mistral } from './mistral';
119
+ export { default as moonshot } from './moonshot';
120
+ export { default as novita } from './novita';
121
+ export { default as ollama } from './ollama';
122
+ export { default as openai } from './openai';
123
+ export { default as openrouter } from './openrouter';
124
+ export { default as perplexity } from './perplexity';
125
+ export { default as qwen } from './qwen';
126
+ export { default as sensenova } from './sensenova';
127
+ export { default as siliconcloud } from './siliconcloud';
128
+ export { default as spark } from './spark';
129
+ export { default as stepfun } from './stepfun';
130
+ export { default as taichu } from './taichu';
131
+ export { default as togetherai } from './togetherai';
132
+ export { default as upstage } from './upstage';
133
+ export { default as wenxin } from './wenxin';
134
+ export { default as xai } from './xai';
135
+ export { default as zeroone } from './zeroone';
136
+ export { default as zhipu } from './zhipu';
@@ -38,6 +38,9 @@ import XAIProvider from './xai';
38
38
  import ZeroOneProvider from './zeroone';
39
39
  import ZhiPuProvider from './zhipu';
40
40
 
41
+ /**
42
+ * @deprecated
43
+ */
41
44
  export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
42
45
  OpenAIProvider.chatModels,
43
46
  QwenProvider.chatModels,
@@ -120,7 +120,9 @@ export class AiInfraRepos {
120
120
  ): Promise<AiProviderModelListItem[] | undefined> => {
121
121
  try {
122
122
  const { default: providerModels } = await import(`@/config/aiModels/${providerId}`);
123
- return (providerModels as AIChatModelCard[]).map<AiProviderModelListItem>((m) => ({
123
+
124
+ const presetList = this.providerConfigs[providerId]?.serverModelLists || providerModels;
125
+ return (presetList as AIChatModelCard[]).map<AiProviderModelListItem>((m) => ({
124
126
  ...m,
125
127
  enabled: m.enabled || false,
126
128
  source: AiModelSourceEnum.Builtin,
@@ -65,7 +65,7 @@ const FileChunks = memo<FileChunksProps>(({ data }) => {
65
65
  {showDetail && (
66
66
  <Flexbox gap={8} horizontal wrap={'wrap'}>
67
67
  {data.map((item, index) => {
68
- return <ChunkItem index={index} key={item.id} {...item}></ChunkItem>;
68
+ return <ChunkItem index={index} key={item.id} {...item} />;
69
69
  })}
70
70
  </Flexbox>
71
71
  )}
@@ -57,7 +57,7 @@ const History = memo(() => {
57
57
  </Flexbox>
58
58
  <Flexbox align={'flex-start'} gap={8} horizontal>
59
59
  <Flexbox align={'center'} padding={8} width={20}>
60
- <div className={styles.line}></div>
60
+ <div className={styles.line} />
61
61
  </Flexbox>
62
62
  <Markdown className={styles.content} variant={'chat'}>
63
63
  {content}
@@ -20,7 +20,7 @@ const PGliteIcon: IconType = forwardRef(({ size = '1em', style, ...rest }, ref)
20
20
  <path
21
21
  clip-rule="evenodd"
22
22
  d="M941.581 335.737v460.806c0 15.926-12.913 28.836-28.832 28.818l-115.283-.137c-15.243-.018-27.706-11.88-28.703-26.877.011-.569.018-1.138.018-1.711l-.004-172.904c0-47.745-38.736-86.451-86.454-86.451-46.245 0-84.052-36.359-86.342-82.068V191.496l201.708.149c79.484.058 143.892 64.553 143.892 144.092zm-576-144.281v201.818c0 47.746 38.682 86.456 86.4 86.456h86.4v-5.796c0 66.816 54.13 120.98 120.902 120.98 28.617 0 51.815 23.213 51.815 51.848v149.644c0 .688.011 1.372.025 2.057-.943 15.065-13.453 26.992-28.746 26.992l-144.982-.007.986-201.586c.079-15.915-12.755-28.88-28.66-28.959-15.904-.079-28.861 12.763-28.94 28.678l-.986 201.741v.118l-172.174-.01V623.722c0-15.915-12.895-28.819-28.8-28.819-15.906 0-28.8 12.904-28.8 28.819v201.704l-143.642-.007c-15.905-.004-28.798-12.904-28.798-28.819V335.547c0-79.58 64.471-144.093 144.001-144.092l143.999.001zm446.544 173.693c0-23.874-19.343-43.228-43.2-43.228-23.861 0-43.2 19.354-43.2 43.228 0 23.875 19.339 43.226 43.2 43.226 23.857 0 43.2-19.351 43.2-43.226z"
23
- ></path>
23
+ />
24
24
  </svg>
25
25
  );
26
26
  });
@@ -279,6 +279,7 @@ export const LobeOpenAICompatibleFactory = <T extends Record<string, any> = any>
279
279
  return models.transformModel(item);
280
280
  }
281
281
 
282
+ // TODO: should refactor after remove v1 user/modelList code
282
283
  const knownModel = LOBE_DEFAULT_MODEL_LIST.find((model) => model.id === item.id);
283
284
 
284
285
  if (knownModel) {
@@ -152,7 +152,7 @@ export default {
152
152
  title: '正在下载模型 {{model}} ',
153
153
  },
154
154
  endpoint: {
155
- desc: '填入 Ollama 接口代理地址,本地未额外指定可留空',
155
+ desc: '必须包含http(s)://,本地未额外指定可留空',
156
156
  title: 'Ollama 服务地址',
157
157
  },
158
158
  setup: {
@@ -1,5 +1,5 @@
1
1
  import type { Migration, MigrationData } from '@/migrations/VersionController';
2
- import { transformToChatModelCards } from '@/utils/parseModels';
2
+ import { transformToChatModelCards } from '@/utils/_deprecated/parseModels';
3
3
 
4
4
  import { V3ConfigState, V3LegacyConfig, V3OpenAIConfig, V3Settings } from './types/v3';
5
5
  import { V4AzureOpenAIConfig, V4ConfigState, V4ProviderConfig, V4Settings } from './types/v4';
@@ -1,8 +1,6 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
2
 
3
- import { getLLMConfig } from '@/config/llm';
4
-
5
- import { genServerLLMConfig } from './genServerLLMConfig';
3
+ import { genServerLLMConfig } from './_deprecated';
6
4
 
7
5
  // Mock ModelProvider enum
8
6
  vi.mock('@/libs/agent-runtime', () => ({
@@ -40,7 +38,7 @@ vi.mock('@/config/llm', () => ({
40
38
  }));
41
39
 
42
40
  // Mock parse models utils
43
- vi.mock('@/utils/parseModels', () => ({
41
+ vi.mock('@/utils/_deprecated/parseModels', () => ({
44
42
  extractEnabledModels: (modelString: string, withDeploymentName?: boolean) => {
45
43
  // Returns different format if withDeploymentName is true
46
44
  return withDeploymentName ? [`${modelString}_withDeployment`] : [modelString];
@@ -2,7 +2,7 @@ import { getLLMConfig } from '@/config/llm';
2
2
  import * as ProviderCards from '@/config/modelProviders';
3
3
  import { ModelProvider } from '@/libs/agent-runtime';
4
4
  import { ModelProviderCard } from '@/types/llm';
5
- import { extractEnabledModels, transformToChatModelCards } from '@/utils/parseModels';
5
+ import { extractEnabledModels, transformToChatModelCards } from '@/utils/_deprecated/parseModels';
6
6
 
7
7
  export const genServerLLMConfig = (specificConfig: Record<any, any>) => {
8
8
  const llmConfig = getLLMConfig() as Record<string, any>;
@@ -0,0 +1,42 @@
1
+ import * as AiModels from '@/config/aiModels';
2
+ import { getLLMConfig } from '@/config/llm';
3
+ import { ModelProvider } from '@/libs/agent-runtime';
4
+ import { AiFullModelCard } from '@/types/aiModel';
5
+ import { ProviderConfig } from '@/types/user/settings';
6
+ import { extractEnabledModels, transformToAiChatModelList } from '@/utils/parseModels';
7
+
8
+ export const genServerAiProvidersConfig = (specificConfig: Record<any, any>) => {
9
+ const llmConfig = getLLMConfig() as Record<string, any>;
10
+
11
+ return Object.values(ModelProvider).reduce(
12
+ (config, provider) => {
13
+ const providerUpperCase = provider.toUpperCase();
14
+ const providerCard = AiModels[provider] as AiFullModelCard[];
15
+ const providerConfig = specificConfig[provider as keyof typeof specificConfig] || {};
16
+ const providerModelList =
17
+ process.env[providerConfig.modelListKey ?? `${providerUpperCase}_MODEL_LIST`];
18
+
19
+ const defaultChatModels = providerCard.filter((c) => c.type === 'chat');
20
+
21
+ config[provider] = {
22
+ enabled: llmConfig[providerConfig.enabledKey || `ENABLED_${providerUpperCase}`],
23
+ enabledModels: extractEnabledModels(
24
+ providerModelList,
25
+ providerConfig.withDeploymentName || false,
26
+ ),
27
+ serverModelLists: transformToAiChatModelList({
28
+ defaultChatModels: defaultChatModels || [],
29
+ modelString: providerModelList,
30
+ providerId: provider,
31
+ withDeploymentName: providerConfig.withDeploymentName || false,
32
+ }),
33
+ ...(providerConfig.fetchOnClient !== undefined && {
34
+ fetchOnClient: providerConfig.fetchOnClient,
35
+ }),
36
+ };
37
+
38
+ return config;
39
+ },
40
+ {} as Record<string, ProviderConfig>,
41
+ );
42
+ };