@lobehub/chat 0.141.2 → 0.142.0

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 (84) hide show
  1. package/.env.example +6 -0
  2. package/CHANGELOG.md +25 -0
  3. package/Dockerfile +3 -0
  4. package/README.md +14 -14
  5. package/README.zh-CN.md +16 -15
  6. package/docs/self-hosting/environment-variables/model-provider.zh-CN.mdx +10 -0
  7. package/docs/usage/features/multi-ai-providers.zh-CN.mdx +1 -0
  8. package/docs/usage/providers/ollama/qwen.mdx +47 -0
  9. package/docs/usage/providers/ollama/qwen.zh-CN.mdx +45 -0
  10. package/locales/ar/common.json +1 -0
  11. package/locales/ar/error.json +7 -1
  12. package/locales/ar/setting.json +8 -0
  13. package/locales/de-DE/common.json +1 -0
  14. package/locales/de-DE/error.json +7 -1
  15. package/locales/de-DE/setting.json +8 -0
  16. package/locales/en-US/common.json +1 -0
  17. package/locales/en-US/error.json +7 -1
  18. package/locales/en-US/setting.json +8 -0
  19. package/locales/es-ES/common.json +1 -0
  20. package/locales/es-ES/error.json +7 -1
  21. package/locales/es-ES/setting.json +8 -0
  22. package/locales/fr-FR/common.json +1 -0
  23. package/locales/fr-FR/error.json +7 -1
  24. package/locales/fr-FR/setting.json +8 -0
  25. package/locales/it-IT/common.json +1 -0
  26. package/locales/it-IT/error.json +7 -1
  27. package/locales/it-IT/setting.json +30 -24
  28. package/locales/ja-JP/common.json +1 -0
  29. package/locales/ja-JP/error.json +7 -1
  30. package/locales/ja-JP/setting.json +30 -24
  31. package/locales/ko-KR/common.json +1 -0
  32. package/locales/ko-KR/error.json +7 -1
  33. package/locales/ko-KR/setting.json +8 -0
  34. package/locales/nl-NL/common.json +1 -0
  35. package/locales/nl-NL/error.json +7 -1
  36. package/locales/nl-NL/setting.json +30 -24
  37. package/locales/pl-PL/common.json +1 -0
  38. package/locales/pl-PL/error.json +7 -1
  39. package/locales/pl-PL/setting.json +8 -0
  40. package/locales/pt-BR/common.json +1 -0
  41. package/locales/pt-BR/error.json +7 -1
  42. package/locales/pt-BR/setting.json +8 -0
  43. package/locales/ru-RU/common.json +1 -0
  44. package/locales/ru-RU/error.json +7 -1
  45. package/locales/ru-RU/setting.json +8 -0
  46. package/locales/tr-TR/common.json +1 -0
  47. package/locales/tr-TR/error.json +7 -1
  48. package/locales/tr-TR/setting.json +8 -0
  49. package/locales/vi-VN/common.json +1 -0
  50. package/locales/vi-VN/error.json +7 -1
  51. package/locales/vi-VN/setting.json +8 -0
  52. package/locales/zh-CN/common.json +1 -0
  53. package/locales/zh-CN/error.json +7 -1
  54. package/locales/zh-CN/setting.json +8 -0
  55. package/locales/zh-TW/common.json +1 -0
  56. package/locales/zh-TW/error.json +7 -1
  57. package/locales/zh-TW/setting.json +8 -0
  58. package/package.json +1 -1
  59. package/src/app/api/chat/[provider]/agentRuntime.ts +15 -2
  60. package/src/app/api/config/route.ts +2 -0
  61. package/src/app/api/errorResponse.ts +3 -0
  62. package/src/app/settings/llm/Google/index.tsx +10 -3
  63. package/src/app/settings/llm/ZeroOne/index.tsx +52 -0
  64. package/src/app/settings/llm/index.tsx +2 -0
  65. package/src/components/ModelIcon/index.tsx +2 -0
  66. package/src/components/ModelProviderIcon/index.tsx +5 -0
  67. package/src/components/ModelTag/ModelIcon.tsx +2 -0
  68. package/src/config/modelProviders/index.ts +3 -0
  69. package/src/config/modelProviders/zeroone.ts +28 -0
  70. package/src/config/server/provider.ts +10 -2
  71. package/src/const/settings.ts +4 -0
  72. package/src/features/Conversation/Error/APIKeyForm/ZeroOne.tsx +60 -0
  73. package/src/features/Conversation/Error/APIKeyForm/index.tsx +6 -1
  74. package/src/features/Conversation/Error/index.tsx +1 -0
  75. package/src/libs/agent-runtime/error.ts +4 -1
  76. package/src/libs/agent-runtime/index.ts +1 -0
  77. package/src/libs/agent-runtime/types/type.ts +1 -0
  78. package/src/libs/agent-runtime/zeroone/index.ts +78 -0
  79. package/src/locales/default/common.ts +1 -0
  80. package/src/locales/default/error.ts +8 -1
  81. package/src/locales/default/setting.ts +8 -0
  82. package/src/services/_auth.ts +5 -1
  83. package/src/store/global/slices/settings/selectors/modelProvider.ts +11 -2
  84. package/src/types/settings/modelProvider.ts +7 -0
