@lobehub/chat 0.162.16 → 0.162.18
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.
- package/.env.example +4 -0
- package/CHANGELOG.md +50 -0
- package/Dockerfile +3 -0
- package/README.md +1 -0
- package/README.zh-CN.md +1 -0
- package/docs/self-hosting/advanced/settings-url-share.mdx +89 -57
- package/docs/self-hosting/advanced/settings-url-share.zh-CN.mdx +87 -56
- package/docs/self-hosting/advanced/upstream-sync.mdx +1 -1
- package/docs/self-hosting/environment-variables/model-provider.mdx +10 -1
- package/docs/self-hosting/environment-variables/model-provider.zh-CN.mdx +9 -0
- package/docs/usage/features/multi-ai-providers.mdx +1 -0
- package/docs/usage/features/multi-ai-providers.zh-CN.mdx +1 -0
- package/locales/ar/error.json +7 -37
- package/locales/ar/modelProvider.json +15 -171
- package/locales/ar/setting.json +5 -8
- package/locales/bg-BG/error.json +6 -36
- package/locales/bg-BG/modelProvider.json +15 -171
- package/locales/bg-BG/setting.json +5 -8
- package/locales/de-DE/error.json +6 -36
- package/locales/de-DE/modelProvider.json +15 -171
- package/locales/de-DE/setting.json +5 -8
- package/locales/en-US/error.json +6 -36
- package/locales/en-US/modelProvider.json +15 -171
- package/locales/en-US/setting.json +6 -9
- package/locales/es-ES/error.json +6 -36
- package/locales/es-ES/modelProvider.json +15 -171
- package/locales/es-ES/setting.json +5 -8
- package/locales/fr-FR/error.json +6 -36
- package/locales/fr-FR/modelProvider.json +15 -171
- package/locales/fr-FR/setting.json +9 -12
- package/locales/it-IT/error.json +6 -36
- package/locales/it-IT/modelProvider.json +15 -171
- package/locales/it-IT/setting.json +5 -8
- package/locales/ja-JP/error.json +6 -36
- package/locales/ja-JP/modelProvider.json +15 -171
- package/locales/ja-JP/setting.json +5 -8
- package/locales/ko-KR/error.json +6 -36
- package/locales/ko-KR/modelProvider.json +15 -171
- package/locales/ko-KR/setting.json +5 -8
- package/locales/nl-NL/error.json +6 -36
- package/locales/nl-NL/modelProvider.json +15 -171
- package/locales/nl-NL/setting.json +5 -8
- package/locales/pl-PL/error.json +6 -36
- package/locales/pl-PL/modelProvider.json +15 -171
- package/locales/pl-PL/setting.json +6 -9
- package/locales/pt-BR/error.json +6 -36
- package/locales/pt-BR/modelProvider.json +15 -171
- package/locales/pt-BR/setting.json +5 -8
- package/locales/ru-RU/error.json +6 -36
- package/locales/ru-RU/modelProvider.json +15 -171
- package/locales/ru-RU/setting.json +5 -8
- package/locales/tr-TR/error.json +6 -36
- package/locales/tr-TR/modelProvider.json +15 -171
- package/locales/tr-TR/setting.json +5 -8
- package/locales/vi-VN/error.json +6 -36
- package/locales/vi-VN/modelProvider.json +15 -171
- package/locales/vi-VN/setting.json +5 -8
- package/locales/zh-CN/error.json +7 -37
- package/locales/zh-CN/modelProvider.json +15 -171
- package/locales/zh-CN/setting.json +5 -8
- package/locales/zh-TW/error.json +7 -37
- package/locales/zh-TW/modelProvider.json +15 -171
- package/locales/zh-TW/setting.json +5 -8
- package/package.json +1 -2
- package/src/app/(main)/settings/llm/ProviderList/Azure/index.tsx +107 -0
- package/src/app/(main)/settings/llm/ProviderList/Bedrock/index.tsx +68 -0
- package/src/app/(main)/settings/llm/ProviderList/Ollama/index.tsx +29 -0
- package/src/app/(main)/settings/llm/ProviderList/OpenAI/index.tsx +20 -0
- package/src/app/(main)/settings/llm/ProviderList/providers.tsx +141 -0
- package/src/app/(main)/settings/llm/components/ProviderConfig/index.tsx +18 -27
- package/src/app/(main)/settings/llm/index.tsx +7 -34
- package/src/app/(main)/settings/llm/type.ts +5 -0
- package/src/app/api/chat/[provider]/route.ts +8 -3
- package/src/app/api/chat/agentRuntime.test.ts +17 -0
- package/src/app/api/chat/agentRuntime.ts +7 -0
- package/src/app/api/errorResponse.test.ts +7 -89
- package/src/app/api/errorResponse.ts +6 -43
- package/src/app/api/middleware/auth/index.ts +7 -3
- package/src/components/ModelProviderIcon/index.tsx +5 -0
- package/src/components/ModelSelect/index.tsx +7 -10
- package/src/config/llm.ts +6 -0
- package/src/config/modelProviders/anthropic.ts +5 -0
- package/src/config/modelProviders/azure.ts +2 -0
- package/src/config/modelProviders/bedrock.ts +2 -0
- package/src/config/modelProviders/deepseek.ts +4 -1
- package/src/config/modelProviders/google.ts +5 -0
- package/src/config/modelProviders/groq.ts +5 -0
- package/src/config/modelProviders/index.ts +4 -0
- package/src/config/modelProviders/minimax.ts +2 -0
- package/src/config/modelProviders/mistral.ts +2 -0
- package/src/config/modelProviders/moonshot.ts +2 -0
- package/src/config/modelProviders/ollama.ts +4 -0
- package/src/config/modelProviders/openai.ts +3 -0
- package/src/config/modelProviders/openrouter.ts +3 -0
- package/src/config/modelProviders/perplexity.ts +5 -0
- package/src/config/modelProviders/qwen.ts +35 -0
- package/src/config/modelProviders/togetherai.ts +3 -0
- package/src/config/modelProviders/zeroone.ts +4 -2
- package/src/config/modelProviders/zhipu.ts +2 -0
- package/src/const/settings/llm.ts +5 -0
- package/src/features/Conversation/Error/APIKeyForm/ProviderApiKeyForm.tsx +6 -3
- package/src/features/Conversation/Error/APIKeyForm/ProviderAvatar.tsx +5 -0
- package/src/features/Conversation/Error/APIKeyForm/index.tsx +4 -0
- package/src/features/Conversation/Error/OllamaBizError/InvalidOllamaModel/index.tsx +11 -14
- package/src/features/Conversation/Error/index.tsx +29 -19
- package/src/features/Conversation/components/ChatItem/index.tsx +4 -13
- package/src/features/ModelSelect/index.tsx +1 -1
- package/src/features/ModelSwitchPanel/index.tsx +1 -1
- package/src/hooks/useProviderName.ts +8 -0
- package/src/libs/agent-runtime/AgentRuntime.ts +8 -1
- package/src/libs/agent-runtime/anthropic/index.test.ts +8 -5
- package/src/libs/agent-runtime/anthropic/index.ts +3 -3
- package/src/libs/agent-runtime/azureOpenai/index.test.ts +5 -2
- package/src/libs/agent-runtime/azureOpenai/index.ts +2 -2
- package/src/libs/agent-runtime/bedrock/index.test.ts +2 -2
- package/src/libs/agent-runtime/bedrock/index.ts +2 -2
- package/src/libs/agent-runtime/deepseek/index.test.ts +3 -2
- package/src/libs/agent-runtime/deepseek/index.ts +0 -5
- package/src/libs/agent-runtime/error.ts +11 -43
- package/src/libs/agent-runtime/google/index.test.ts +3 -4
- package/src/libs/agent-runtime/google/index.ts +4 -4
- package/src/libs/agent-runtime/groq/index.test.ts +3 -2
- package/src/libs/agent-runtime/groq/index.ts +0 -4
- package/src/libs/agent-runtime/index.ts +1 -0
- package/src/libs/agent-runtime/minimax/index.test.ts +3 -2
- package/src/libs/agent-runtime/minimax/index.ts +5 -5
- package/src/libs/agent-runtime/mistral/index.test.ts +2 -2
- package/src/libs/agent-runtime/mistral/index.ts +0 -5
- package/src/libs/agent-runtime/moonshot/index.test.ts +3 -2
- package/src/libs/agent-runtime/moonshot/index.ts +0 -5
- package/src/libs/agent-runtime/openrouter/index.test.ts +3 -2
- package/src/libs/agent-runtime/openrouter/index.ts +0 -6
- package/src/libs/agent-runtime/perplexity/index.test.ts +2 -2
- package/src/libs/agent-runtime/perplexity/index.ts +0 -5
- package/src/libs/agent-runtime/qwen/index.test.ts +251 -0
- package/src/libs/agent-runtime/qwen/index.ts +28 -0
- package/src/libs/agent-runtime/togetherai/index.test.ts +3 -2
- package/src/libs/agent-runtime/togetherai/index.ts +0 -5
- package/src/libs/agent-runtime/types/type.ts +1 -1
- package/src/libs/agent-runtime/utils/openaiCompatibleFactory/index.test.ts +123 -6
- package/src/libs/agent-runtime/utils/openaiCompatibleFactory/index.ts +12 -6
- package/src/libs/agent-runtime/utils/streams/openai.ts +1 -1
- package/src/libs/agent-runtime/zeroone/index.test.ts +3 -2
- package/src/libs/agent-runtime/zeroone/index.ts +1 -5
- package/src/libs/agent-runtime/zhipu/index.test.ts +8 -5
- package/src/libs/agent-runtime/zhipu/index.ts +2 -2
- package/src/locales/default/error.ts +10 -51
- package/src/locales/default/modelProvider.ts +12 -169
- package/src/locales/default/setting.ts +5 -8
- package/src/server/globalConfig/index.ts +2 -0
- package/src/services/__tests__/chat.test.ts +16 -0
- package/src/services/chat.ts +3 -0
- package/src/services/message/client.test.ts +4 -1
- package/src/types/fetch.ts +3 -1
- package/src/types/llm.ts +22 -0
- package/src/types/user/settings/keyVaults.ts +1 -0
- package/src/app/(main)/settings/llm/Anthropic/index.tsx +0 -25
- package/src/app/(main)/settings/llm/Azure/index.tsx +0 -110
- package/src/app/(main)/settings/llm/Bedrock/index.tsx +0 -74
- package/src/app/(main)/settings/llm/DeepSeek/index.tsx +0 -21
- package/src/app/(main)/settings/llm/Google/index.tsx +0 -31
- package/src/app/(main)/settings/llm/Groq/index.tsx +0 -26
- package/src/app/(main)/settings/llm/Minimax/index.tsx +0 -20
- package/src/app/(main)/settings/llm/Mistral/index.tsx +0 -20
- package/src/app/(main)/settings/llm/Moonshot/index.tsx +0 -28
- package/src/app/(main)/settings/llm/Ollama/index.tsx +0 -37
- package/src/app/(main)/settings/llm/OpenAI/index.tsx +0 -28
- package/src/app/(main)/settings/llm/OpenRouter/index.tsx +0 -21
- package/src/app/(main)/settings/llm/Perplexity/index.tsx +0 -23
- package/src/app/(main)/settings/llm/TogetherAI/index.tsx +0 -19
- package/src/app/(main)/settings/llm/ZeroOne/index.tsx +0 -20
- package/src/app/(main)/settings/llm/Zhipu/index.tsx +0 -18
- /package/src/app/(main)/settings/llm/{Ollama → ProviderList/Ollama}/Checker.tsx +0 -0
|
@@ -43,6 +43,11 @@
|
|
|
43
43
|
"title": "设置"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"apiKey": {
|
|
47
|
+
"desc": "请填写你的 {{name}} API Key",
|
|
48
|
+
"placeholder": "{{name}} API Key",
|
|
49
|
+
"title": "API Key"
|
|
50
|
+
},
|
|
46
51
|
"checker": {
|
|
47
52
|
"button": "检查",
|
|
48
53
|
"desc": "测试 Api Key 与代理地址是否正确填写",
|
|
@@ -109,14 +114,6 @@
|
|
|
109
114
|
},
|
|
110
115
|
"waitingForMore": "更多模型正在 <1>计划接入</1> 中,敬请期待 ✨"
|
|
111
116
|
},
|
|
112
|
-
"ollama": {
|
|
113
|
-
"download": {
|
|
114
|
-
"desc": "Ollama 正在下载该模型,请尽量不要关闭本页面。重新下载时将会中断处继续",
|
|
115
|
-
"remainingTime": "剩余时间",
|
|
116
|
-
"speed": "下载速度",
|
|
117
|
-
"title": "正在下载模型 {{model}} "
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
117
|
"plugin": {
|
|
121
118
|
"addTooltip": "自定义插件",
|
|
122
119
|
"clearDeprecated": "移除无效插件",
|
package/locales/zh-TW/error.json
CHANGED
|
@@ -54,39 +54,15 @@
|
|
|
54
54
|
"503": "抱歉,伺服器目前無法處理您的請求,可能是因為過載或正在進行維護。請稍後再試。",
|
|
55
55
|
"504": "抱歉,伺服器沒有收到上游伺服器的回應。請稍後再試。",
|
|
56
56
|
"AgentRuntimeError": "Lobe 語言模型運行時執行出錯,請根據以下信息排查或重試",
|
|
57
|
-
"AnthropicBizError": "請求 Anthropic AI 服務出錯,請根據以下信息排查或重試",
|
|
58
|
-
"AzureBizError": "請求 Azure AI 服務出錯,請根據以下信息排查或重試",
|
|
59
|
-
"BedrockBizError": "請求 Bedrock 服務出錯,請根據以下信息排查或重試",
|
|
60
|
-
"DeepSeekBizError": "請求 DeepSeek 服務出錯,請根據以下資訊排查或重試",
|
|
61
|
-
"GoogleBizError": "請求 Google 服務出錯,請根據以下信息排查或重試",
|
|
62
|
-
"GroqBizError": "請求 Groq 服務出錯,請根據以下信息排查或重試",
|
|
63
57
|
"InvalidAccessCode": "密碼不正確或為空,請輸入正確的訪問密碼,或添加自定義 API 金鑰",
|
|
64
|
-
"InvalidAnthropicAPIKey": "Anthropic API 金鑰不正確或為空,請檢查 Anthropic API 金鑰後重試",
|
|
65
|
-
"InvalidAzureAPIKey": "Azure API Key 不正確或為空,請檢查 Azure API Key 後重試",
|
|
66
58
|
"InvalidBedrockCredentials": "Bedrock 驗證未通過,請檢查 AccessKeyId/SecretAccessKey 後重試",
|
|
67
59
|
"InvalidClerkUser": "很抱歉,你當前尚未登錄,請先登錄或註冊帳號後繼續操作",
|
|
68
|
-
"InvalidDeepSeekAPIKey": "DeepSeek API 金鑰不正確或為空,請檢查 DeepSeek API 金鑰後重試",
|
|
69
|
-
"InvalidGoogleAPIKey": "Google API Key 不正確或為空,請檢查 Google API Key 後重試",
|
|
70
|
-
"InvalidGroqAPIKey": "Groq API 金鑰不正確或為空,請檢查 Groq API 金鑰後重試",
|
|
71
|
-
"InvalidMinimaxAPIKey": "Minimax API 金鑰不正確或為空,請檢查 Minimax API 金鑰後重試",
|
|
72
|
-
"InvalidMistralAPIKey": "Mistral AI API Key 不正確或為空,請檢查 Mistral API Key 後重試",
|
|
73
|
-
"InvalidMoonshotAPIKey": "Moonshot AI API 金鑰不正確或為空,請檢查 Moonshot API 金鑰後重試",
|
|
74
60
|
"InvalidOllamaArgs": "Ollama 配置不正確,請檢查 Ollama 配置後重試",
|
|
75
|
-
"
|
|
76
|
-
"InvalidPerplexityAPIKey": "Perplexity API Key 不正確或為空,請檢查 Perplexity API Key 後重試",
|
|
77
|
-
"InvalidTogetherAIAPIKey": "TogetherAI API 金鑰不正確或為空,請檢查 TogetherAI API 金鑰後重試",
|
|
78
|
-
"InvalidZeroOneAPIKey": "零一萬物 API Key 不正確或為空,請檢查零一萬物 API Key 後重試",
|
|
79
|
-
"InvalidZhipuAPIKey": "Zhipu API Key 不正確或為空,請檢查 Zhipu API Key 後重試",
|
|
61
|
+
"InvalidProviderAPIKey": "{{provider}} API 金鑰不正確或為空,請檢查 {{provider}} API 金鑰後重試",
|
|
80
62
|
"LocationNotSupportError": "很抱歉,你的所在位置不支持此模型服務,可能是由於地區限制或服務未開通。請確認當前位置是否支持使用此服務,或嘗試使用其他位置信息。",
|
|
81
|
-
"MinimaxBizError": "請求 Minimax 服務出錯,請根據以下資訊排查或重試",
|
|
82
|
-
"MistralBizError": "請求 Mistral AI 服務出錯,請根據以下信息排查或重試",
|
|
83
|
-
"MoonshotBizError": "請求月球背面服務出錯,請根據以下信息排查或重試",
|
|
84
63
|
"NoOpenAIAPIKey": "OpenAI API 金鑰為空,請添加自訂 OpenAI API 金鑰",
|
|
85
64
|
"OllamaBizError": "請求 Ollama 服務出錯,請根據以下資訊排查或重試",
|
|
86
65
|
"OllamaServiceUnavailable": "Ollama 服務暫時無法使用,請檢查 Ollama 是否運作正常,或是否正確設定 Ollama 的跨域配置",
|
|
87
|
-
"OpenAIBizError": "請求 OpenAI 服務出錯。請根據以下資訊進行排查或重試。",
|
|
88
|
-
"OpenRouterBizError": "請求 OpenRouter AI 服務出錯,請根據以下信息排查或重試",
|
|
89
|
-
"PerplexityBizError": "請求 Perplexity AI 服務出錯,請根據以下信息排查或重試",
|
|
90
66
|
"PluginApiNotFound": "抱歉,外掛描述檔案中不存在該 API。請檢查您的請求方法與外掛清單 API 是否相符",
|
|
91
67
|
"PluginApiParamsError": "抱歉,該外掛請求的輸入參數驗證失敗。請檢查輸入參數與 API 描述資訊是否相符",
|
|
92
68
|
"PluginGatewayError": "很抱歉,插件網關出現錯誤,請檢查插件網關配置是否正確",
|
|
@@ -99,9 +75,7 @@
|
|
|
99
75
|
"PluginOpenApiInitError": "很抱歉,OpenAPI 客戶端初始化失敗,請檢查 OpenAPI 的配置信息是否正確",
|
|
100
76
|
"PluginServerError": "外掛伺服器請求回傳錯誤。請根據下面的錯誤資訊檢查您的外掛描述檔案、外掛設定或伺服器實作",
|
|
101
77
|
"PluginSettingsInvalid": "該外掛需要正確設定後才可以使用。請檢查您的設定是否正確",
|
|
102
|
-
"
|
|
103
|
-
"ZeroOneBizError": "請求零一萬物服務出錯,請根據以下信息排查或重試",
|
|
104
|
-
"ZhipuBizError": "請求智譜服務出錯,請根據以下信息排查或重試"
|
|
78
|
+
"ProviderBizAPIKey": "請求 {{provider}} 服務出錯,請根據以下資訊排查或重試"
|
|
105
79
|
},
|
|
106
80
|
"stt": {
|
|
107
81
|
"responseError": "服務請求失敗,請檢查配置或重試"
|
|
@@ -111,6 +85,10 @@
|
|
|
111
85
|
},
|
|
112
86
|
"unlock": {
|
|
113
87
|
"addProxyUrl": "新增 OpenAI 代理網址(選填)",
|
|
88
|
+
"apiKey": {
|
|
89
|
+
"description": "輸入您的 {{name}} API 金鑰即可開始會話",
|
|
90
|
+
"title": "使用自定義 {{name}} API 金鑰"
|
|
91
|
+
},
|
|
114
92
|
"closeMessage": "關閉提示",
|
|
115
93
|
"confirm": "確認並重試",
|
|
116
94
|
"oauth": {
|
|
@@ -119,14 +97,6 @@
|
|
|
119
97
|
"title": "登錄帳號",
|
|
120
98
|
"welcome": "歡迎你!"
|
|
121
99
|
},
|
|
122
|
-
"ollama": {
|
|
123
|
-
"cancel": "取消下載",
|
|
124
|
-
"confirm": "下載",
|
|
125
|
-
"description": "輸入您的 Ollama 模型標籤,完成後即可繼續會話",
|
|
126
|
-
"downloaded": "{{completed}} / {{total}}",
|
|
127
|
-
"starting": "開始下載...",
|
|
128
|
-
"title": "下載指定的 Ollama 模型"
|
|
129
|
-
},
|
|
130
100
|
"password": {
|
|
131
101
|
"description": "管理員已啟用應用程式加密,輸入應用程式密碼後即可解鎖應用程式。密碼只需填寫一次。",
|
|
132
102
|
"placeholder": "請輸入密碼",
|
|
@@ -141,4 +111,4 @@
|
|
|
141
111
|
"desc": "詳情: {{detail}}",
|
|
142
112
|
"title": "檔案上傳失敗,請檢查網路連線或稍後再試"
|
|
143
113
|
}
|
|
144
|
-
}
|
|
114
|
+
}
|
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"anthropic": {
|
|
3
|
-
"title": "Anthropic",
|
|
4
|
-
"token": {
|
|
5
|
-
"desc": "填入來自 Anthropic 的 API 金鑰",
|
|
6
|
-
"placeholder": "Anthropic API 金鑰",
|
|
7
|
-
"title": "API 金鑰"
|
|
8
|
-
},
|
|
9
|
-
"unlock": {
|
|
10
|
-
"description": "輸入你的 Anthropic API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
11
|
-
"title": "使用自定義 Anthropic API 金鑰"
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
2
|
"azure": {
|
|
15
3
|
"azureApiVersion": {
|
|
16
4
|
"desc": "Azure 的 API 版本,遵循 YYYY-MM-DD 格式,查閱[最新版本](https://learn.microsoft.com/zh-cn/azure/ai-services/openai/reference#chat-completions)",
|
|
@@ -29,10 +17,6 @@
|
|
|
29
17
|
"desc": "從 Azure 門戶檢查資源時,可在“金鑰和終點”部分中找到此值。 可以使用 KEY1 或 KEY2",
|
|
30
18
|
"placeholder": "Azure API 金鑰",
|
|
31
19
|
"title": "API 金鑰"
|
|
32
|
-
},
|
|
33
|
-
"unlock": {
|
|
34
|
-
"description": "輸入你的 Azure OpenAI API 金鑰即可開始會話",
|
|
35
|
-
"title": "使用自定義 Azure OpenAI API 金鑰"
|
|
36
20
|
}
|
|
37
21
|
},
|
|
38
22
|
"bedrock": {
|
|
@@ -61,78 +45,6 @@
|
|
|
61
45
|
"title": "使用自定義 Bedrock 驗證資訊"
|
|
62
46
|
}
|
|
63
47
|
},
|
|
64
|
-
"deepseek": {
|
|
65
|
-
"title": "DeepSeek",
|
|
66
|
-
"token": {
|
|
67
|
-
"desc": "填入來自 DeepSeek 的 API 金鑰",
|
|
68
|
-
"placeholder": "DeepSeek API 金鑰",
|
|
69
|
-
"title": "API 金鑰"
|
|
70
|
-
},
|
|
71
|
-
"unlock": {
|
|
72
|
-
"description": "輸入你的 DeepSeek API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
73
|
-
"title": "使用自訂 DeepSeek API 金鑰"
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
"google": {
|
|
77
|
-
"title": "Google",
|
|
78
|
-
"token": {
|
|
79
|
-
"desc": "填入來自 Google 的 API 金鑰",
|
|
80
|
-
"placeholder": "Google API 金鑰",
|
|
81
|
-
"title": "API 金鑰"
|
|
82
|
-
},
|
|
83
|
-
"unlock": {
|
|
84
|
-
"description": "輸入你的 Google API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
85
|
-
"title": "使用自定義 Google API 金鑰"
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
"groq": {
|
|
89
|
-
"title": "Groq",
|
|
90
|
-
"token": {
|
|
91
|
-
"desc": "填入來自 Groq 的 API 金鑰",
|
|
92
|
-
"placeholder": "Groq API 金鑰",
|
|
93
|
-
"title": "API 金鑰"
|
|
94
|
-
},
|
|
95
|
-
"unlock": {
|
|
96
|
-
"description": "輸入你的 Groq API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
97
|
-
"title": "使用自定義 Groq API 金鑰"
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
"minimax": {
|
|
101
|
-
"title": "Minimax",
|
|
102
|
-
"token": {
|
|
103
|
-
"desc": "請填入來自 Minimax 的 API 金鑰",
|
|
104
|
-
"placeholder": "Minimax API 金鑰",
|
|
105
|
-
"title": "API 金鑰"
|
|
106
|
-
},
|
|
107
|
-
"unlock": {
|
|
108
|
-
"description": "輸入您的 Minimax API 金鑰即可開始會話。應用程式不會記錄您的 API 金鑰",
|
|
109
|
-
"title": "使用自訂 Minimax API 金鑰"
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
"mistral": {
|
|
113
|
-
"title": "Mistral AI",
|
|
114
|
-
"token": {
|
|
115
|
-
"desc": "填入來自 Mistral AI 的 API 金鑰",
|
|
116
|
-
"placeholder": "Mistral AI API 金鑰",
|
|
117
|
-
"title": "API 金鑰"
|
|
118
|
-
},
|
|
119
|
-
"unlock": {
|
|
120
|
-
"description": "輸入你的 Mistral AI API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
121
|
-
"title": "使用自定義 Mistral AI API 金鑰"
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
"moonshot": {
|
|
125
|
-
"title": "Moonshot AI",
|
|
126
|
-
"token": {
|
|
127
|
-
"desc": "填入來自 Moonshot AI 的 API 金鑰",
|
|
128
|
-
"placeholder": "Moonshot AI API 金鑰",
|
|
129
|
-
"title": "API 金鑰"
|
|
130
|
-
},
|
|
131
|
-
"unlock": {
|
|
132
|
-
"description": "輸入你的 Moonshot AI API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
133
|
-
"title": "使用自定義 Moonshot AI API 金鑰"
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
48
|
"ollama": {
|
|
137
49
|
"checker": {
|
|
138
50
|
"desc": "測試代理地址是否正確填寫",
|
|
@@ -143,6 +55,12 @@
|
|
|
143
55
|
"placeholder": "vicuna,llava,codellama,llama2:13b-text",
|
|
144
56
|
"title": "自定義模型名稱"
|
|
145
57
|
},
|
|
58
|
+
"download": {
|
|
59
|
+
"desc": "Ollama 正在下載該模型,請儘量不要關閉本頁面。重新下載時將會中斷處繼續",
|
|
60
|
+
"remainingTime": "剩餘時間",
|
|
61
|
+
"speed": "下載速度",
|
|
62
|
+
"title": "正在下載模型 {{model}}"
|
|
63
|
+
},
|
|
146
64
|
"endpoint": {
|
|
147
65
|
"desc": "填入 Ollama 接口代理地址,本地未額外指定可留空",
|
|
148
66
|
"title": "接口代理地址"
|
|
@@ -171,94 +89,20 @@
|
|
|
171
89
|
"windowsTab": "Windows (預覽版)"
|
|
172
90
|
}
|
|
173
91
|
},
|
|
174
|
-
"title": "Ollama"
|
|
175
|
-
},
|
|
176
|
-
"openai": {
|
|
177
|
-
"title": "OpenAI",
|
|
178
|
-
"token": {
|
|
179
|
-
"desc": "使用自己的 OpenAI 金鑰",
|
|
180
|
-
"placeholder": "OpenAI API 金鑰",
|
|
181
|
-
"title": "OpenAI API 金鑰"
|
|
182
|
-
},
|
|
183
|
-
"unlock": {
|
|
184
|
-
"description": "輸入你的 OpenAI API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
185
|
-
"title": "使用自定義 OpenAI API 金鑰"
|
|
186
|
-
}
|
|
187
|
-
},
|
|
188
|
-
"openrouter": {
|
|
189
|
-
"checker": {
|
|
190
|
-
"desc": "測試代理地址是否正確填寫"
|
|
191
|
-
},
|
|
192
|
-
"customModelName": {
|
|
193
|
-
"desc": "增加自定義模型,多個模型使用逗號(,)隔開",
|
|
194
|
-
"placeholder": "mistralai/mistral-7b-instruct:free,openchat/openchat-7b:free",
|
|
195
|
-
"title": "自定義模型名稱"
|
|
196
|
-
},
|
|
197
|
-
"title": "OpenRouter",
|
|
198
|
-
"token": {
|
|
199
|
-
"desc": "填入來自 OpenRouter AI 的 API 金鑰",
|
|
200
|
-
"placeholder": "OpenRouter AI API 金鑰",
|
|
201
|
-
"title": "API 金鑰"
|
|
202
|
-
},
|
|
203
|
-
"unlock": {
|
|
204
|
-
"description": "輸入你的 OpenRouter API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
205
|
-
"title": "使用自定義 OpenRouter API 金鑰"
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
"perplexity": {
|
|
209
|
-
"title": "Perplexity",
|
|
210
|
-
"token": {
|
|
211
|
-
"desc": "填入來自 Perplexity AI 的 API 金鑰",
|
|
212
|
-
"placeholder": "Perplexity AI API 金鑰",
|
|
213
|
-
"title": "API 金鑰"
|
|
214
|
-
},
|
|
92
|
+
"title": "Ollama",
|
|
215
93
|
"unlock": {
|
|
216
|
-
"
|
|
217
|
-
"
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
"desc": "測試代理地址是否正確填寫"
|
|
223
|
-
},
|
|
224
|
-
"customModelName": {
|
|
225
|
-
"desc": "增加自定義模型,多個模型使用逗號(,)隔開",
|
|
226
|
-
"placeholder": "togethercomputer/Llama-2-7B-32K-Instruct,teknium/OpenHermes-2-Mistral-7B",
|
|
227
|
-
"title": "自定義模型名稱"
|
|
228
|
-
},
|
|
229
|
-
"title": "TogetherAI",
|
|
230
|
-
"token": {
|
|
231
|
-
"desc": "填入來自 TogetherAI AI 的 API 金鑰",
|
|
232
|
-
"placeholder": "TogetherAI AI API 金鑰",
|
|
233
|
-
"title": "API 金鑰"
|
|
234
|
-
},
|
|
235
|
-
"unlock": {
|
|
236
|
-
"description": "輸入你的 TogetherAI API 金鑰即可開始會話。應用程式不會記錄你的 API 金鑰",
|
|
237
|
-
"title": "使用自定義 TogetherAI API 金鑰"
|
|
94
|
+
"cancel": "取消下載",
|
|
95
|
+
"confirm": "下載",
|
|
96
|
+
"description": "輸入你的 Ollama 模型標籤,完成即可繼續會話",
|
|
97
|
+
"downloaded": "{{completed}} / {{total}}",
|
|
98
|
+
"starting": "開始下載...",
|
|
99
|
+
"title": "下載指定的 Ollama 模型"
|
|
238
100
|
}
|
|
239
101
|
},
|
|
240
102
|
"zeroone": {
|
|
241
|
-
"title": "01.AI 零一萬物"
|
|
242
|
-
"token": {
|
|
243
|
-
"desc": "填入來自 01.AI 零一萬物的 API 金鑰",
|
|
244
|
-
"placeholder": "01.AI 零一萬物 API 金鑰",
|
|
245
|
-
"title": "API 金鑰"
|
|
246
|
-
},
|
|
247
|
-
"unlock": {
|
|
248
|
-
"description": "輸入你的零一萬物 API 金鑰即可開始會話。應用不會記錄你的 API 金鑰",
|
|
249
|
-
"title": "使用自定義零一萬物 API 金鑰"
|
|
250
|
-
}
|
|
103
|
+
"title": "01.AI 零一萬物"
|
|
251
104
|
},
|
|
252
105
|
"zhipu": {
|
|
253
|
-
"title": "智譜"
|
|
254
|
-
"token": {
|
|
255
|
-
"desc": "填入來自智譜的 API 金鑰",
|
|
256
|
-
"placeholder": "Zhipu API 金鑰",
|
|
257
|
-
"title": "API 金鑰"
|
|
258
|
-
},
|
|
259
|
-
"unlock": {
|
|
260
|
-
"description": "輸入你的 Zhipu API 金鑰即可開始會話。應用不會記錄你的 API 金鑰",
|
|
261
|
-
"title": "使用自定義 Zhipu API 金鑰"
|
|
262
|
-
}
|
|
106
|
+
"title": "智譜"
|
|
263
107
|
}
|
|
264
108
|
}
|
|
@@ -43,6 +43,11 @@
|
|
|
43
43
|
"title": "設定"
|
|
44
44
|
},
|
|
45
45
|
"llm": {
|
|
46
|
+
"apiKey": {
|
|
47
|
+
"desc": "請填寫您的 {{name}} API 金鑰",
|
|
48
|
+
"placeholder": "{{name}} API 金鑰",
|
|
49
|
+
"title": "API 金鑰"
|
|
50
|
+
},
|
|
46
51
|
"checker": {
|
|
47
52
|
"button": "檢查",
|
|
48
53
|
"desc": "測試 API 金鑰與代理地址是否正確填寫",
|
|
@@ -109,14 +114,6 @@
|
|
|
109
114
|
},
|
|
110
115
|
"waitingForMore": "更多模型正在 <1>計劃接入</1> 中,敬請期待 ✨"
|
|
111
116
|
},
|
|
112
|
-
"ollama": {
|
|
113
|
-
"download": {
|
|
114
|
-
"desc": "Ollama 正在下載該模型,請儘量不要關閉本頁面。重新下載時將會中斷處繼續",
|
|
115
|
-
"remainingTime": "剩餘時間",
|
|
116
|
-
"speed": "下載速度",
|
|
117
|
-
"title": "正在下載模型 {{model}}"
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
117
|
"plugin": {
|
|
121
118
|
"addTooltip": "新增自訂外掛程式",
|
|
122
119
|
"clearDeprecated": "清除已棄用的外掛",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/chat",
|
|
3
|
-
"version": "0.162.
|
|
3
|
+
"version": "0.162.18",
|
|
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",
|
|
@@ -209,7 +209,6 @@
|
|
|
209
209
|
"@types/uuid": "^9.0.8",
|
|
210
210
|
"@umijs/lint": "^4.2.5",
|
|
211
211
|
"@vitest/coverage-v8": "~1.2.2",
|
|
212
|
-
"ajv": "8.14.0",
|
|
213
212
|
"ajv-keywords": "^5.1.0",
|
|
214
213
|
"commitlint": "^19.3.0",
|
|
215
214
|
"consola": "^3.2.3",
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Azure, OpenAI } from '@lobehub/icons';
|
|
4
|
+
import { Markdown } from '@lobehub/ui';
|
|
5
|
+
import { AutoComplete, Divider, Input } from 'antd';
|
|
6
|
+
import { createStyles } from 'antd-style';
|
|
7
|
+
import { useTranslation } from 'react-i18next';
|
|
8
|
+
import { Flexbox } from 'react-layout-kit';
|
|
9
|
+
|
|
10
|
+
import { AzureProviderCard } from '@/config/modelProviders';
|
|
11
|
+
import { ModelProvider } from '@/libs/agent-runtime';
|
|
12
|
+
import { useUserStore } from '@/store/user';
|
|
13
|
+
import { modelProviderSelectors } from '@/store/user/selectors';
|
|
14
|
+
|
|
15
|
+
import { KeyVaultsConfigKey, LLMProviderApiTokenKey } from '../../const';
|
|
16
|
+
import { ProviderItem } from '../../type';
|
|
17
|
+
|
|
18
|
+
const useStyles = createStyles(({ css, token }) => ({
|
|
19
|
+
markdown: css`
|
|
20
|
+
p {
|
|
21
|
+
color: ${token.colorTextDescription} !important;
|
|
22
|
+
}
|
|
23
|
+
`,
|
|
24
|
+
tip: css`
|
|
25
|
+
font-size: 12px;
|
|
26
|
+
color: ${token.colorTextDescription};
|
|
27
|
+
`,
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
const providerKey = ModelProvider.Azure;
|
|
31
|
+
|
|
32
|
+
const AzureOpenAIBrand = () => {
|
|
33
|
+
return (
|
|
34
|
+
<Flexbox align={'center'} gap={8} horizontal>
|
|
35
|
+
<Azure.Combine size={22} type={'color'}></Azure.Combine>
|
|
36
|
+
<Divider style={{ margin: '0 4px' }} type={'vertical'} />
|
|
37
|
+
<OpenAI.Combine size={24}></OpenAI.Combine>
|
|
38
|
+
</Flexbox>
|
|
39
|
+
);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const useAzureProvider = (): ProviderItem => {
|
|
43
|
+
const { t } = useTranslation('modelProvider');
|
|
44
|
+
const { styles } = useStyles();
|
|
45
|
+
|
|
46
|
+
// Get the first model card's deployment name as the check model
|
|
47
|
+
const checkModel = useUserStore((s) => {
|
|
48
|
+
const chatModelCards = modelProviderSelectors.getModelCardsById(providerKey)(s);
|
|
49
|
+
|
|
50
|
+
if (chatModelCards.length > 0) {
|
|
51
|
+
return chatModelCards[0].deploymentName;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return 'gpt-35-turbo';
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
...AzureProviderCard,
|
|
58
|
+
apiKeyItems: [
|
|
59
|
+
{
|
|
60
|
+
children: (
|
|
61
|
+
<Input.Password
|
|
62
|
+
autoComplete={'new-password'}
|
|
63
|
+
placeholder={t('azure.token.placeholder')}
|
|
64
|
+
/>
|
|
65
|
+
),
|
|
66
|
+
desc: t('azure.token.desc'),
|
|
67
|
+
label: t('azure.token.title'),
|
|
68
|
+
name: [KeyVaultsConfigKey, providerKey, LLMProviderApiTokenKey],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
children: <Input allowClear placeholder={t('azure.endpoint.placeholder')} />,
|
|
72
|
+
desc: t('azure.endpoint.desc'),
|
|
73
|
+
label: t('azure.endpoint.title'),
|
|
74
|
+
name: [KeyVaultsConfigKey, providerKey, 'endpoint'],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
children: (
|
|
78
|
+
<AutoComplete
|
|
79
|
+
options={[
|
|
80
|
+
'2024-02-01',
|
|
81
|
+
'2024-03-01-preview',
|
|
82
|
+
'2024-02-15-preview',
|
|
83
|
+
'2023-10-01-preview',
|
|
84
|
+
'2023-06-01-preview',
|
|
85
|
+
'2023-05-15',
|
|
86
|
+
].map((i) => ({ label: i, value: i }))}
|
|
87
|
+
placeholder={'20XX-XX-XX'}
|
|
88
|
+
/>
|
|
89
|
+
),
|
|
90
|
+
desc: (
|
|
91
|
+
<Markdown className={styles.markdown} fontSize={12} variant={'chat'}>
|
|
92
|
+
{t('azure.azureApiVersion.desc')}
|
|
93
|
+
</Markdown>
|
|
94
|
+
),
|
|
95
|
+
label: t('azure.azureApiVersion.title'),
|
|
96
|
+
name: [KeyVaultsConfigKey, providerKey, 'apiVersion'],
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
checkModel,
|
|
100
|
+
modelList: {
|
|
101
|
+
azureDeployName: true,
|
|
102
|
+
notFoundContent: t('azure.empty'),
|
|
103
|
+
placeholder: t('azure.modelListPlaceholder'),
|
|
104
|
+
},
|
|
105
|
+
title: <AzureOpenAIBrand />,
|
|
106
|
+
};
|
|
107
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Aws, Bedrock } from '@lobehub/icons';
|
|
4
|
+
import { Divider, Input, Select } from 'antd';
|
|
5
|
+
import { useTranslation } from 'react-i18next';
|
|
6
|
+
import { Flexbox } from 'react-layout-kit';
|
|
7
|
+
|
|
8
|
+
import { BedrockProviderCard } from '@/config/modelProviders';
|
|
9
|
+
import { GlobalLLMProviderKey } from '@/types/user/settings';
|
|
10
|
+
|
|
11
|
+
import { KeyVaultsConfigKey } from '../../const';
|
|
12
|
+
import { ProviderItem } from '../../type';
|
|
13
|
+
|
|
14
|
+
const providerKey: GlobalLLMProviderKey = 'bedrock';
|
|
15
|
+
|
|
16
|
+
export const useBedrockProvider = (): ProviderItem => {
|
|
17
|
+
const { t } = useTranslation('modelProvider');
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
...BedrockProviderCard,
|
|
21
|
+
apiKeyItems: [
|
|
22
|
+
{
|
|
23
|
+
children: (
|
|
24
|
+
<Input.Password
|
|
25
|
+
autoComplete={'new-password'}
|
|
26
|
+
placeholder={t(`${providerKey}.accessKeyId.placeholder`)}
|
|
27
|
+
/>
|
|
28
|
+
),
|
|
29
|
+
desc: t(`${providerKey}.accessKeyId.desc`),
|
|
30
|
+
label: t(`${providerKey}.accessKeyId.title`),
|
|
31
|
+
name: [KeyVaultsConfigKey, providerKey, 'accessKeyId'],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
children: (
|
|
35
|
+
<Input.Password
|
|
36
|
+
autoComplete={'new-password'}
|
|
37
|
+
placeholder={t(`${providerKey}.secretAccessKey.placeholder`)}
|
|
38
|
+
/>
|
|
39
|
+
),
|
|
40
|
+
desc: t(`${providerKey}.secretAccessKey.desc`),
|
|
41
|
+
label: t(`${providerKey}.secretAccessKey.title`),
|
|
42
|
+
name: [KeyVaultsConfigKey, providerKey, 'secretAccessKey'],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
children: (
|
|
46
|
+
<Select
|
|
47
|
+
allowClear
|
|
48
|
+
options={['us-east-1', 'us-west-2', 'ap-southeast-1'].map((i) => ({
|
|
49
|
+
label: i,
|
|
50
|
+
value: i,
|
|
51
|
+
}))}
|
|
52
|
+
placeholder={'us-east-1'}
|
|
53
|
+
/>
|
|
54
|
+
),
|
|
55
|
+
desc: t(`${providerKey}.region.desc`),
|
|
56
|
+
label: t(`${providerKey}.region.title`),
|
|
57
|
+
name: [KeyVaultsConfigKey, providerKey, 'region'],
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
title: (
|
|
61
|
+
<Flexbox align={'center'} gap={8} horizontal>
|
|
62
|
+
<Aws.Color size={32} />
|
|
63
|
+
<Divider style={{ margin: '0 4px' }} type={'vertical'} />
|
|
64
|
+
<Bedrock.Combine size={26} type={'color'} />
|
|
65
|
+
</Flexbox>
|
|
66
|
+
),
|
|
67
|
+
};
|
|
68
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Ollama } from '@lobehub/icons';
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
|
|
6
|
+
import { OllamaProviderCard } from '@/config/modelProviders';
|
|
7
|
+
|
|
8
|
+
import { ProviderItem } from '../../type';
|
|
9
|
+
import Checker from './Checker';
|
|
10
|
+
|
|
11
|
+
export const useOllamaProvider = (): ProviderItem => {
|
|
12
|
+
const { t } = useTranslation('modelProvider');
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
...OllamaProviderCard,
|
|
16
|
+
checkerItem: {
|
|
17
|
+
children: <Checker />,
|
|
18
|
+
desc: t('ollama.checker.desc'),
|
|
19
|
+
label: t('ollama.checker.title'),
|
|
20
|
+
minWidth: undefined,
|
|
21
|
+
},
|
|
22
|
+
proxyUrl: {
|
|
23
|
+
desc: t('ollama.endpoint.desc'),
|
|
24
|
+
placeholder: 'http://127.0.0.1:11434',
|
|
25
|
+
title: t('ollama.endpoint.title'),
|
|
26
|
+
},
|
|
27
|
+
title: <Ollama.Combine size={28} />,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { OpenAI } from '@lobehub/icons';
|
|
4
|
+
|
|
5
|
+
import { OpenAIProviderCard } from '@/config/modelProviders';
|
|
6
|
+
import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
|
|
7
|
+
|
|
8
|
+
import { ProviderItem } from '../../type';
|
|
9
|
+
|
|
10
|
+
export const useOpenAIProvider = (): ProviderItem => {
|
|
11
|
+
const { showOpenAIProxyUrl, showOpenAIApiKey } = useServerConfigStore(featureFlagsSelectors);
|
|
12
|
+
return {
|
|
13
|
+
...OpenAIProviderCard,
|
|
14
|
+
proxyUrl: showOpenAIProxyUrl && {
|
|
15
|
+
placeholder: 'https://api.openai.com/v1',
|
|
16
|
+
},
|
|
17
|
+
showApiKey: showOpenAIApiKey,
|
|
18
|
+
title: <OpenAI.Combine size={24} />,
|
|
19
|
+
};
|
|
20
|
+
};
|