@lobehub/chat 1.75.4 → 1.76.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.
- package/CHANGELOG.md +52 -0
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/changelog/v1.json +18 -0
- package/docs/developer/database-schema.dbml +1 -0
- package/docs/self-hosting/advanced/model-list.mdx +5 -3
- package/docs/self-hosting/advanced/model-list.zh-CN.mdx +5 -3
- package/docs/usage/providers/infiniai.zh-CN.mdx +4 -0
- package/locales/ar/hotkey.json +46 -0
- package/locales/ar/models.json +51 -54
- package/locales/ar/providers.json +3 -0
- package/locales/ar/setting.json +12 -0
- package/locales/bg-BG/hotkey.json +46 -0
- package/locales/bg-BG/models.json +51 -54
- package/locales/bg-BG/providers.json +3 -0
- package/locales/bg-BG/setting.json +12 -0
- package/locales/de-DE/hotkey.json +46 -0
- package/locales/de-DE/models.json +51 -54
- package/locales/de-DE/providers.json +3 -0
- package/locales/de-DE/setting.json +12 -0
- package/locales/en-US/hotkey.json +46 -0
- package/locales/en-US/models.json +51 -54
- package/locales/en-US/providers.json +3 -0
- package/locales/en-US/setting.json +12 -0
- package/locales/es-ES/hotkey.json +46 -0
- package/locales/es-ES/models.json +51 -54
- package/locales/es-ES/providers.json +3 -0
- package/locales/es-ES/setting.json +12 -0
- package/locales/fa-IR/hotkey.json +46 -0
- package/locales/fa-IR/models.json +51 -54
- package/locales/fa-IR/providers.json +3 -0
- package/locales/fa-IR/setting.json +12 -0
- package/locales/fr-FR/hotkey.json +46 -0
- package/locales/fr-FR/models.json +51 -54
- package/locales/fr-FR/providers.json +3 -0
- package/locales/fr-FR/setting.json +12 -0
- package/locales/it-IT/hotkey.json +46 -0
- package/locales/it-IT/models.json +51 -54
- package/locales/it-IT/providers.json +3 -0
- package/locales/it-IT/setting.json +12 -0
- package/locales/ja-JP/hotkey.json +46 -0
- package/locales/ja-JP/models.json +51 -54
- package/locales/ja-JP/providers.json +3 -0
- package/locales/ja-JP/setting.json +12 -0
- package/locales/ko-KR/hotkey.json +46 -0
- package/locales/ko-KR/models.json +51 -54
- package/locales/ko-KR/providers.json +3 -0
- package/locales/ko-KR/setting.json +12 -0
- package/locales/nl-NL/hotkey.json +46 -0
- package/locales/nl-NL/models.json +51 -54
- package/locales/nl-NL/providers.json +3 -0
- package/locales/nl-NL/setting.json +12 -0
- package/locales/pl-PL/hotkey.json +46 -0
- package/locales/pl-PL/models.json +51 -54
- package/locales/pl-PL/providers.json +3 -0
- package/locales/pl-PL/setting.json +12 -0
- package/locales/pt-BR/hotkey.json +46 -0
- package/locales/pt-BR/models.json +51 -54
- package/locales/pt-BR/providers.json +3 -0
- package/locales/pt-BR/setting.json +12 -0
- package/locales/ru-RU/hotkey.json +46 -0
- package/locales/ru-RU/models.json +51 -54
- package/locales/ru-RU/providers.json +3 -0
- package/locales/ru-RU/setting.json +12 -0
- package/locales/tr-TR/hotkey.json +46 -0
- package/locales/tr-TR/models.json +51 -54
- package/locales/tr-TR/providers.json +3 -0
- package/locales/tr-TR/setting.json +12 -0
- package/locales/vi-VN/hotkey.json +46 -0
- package/locales/vi-VN/models.json +51 -54
- package/locales/vi-VN/providers.json +3 -0
- package/locales/vi-VN/setting.json +12 -0
- package/locales/zh-CN/hotkey.json +46 -0
- package/locales/zh-CN/models.json +55 -58
- package/locales/zh-CN/providers.json +3 -0
- package/locales/zh-CN/setting.json +12 -0
- package/locales/zh-TW/hotkey.json +46 -0
- package/locales/zh-TW/models.json +51 -54
- package/locales/zh-TW/providers.json +3 -0
- package/locales/zh-TW/setting.json +12 -0
- package/package.json +3 -3
- package/src/app/[variants]/(main)/(mobile)/me/(home)/features/Category.tsx +1 -1
- package/src/app/[variants]/(main)/(mobile)/me/(home)/layout.tsx +3 -2
- package/src/app/[variants]/(main)/(mobile)/me/data/features/Category.tsx +1 -1
- package/src/app/[variants]/(main)/(mobile)/me/profile/features/Category.tsx +1 -1
- package/src/app/[variants]/(main)/(mobile)/me/settings/features/Category.tsx +1 -1
- package/src/app/[variants]/(main)/_layout/Desktop/RegisterHotkeys.tsx +11 -0
- package/src/app/[variants]/(main)/_layout/Desktop/SideBar/PinList/index.tsx +6 -23
- package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.test.tsx +2 -0
- package/src/app/[variants]/(main)/_layout/Desktop/index.tsx +11 -4
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/Desktop/Footer/SendMore.tsx +6 -21
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/Desktop/Footer/ShortcutHint.tsx +13 -34
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/Desktop/Footer/index.tsx +1 -1
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ZenModeToast/Toast.tsx +7 -4
- package/src/app/[variants]/(main)/chat/(workspace)/_layout/Desktop/ChatHeader/HeaderAction.tsx +12 -8
- package/src/app/[variants]/(main)/chat/(workspace)/_layout/Desktop/ChatHeader/Main.tsx +24 -30
- package/src/app/[variants]/(main)/chat/(workspace)/_layout/Desktop/index.tsx +0 -2
- package/src/app/[variants]/(main)/chat/(workspace)/features/SettingButton.tsx +12 -7
- package/src/app/[variants]/(main)/chat/@session/features/SessionSearchBar.tsx +5 -1
- package/src/app/[variants]/(main)/chat/_layout/Desktop/RegisterHotkeys.tsx +10 -0
- package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +5 -0
- package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +1 -1
- package/src/app/[variants]/(main)/discover/features/StoreSearchBar.tsx +5 -1
- package/src/app/[variants]/(main)/settings/hooks/useCategory.tsx +31 -21
- package/src/app/[variants]/(main)/settings/hotkey/features/HotkeySetting.tsx +80 -0
- package/src/app/[variants]/(main)/settings/hotkey/index.tsx +9 -0
- package/src/app/[variants]/(main)/settings/hotkey/page.tsx +15 -0
- package/src/app/[variants]/layout.tsx +16 -13
- package/src/config/aiModels/infiniai.ts +52 -55
- package/src/config/aiModels/siliconcloud.ts +17 -1
- package/src/config/aiModels/tencentcloud.ts +17 -0
- package/src/const/hotkeys.ts +80 -10
- package/src/const/settings/hotkey.ts +10 -0
- package/src/const/settings/index.ts +3 -0
- package/src/database/client/migrations.json +46 -32
- package/src/database/migrations/0019_add_hotkey_user_settings.sql +2 -0
- package/src/database/migrations/meta/0019_snapshot.json +4218 -0
- package/src/database/migrations/meta/_journal.json +7 -0
- package/src/database/schemas/user.ts +1 -0
- package/src/database/server/models/user.ts +2 -0
- package/src/features/ChatInput/Desktop/InputArea/index.tsx +8 -0
- package/src/features/ChatInput/Desktop/index.tsx +0 -1
- package/src/features/ChatInput/Topic/index.tsx +10 -15
- package/src/features/FileManager/Header/FilesSearchBar.tsx +6 -2
- package/src/features/HotkeyHelperPanel/HotkeyContent.tsx +62 -0
- package/src/features/HotkeyHelperPanel/index.tsx +59 -0
- package/src/hooks/useHotkeys/chatScope.ts +105 -0
- package/src/hooks/useHotkeys/globalScope.ts +69 -0
- package/src/hooks/useHotkeys/index.ts +2 -0
- package/src/hooks/useHotkeys/useHotkeyById.test.ts +194 -0
- package/src/hooks/useHotkeys/useHotkeyById.ts +57 -0
- package/src/libs/agent-runtime/infiniai/index.ts +38 -3
- package/src/locales/default/hotkey.ts +50 -0
- package/src/locales/default/index.ts +2 -0
- package/src/locales/default/setting.ts +12 -0
- package/src/store/global/initialState.ts +3 -0
- package/src/store/user/slices/settings/selectors/__snapshots__/settings.test.ts.snap +79 -0
- package/src/store/user/slices/settings/selectors/settings.test.ts +131 -0
- package/src/store/user/slices/settings/selectors/settings.ts +6 -0
- package/src/types/hotkey.ts +59 -0
- package/src/types/user/settings/hotkey.ts +3 -0
- package/src/types/user/settings/index.ts +3 -0
- package/src/utils/format.ts +1 -1
- package/src/utils/parseModels.test.ts +14 -0
- package/src/utils/parseModels.ts +4 -0
- package/src/app/[variants]/(main)/chat/(workspace)/_layout/Desktop/HotKeys.tsx +0 -44
- package/src/components/HotKeys/index.tsx +0 -77
@@ -1,13 +1,4 @@
|
|
1
1
|
{
|
2
|
-
"01-ai/Yi-1.5-34B-Chat-16K": {
|
3
|
-
"description": "Yi-1.5 34B,以豐富的訓練樣本在行業應用中提供優越表現。"
|
4
|
-
},
|
5
|
-
"01-ai/Yi-1.5-6B-Chat": {
|
6
|
-
"description": "Yi-1.5-6B-Chat 是 Yi-1.5 系列的一個變體,屬於開源聊天模型。Yi-1.5 是 Yi 的升級版本,在 500B 個高質量語料上進行了持續預訓練,並在 3M 多樣化的微調樣本上進行了微調。相比於 Yi,Yi-1.5 在編碼、數學、推理和指令遵循能力方面表現更強,同時保持了出色的語言理解、常識推理和閱讀理解能力。該模型具有 4K、16K 和 32K 的上下文長度版本,預訓練總量達到 3.6T 個 token"
|
7
|
-
},
|
8
|
-
"01-ai/Yi-1.5-9B-Chat-16K": {
|
9
|
-
"description": "Yi-1.5 9B 支持16K Tokens,提供高效、流暢的語言生成能力。"
|
10
|
-
},
|
11
2
|
"01-ai/yi-1.5-34b-chat": {
|
12
3
|
"description": "零一萬物,最新開源微調模型,340億參數,微調支持多種對話場景,高質量訓練數據,對齊人類偏好。"
|
13
4
|
},
|
@@ -149,12 +140,6 @@
|
|
149
140
|
"Llama-3.2-90B-Vision-Instruct\t": {
|
150
141
|
"description": "適用於視覺理解代理應用的高級圖像推理能力。"
|
151
142
|
},
|
152
|
-
"LoRA/Qwen/Qwen2.5-72B-Instruct": {
|
153
|
-
"description": "Qwen2.5-72B-Instruct 是阿里雲發布的最新大語言模型系列之一。該 72B 模型在編碼和數學等領域具有顯著改進的能力。該模型還提供了多語言支持,覆蓋超過 29 種語言,包括中文、英文等。模型在指令跟隨、理解結構化數據以及生成結構化輸出(尤其是 JSON)方面都有顯著提升"
|
154
|
-
},
|
155
|
-
"LoRA/Qwen/Qwen2.5-7B-Instruct": {
|
156
|
-
"description": "Qwen2.5-7B-Instruct 是阿里雲發布的最新大語言模型系列之一。該 7B 模型在編碼和數學等領域具有顯著改進的能力。該模型還提供了多語言支持,覆蓋超過 29 種語言,包括中文、英文等。模型在指令跟隨、理解結構化數據以及生成結構化輸出(尤其是 JSON)方面都有顯著提升"
|
157
|
-
},
|
158
143
|
"Meta-Llama-3.1-405B-Instruct": {
|
159
144
|
"description": "Llama 3.1指令調優的文本模型,針對多語言對話用例進行了優化,在許多可用的開源和封閉聊天模型中,在常見行業基準上表現優異。"
|
160
145
|
},
|
@@ -179,9 +164,6 @@
|
|
179
164
|
"NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO": {
|
180
165
|
"description": "Nous Hermes 2 - Mixtral 8x7B-DPO (46.7B) 是高精度的指令模型,適用於複雜計算。"
|
181
166
|
},
|
182
|
-
"OpenGVLab/InternVL2-26B": {
|
183
|
-
"description": "InternVL2在各種視覺語言任務上展現出了卓越的性能,包括文檔和圖表理解、場景文本理解、OCR、科學和數學問題解決等。"
|
184
|
-
},
|
185
167
|
"Phi-3-medium-128k-instruct": {
|
186
168
|
"description": "相同的Phi-3-medium模型,但具有更大的上下文大小,適用於RAG或少量提示。"
|
187
169
|
},
|
@@ -206,9 +188,6 @@
|
|
206
188
|
"Phi-3.5-vision-instrust": {
|
207
189
|
"description": "Phi-3-vision模型的更新版。"
|
208
190
|
},
|
209
|
-
"Pro/OpenGVLab/InternVL2-8B": {
|
210
|
-
"description": "InternVL2在各種視覺語言任務上展現出了卓越的性能,包括文檔和圖表理解、場景文本理解、OCR、科學和數學問題解決等。"
|
211
|
-
},
|
212
191
|
"Pro/Qwen/Qwen2-1.5B-Instruct": {
|
213
192
|
"description": "Qwen2-1.5B-Instruct 是 Qwen2 系列中的指令微調大語言模型,參數規模為 1.5B。該模型基於 Transformer 架構,採用了 SwiGLU 激活函數、注意力 QKV 偏置和組查詢注意力等技術。它在語言理解、生成、多語言能力、編碼、數學和推理等多個基準測試中表現出色,超越了大多數開源模型。與 Qwen1.5-1.8B-Chat 相比,Qwen2-1.5B-Instruct 在 MMLU、HumanEval、GSM8K、C-Eval 和 IFEval 等測試中均顯示出顯著的性能提升,儘管參數量略少"
|
214
193
|
},
|
@@ -224,20 +203,23 @@
|
|
224
203
|
"Pro/Qwen/Qwen2.5-Coder-7B-Instruct": {
|
225
204
|
"description": "Qwen2.5-Coder-7B-Instruct 是阿里雲發布的代碼特定大語言模型系列的最新版本。該模型在 Qwen2.5 的基礎上,通過 5.5 萬億個 tokens 的訓練,顯著提升了代碼生成、推理和修復能力。它不僅增強了編碼能力,還保持了數學和通用能力的優勢。模型為代碼智能體等實際應用提供了更全面的基礎"
|
226
205
|
},
|
206
|
+
"Pro/Qwen/Qwen2.5-VL-7B-Instruct": {
|
207
|
+
"description": "Qwen2.5-VL 是 Qwen 系列的新成員,具備強大的視覺理解能力,能分析圖像中的文字、圖表和版面配置,並能理解長影片和捕捉事件。它可以進行推理、操作工具,支援多格式物件定位和生成結構化輸出,優化了影片理解的動態解析度與影格率訓練,並提升了視覺編碼器效率。"
|
208
|
+
},
|
227
209
|
"Pro/THUDM/glm-4-9b-chat": {
|
228
210
|
"description": "GLM-4-9B-Chat 是智譜 AI 推出的 GLM-4 系列預訓練模型中的開源版本。該模型在語義、數學、推理、代碼和知識等多個方面表現出色。除了支持多輪對話外,GLM-4-9B-Chat 還具備網頁瀏覽、代碼執行、自定義工具調用(Function Call)和長文本推理等高級功能。模型支持 26 種語言,包括中文、英文、日文、韓文和德文等。在多項基準測試中,GLM-4-9B-Chat 展現了優秀的性能,如 AlignBench-v2、MT-Bench、MMLU 和 C-Eval 等。該模型支持最大 128K 的上下文長度,適用於學術研究和商業應用"
|
229
211
|
},
|
230
212
|
"Pro/deepseek-ai/DeepSeek-R1": {
|
231
213
|
"description": "DeepSeek-R1 是一款強化學習(RL)驅動的推理模型,解決了模型中的重複性和可讀性問題。在 RL 之前,DeepSeek-R1 引入了冷啟動數據,進一步優化了推理性能。它在數學、代碼和推理任務中與 OpenAI-o1 表現相當,並且透過精心設計的訓練方法,提升了整體效果。"
|
232
214
|
},
|
233
|
-
"Pro/deepseek-ai/DeepSeek-
|
234
|
-
"description": "DeepSeek-
|
215
|
+
"Pro/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B": {
|
216
|
+
"description": "DeepSeek-R1-Distill-Qwen-1.5B 是基於 Qwen2.5-Math-1.5B 透過知識蒸餾技術所獲得的模型。該模型使用 DeepSeek-R1 產生的 80 萬個精選樣本進行微調,在多項基準測試中展現出優異的表現。作為一個輕量級模型,在 MATH-500 上達到了 83.9% 的準確率,在 AIME 2024 上獲得了 28.9% 的通過率,在 CodeForces 上取得了 954 的評分,顯示出超越其參數規模的推理能力。"
|
235
217
|
},
|
236
|
-
"Pro/
|
237
|
-
"description": "
|
218
|
+
"Pro/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B": {
|
219
|
+
"description": "DeepSeek-R1-Distill-Qwen-7B 是基於 Qwen2.5-Math-7B 透過知識蒸餾技術所獲得的模型。該模型使用 DeepSeek-R1 生成的 80 萬個精選樣本進行微調,展現出優異的推理能力。在多個基準測試中表現出色,其中在 MATH-500 上達到了 92.8% 的準確率,在 AIME 2024 上達到了 55.5% 的通過率,在 CodeForces 上獲得了 1189 的評分,作為 7B 規模的模型展示了較強的數學和程式設計能力。"
|
238
220
|
},
|
239
|
-
"Pro/
|
240
|
-
"description": "
|
221
|
+
"Pro/deepseek-ai/DeepSeek-V3": {
|
222
|
+
"description": "DeepSeek-V3 是一款擁有 6710 億參數的混合專家(MoE)語言模型,採用多頭潛在注意力(MLA)和 DeepSeekMoE 架構,結合無輔助損失的負載平衡策略,優化推理和訓練效率。透過在 14.8 萬億高質量tokens上預訓練,並進行監督微調和強化學習,DeepSeek-V3 在性能上超越其他開源模型,接近領先閉源模型。"
|
241
223
|
},
|
242
224
|
"QwQ-32B-Preview": {
|
243
225
|
"description": "QwQ-32B-Preview 是一款獨具創新的自然語言處理模型,能夠高效處理複雜的對話生成與上下文理解任務。"
|
@@ -290,6 +272,12 @@
|
|
290
272
|
"Qwen/Qwen2.5-Coder-7B-Instruct": {
|
291
273
|
"description": "Qwen2.5-Coder-7B-Instruct 是阿里雲發布的代碼特定大語言模型系列的最新版本。該模型在 Qwen2.5 的基礎上,通過 5.5 萬億個 tokens 的訓練,顯著提升了代碼生成、推理和修復能力。它不僅增強了編碼能力,還保持了數學和通用能力的優勢。模型為代碼智能體等實際應用提供了更全面的基礎"
|
292
274
|
},
|
275
|
+
"Qwen/Qwen2.5-VL-32B-Instruct": {
|
276
|
+
"description": "Qwen2.5-VL-32B-Instruct 是通義千問團隊推出的多模態大型模型,屬於 Qwen2.5-VL 系列的一部分。該模型不僅能精準識別常見物體,更能分析圖像中的文字、圖表、圖標、圖形與版面配置。它可作為視覺智能代理,具備推理能力並能動態操作工具,擁有使用電腦與手機的實用功能。此外,此模型能精確定位圖像中的物件,並為發票、表格等文件生成結構化輸出。相較於前代模型 Qwen2-VL,此版本透過強化學習在數學與問題解決能力方面獲得顯著提升,回應風格也更貼近人類偏好。"
|
277
|
+
},
|
278
|
+
"Qwen/Qwen2.5-VL-72B-Instruct": {
|
279
|
+
"description": "Qwen2.5-VL 是 Qwen2.5 系列中的視覺語言模型。該模型在多方面有顯著提升:具備更強的視覺理解能力,能夠識別常見物體、分析文本、圖表和版面配置;作為視覺代理能夠推理並動態指導工具使用;支援理解超過 1 小時的長影片並捕捉關鍵事件;能夠透過生成邊界框或點準確定位圖像中的物體;支援生成結構化輸出,尤其適用於發票、表格等掃描資料。"
|
280
|
+
},
|
293
281
|
"Qwen2-72B-Instruct": {
|
294
282
|
"description": "Qwen2 是 Qwen 模型的最新系列,支持 128k 上下文,對比當前最優的開源模型,Qwen2-72B 在自然語言理解、知識、代碼、數學及多語言等多項能力上均顯著超越當前領先的模型。"
|
295
283
|
},
|
@@ -374,9 +362,6 @@
|
|
374
362
|
"TeleAI/TeleChat2": {
|
375
363
|
"description": "TeleChat2大模型是由中國電信從0到1自主研發的生成式語義大模型,支持百科問答、代碼生成、長文生成等功能,為用戶提供對話諮詢服務,能夠與用戶進行對話互動,回答問題,協助創作,高效便捷地幫助用戶獲取信息、知識和靈感。模型在幻覺問題、長文生成、邏輯理解等方面均有較出色表現。"
|
376
364
|
},
|
377
|
-
"TeleAI/TeleMM": {
|
378
|
-
"description": "TeleMM多模態大模型是由中國電信自主研發的多模態理解大模型,能夠處理文本、圖像等多種模態輸入,支持圖像理解、圖表分析等功能,為用戶提供跨模態的理解服務。模型能夠與用戶進行多模態互動,準確理解輸入內容,回答問題、協助創作,並高效提供多模態信息和靈感支持。在細粒度感知,邏輯推理等多模態任務上有出色表現"
|
379
|
-
},
|
380
365
|
"Vendor-A/Qwen/Qwen2.5-72B-Instruct": {
|
381
366
|
"description": "Qwen2.5-72B-Instruct 是阿里雲發布的最新大語言模型系列之一。該 72B 模型在編碼和數學等領域具有顯著改進的能力。該模型還提供了多語言支持,覆蓋超過 29 種語言,包括中文、英文等。模型在指令跟隨、理解結構化數據以及生成結構化輸出(尤其是 JSON)方面都有顯著提升"
|
382
367
|
},
|
@@ -662,9 +647,6 @@
|
|
662
647
|
"deepseek-ai/DeepSeek-R1-Distill-Llama-70B": {
|
663
648
|
"description": "DeepSeek-R1 蒸餾模型,通過強化學習與冷啟動數據優化推理性能,開源模型刷新多任務標杆。"
|
664
649
|
},
|
665
|
-
"deepseek-ai/DeepSeek-R1-Distill-Llama-8B": {
|
666
|
-
"description": "DeepSeek-R1-Distill-Llama-8B 是基於 Llama-3.1-8B 開發的蒸餾模型。該模型使用 DeepSeek-R1 生成的樣本進行微調,展現出優秀的推理能力。在多個基準測試中表現不俗,其中在 MATH-500 上達到了 89.1% 的準確率,在 AIME 2024 上達到了 50.4% 的通過率,在 CodeForces 上獲得了 1205 的評分,作為 8B 規模的模型展示了較強的數學和編程能力。"
|
667
|
-
},
|
668
650
|
"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B": {
|
669
651
|
"description": "DeepSeek-R1 蒸餾模型,通過強化學習與冷啟動數據優化推理性能,開源模型刷新多任務標杆。"
|
670
652
|
},
|
@@ -713,6 +695,9 @@
|
|
713
695
|
"deepseek-r1-70b-online": {
|
714
696
|
"description": "DeepSeek R1 70B 標準版,支持即時聯網搜索,適合需要最新信息的對話和文本處理任務。"
|
715
697
|
},
|
698
|
+
"deepseek-r1-distill-llama": {
|
699
|
+
"description": "deepseek-r1-distill-llama 是基於 Llama 從 DeepSeek-R1 蒸餾而來的模型。"
|
700
|
+
},
|
716
701
|
"deepseek-r1-distill-llama-70b": {
|
717
702
|
"description": "DeepSeek R1——DeepSeek 套件中更大更智能的模型——被蒸餾到 Llama 70B 架構中。基於基準測試和人工評估,該模型比原始 Llama 70B 更智能,尤其在需要數學和事實精確性的任務上表現出色。"
|
718
703
|
},
|
@@ -725,6 +710,9 @@
|
|
725
710
|
"deepseek-r1-distill-qianfan-llama-8b": {
|
726
711
|
"description": "2025年2月14日首次發布,由千帆大模型研發團隊以 Llama3_8B為base模型(Built with Meta Llama)蒸餾所得,蒸餾數據中也同步添加了千帆的語料。"
|
727
712
|
},
|
713
|
+
"deepseek-r1-distill-qwen": {
|
714
|
+
"description": "deepseek-r1-distill-qwen 是基於 Qwen 從 DeepSeek-R1 蒸餾而來的模型。"
|
715
|
+
},
|
728
716
|
"deepseek-r1-distill-qwen-1.5b": {
|
729
717
|
"description": "DeepSeek-R1-Distill 系列模型透過知識蒸餾技術,將 DeepSeek-R1 生成的樣本對 Qwen、Llama 等開源模型進行微調後得到。"
|
730
718
|
},
|
@@ -872,6 +860,9 @@
|
|
872
860
|
"gemini-1.5-flash-8b-exp-0924": {
|
873
861
|
"description": "Gemini 1.5 Flash 8B 0924 是最新的實驗性模型,在文本和多模態用例中都有顯著的性能提升。"
|
874
862
|
},
|
863
|
+
"gemini-1.5-flash-8b-latest": {
|
864
|
+
"description": "Gemini 1.5 Flash 8B 是一款高效的多模態模型,支援廣泛應用的擴展。"
|
865
|
+
},
|
875
866
|
"gemini-1.5-flash-exp-0827": {
|
876
867
|
"description": "Gemini 1.5 Flash 0827 提供了優化後的多模態處理能力,適用多種複雜任務場景。"
|
877
868
|
},
|
@@ -914,9 +905,6 @@
|
|
914
905
|
"gemini-2.0-flash-lite-preview-02-05": {
|
915
906
|
"description": "一個 Gemini 2.0 Flash 模型,針對成本效益和低延遲等目標進行了優化。"
|
916
907
|
},
|
917
|
-
"gemini-2.0-flash-thinking-exp": {
|
918
|
-
"description": "Gemini 2.0 Flash Exp 是 Google 最新的實驗性多模態AI模型,擁有下一代特性,卓越的速度,原生工具調用以及多模態生成。"
|
919
|
-
},
|
920
908
|
"gemini-2.0-flash-thinking-exp-01-21": {
|
921
909
|
"description": "Gemini 2.0 Flash Exp 是 Google 最新的實驗性多模態AI模型,擁有下一代特性,卓越的速度,原生工具調用以及多模態生成。"
|
922
910
|
},
|
@@ -1223,6 +1211,9 @@
|
|
1223
1211
|
"llama-3.1-8b-instant": {
|
1224
1212
|
"description": "Llama 3.1 8B 是一款高效能模型,提供了快速的文本生成能力,非常適合需要大規模效率和成本效益的應用場景。"
|
1225
1213
|
},
|
1214
|
+
"llama-3.1-instruct": {
|
1215
|
+
"description": "Llama 3.1 指令微調模型針對對話場景進行了優化,在常見的行業基準測試中,超越了許多現有的開源聊天模型。"
|
1216
|
+
},
|
1226
1217
|
"llama-3.2-11b-vision-instruct": {
|
1227
1218
|
"description": "在高解析度圖像上表現優異的圖像推理能力,適用於視覺理解應用。"
|
1228
1219
|
},
|
@@ -1235,12 +1226,18 @@
|
|
1235
1226
|
"llama-3.2-90b-vision-preview": {
|
1236
1227
|
"description": "Llama 3.2 旨在處理結合視覺和文本數據的任務。它在圖像描述和視覺問答等任務中表現出色,跨越了語言生成和視覺推理之間的鴻溝。"
|
1237
1228
|
},
|
1229
|
+
"llama-3.2-vision-instruct": {
|
1230
|
+
"description": "Llama 3.2-Vision 指令微調模型針對視覺辨識、圖像推理、圖像描述及回答與圖像相關的常規問題進行了最佳化。"
|
1231
|
+
},
|
1238
1232
|
"llama-3.3-70b-instruct": {
|
1239
1233
|
"description": "Llama 3.3 是 Llama 系列最先進的多語言開源大型語言模型,以極低成本體驗媲美 405B 模型的性能。基於 Transformer 結構,並透過監督微調(SFT)和人類反饋強化學習(RLHF)提升有用性和安全性。其指令調優版本專為多語言對話優化,在多項行業基準上表現優於眾多開源和封閉聊天模型。知識截止日期為 2023 年 12 月"
|
1240
1234
|
},
|
1241
1235
|
"llama-3.3-70b-versatile": {
|
1242
1236
|
"description": "Meta Llama 3.3 多語言大語言模型 (LLM) 是 70B(文本輸入/文本輸出)中的預訓練和指令調整生成模型。Llama 3.3 指令調整的純文本模型針對多語言對話用例進行了優化,並且在常見行業基準上優於許多可用的開源和封閉式聊天模型。"
|
1243
1237
|
},
|
1238
|
+
"llama-3.3-instruct": {
|
1239
|
+
"description": "Llama 3.3 指令微調模型針對對話場景進行了優化,在常見的行業基準測試中,超越了許多現有的開源聊天模型。"
|
1240
|
+
},
|
1244
1241
|
"llama3-70b-8192": {
|
1245
1242
|
"description": "Meta Llama 3 70B 提供無與倫比的複雜性處理能力,為高要求項目量身定制。"
|
1246
1243
|
},
|
@@ -1319,9 +1316,6 @@
|
|
1319
1316
|
"meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo": {
|
1320
1317
|
"description": "LLaMA 3.2 旨在處理結合視覺和文本數據的任務。它在圖像描述和視覺問答等任務中表現出色,跨越了語言生成和視覺推理之間的鴻溝。"
|
1321
1318
|
},
|
1322
|
-
"meta-llama/Llama-3.3-70B-Instruct": {
|
1323
|
-
"description": "Llama 3.3 是 Llama 系列最先進的多語言開源大型語言模型,以極低成本體驗媲美 405B 模型的性能。基於 Transformer 結構,並通過監督微調(SFT)和人類反饋強化學習(RLHF)提升有用性和安全性。其指令調優版本專為多語言對話優化,在多項行業基準上表現優於眾多開源和封閉聊天模型。知識截止日期為 2023 年 12 月"
|
1324
|
-
},
|
1325
1319
|
"meta-llama/Llama-3.3-70B-Instruct-Turbo": {
|
1326
1320
|
"description": "Meta Llama 3.3 多語言大語言模型 ( LLM ) 是 70B(文本輸入/文本輸出)中的預訓練和指令調整生成模型。 Llama 3.3 指令調整的純文本模型針對多語言對話用例進行了優化,並且在常見行業基準上優於許多可用的開源和封閉式聊天模型。"
|
1327
1321
|
},
|
@@ -1349,15 +1343,9 @@
|
|
1349
1343
|
"meta-llama/Meta-Llama-3.1-70B": {
|
1350
1344
|
"description": "Llama 3.1 是 Meta 推出的領先模型,支持高達 405B 參數,可應用於複雜對話、多語言翻譯和數據分析領域。"
|
1351
1345
|
},
|
1352
|
-
"meta-llama/Meta-Llama-3.1-70B-Instruct": {
|
1353
|
-
"description": "LLaMA 3.1 70B 提供多語言的高效對話支持。"
|
1354
|
-
},
|
1355
1346
|
"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo": {
|
1356
1347
|
"description": "Llama 3.1 70B 模型經過精細調整,適用於高負載應用,量化至 FP8 提供更高效的計算能力和準確性,確保在複雜場景中的卓越表現。"
|
1357
1348
|
},
|
1358
|
-
"meta-llama/Meta-Llama-3.1-8B-Instruct": {
|
1359
|
-
"description": "LLaMA 3.1 提供多語言支持,是業界領先的生成模型之一。"
|
1360
|
-
},
|
1361
1349
|
"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo": {
|
1362
1350
|
"description": "Llama 3.1 8B 模型採用 FP8 量化,支持高達 131,072 個上下文標記,是開源模型中的佼佼者,適合複雜任務,表現優異於許多行業基準。"
|
1363
1351
|
},
|
@@ -1451,12 +1439,18 @@
|
|
1451
1439
|
"mistral-large": {
|
1452
1440
|
"description": "Mixtral Large 是 Mistral 的旗艦模型,結合代碼生成、數學和推理的能力,支持 128k 上下文窗口。"
|
1453
1441
|
},
|
1442
|
+
"mistral-large-instruct": {
|
1443
|
+
"description": "Mistral-Large-Instruct-2407 是一款先進的稠密大型語言模型(LLM),擁有 1230 億參數,具備最先進的推理、知識和編碼能力。"
|
1444
|
+
},
|
1454
1445
|
"mistral-large-latest": {
|
1455
1446
|
"description": "Mistral Large 是旗艦大模型,擅長多語言任務、複雜推理和代碼生成,是高端應用的理想選擇。"
|
1456
1447
|
},
|
1457
1448
|
"mistral-nemo": {
|
1458
1449
|
"description": "Mistral Nemo 由 Mistral AI 和 NVIDIA 合作推出,是高效性能的 12B 模型。"
|
1459
1450
|
},
|
1451
|
+
"mistral-nemo-instruct": {
|
1452
|
+
"description": "Mistral-Nemo-Instruct-2407 大型語言模型(LLM)是 Mistral-Nemo-Base-2407 的指令微調版本。"
|
1453
|
+
},
|
1460
1454
|
"mistral-small": {
|
1461
1455
|
"description": "Mistral Small可用於任何需要高效率和低延遲的語言任務。"
|
1462
1456
|
},
|
@@ -1670,15 +1664,6 @@
|
|
1670
1664
|
"qwen/qwen2.5-coder-7b-instruct": {
|
1671
1665
|
"description": "強大的中型代碼模型,支持 32K 上下文長度,擅長多語言編程。"
|
1672
1666
|
},
|
1673
|
-
"qwen1.5-14b-chat": {
|
1674
|
-
"description": "Qwen1.5 系列是 Qwen2 的 Beta 版本,是一個基於 Transformer 的僅解碼語言模型,在海量數據上進行預訓練。與之前發布的 Qwen 系列版本相比,Qwen1.5 系列 base 與 chat 模型均能支持多種語言,在整體聊天和基礎能力上都得到了提升。Qwen1.5-14b-chat 是其中專用於 chat 場景的 140 億參數的主流大小模型。"
|
1675
|
-
},
|
1676
|
-
"qwen1.5-32b-chat": {
|
1677
|
-
"description": "Qwen1.5 系列是 Qwen2 的 Beta 版本,是一個基於 Transformer 的僅解碼語言模型,在海量數據上進行預訓練。與之前發布的 Qwen 系列版本相比,Qwen1.5 系列 base 與 chat 模型均能支持多種語言,在整體聊天和基礎能力上都得到了提升。Qwen1.5-32b-chat 是其中專用於 chat 場景的 320 億參數的大模型,較於 14b 模型在智能體場景更強,較於 72b 模型推理成本更低。"
|
1678
|
-
},
|
1679
|
-
"qwen1.5-72b-chat": {
|
1680
|
-
"description": "Qwen1.5 系列是 Qwen2 的 Beta 版本,是一個基於 Transformer 的僅解碼語言模型,在海量數據上進行預訓練。與之前發布的 Qwen 系列版本相比,Qwen1.5 系列 base 與 chat 模型均能支持多種語言,在整體聊天和基礎能力上都得到了提升。Qwen1.5-72b-chat 是其中專用於 chat 場景的 720 億參數的大模型。"
|
1681
|
-
},
|
1682
1667
|
"qwen2": {
|
1683
1668
|
"description": "Qwen2 是阿里巴巴的新一代大規模語言模型,以優異的性能支持多元化的應用需求。"
|
1684
1669
|
},
|
@@ -1715,6 +1700,12 @@
|
|
1715
1700
|
"qwen2.5-coder-7b-instruct": {
|
1716
1701
|
"description": "通義千問代碼模型開源版。"
|
1717
1702
|
},
|
1703
|
+
"qwen2.5-coder-instruct": {
|
1704
|
+
"description": "Qwen2.5-Coder 是 Qwen 系列中最新的程式碼專用大型語言模型(前身為 CodeQwen)。"
|
1705
|
+
},
|
1706
|
+
"qwen2.5-instruct": {
|
1707
|
+
"description": "Qwen2.5 是 Qwen 大型語言模型的最新系列。對於 Qwen2.5,我們發佈了多個基礎語言模型和指令微調語言模型,參數範圍從 5 億到 72 億不等。"
|
1708
|
+
},
|
1718
1709
|
"qwen2.5-math-1.5b-instruct": {
|
1719
1710
|
"description": "Qwen-Math 模型具有強大的數學解題能力。"
|
1720
1711
|
},
|
@@ -1724,12 +1715,18 @@
|
|
1724
1715
|
"qwen2.5-math-7b-instruct": {
|
1725
1716
|
"description": "Qwen-Math模型具有強大的數學解題能力。"
|
1726
1717
|
},
|
1718
|
+
"qwen2.5-vl-32b-instruct": {
|
1719
|
+
"description": "Qwen2.5-VL 系列模型提升了模型的智能水準、實用性和適用性,使其在自然對話、內容創作、專業知識服務及程式碼開發等場景中表現更優。32B 版本使用了強化學習技術優化模型,與 Qwen2.5 VL 系列的其他模型相比,提供了更符合人類偏好的輸出風格、複雜數學問題的推理能力,以及影像細粒度理解與推理能力。"
|
1720
|
+
},
|
1727
1721
|
"qwen2.5-vl-72b-instruct": {
|
1728
1722
|
"description": "指令跟隨、數學、解題、代碼整體提升,萬物識別能力提升,支持多樣格式直接精準定位視覺元素,支持對長視頻文件(最長10分鐘)進行理解和秒級別的事件時刻定位,能理解時間先後和快慢,基於解析和定位能力支持操控OS或Mobile的Agent,關鍵信息抽取能力和Json格式輸出能力強,此版本為72B版本,本系列能力最強的版本。"
|
1729
1723
|
},
|
1730
1724
|
"qwen2.5-vl-7b-instruct": {
|
1731
1725
|
"description": "指令跟隨、數學、解題、代碼整體提升,萬物識別能力提升,支持多樣格式直接精準定位視覺元素,支持對長視頻文件(最長10分鐘)進行理解和秒級別的事件時刻定位,能理解時間先後和快慢,基於解析和定位能力支持操控OS或Mobile的Agent,關鍵信息抽取能力和Json格式輸出能力強,此版本為72B版本,本系列能力最強的版本。"
|
1732
1726
|
},
|
1727
|
+
"qwen2.5-vl-instruct": {
|
1728
|
+
"description": "Qwen2.5-VL 是 Qwen 模型系列中最新版本的視覺語言模型。"
|
1729
|
+
},
|
1733
1730
|
"qwen2.5:0.5b": {
|
1734
1731
|
"description": "Qwen2.5 是阿里巴巴的新一代大規模語言模型,以優異的性能支持多元化的應用需求。"
|
1735
1732
|
},
|
@@ -146,6 +146,9 @@
|
|
146
146
|
"xai": {
|
147
147
|
"description": "xAI 是一家致力於構建人工智慧以加速人類科學發現的公司。我們的使命是推動我們對宇宙的共同理解。"
|
148
148
|
},
|
149
|
+
"xinference": {
|
150
|
+
"description": "Xorbits推論(Xinference)是一個開源平台,用於簡化各種AI模型的運行與整合。透過Xinference,您可以在雲端或本地環境中使用任何開源LLM、嵌入模型和多模態模型進行推論,並創建強大的AI應用程式。"
|
151
|
+
},
|
149
152
|
"zeroone": {
|
150
153
|
"description": "01.AI 專注於 AI 2.0 時代的人工智慧技術,大力推動「人+人工智慧」的創新和應用,採用超強大模型和先進 AI 技術以提升人類生產力,實現技術賦能。"
|
151
154
|
},
|
@@ -42,6 +42,17 @@
|
|
42
42
|
"sessionWithName": "對話設定 · {{name}}",
|
43
43
|
"title": "設定"
|
44
44
|
},
|
45
|
+
"hotkey": {
|
46
|
+
"conflicts": "與現有快捷鍵衝突",
|
47
|
+
"group": {
|
48
|
+
"conversation": "對話",
|
49
|
+
"essential": "基本"
|
50
|
+
},
|
51
|
+
"invalidCombination": "快捷鍵需要至少包含一個修飾鍵 (Ctrl, Alt, Shift) 和一個常規鍵",
|
52
|
+
"record": "按下按鍵以錄製快捷鍵",
|
53
|
+
"reset": "重置為預設快捷鍵",
|
54
|
+
"title": "快速鍵"
|
55
|
+
},
|
45
56
|
"llm": {
|
46
57
|
"aesGcm": "您的金鑰與代理地址等將使用 <1>AES-GCM</1> 加密演算法進行加密",
|
47
58
|
"apiKey": {
|
@@ -425,6 +436,7 @@
|
|
425
436
|
"agent": "默認助手",
|
426
437
|
"common": "通用設置",
|
427
438
|
"experiment": "實驗",
|
439
|
+
"hotkey": "快速鍵",
|
428
440
|
"llm": "語言模型",
|
429
441
|
"provider": "AI 服務商",
|
430
442
|
"sync": "雲端同步",
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@lobehub/chat",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.76.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",
|
@@ -135,7 +135,7 @@
|
|
135
135
|
"@lobehub/chat-plugins-gateway": "^1.9.0",
|
136
136
|
"@lobehub/icons": "^1.73.1",
|
137
137
|
"@lobehub/tts": "^1.28.0",
|
138
|
-
"@lobehub/ui": "^1.
|
138
|
+
"@lobehub/ui": "^1.169.2",
|
139
139
|
"@neondatabase/serverless": "^0.10.4",
|
140
140
|
"@next/third-parties": "15.2.3",
|
141
141
|
"@react-spring/web": "^9.7.5",
|
@@ -192,7 +192,7 @@
|
|
192
192
|
"next-mdx-remote": "^5.0.0",
|
193
193
|
"nextjs-toploader": "^3.7.15",
|
194
194
|
"numeral": "^2.0.6",
|
195
|
-
"nuqs": "^
|
195
|
+
"nuqs": "^2.4.1",
|
196
196
|
"officeparser": "^5.1.1",
|
197
197
|
"ollama": "^0.5.11",
|
198
198
|
"openai": "^4.77.3",
|
@@ -9,7 +9,7 @@ import { useCategory } from './useCategory';
|
|
9
9
|
const Category = memo(() => {
|
10
10
|
const items = useCategory();
|
11
11
|
|
12
|
-
return items?.map((item, index) => <Cell key={
|
12
|
+
return items?.map(({ key, ...item }, index) => <Cell key={key || index} {...item} />);
|
13
13
|
});
|
14
14
|
|
15
15
|
export default Category;
|
@@ -1,5 +1,6 @@
|
|
1
|
-
import { PropsWithChildren } from 'react';
|
1
|
+
import { PropsWithChildren, Suspense } from 'react';
|
2
2
|
|
3
|
+
import Loading from '@/components/Loading/BrandTextLoading';
|
3
4
|
import MobileContentLayout from '@/components/server/MobileNavLayout';
|
4
5
|
import InitClientDB from '@/features/InitClientDB';
|
5
6
|
|
@@ -8,7 +9,7 @@ import Header from './features/Header';
|
|
8
9
|
const Layout = ({ children }: PropsWithChildren) => {
|
9
10
|
return (
|
10
11
|
<MobileContentLayout header={<Header />} withNav>
|
11
|
-
{children}
|
12
|
+
<Suspense fallback={<Loading />}>{children}</Suspense>
|
12
13
|
<InitClientDB />
|
13
14
|
</MobileContentLayout>
|
14
15
|
);
|
@@ -56,7 +56,7 @@ const Category = memo(() => {
|
|
56
56
|
},
|
57
57
|
].filter(Boolean) as CellProps[];
|
58
58
|
|
59
|
-
return items?.map((item, index) => <Cell key={
|
59
|
+
return items?.map(({ key, ...item }, index) => <Cell key={key || index} {...item} />);
|
60
60
|
});
|
61
61
|
|
62
62
|
export default Category;
|
@@ -9,7 +9,7 @@ import { useCategory } from './useCategory';
|
|
9
9
|
const Category = memo(() => {
|
10
10
|
const items = useCategory();
|
11
11
|
|
12
|
-
return items?.map((item, index) => <Cell
|
12
|
+
return items?.map(({ key, ...item }, index) => <Cell key={key || index} {...item} />);
|
13
13
|
});
|
14
14
|
|
15
15
|
export default Category;
|
@@ -3,14 +3,15 @@ import { Divider } from 'antd';
|
|
3
3
|
import { createStyles } from 'antd-style';
|
4
4
|
import isEqual from 'fast-deep-equal';
|
5
5
|
import { parseAsBoolean, useQueryState } from 'nuqs';
|
6
|
-
import { useHotkeys } from 'react-hotkeys-hook';
|
7
6
|
import { Flexbox } from 'react-layout-kit';
|
8
7
|
|
9
|
-
import HotKeys from '@/components/HotKeys';
|
10
8
|
import { useSwitchSession } from '@/hooks/useSwitchSession';
|
11
9
|
import { useSessionStore } from '@/store/session';
|
12
10
|
import { sessionHelpers } from '@/store/session/helpers';
|
13
11
|
import { sessionSelectors } from '@/store/session/selectors';
|
12
|
+
import { useUserStore } from '@/store/user';
|
13
|
+
import { settingsSelectors } from '@/store/user/selectors';
|
14
|
+
import { HotkeyEnum, KeyEnum } from '@/types/hotkey';
|
14
15
|
|
15
16
|
const useStyles = createStyles(({ css, token }) => ({
|
16
17
|
avatar: css`
|
@@ -52,7 +53,7 @@ const PinList = () => {
|
|
52
53
|
const list = useSessionStore(sessionSelectors.pinnedSessions, isEqual);
|
53
54
|
const [activeId] = useSessionStore((s) => [s.activeId]);
|
54
55
|
const switchSession = useSwitchSession();
|
55
|
-
|
56
|
+
const hotkey = useUserStore(settingsSelectors.getHotkeyById(HotkeyEnum.SwitchAgent));
|
56
57
|
const hasList = list.length > 0;
|
57
58
|
const [isPinned, setPinned] = useQueryState('pinned', parseAsBoolean);
|
58
59
|
|
@@ -61,20 +62,6 @@ const PinList = () => {
|
|
61
62
|
setPinned(true);
|
62
63
|
};
|
63
64
|
|
64
|
-
useHotkeys(
|
65
|
-
list.slice(0, 9).map((e, i) => `ctrl+${i + 1}`),
|
66
|
-
(keyboardEvent, hotkeysEvent) => {
|
67
|
-
if (!hotkeysEvent.keys?.[0]) return;
|
68
|
-
|
69
|
-
const index = parseInt(hotkeysEvent.keys?.[0]) - 1;
|
70
|
-
const item = list[index];
|
71
|
-
if (!item) return;
|
72
|
-
|
73
|
-
switchAgent(item.id);
|
74
|
-
},
|
75
|
-
{ enableOnFormTags: true, preventDefault: true },
|
76
|
-
);
|
77
|
-
|
78
65
|
return (
|
79
66
|
hasList && (
|
80
67
|
<>
|
@@ -83,13 +70,9 @@ const PinList = () => {
|
|
83
70
|
{list.slice(0, 9).map((item, index) => (
|
84
71
|
<Flexbox key={item.id} style={{ position: 'relative' }}>
|
85
72
|
<Tooltip
|
73
|
+
hotkey={hotkey.replaceAll(KeyEnum.Number, String(index + 1))}
|
86
74
|
placement={'right'}
|
87
|
-
title={
|
88
|
-
<Flexbox gap={8} horizontal>
|
89
|
-
{sessionHelpers.getTitle(item.meta)}
|
90
|
-
<HotKeys inverseTheme keys={`ctrl+${index + 1}`} />
|
91
|
-
</Flexbox>
|
92
|
-
}
|
75
|
+
title={sessionHelpers.getTitle(item.meta)}
|
93
76
|
>
|
94
77
|
<Flexbox
|
95
78
|
className={cx(
|
@@ -36,6 +36,8 @@ vi.mock('next/link', () => ({
|
|
36
36
|
|
37
37
|
vi.mock('@lobehub/ui', () => ({
|
38
38
|
ActionIcon: vi.fn(({ title }) => <div>{title}</div>),
|
39
|
+
combineKeys: vi.fn((keys) => keys.join('+')),
|
40
|
+
KeyMapEnum: { Alt: 'alt', Ctrl: 'ctrl', Shift: 'shift' },
|
39
41
|
}));
|
40
42
|
|
41
43
|
vi.mock('react-i18next', () => ({
|
@@ -2,13 +2,17 @@
|
|
2
2
|
|
3
3
|
import { useTheme } from 'antd-style';
|
4
4
|
import dynamic from 'next/dynamic';
|
5
|
-
import { PropsWithChildren, memo } from 'react';
|
5
|
+
import { PropsWithChildren, Suspense, memo } from 'react';
|
6
|
+
import { HotkeysProvider } from 'react-hotkeys-hook';
|
6
7
|
import { Flexbox } from 'react-layout-kit';
|
7
8
|
|
8
9
|
import { BANNER_HEIGHT } from '@/features/AlertBanner/CloudBanner';
|
10
|
+
import HotkeyHelperPanel from '@/features/HotkeyHelperPanel';
|
9
11
|
import { usePlatform } from '@/hooks/usePlatform';
|
10
12
|
import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
|
13
|
+
import { HotkeyScopeEnum } from '@/types/hotkey';
|
11
14
|
|
15
|
+
import RegisterHotkeys from './RegisterHotkeys';
|
12
16
|
import SideBar from './SideBar';
|
13
17
|
|
14
18
|
const CloudBanner = dynamic(() => import('@/features/AlertBanner/CloudBanner'));
|
@@ -16,11 +20,10 @@ const CloudBanner = dynamic(() => import('@/features/AlertBanner/CloudBanner'));
|
|
16
20
|
const Layout = memo<PropsWithChildren>(({ children }) => {
|
17
21
|
const { isPWA } = usePlatform();
|
18
22
|
const theme = useTheme();
|
19
|
-
|
20
23
|
const { showCloudPromotion } = useServerConfigStore(featureFlagsSelectors);
|
21
24
|
|
22
25
|
return (
|
23
|
-
|
26
|
+
<HotkeysProvider initiallyActiveScopes={[HotkeyScopeEnum.Global]}>
|
24
27
|
{showCloudPromotion && <CloudBanner />}
|
25
28
|
<Flexbox
|
26
29
|
height={showCloudPromotion ? `calc(100% - ${BANNER_HEIGHT}px)` : '100%'}
|
@@ -34,7 +37,11 @@ const Layout = memo<PropsWithChildren>(({ children }) => {
|
|
34
37
|
<SideBar />
|
35
38
|
{children}
|
36
39
|
</Flexbox>
|
37
|
-
|
40
|
+
<HotkeyHelperPanel />
|
41
|
+
<Suspense>
|
42
|
+
<RegisterHotkeys />
|
43
|
+
</Suspense>
|
44
|
+
</HotkeysProvider>
|
38
45
|
);
|
39
46
|
});
|
40
47
|
|
@@ -1,18 +1,16 @@
|
|
1
|
-
import { Icon } from '@lobehub/ui';
|
1
|
+
import { Hotkey, Icon } from '@lobehub/ui';
|
2
2
|
import { Button, Dropdown } from 'antd';
|
3
3
|
import { createStyles } from 'antd-style';
|
4
4
|
import { BotMessageSquare, LucideCheck, LucideChevronDown, MessageSquarePlus } from 'lucide-react';
|
5
5
|
import { memo } from 'react';
|
6
|
-
import { useHotkeys } from 'react-hotkeys-hook';
|
7
6
|
import { useTranslation } from 'react-i18next';
|
8
7
|
import { Flexbox } from 'react-layout-kit';
|
9
8
|
|
10
|
-
import HotKeys from '@/components/HotKeys';
|
11
|
-
import { ALT_KEY } from '@/const/hotkeys';
|
12
9
|
import { useSendMessage } from '@/features/ChatInput/useSend';
|
13
10
|
import { useChatStore } from '@/store/chat';
|
14
11
|
import { useUserStore } from '@/store/user';
|
15
|
-
import { preferenceSelectors } from '@/store/user/selectors';
|
12
|
+
import { preferenceSelectors, settingsSelectors } from '@/store/user/selectors';
|
13
|
+
import { HotkeyEnum } from '@/types/hotkey';
|
16
14
|
|
17
15
|
const useStyles = createStyles(({ css, prefixCls }) => {
|
18
16
|
return {
|
@@ -31,7 +29,7 @@ interface SendMoreProps {
|
|
31
29
|
|
32
30
|
const SendMore = memo<SendMoreProps>(({ disabled, isMac }) => {
|
33
31
|
const { t } = useTranslation('chat');
|
34
|
-
|
32
|
+
const hotkey = useUserStore(settingsSelectors.getHotkeyById(HotkeyEnum.AddUserMessage));
|
35
33
|
const { styles } = useStyles();
|
36
34
|
|
37
35
|
const [useCmdEnterToSend, updatePreference] = useUserStore((s) => [
|
@@ -42,19 +40,6 @@ const SendMore = memo<SendMoreProps>(({ disabled, isMac }) => {
|
|
42
40
|
|
43
41
|
const { send: sendMessage } = useSendMessage();
|
44
42
|
|
45
|
-
const hotKey = [ALT_KEY, 'enter'].join('+');
|
46
|
-
useHotkeys(
|
47
|
-
hotKey,
|
48
|
-
(keyboardEvent, hotkeysEvent) => {
|
49
|
-
console.log(keyboardEvent, hotkeysEvent);
|
50
|
-
sendMessage({ onlyAddUserMessage: true });
|
51
|
-
},
|
52
|
-
{
|
53
|
-
enableOnFormTags: true,
|
54
|
-
preventDefault: true,
|
55
|
-
},
|
56
|
-
);
|
57
|
-
|
58
43
|
return (
|
59
44
|
<Dropdown
|
60
45
|
disabled={disabled}
|
@@ -91,9 +76,9 @@ const SendMore = memo<SendMoreProps>(({ disabled, isMac }) => {
|
|
91
76
|
icon: <Icon icon={MessageSquarePlus} />,
|
92
77
|
key: 'addUser',
|
93
78
|
label: (
|
94
|
-
<Flexbox gap={24} horizontal>
|
79
|
+
<Flexbox align={'center'} gap={24} horizontal>
|
95
80
|
{t('input.addUser')}
|
96
|
-
<
|
81
|
+
<Hotkey keys={hotkey} />
|
97
82
|
</Flexbox>
|
98
83
|
),
|
99
84
|
onClick: () => {
|