@@ -50,6 +50,7 @@
50
50
  "InvalidOllamaArgs": "Ollama yapılandırması yanlış, lütfen Ollama yapılandırmasını kontrol edip tekrar deneyin",
51
51
  "InvalidOpenRouterAPIKey": "OpenRouter API Anahtarı geçersiz veya boş, lütfen OpenRouter API Anahtarınızı kontrol edip tekrar deneyin",
52
52
  "InvalidPerplexityAPIKey": "Perplexity API Key geçersiz veya boş, lütfen Perplexity API Key'inizi kontrol edip tekrar deneyin",
53
+ "InvalidZeroOneAPIKey": "SıfırBirIoT API Anahtarı geçersiz veya boş. Lütfen SıfırBirIoT API Anahtarınızı kontrol edip tekrar deneyin",
53
54
  "InvalidZhipuAPIKey": "Zhipu API Anahtarı yanlış veya boş, lütfen Zhipu API Anahtarınızı kontrol edip tekrar deneyin",
54
55
  "LocationNotSupportError": "Üzgünüz, bulunduğunuz konum bu model hizmetini desteklemiyor, muhtemelen bölge kısıtlamaları veya hizmetin henüz açılmamış olması nedeniyle. Lütfen mevcut konumun bu hizmeti kullanmaya uygun olup olmadığını doğrulayın veya başka bir konum bilgisi kullanmayı deneyin.",
55
56
  "MistralBizError": "Mistral AI hizmeti isteği sırasında bir hata oluştu. Lütfen aşağıdaki bilgilere göre sorunu giderin veya tekrar deneyin",
@@ -72,6 +73,7 @@
72
73
  "PluginOpenApiInitError": "Üzgünüz, OpenAPI istemci başlatma hatası, lütfen OpenAPI yapılandırma bilgilerini kontrol edin",
73
74
  "PluginServerError": "Eklenti sunucusu isteği bir hata ile döndü. Lütfen aşağıdaki hata bilgilerine dayanarak eklenti bildirim dosyanızı, eklenti yapılandırmanızı veya sunucu uygulamanızı kontrol edin",
74
75
  "PluginSettingsInvalid": "Bu eklenti, kullanılmadan önce doğru şekilde yapılandırılmalıdır. Lütfen yapılandırmanızın doğru olup olmadığını kontrol edin",
76
+ "ZeroOneBizError": "SıfırBirIoT hizmetine yapılan istekte bir hata oluştu. Lütfen aşağıdaki bilgilere göre sorunu gidermeye çalışın veya tekrar deneyin",
75
77
  "ZhipuBizError": "Zhipu servisi isteği hatası, lütfen aşağıdaki bilgilere göre sorunu gidermeye çalışın veya tekrar deneyin"
76
78
  },
77
79
  "stt": {
@@ -120,6 +122,10 @@
120
122
  "description": "Sohbeti başlatmak için Perplexity API Key'inizi girin. Uygulama API Key'inizi kaydetmez",
121
123
  "title": "Özel Perplexity API Key'i Kullan"
122
124
  },
125
+ "ZeroOne": {
126
+ "description": "Oturumu başlatmak için SıfırBirIoT API Anahtarınızı girin. Uygulama API Anahtarınızı kaydetmez",
127
+ "title": "Özel SıfırBirIoT API Anahtarı Kullan"
128
+ },
123
129
  "Zhipu": {
124
130
  "description": "Zhipu API Anahtarınızı girerek oturumu başlatabilirsiniz. Uygulama API Anahtarınızı kaydetmez",
125
131
  "title": "Özel Zhipu API Anahtarını kullan"
@@ -150,4 +156,4 @@
150
156
  "password": "Şifre"
151
157
  }
152
158
  }
153
- }
159
+ }
@@ -201,6 +201,14 @@
201
201
  "title": "API Anahtarı"
202
202
  }
203
203
  },
204
+ "ZeroOne": {
205
+ "title": "01.AI SıfırBir Her Şey",
206
+ "token": {
207
+ "desc": "01.AI SıfırBir Her Şey'den API Anahtarı girin",
208
+ "placeholder": "01.AI SıfırBir Her Şey API Anahtarı",
209
+ "title": "API Anahtarı"
210
+ }
211
+ },
204
212
  "Zhipu": {
205
213
  "title": "Zhipu AI",
206
214
  "token": {
@@ -107,6 +107,7 @@
107
107
  "openai": "OpenAI",
108
108
  "openrouter": "OpenRouter",
109
109
  "perplexity": "Perplexity AI",
110
+ "zeroone": "01.AI ZeroOne",
110
111
  "zhipu": "Zhipu AI"
111
112
  },
112
113
  "noDescription": "Chưa có mô tả",
@@ -50,6 +50,7 @@
50
50
  "InvalidOllamaArgs": "Cấu hình Ollama không hợp lệ, vui lòng kiểm tra lại cấu hình Ollama và thử lại",
51
51
  "InvalidOpenRouterAPIKey": "OpenRouter API Key không hợp lệ hoặc trống, vui lòng kiểm tra lại và thử lại",
52
52
  "InvalidPerplexityAPIKey": "Khóa API Perplexity không hợp lệ hoặc trống, vui lòng kiểm tra lại và thử lại sau",
53
+ "InvalidZeroOneAPIKey": "Khóa API ZeroOne không hợp lệ hoặc trống, vui lòng kiểm tra lại khóa API ZeroOne và thử lại",
53
54
  "InvalidZhipuAPIKey": "Khóa API Zhipu không chính xác hoặc trống, vui lòng kiểm tra lại Khóa API Zhipu và thử lại",
54
55
  "LocationNotSupportError": "Xin lỗi, vị trí của bạn không hỗ trợ dịch vụ mô hình này, có thể do hạn chế vùng miền hoặc dịch vụ chưa được mở. Vui lòng xác nhận xem vị trí hiện tại có hỗ trợ sử dụng dịch vụ này không, hoặc thử sử dụng thông tin vị trí khác.",
55
56
  "MistralBizError": "Yêu cầu dịch vụ Mistral AI gặp lỗi, vui lòng kiểm tra thông tin dưới đây hoặc thử lại",
@@ -72,6 +73,7 @@
72
73
  "PluginOpenApiInitError": "Xin lỗi, khởi tạo khách hàng OpenAPI thất bại, vui lòng kiểm tra thông tin cấu hình OpenAPI có đúng không",
73
74
  "PluginServerError": "Lỗi trả về từ máy chủ plugin, vui lòng kiểm tra tệp mô tả plugin, cấu hình plugin hoặc triển khai máy chủ theo thông tin lỗi dưới đây",
74
75
  "PluginSettingsInvalid": "Plugin cần phải được cấu hình đúng trước khi sử dụng, vui lòng kiểm tra cấu hình của bạn có đúng không",
76
+ "ZeroOneBizError": "Yêu cầu dịch vụ ZeroOneBiz gặp lỗi, vui lòng kiểm tra thông tin dưới đây hoặc thử lại",
75
77
  "ZhipuBizError": "Yêu cầu dịch vụ Zhipu gặp lỗi, vui lòng kiểm tra và thử lại dựa trên thông tin dưới đây"
76
78
  },
77
79
  "stt": {
@@ -120,6 +122,10 @@
120
122
  "description": "Nhập Khóa API Perplexity của bạn để bắt đầu phiên làm việc. Ứng dụng sẽ không ghi lại Khóa API của bạn",
121
123
  "title": "Sử dụng Khóa API Perplexity tùy chỉnh"
122
124
  },
125
+ "ZeroOne": {
126
+ "description": "Nhập khóa API ZeroOne của bạn để bắt đầu phiên làm việc. Ứng dụng sẽ không lưu trữ khóa API của bạn",
127
+ "title": "Sử dụng khóa API ZeroOne tùy chỉnh"
128
+ },
123
129
  "Zhipu": {
124
130
  "description": "Nhập Zhipu API Key của bạn để bắt đầu phiên làm việc. Ứng dụng sẽ không lưu trữ API Key của bạn",
125
131
  "title": "Sử dụng thông tin xác thực tùy chỉnh của Zhipu"
@@ -150,4 +156,4 @@
150
156
  "password": "Mật khẩu"
151
157
  }
152
158
  }
153
- }
159
+ }
@@ -201,6 +201,14 @@
201
201
  "title": "API Key"
202
202
  }
203
203
  },
204
+ "ZeroOne": {
205
+ "title": "01.AI ZeroOne",
206
+ "token": {
207
+ "desc": "Nhập API Key từ 01.AI ZeroOne",
208
+ "placeholder": "01.AI ZeroOne API Key",
209
+ "title": "API Key"
210
+ }
211
+ },
204
212
  "Zhipu": {
205
213
  "title": "Zhipu AI",
206
214
  "token": {
@@ -107,6 +107,7 @@
107
107
  "openai": "OpenAI",
108
108
  "openrouter": "OpenRouter",
109
109
  "perplexity": "Perplexity",
110
+ "zeroone": "01.AI 零一万物",
110
111
  "zhipu": "智谱AI"
111
112
  },
112
113
  "noDescription": "暂无描述",
@@ -69,6 +69,8 @@
69
69
  "GroqBizError": "请求 Groq 服务出错,请根据以下信息排查或重试",
70
70
  "InvalidOpenRouterAPIKey": "OpenRouter API Key 不正确或为空,请检查 OpenRouter API Key 后重试",
71
71
  "OpenRouterBizError": "请求 OpenRouter AI 服务出错,请根据以下信息排查或重试",
72
+ "ZeroOneBizError": "请求零一万物服务出错,请根据以下信息排查或重试",
73
+ "InvalidZeroOneAPIKey": "零一万物 API Key 不正确或为空,请检查零一万物 API Key 后重试",
72
74
  "InvalidOllamaArgs": "Ollama 配置不正确,请检查 Ollama 配置后重试",
73
75
  "OllamaBizError": "请求 Ollama 服务出错,请根据以下信息排查或重试",
74
76
  "OllamaServiceUnavailable": "未检测到 Ollama 服务,请检查是否正常启动",
@@ -120,6 +122,10 @@
120
122
  "description": "输入你的 Perplexity API Key 即可开始会话。应用不会记录你的 API Key",
121
123
  "title": "使用自定义 Perplexity API Key"
122
124
  },
125
+ "ZeroOne": {
126
+ "description": "输入你的零一万物 API Key 即可开始会话。应用不会记录你的 API Key",
127
+ "title": "使用自定义零一万物 API Key"
128
+ },
123
129
  "Zhipu": {
124
130
  "description": "输入你的 Zhipu API Key 即可开始会话。应用不会记录你的 API Key",
125
131
  "title": "使用自定义 Zhipu API Key"
@@ -150,4 +156,4 @@
150
156
  "password": "密码"
151
157
  }
152
158
  }
153
- }
159
+ }
@@ -201,6 +201,14 @@
201
201
  "title": "API Key"
202
202
  }
203
203
  },
204
+ "ZeroOne": {
205
+ "title": "01.AI 零一万物",
206
+ "token": {
207
+ "desc": "填入来自 01.AI 零一万物的 API Key",
208
+ "placeholder": "01.AI 零一万物 API Key",
209
+ "title": "API Key"
210
+ }
211
+ },
204
212
  "Zhipu": {
205
213
  "title": "智谱",
206
214
  "token": {
@@ -107,6 +107,7 @@
107
107
  "openai": "OpenAI",
108
108
  "openrouter": "OpenRouter",
109
109
  "perplexity": "Perplexity AI",
110
+ "zeroone": "01.AI 零一萬物",
110
111
  "zhipu": "智譜AI"
111
112
  },
112
113
  "noDescription": "暫無描述",
@@ -50,6 +50,7 @@
50
50
  "InvalidOllamaArgs": "Ollama 配置不正確,請檢查 Ollama 配置後重試",
51
51
  "InvalidOpenRouterAPIKey": "OpenRouter API 金鑰不正確或為空,請檢查 OpenRouter API 金鑰後重試",
52
52
  "InvalidPerplexityAPIKey": "Perplexity API Key 不正確或為空,請檢查 Perplexity API Key 後重試",
53
+ "InvalidZeroOneAPIKey": "零一萬物 API Key 不正確或為空,請檢查零一萬物 API Key 後重試",
53
54
  "InvalidZhipuAPIKey": "Zhipu API Key 不正確或為空,請檢查 Zhipu API Key 後重試",
54
55
  "LocationNotSupportError": "很抱歉,你的所在位置不支持此模型服務,可能是由於地區限制或服務未開通。請確認當前位置是否支持使用此服務,或嘗試使用其他位置信息。",
55
56
  "MistralBizError": "請求 Mistral AI 服務出錯,請根據以下信息排查或重試",
@@ -72,6 +73,7 @@
72
73
  "PluginOpenApiInitError": "很抱歉,OpenAPI 客戶端初始化失敗,請檢查 OpenAPI 的配置信息是否正確",
73
74
  "PluginServerError": "外掛伺服器請求回傳錯誤。請根據下面的錯誤資訊檢查您的外掛描述檔案、外掛設定或伺服器實作",
74
75
  "PluginSettingsInvalid": "該外掛需要正確設定後才可以使用。請檢查您的設定是否正確",
76
+ "ZeroOneBizError": "請求零一萬物服務出錯,請根據以下信息排查或重試",
75
77
  "ZhipuBizError": "請求智譜服務出錯,請根據以下信息排查或重試"
76
78
  },
77
79
  "stt": {
@@ -120,6 +122,10 @@
120
122
  "description": "輸入你的 Perplexity API Key 即可開始會話。應用不會記錄你的 API Key",
121
123
  "title": "使用自定義 Perplexity API Key"
122
124
  },
125
+ "ZeroOne": {
126
+ "description": "輸入你的零一萬物 API Key 即可開始會話。應用不會記錄你的 API Key",
127
+ "title": "使用自定義零一萬物 API Key"
128
+ },
123
129
  "Zhipu": {
124
130
  "description": "輸入你的 Zhipu API Key 即可開始會話。應用不會記錄你的 API Key",
125
131
  "title": "使用自定義 Zhipu API Key"
@@ -150,4 +156,4 @@
150
156
  "password": "密碼"
151
157
  }
152
158
  }
153
- }
159
+ }
@@ -201,6 +201,14 @@
201
201
  "title": "API 金鑰"
202
202
  }
203
203
  },
204
+ "ZeroOne": {
205
+ "title": "01.AI 零一萬物",
206
+ "token": {
207
+ "desc": "填入來自 01.AI 零一萬物的 API 金鑰",
208
+ "placeholder": "01.AI 零一萬物 API 金鑰",
209
+ "title": "API 金鑰"
210
+ }
211
+ },
204
212
  "Zhipu": {
205
213
  "title": "智譜",
206
214
  "token": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "0.141.2",
3
+ "version": "0.142.0",
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",
@@ -21,6 +21,7 @@ import {
21
21
  LobeOpenRouterAI,
22
22
  LobePerplexityAI,
23
23
  LobeRuntimeAI,
24
+ LobeZeroOneAI,
24
25
  LobeZhipuAI,
25
26
  ModelProvider,
26
27
  } from '@/libs/agent-runtime';
@@ -174,11 +175,16 @@ class AgentRuntime {
174
175
  runtimeModel = this.initGroq(payload);
175
176
  break;
176
177
  }
177
-
178
+
178
179
  case ModelProvider.OpenRouter: {
179
180
  runtimeModel = this.initOpenRouter(payload);
180
181
  break;
181
182
  }
183
+
184
+ case ModelProvider.ZeroOne: {
185
+ runtimeModel = this.initZeroOne(payload);
186
+ break;
187
+ }
182
188
  }
183
189
 
184
190
  return new AgentRuntime(runtimeModel);
@@ -287,7 +293,7 @@ class AgentRuntime {
287
293
 
288
294
  return new LobeGroq({ apiKey });
289
295
  }
290
-
296
+
291
297
  private static initOpenRouter(payload: JWTPayload) {
292
298
  const { OPENROUTER_API_KEY } = getServerConfig();
293
299
  const apiKey = apiKeyManager.pick(payload?.apiKey || OPENROUTER_API_KEY);
@@ -295,6 +301,13 @@ class AgentRuntime {
295
301
  return new LobeOpenRouterAI({ apiKey });
296
302
  }
297
303
 
304
+ private static initZeroOne(payload: JWTPayload) {
305
+ const { ZEROONE_API_KEY } = getServerConfig();
306
+ const apiKey = apiKeyManager.pick(payload?.apiKey || ZEROONE_API_KEY);
307
+
308
+ return new LobeZeroOneAI({ apiKey });
309
+ }
310
+
298
311
  }
299
312
 
300
313
  export default AgentRuntime;
@@ -23,6 +23,7 @@ export const GET = async () => {
23
23
  ENABLED_ANTHROPIC,
24
24
  ENABLED_MISTRAL,
25
25
  ENABLED_OPENROUTER,
26
+ ENABLED_ZEROONE,
26
27
  DEFAULT_AGENT_CONFIG,
27
28
  OLLAMA_CUSTOM_MODELS,
28
29
  } = getServerConfig();
@@ -44,6 +45,7 @@ export const GET = async () => {
44
45
  ollama: { customModelName: OLLAMA_CUSTOM_MODELS, enabled: ENABLE_OLLAMA },
45
46
  openrouter: { enabled: ENABLED_OPENROUTER },
46
47
  perplexity: { enabled: ENABLED_PERPLEXITY },
48
+ zeroone: { enabled: ENABLED_ZEROONE },
47
49
  zhipu: { enabled: ENABLED_ZHIPU },
48
50
  },
49
51
  telemetry: {
@@ -56,6 +56,9 @@ const getStatus = (errorType: ILobeAgentRuntimeErrorType | ErrorType) => {
56
56
  case AgentRuntimeErrorType.GroqBizError: {
57
57
  return 482;
58
58
  }
59
+ case AgentRuntimeErrorType.ZeroOneBizError: {
60
+ return 483;
61
+ }
59
62
  }
60
63
  return errorType as number;
61
64
  };
@@ -1,7 +1,8 @@
1
- import { Google } from '@lobehub/icons';
2
- import { Input } from 'antd';
1
+ import { Google, Gemini } from '@lobehub/icons';
2
+ import { Input, Divider } from 'antd';
3
3
  import { memo } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
+ import { Flexbox } from 'react-layout-kit';
5
6
 
6
7
  import { ModelProvider } from '@/libs/agent-runtime';
7
8
  import { GlobalLLMProviderKey } from '@/types/settings';
@@ -37,7 +38,13 @@ const GoogleProvider = memo(() => {
37
38
  },
38
39
  ]}
39
40
  provider={providerKey}
40
- title={<Google.BrandColor size={28} />}
41
+ title={
42
+ <Flexbox align={'center'} gap={8} horizontal>
43
+ <Google.BrandColor size={28} />
44
+ <Divider style={{ margin: '0 4px' }} type={'vertical'} />
45
+ <Gemini.Combine size={24} type={'color'} />
46
+ </Flexbox>
47
+ }
41
48
  />
42
49
  );
43
50
  });
@@ -0,0 +1,52 @@
1
+ import { ZeroOne } from '@lobehub/icons';
2
+ import { Input } from 'antd';
3
+ import { useTheme } from 'antd-style';
4
+ import { memo } from 'react';
5
+ import { useTranslation } from 'react-i18next';
6
+
7
+ import { ModelProvider } from '@/libs/agent-runtime';
8
+
9
+ import Checker from '../components/Checker';
10
+ import ProviderConfig from '../components/ProviderConfig';
11
+ import { LLMProviderApiTokenKey, LLMProviderConfigKey } from '../const';
12
+
13
+ const providerKey = 'zeroone';
14
+
15
+ const ZeroOneProvider = memo(() => {
16
+ const { t } = useTranslation('setting');
17
+
18
+ const theme = useTheme();
19
+
20
+ return (
21
+ <ProviderConfig
22
+ configItems={[
23
+ {
24
+ children: (
25
+ <Input.Password
26
+ autoComplete={'new-password'}
27
+ placeholder={t('llm.ZeroOne.token.placeholder')}
28
+ />
29
+ ),
30
+ desc: t('llm.ZeroOne.token.desc'),
31
+ label: t('llm.ZeroOne.token.title'),
32
+ name: [LLMProviderConfigKey, providerKey, LLMProviderApiTokenKey],
33
+ },
34
+ {
35
+ children: <Checker model={'yi-34b-chat-0205'} provider={ModelProvider.ZeroOne} />,
36
+ desc: t('llm.checker.desc'),
37
+ label: t('llm.checker.title'),
38
+ minWidth: '100%',
39
+ },
40
+ ]}
41
+ provider={providerKey}
42
+ title={
43
+ <ZeroOne.Combine
44
+ color={theme.isDarkMode ? theme.colorText : ZeroOne.colorPrimary}
45
+ size={32}
46
+ />
47
+ }
48
+ />
49
+ );
50
+ });
51
+
52
+ export default ZeroOneProvider;
@@ -18,6 +18,7 @@ import Ollama from './Ollama';
18
18
  import OpenAI from './OpenAI';
19
19
  import OpenRouter from './OpenRouter';
20
20
  import Perplexity from './Perplexity';
21
+ import ZeroOne from './ZeroOne';
21
22
  import Zhipu from './Zhipu';
22
23
 
23
24
  export default memo<{ showOllama: boolean }>(({ showOllama }) => {
@@ -37,6 +38,7 @@ export default memo<{ showOllama: boolean }>(({ showOllama }) => {
37
38
  <Mistral />
38
39
  <OpenRouter />
39
40
  <Moonshot />
41
+ <ZeroOne />
40
42
  <Zhipu />
41
43
  <Footer>
42
44
  <Trans i18nKey="llm.waitingForMore" ns={'setting'}>
@@ -13,6 +13,7 @@ import {
13
13
  OpenAI,
14
14
  Perplexity,
15
15
  Tongyi,
16
+ Yi,
16
17
  } from '@lobehub/icons';
17
18
  import { memo } from 'react';
18
19
 
@@ -40,6 +41,7 @@ const ModelIcon = memo<ModelProviderIconProps>(({ model, size = 12 }) => {
40
41
  return <Baichuan.Avatar background={Baichuan.colorPrimary} size={size} />;
41
42
  if (model.includes('mistral') || model.includes('mixtral')) return <Mistral.Avatar size={size} />;
42
43
  if (model.includes('pplx')) return <Perplexity.Avatar size={size} />;
44
+ if (model.startsWith('yi-')) return <Yi.Avatar size={size} />;
43
45
  });
44
46
 
45
47
  export default ModelIcon;
@@ -10,6 +10,7 @@ import {
10
10
  OpenAI,
11
11
  OpenRouter,
12
12
  Perplexity,
13
+ ZeroOne,
13
14
  Zhipu,
14
15
  } from '@lobehub/icons';
15
16
  import { memo } from 'react';
@@ -79,6 +80,10 @@ const ModelProviderIcon = memo<ModelProviderIconProps>(({ provider }) => {
79
80
  return <OpenRouter size={20} />;
80
81
  }
81
82
 
83
+ case ModelProvider.ZeroOne: {
84
+ return <ZeroOne size={20} />;
85
+ }
86
+
82
87
  default: {
83
88
  return null;
84
89
  }
@@ -13,6 +13,7 @@ import {
13
13
  OpenAI,
14
14
  Perplexity,
15
15
  Tongyi,
16
+ ZeroOne,
16
17
  } from '@lobehub/icons';
17
18
  import { memo } from 'react';
18
19
 
@@ -38,6 +39,7 @@ const ModelIcon = memo<ModelIconProps>(({ model, size = 12 }) => {
38
39
  if (model.includes('baichuan')) return <Baichuan size={size} />;
39
40
  if (model.includes('mistral') || model.includes('mixtral')) return <Mistral size={size} />;
40
41
  if (model.includes('pplx')) return <Perplexity size={size} />;
42
+ if (model.startsWith('yi-')) return <ZeroOne size={size} />;
41
43
  });
42
44
 
43
45
  export default ModelIcon;
@@ -10,6 +10,7 @@ import OllamaProvider from './ollama';
10
10
  import OpenAIProvider from './openai';
11
11
  import OpenRouterProvider from './openrouter';
12
12
  import PerplexityProvider from './perplexity';
13
+ import ZeroOneProvider from './zeroone';
13
14
  import ZhiPuProvider from './zhipu';
14
15
 
15
16
  export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
@@ -24,6 +25,7 @@ export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
24
25
  OpenRouterProvider.chatModels,
25
26
  PerplexityProvider.chatModels,
26
27
  AnthropicProvider.chatModels,
28
+ ZeroOneProvider.chatModels,
27
29
  ].flat();
28
30
 
29
31
  export { default as AnthropicProvider } from './anthropic';
@@ -36,4 +38,5 @@ export { default as OllamaProvider } from './ollama';
36
38
  export { default as OpenAIProvider } from './openai';
37
39
  export { default as OpenRouterProvider } from './openrouter';
38
40
  export { default as PerplexityProvider } from './perplexity';
41
+ export { default as ZeroOneProvider } from './zeroone';
39
42
  export { default as ZhiPuProvider } from './zhipu';
@@ -0,0 +1,28 @@
1
+ import { ModelProviderCard } from '@/types/llm';
2
+
3
+ const ZeroOne: ModelProviderCard = {
4
+ chatModels: [
5
+ {
6
+ description: '支持聊天、问答、对话、写作、翻译等功能。',
7
+ displayName: 'YI 34B Chat',
8
+ id: 'yi-34b-chat-0205',
9
+ tokens: 4000,
10
+ },
11
+ {
12
+ description: '支持通用图片问答、图表理解、OCR、视觉推理,能处理高分辨率(1024*1024)的图像,能在复杂视觉任务上提供优秀性能,同时支持多种语言。',
13
+ displayName: 'YI Vision Plus',
14
+ id: 'yi-vl-plus',
15
+ tokens: 4000,
16
+ vision: true,
17
+ },
18
+ {
19
+ description: '增强了问答对话交互和深度内容创作能力。文档问答和构建知识库小能手。',
20
+ displayName: 'YI 34B Chat 200k',
21
+ id: 'yi-34b-chat-200k',
22
+ tokens: 200_000,
23
+ },
24
+ ],
25
+ id: 'zeroone',
26
+ };
27
+
28
+ export default ZeroOne;
@@ -42,10 +42,13 @@ declare global {
42
42
 
43
43
  // Groq Provider
44
44
  GROQ_API_KEY?: string;
45
-
45
+
46
46
  // OpenRouter Provider
47
47
  OPENROUTER_API_KEY?: string;
48
48
 
49
+ // ZeroOne Provider
50
+ ZEROONE_API_KEY?: string;
51
+
49
52
  // AWS Credentials
50
53
  AWS_REGION?: string;
51
54
  AWS_ACCESS_KEY_ID?: string;
@@ -77,9 +80,11 @@ export const getProviderConfig = () => {
77
80
  const MISTRAL_API_KEY = process.env.MISTRAL_API_KEY || '';
78
81
 
79
82
  const GROQ_API_KEY = process.env.GROQ_API_KEY || '';
80
-
83
+
81
84
  const OPENROUTER_API_KEY = process.env.OPENROUTER_API_KEY || '';
82
85
 
86
+ const ZEROONE_API_KEY = process.env.ZEROONE_API_KEY || '';
87
+
83
88
  // region format: iad1,sfo1
84
89
  let regions: string[] = [];
85
90
  if (process.env.OPENAI_FUNCTION_REGIONS) {
@@ -121,6 +126,9 @@ export const getProviderConfig = () => {
121
126
  ENABLED_GROQ: !!GROQ_API_KEY,
122
127
  GROQ_API_KEY,
123
128
 
129
+ ENABLED_ZEROONE: !!ZEROONE_API_KEY,
130
+ ZEROONE_API_KEY,
131
+
124
132
  ENABLED_AWS_BEDROCK: !!AWS_ACCESS_KEY_ID,
125
133
  AWS_REGION: process.env.AWS_REGION,
126
134
  AWS_ACCESS_KEY_ID: AWS_ACCESS_KEY_ID,
@@ -96,6 +96,10 @@ export const DEFAULT_LLM_CONFIG: GlobalLLMConfig = {
96
96
  apiKey: '',
97
97
  enabled: false,
98
98
  },
99
+ zeroone: {
100
+ apiKey: '',
101
+ enabled: false,
102
+ },
99
103
  zhipu: {
100
104
  apiKey: '',
101
105
  enabled: false,
@@ -0,0 +1,60 @@
1
+ import { ZeroOne } from '@lobehub/icons';
2
+ import { Input } from 'antd';
3
+ import { memo } from 'react';
4
+ import { useTranslation } from 'react-i18next';
5
+
6
+ import { ModelProvider } from '@/libs/agent-runtime';
7
+ import { useGlobalStore } from '@/store/global';
8
+ import { modelProviderSelectors } from '@/store/global/selectors';
9
+
10
+ import { FormAction } from '../style';
11
+
12
+ const ZeroOneForm = memo(() => {
13
+ const { t } = useTranslation('error');
14
+ // const [showProxy, setShow] = useState(false);
15
+
16
+ const [apiKey, setConfig] = useGlobalStore((s) => [
17
+ modelProviderSelectors.zerooneAPIKey(s),
18
+ s.setModelProviderConfig,
19
+ ]);
20
+
21
+ return (
22
+ <FormAction
23
+ avatar={<ZeroOne size={56} />}
24
+ description={t('unlock.apikey.ZeroOne.description')}
25
+ title={t('unlock.apikey.ZeroOne.title')}
26
+ >
27
+ <Input.Password
28
+ autoComplete={'new-password'}
29
+ onChange={(e) => {
30
+ setConfig(ModelProvider.ZeroOne, { apiKey: e.target.value });
31
+ }}
32
+ placeholder={'*********************************'}
33
+ type={'block'}
34
+ value={apiKey}
35
+ />
36
+ {/*{showProxy ? (*/}
37
+ {/* <Input*/}
38
+ {/* onChange={(e) => {*/}
39
+ {/* setConfig({ endpoint: e.target.value });*/}
40
+ {/* }}*/}
41
+ {/* placeholder={'https://api.openai.com/v1'}*/}
42
+ {/* type={'block'}*/}
43
+ {/* value={proxyUrl}*/}
44
+ {/* />*/}
45
+ {/*) : (*/}
46
+ {/* <Button*/}
47
+ {/* icon={<Icon icon={Network} />}*/}
48
+ {/* onClick={() => {*/}
49
+ {/* setShow(true);*/}
50
+ {/* }}*/}
51
+ {/* type={'text'}*/}
52
+ {/* >*/}
53
+ {/* {t('unlock.apikey.addProxyUrl')}*/}
54
+ {/* </Button>*/}
55
+ {/*)}*/}
56
+ </FormAction>
57
+ );
58
+ });
59
+
60
+ export default ZeroOneForm;
@@ -15,6 +15,7 @@ import MoonshotForm from './Moonshot';
15
15
  import OpenAIForm from './OpenAI';
16
16
  import OpenRouterForm from './OpenRouter';
17
17
  import PerplexityForm from './Perplexity';
18
+ import ZeroOneForm from './ZeroOne';
18
19
  import ZhipuForm from './Zhipu';
19
20
 
20
21
  interface APIKeyFormProps {
@@ -60,11 +61,15 @@ const APIKeyForm = memo<APIKeyFormProps>(({ id, provider }) => {
60
61
  case ModelProvider.Groq: {
61
62
  return <GroqForm />;
62
63
  }
63
-
64
+
64
65
  case ModelProvider.OpenRouter: {
65
66
  return <OpenRouterForm />;
66
67
  }
67
68
 
69
+ case ModelProvider.ZeroOne: {
70
+ return <ZeroOneForm />;
71
+ }
72
+
68
73
  default:
69
74
  case ModelProvider.OpenAI: {
70
75
  return <OpenAIForm />;
@@ -76,6 +76,7 @@ const ErrorMessageExtra = memo<{ data: ChatMessage }>(({ data }) => {
76
76
  case AgentRuntimeErrorType.InvalidAnthropicAPIKey:
77
77
  case AgentRuntimeErrorType.InvalidGroqAPIKey:
78
78
  case AgentRuntimeErrorType.InvalidOpenRouterAPIKey:
79
+ case AgentRuntimeErrorType.InvalidZeroOneAPIKey:
79
80
  case AgentRuntimeErrorType.NoOpenAIAPIKey: {
80
81
  return <InvalidAPIKey id={data.id} provider={data.error?.body?.provider} />;
81
82
  }