@lobehub/lobehub 2.0.0-next.212 → 2.0.0-next.214

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 (152) hide show
  1. package/.github/workflows/auto-i18n.yml +1 -1
  2. package/.github/workflows/bundle-analyzer.yml +1 -1
  3. package/.github/workflows/claude-auto-testing.yml +1 -1
  4. package/.github/workflows/claude-dedupe-issues.yml +1 -1
  5. package/.github/workflows/claude-issue-triage.yml +1 -1
  6. package/.github/workflows/claude-translate-comments.yml +1 -1
  7. package/.github/workflows/claude-translator.yml +1 -1
  8. package/.github/workflows/claude.yml +1 -1
  9. package/.github/workflows/desktop-build-electron.yml +2 -2
  10. package/.github/workflows/e2e.yml +1 -1
  11. package/.github/workflows/issue-auto-close-duplicates.yml +1 -1
  12. package/.github/workflows/lighthouse.yml +2 -2
  13. package/.github/workflows/lock-closed-issues.yml +1 -1
  14. package/.github/workflows/manual-build-desktop.yml +6 -6
  15. package/.github/workflows/pr-build-desktop.yml +5 -5
  16. package/.github/workflows/pr-build-docker.yml +2 -2
  17. package/.github/workflows/release-desktop-beta.yml +4 -4
  18. package/.github/workflows/release-docker.yml +2 -2
  19. package/.github/workflows/release.yml +1 -1
  20. package/.github/workflows/sync-database-schema.yml +1 -1
  21. package/.github/workflows/sync.yml +1 -1
  22. package/.github/workflows/test.yml +5 -5
  23. package/.github/workflows/verify-desktop-patch.yml +1 -1
  24. package/CHANGELOG.md +58 -0
  25. package/apps/desktop/package.json +3 -2
  26. package/apps/desktop/src/main/const/store.ts +1 -1
  27. package/apps/desktop/src/main/controllers/SystemCtr.ts +2 -3
  28. package/apps/desktop/src/main/core/App.ts +10 -3
  29. package/apps/desktop/src/main/types/store.ts +1 -1
  30. package/changelog/v1.json +14 -0
  31. package/locales/ar/models.json +35 -4
  32. package/locales/ar/providers.json +1 -0
  33. package/locales/bg-BG/models.json +24 -1
  34. package/locales/bg-BG/providers.json +1 -0
  35. package/locales/de-DE/models.json +30 -1
  36. package/locales/de-DE/providers.json +1 -0
  37. package/locales/en-US/models.json +1 -0
  38. package/locales/en-US/providers.json +1 -0
  39. package/locales/es-ES/models.json +32 -1
  40. package/locales/es-ES/providers.json +1 -0
  41. package/locales/fa-IR/models.json +48 -1
  42. package/locales/fa-IR/providers.json +1 -0
  43. package/locales/fr-FR/models.json +47 -1
  44. package/locales/fr-FR/providers.json +1 -0
  45. package/locales/it-IT/models.json +32 -1
  46. package/locales/it-IT/providers.json +1 -0
  47. package/locales/ja-JP/models.json +2 -1
  48. package/locales/ja-JP/providers.json +1 -0
  49. package/locales/ko-KR/models.json +24 -1
  50. package/locales/ko-KR/providers.json +1 -0
  51. package/locales/nl-NL/models.json +46 -1
  52. package/locales/nl-NL/providers.json +1 -0
  53. package/locales/pl-PL/models.json +41 -1
  54. package/locales/pl-PL/providers.json +1 -0
  55. package/locales/pt-BR/models.json +32 -1
  56. package/locales/pt-BR/providers.json +1 -0
  57. package/locales/ru-RU/models.json +54 -2
  58. package/locales/ru-RU/providers.json +1 -0
  59. package/locales/tr-TR/models.json +32 -1
  60. package/locales/tr-TR/providers.json +1 -0
  61. package/locales/vi-VN/models.json +37 -1
  62. package/locales/vi-VN/providers.json +1 -0
  63. package/locales/zh-CN/models.json +24 -3
  64. package/locales/zh-CN/providers.json +1 -0
  65. package/locales/zh-TW/models.json +11 -1
  66. package/locales/zh-TW/providers.json +1 -0
  67. package/package.json +4 -3
  68. package/packages/builtin-tool-knowledge-base/src/client/Render/SearchKnowledgeBase/Item/index.tsx +4 -2
  69. package/packages/builtin-tool-local-system/src/client/Intervention/EditLocalFile/index.tsx +3 -2
  70. package/packages/builtin-tool-local-system/src/client/Render/EditLocalFile/index.tsx +3 -2
  71. package/packages/const/src/theme.ts +0 -2
  72. package/packages/context-engine/src/engine/messages/types.ts +1 -1
  73. package/packages/desktop-bridge/src/routeVariants.ts +2 -9
  74. package/packages/electron-client-ipc/src/types/system.ts +1 -1
  75. package/packages/model-runtime/src/core/BaseAI.ts +1 -1
  76. package/packages/model-runtime/src/core/streams/qwen.test.ts +140 -0
  77. package/packages/model-runtime/src/core/streams/qwen.ts +17 -5
  78. package/packages/model-runtime/src/types/chat.ts +12 -12
  79. package/packages/model-runtime/src/types/error.ts +1 -1
  80. package/packages/model-runtime/src/types/image.ts +1 -1
  81. package/scripts/electronWorkflow/modifiers/nextConfig.mts +41 -13
  82. package/src/app/[variants]/(auth)/_layout/index.tsx +3 -2
  83. package/src/app/[variants]/(auth)/_layout/style.ts +8 -18
  84. package/src/app/[variants]/(auth)/layout.tsx +7 -3
  85. package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/index.tsx +4 -2
  86. package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/style.ts +3 -0
  87. package/src/app/[variants]/(main)/_layout/DesktopLayoutContainer.tsx +3 -2
  88. package/src/app/[variants]/(main)/chat/features/Conversation/Header/index.tsx +2 -1
  89. package/src/app/[variants]/(main)/chat/profile/features/ProfileEditor/PluginTag.tsx +3 -2
  90. package/src/app/[variants]/(main)/community/(list)/_layout/Footer.tsx +3 -2
  91. package/src/app/[variants]/(main)/group/features/Conversation/ChatItem/Thread.tsx +3 -2
  92. package/src/app/[variants]/(main)/group/profile/features/AgentBuilder/index.tsx +0 -1
  93. package/src/app/[variants]/(main)/group/profile/features/ProfileEditor/PluginTag.tsx +3 -2
  94. package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/AgentItem/Editing.tsx +2 -2
  95. package/src/app/[variants]/(main)/home/_layout/Footer/index.tsx +1 -1
  96. package/src/app/[variants]/(main)/home/_layout/index.tsx +3 -2
  97. package/src/app/[variants]/(main)/home/features/CommunityAgents/Item.tsx +3 -2
  98. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/AspectRatioSelect/index.tsx +4 -2
  99. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/ModelSelect/ImageModelItem.tsx +3 -2
  100. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/Select/index.tsx +4 -2
  101. package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +3 -2
  102. package/src/app/[variants]/(main)/memory/features/TimeLineView/index.tsx +9 -4
  103. package/src/app/[variants]/(main)/page/_layout/Body/List/Item/Editing.tsx +2 -2
  104. package/src/app/[variants]/(main)/settings/common/features/Common/Common.tsx +11 -11
  105. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +3 -2
  106. package/src/app/[variants]/(main)/settings/stats/features/overview/ShareButton/TotalCard.tsx +4 -2
  107. package/src/app/[variants]/(mobile)/me/(home)/features/Header.tsx +6 -8
  108. package/src/app/[variants]/layout.tsx +10 -15
  109. package/src/app/[variants]/onboarding/_layout/index.tsx +3 -2
  110. package/src/app/[variants]/onboarding/features/ModeSelectionStep.tsx +3 -2
  111. package/src/app/[variants]/router/index.tsx +12 -8
  112. package/src/components/Cell/Divider.tsx +4 -2
  113. package/src/components/DataStyleModal/index.tsx +4 -2
  114. package/src/components/FeatureList/index.tsx +4 -2
  115. package/src/components/FileParsingStatus/EmbeddingStatus.tsx +3 -2
  116. package/src/components/FileParsingStatus/index.tsx +3 -2
  117. package/src/components/Notification/index.tsx +4 -2
  118. package/src/components/client/ClientOnly.tsx +17 -0
  119. package/src/features/AlertBanner/CloudBanner.tsx +4 -3
  120. package/src/features/CommandMenu/ThemeMenu.tsx +1 -1
  121. package/src/features/CommandMenu/types.ts +5 -2
  122. package/src/features/CommandMenu/useCommandMenu.ts +3 -2
  123. package/src/features/Conversation/Markdown/plugins/LobeArtifact/Render/index.tsx +3 -2
  124. package/src/features/Conversation/Messages/components/FileChunks/ChunkItem.tsx +3 -2
  125. package/src/features/Conversation/Messages/components/FileChunks/index.tsx +4 -2
  126. package/src/features/Conversation/Messages/components/SearchGrounding.tsx +3 -2
  127. package/src/features/ElectronTitlebar/hooks/useWatchThemeUpdate.ts +21 -38
  128. package/src/features/GroupChatSettings/AgentCard.tsx +3 -2
  129. package/src/features/GroupChatSettings/HostMemberCard.tsx +3 -2
  130. package/src/features/PageEditor/DiffAllToolbar.tsx +4 -2
  131. package/src/features/User/UserPanel/ThemeButton.tsx +18 -29
  132. package/src/hooks/useIsDark.ts +11 -0
  133. package/src/layout/AuthProvider/Clerk/useAppearance.ts +4 -2
  134. package/src/layout/AuthProvider/MarketAuth/MarketAuthConfirmModal.tsx +3 -2
  135. package/src/layout/GlobalProvider/AppTheme.tsx +15 -19
  136. package/src/layout/GlobalProvider/NextThemeProvider.tsx +22 -0
  137. package/src/layout/GlobalProvider/StyleRegistry.tsx +18 -13
  138. package/src/layout/GlobalProvider/index.tsx +38 -36
  139. package/src/libs/next/proxy/define-config.ts +2 -11
  140. package/src/server/services/comfyui/config/constants.ts +7 -7
  141. package/src/server/services/comfyui/config/promptToolConst.ts +26 -26
  142. package/src/server/services/comfyui/utils/promptSplitter.ts +23 -23
  143. package/src/server/services/comfyui/utils/weightDType.ts +4 -5
  144. package/src/store/global/action.test.ts +0 -15
  145. package/src/store/global/actions/__tests__/general.test.ts +0 -37
  146. package/src/store/global/actions/general.ts +0 -21
  147. package/src/store/global/initialState.ts +0 -6
  148. package/src/store/global/selectors/systemStatus.test.ts +0 -20
  149. package/src/store/global/selectors/systemStatus.ts +0 -2
  150. package/src/styles/global.ts +0 -2
  151. package/src/utils/server/routeVariants.test.ts +17 -51
  152. package/src/utils/server/routeVariants.ts +0 -1
@@ -63,6 +63,7 @@
63
63
  "volcengine.description": "ByteDance’in model hizmet platformu, güvenli, özellik açısından zengin ve uygun maliyetli model erişimi ile veri, ince ayar, çıkarım ve değerlendirme için uçtan uca araçlar sunar.",
64
64
  "wenxin.description": "Kurumsal düzeyde temel modeller ve yapay zeka tabanlı uygulama geliştirme için uçtan uca araçlar sunan hepsi bir arada bir platformdur.",
65
65
  "xai.description": "xAI, bilimsel keşifleri hızlandırmak ve insanlığın evreni anlama düzeyini derinleştirmek amacıyla yapay zeka geliştirir.",
66
+ "xiaomimimo.description": "Xiaomi MiMo, OpenAI ile uyumlu bir API aracılığıyla sohbet tabanlı model hizmeti sunar. mimo-v2-flash modeli derinlemesine akıl yürütme, akışlı çıktı, fonksiyon çağırma, 256K bağlam penceresi ve maksimum 128K çıktı desteği sağlar.",
66
67
  "xinference.description": "Xorbits Inference (Xinference), yapay zeka modellerini çalıştırmayı ve entegre etmeyi kolaylaştıran açık kaynaklı bir platformdur. Açık kaynaklı LLM’leri, gömme modellerini ve çok modlu modelleri yerel veya bulutta çalıştırarak güçlü yapay zeka uygulamaları geliştirmenizi sağlar.",
67
68
  "zenmux.description": "ZenMux, OpenAI, Anthropic, Google VertexAI ve daha fazlasını destekleyen birleşik bir yapay zeka toplama platformudur. Modelleri kolayca yönlendirme ve yönetme imkanı sunar.",
68
69
  "zeroone.description": "01.AI, insan merkezli bir Yapay Zeka 2.0 devrimini yönlendirir. LLM’leri kullanarak ekonomik ve sosyal değer yaratır, yeni yapay zeka ekosistemleri ve iş modelleri inşa eder.",
@@ -299,6 +299,42 @@
299
299
  "codestral-latest.description": "Codestral là mô hình lập trình tiên tiến nhất của chúng tôi; phiên bản v2 (tháng 1 năm 2025) nhắm đến các tác vụ tần suất cao, độ trễ thấp như FIM, sửa mã và sinh bài kiểm tra.",
300
300
  "codestral.description": "Codestral là mô hình lập trình đầu tiên của Mistral AI, cung cấp hỗ trợ sinh mã mạnh mẽ.",
301
301
  "codex-mini-latest.description": "codex-mini-latest là một mô hình o4-mini được tinh chỉnh dành cho Codex CLI. Đối với việc sử dụng API trực tiếp, chúng tôi khuyến nghị bắt đầu với gpt-4.1.",
302
+ "cogito-2.1:671b.description": "Cogito v2.1 671B là một mô hình ngôn ngữ mã nguồn mở của Mỹ, miễn phí cho mục đích thương mại, có hiệu suất sánh ngang với các mô hình hàng đầu, hiệu quả suy luận theo token cao hơn, hỗ trợ ngữ cảnh dài 128k và khả năng tổng thể mạnh mẽ.",
303
+ "cogview-4.description": "CogView-4 là mô hình chuyển văn bản thành hình ảnh mã nguồn mở đầu tiên của Zhipu có khả năng tạo ký tự Trung Quốc. Mô hình cải thiện khả năng hiểu ngữ nghĩa, chất lượng hình ảnh và hiển thị văn bản Trung/Anh, hỗ trợ lời nhắc song ngữ với độ dài tùy ý và có thể tạo hình ảnh ở bất kỳ độ phân giải nào trong phạm vi chỉ định.",
304
+ "cohere-command-r-plus.description": "Command R+ là một mô hình tiên tiến được tối ưu hóa cho RAG, được xây dựng để xử lý khối lượng công việc doanh nghiệp.",
305
+ "cohere-command-r.description": "Command R là một mô hình sinh văn bản có khả năng mở rộng, được thiết kế cho RAG và sử dụng công cụ, cho phép triển khai AI ở cấp độ sản xuất.",
306
+ "cohere/Cohere-command-r-plus.description": "Command R+ là một mô hình tiên tiến được tối ưu hóa cho RAG, được xây dựng để xử lý khối lượng công việc doanh nghiệp.",
307
+ "cohere/Cohere-command-r.description": "Command R là một mô hình sinh văn bản có khả năng mở rộng, được thiết kế cho RAG và sử dụng công cụ, cho phép triển khai AI ở cấp độ sản xuất.",
308
+ "cohere/command-a.description": "Command A là mô hình mạnh nhất của Cohere cho đến nay, vượt trội trong việc sử dụng công cụ, tác tử, RAG và các trường hợp đa ngôn ngữ. Mô hình có độ dài ngữ cảnh 256K, chạy chỉ với hai GPU và đạt thông lượng cao hơn 150% so với Command R+ 08-2024.",
309
+ "cohere/command-r-plus.description": "Command R+ là mô hình LLM mới nhất của Cohere, được tối ưu hóa cho trò chuyện và ngữ cảnh dài, hướng đến hiệu suất vượt trội để các công ty có thể vượt qua giai đoạn nguyên mẫu và đi vào sản xuất.",
310
+ "cohere/command-r.description": "Command R được tối ưu hóa cho các tác vụ trò chuyện và ngữ cảnh dài, được định vị là mô hình \"có thể mở rộng\" cân bằng giữa hiệu suất cao và độ chính xác, giúp các công ty vượt qua giai đoạn nguyên mẫu và triển khai thực tế.",
311
+ "cohere/embed-v4.0.description": "Một mô hình phân loại hoặc chuyển đổi văn bản, hình ảnh hoặc nội dung hỗn hợp thành các vector nhúng.",
312
+ "comfyui/flux-dev.description": "FLUX.1 Dev là mô hình chuyển văn bản thành hình ảnh chất lượng cao (10–50 bước), lý tưởng cho các sản phẩm sáng tạo và nghệ thuật cao cấp.",
313
+ "comfyui/flux-kontext-dev.description": "FLUX.1 Kontext-dev là mô hình chỉnh sửa hình ảnh hỗ trợ chỉnh sửa theo hướng dẫn văn bản, bao gồm chỉnh sửa cục bộ và chuyển đổi phong cách.",
314
+ "comfyui/flux-krea-dev.description": "FLUX.1 Krea-dev là mô hình chuyển văn bản thành hình ảnh được tăng cường an toàn, đồng phát triển với Krea, có bộ lọc an toàn tích hợp.",
315
+ "comfyui/flux-schnell.description": "FLUX.1 Schnell là mô hình chuyển văn bản thành hình ảnh siêu nhanh, tạo hình ảnh chất lượng cao chỉ trong 1–4 bước, lý tưởng cho sử dụng thời gian thực và tạo mẫu nhanh.",
316
+ "comfyui/stable-diffusion-15.description": "Stable Diffusion 1.5 là mô hình chuyển văn bản thành hình ảnh cổ điển với độ phân giải 512x512, lý tưởng cho tạo mẫu nhanh và thử nghiệm sáng tạo.",
317
+ "comfyui/stable-diffusion-35-inclclip.description": "Stable Diffusion 3.5 với bộ mã hóa CLIP/T5 tích hợp, không cần tệp mã hóa bên ngoài, phù hợp với các mô hình như sd3.5_medium_incl_clips sử dụng ít tài nguyên hơn.",
318
+ "comfyui/stable-diffusion-35.description": "Stable Diffusion 3.5 là mô hình chuyển văn bản thành hình ảnh thế hệ mới với các biến thể Large và Medium. Cần tệp mã hóa CLIP bên ngoài và mang lại chất lượng hình ảnh xuất sắc cùng khả năng tuân thủ lời nhắc cao.",
319
+ "comfyui/stable-diffusion-custom-refiner.description": "Mô hình SDXL chuyển hình ảnh thành hình ảnh tùy chỉnh. Sử dụng tên tệp mô hình là custom_sd_lobe.safetensors; nếu có VAE, sử dụng custom_sd_vae_lobe.safetensors. Đặt các tệp mô hình vào thư mục yêu cầu của Comfy.",
320
+ "comfyui/stable-diffusion-custom.description": "Mô hình SD chuyển văn bản thành hình ảnh tùy chỉnh. Sử dụng tên tệp mô hình là custom_sd_lobe.safetensors; nếu có VAE, sử dụng custom_sd_vae_lobe.safetensors. Đặt các tệp mô hình vào thư mục yêu cầu của Comfy.",
321
+ "comfyui/stable-diffusion-refiner.description": "Mô hình SDXL chuyển hình ảnh thành hình ảnh thực hiện các chuyển đổi chất lượng cao từ hình ảnh đầu vào, hỗ trợ chuyển đổi phong cách, phục hồi và biến thể sáng tạo.",
322
+ "comfyui/stable-diffusion-xl.description": "SDXL là mô hình chuyển văn bản thành hình ảnh hỗ trợ tạo hình ảnh độ phân giải cao 1024x1024 với chất lượng và chi tiết tốt hơn.",
323
+ "command-a-03-2025.description": "Command A là mô hình mạnh nhất của chúng tôi cho đến nay, vượt trội trong việc sử dụng công cụ, tác tử, RAG và các tình huống đa ngôn ngữ. Mô hình có cửa sổ ngữ cảnh 256K, chạy chỉ với hai GPU và đạt thông lượng cao hơn 150% so với Command R+ 08-2024.",
324
+ "command-light-nightly.description": "Để rút ngắn khoảng cách giữa các bản phát hành chính, chúng tôi cung cấp các bản dựng Command hàng đêm. Với dòng command-light, đây là command-light-nightly. Đây là phiên bản mới nhất, mang tính thử nghiệm cao (và có thể không ổn định), được cập nhật thường xuyên mà không báo trước, do đó không khuyến nghị sử dụng trong môi trường sản xuất.",
325
+ "command-light.description": "Biến thể Command nhỏ hơn, nhanh hơn, gần như mạnh mẽ như bản gốc nhưng có tốc độ cao hơn.",
326
+ "command-nightly.description": "Để rút ngắn khoảng cách giữa các bản phát hành chính, chúng tôi cung cấp các bản dựng Command hàng đêm. Với dòng Command, đây là command-nightly. Đây là phiên bản mới nhất, mang tính thử nghiệm cao (và có thể không ổn định), được cập nhật thường xuyên mà không báo trước, do đó không khuyến nghị sử dụng trong môi trường sản xuất.",
327
+ "command-r-03-2024.description": "Command R là mô hình trò chuyện theo hướng dẫn với chất lượng cao hơn, độ tin cậy lớn hơn và cửa sổ ngữ cảnh dài hơn so với các mô hình trước đó. Mô hình hỗ trợ các quy trình phức tạp như tạo mã, RAG, sử dụng công cụ và tác tử.",
328
+ "command-r-08-2024.description": "command-r-08-2024 là phiên bản cập nhật của mô hình Command R được phát hành vào tháng 8 năm 2024.",
329
+ "command-r-plus-04-2024.description": "command-r-plus là bí danh của command-r-plus-04-2024, vì vậy sử dụng command-r-plus trong API sẽ trỏ đến mô hình đó.",
330
+ "command-r-plus-08-2024.description": "Command R+ là mô hình trò chuyện theo hướng dẫn với chất lượng cao hơn, độ tin cậy lớn hơn và cửa sổ ngữ cảnh dài hơn so với các mô hình trước đó. Mô hình phù hợp nhất cho các quy trình RAG phức tạp và sử dụng công cụ nhiều bước.",
331
+ "command-r-plus.description": "Command R+ là mô hình LLM hiệu suất cao được thiết kế cho các tình huống doanh nghiệp thực tế và ứng dụng phức tạp.",
332
+ "command-r.description": "Command R là mô hình LLM được tối ưu hóa cho trò chuyện và các tác vụ ngữ cảnh dài, lý tưởng cho tương tác động và quản lý tri thức.",
333
+ "command-r7b-12-2024.description": "command-r7b-12-2024 là bản cập nhật nhỏ, hiệu quả được phát hành vào tháng 12 năm 2024. Mô hình vượt trội trong các tác vụ RAG, sử dụng công cụ và tác tử đòi hỏi suy luận phức tạp nhiều bước.",
334
+ "command.description": "Mô hình trò chuyện theo hướng dẫn cung cấp chất lượng và độ tin cậy cao hơn trong các tác vụ ngôn ngữ, với cửa sổ ngữ cảnh dài hơn so với các mô hình sinh văn bản cơ bản của chúng tôi.",
335
+ "computer-use-preview.description": "computer-use-preview là mô hình chuyên biệt cho công cụ \"sử dụng máy tính\", được huấn luyện để hiểu và thực hiện các tác vụ liên quan đến máy tính.",
336
+ "dall-e-2.description": "DALL·E thế hệ thứ hai với khả năng tạo hình ảnh thực tế, chính xác hơn và độ phân giải gấp 4 lần thế hệ đầu.",
337
+ "dall-e-3.description": "Mô hình DALL·E mới nhất, phát hành vào tháng 11 năm 2023, hỗ trợ tạo hình ảnh thực tế, chính xác hơn với chi tiết mạnh mẽ hơn.",
302
338
  "meta.llama3-8b-instruct-v1:0.description": "Meta Llama 3 là một mô hình ngôn ngữ mở dành cho nhà phát triển, nhà nghiên cứu và doanh nghiệp, được thiết kế để hỗ trợ xây dựng, thử nghiệm và mở rộng các ý tưởng AI sinh ngữ một cách có trách nhiệm. Là một phần trong nền tảng đổi mới cộng đồng toàn cầu, mô hình này phù hợp với môi trường có tài nguyên hạn chế, thiết bị biên và yêu cầu thời gian huấn luyện nhanh hơn.",
303
339
  "meta/Llama-3.2-11B-Vision-Instruct.description": "Khả năng suy luận hình ảnh mạnh mẽ trên ảnh độ phân giải cao, phù hợp cho các ứng dụng hiểu thị giác.",
304
340
  "meta/Llama-3.2-90B-Vision-Instruct.description": "Khả năng suy luận hình ảnh tiên tiến dành cho các ứng dụng tác tử hiểu thị giác.",
@@ -479,4 +515,4 @@
479
515
  "wizardlm2:8x22b.description": "WizardLM 2 là mô hình ngôn ngữ từ Microsoft AI, vượt trội trong đối thoại phức tạp, tác vụ đa ngôn ngữ, suy luận và trợ lý.",
480
516
  "x-ai/grok-4-fast-non-reasoning.description": "Grok 4 Fast (Không Suy Luận) là mô hình đa phương thức hiệu suất cao, chi phí thấp của xAI (hỗ trợ cửa sổ ngữ cảnh 2M), phù hợp cho các tình huống nhạy cảm với độ trễ và chi phí mà không cần suy luận trong mô hình. Có thể bật suy luận qua tham số API khi cần. Lời nhắc và phản hồi có thể được xAI hoặc OpenRouter sử dụng để cải thiện các mô hình tương lai.",
481
517
  "x-ai/grok-4-fast.description": "Grok 4 Fast là mô hình hiệu suất cao, chi phí thấp của xAI (hỗ trợ cửa sổ ngữ cảnh 2M), lý tưởng cho các trường hợp sử dụng có tính đồng thời cao và ngữ cảnh dài."
482
- }
518
+ }
@@ -63,6 +63,7 @@
63
63
  "volcengine.description": "Nền tảng dịch vụ mô hình của ByteDance cung cấp quyền truy cập mô hình an toàn, giàu tính năng, cạnh tranh về chi phí cùng công cụ toàn diện cho dữ liệu, tinh chỉnh, suy luận và đánh giá.",
64
64
  "wenxin.description": "Nền tảng doanh nghiệp tất cả trong một cho mô hình nền tảng và phát triển ứng dụng gốc AI, cung cấp công cụ toàn diện cho quy trình mô hình và ứng dụng AI sinh.",
65
65
  "xai.description": "xAI xây dựng AI để thúc đẩy khám phá khoa học, với sứ mệnh làm sâu sắc hiểu biết của nhân loại về vũ trụ.",
66
+ "xiaomimimo.description": "Xiaomi MiMo cung cấp dịch vụ mô hình hội thoại với API tương thích OpenAI. Mô hình mimo-v2-flash hỗ trợ suy luận sâu, xuất dữ liệu theo luồng, gọi hàm, cửa sổ ngữ cảnh 256K và đầu ra tối đa 128K.",
66
67
  "xinference.description": "Xorbits Inference (Xinference) là nền tảng mã nguồn mở giúp đơn giản hóa việc chạy và tích hợp mô hình AI. Cho phép bạn chạy LLM mã nguồn mở, mô hình nhúng và mô hình đa phương thức tại chỗ hoặc trên đám mây để xây dựng ứng dụng AI mạnh mẽ.",
67
68
  "zenmux.description": "ZenMux là nền tảng tổng hợp AI thống nhất hỗ trợ OpenAI, Anthropic, Google VertexAI và nhiều hơn nữa, với định tuyến linh hoạt để dễ dàng chuyển đổi và quản lý mô hình.",
68
69
  "zeroone.description": "01.AI thúc đẩy cuộc cách mạng AI 2.0 lấy con người làm trung tâm, sử dụng LLM để tạo ra giá trị kinh tế và xã hội, xây dựng hệ sinh thái và mô hình kinh doanh AI mới.",
@@ -279,11 +279,9 @@
279
279
  "claude-3-opus-20240229.description": "Claude 3 Opus 是 Anthropic 最强大的模型,适用于高度复杂的任务,在性能、智能、流畅性和理解力方面表现卓越。",
280
280
  "claude-3-sonnet-20240229.description": "Claude 3 Sonnet 在智能与速度之间取得平衡,适用于企业级工作负载,提供高效能与低成本的可靠部署。",
281
281
  "claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 是 Anthropic 推出的最快、最智能的 Haiku 模型,具备闪电般的响应速度和增强的推理能力。",
282
- "claude-haiku-4-5-20251001.description": "Claude Haiku 4.5 是 Anthropic 推出的最快、最智能的 Haiku 模型,具备闪电般的响应速度和增强的推理能力。",
283
282
  "claude-opus-4-1-20250805-thinking.description": "Claude Opus 4.1 Thinking 是一款高级变体,能够展示其推理过程。",
284
283
  "claude-opus-4-1-20250805.description": "Claude Opus 4.1 是 Anthropic 最新、最强大的模型,适用于高度复杂的任务,在性能、智能、流畅性和理解力方面表现卓越。",
285
284
  "claude-opus-4-20250514.description": "Claude Opus 4 是 Anthropic 最强大的模型,专为处理高度复杂任务而设计,在性能、智能、流畅性和理解力方面表现卓越。",
286
- "claude-opus-4-20250514.description": "Claude Opus 4 是 Anthropic 最强大的模型,专为处理高度复杂任务而设计,在性能、智能、流畅性和理解力方面表现卓越。",
287
285
  "claude-opus-4-5-20251101.description": "Claude Opus 4.5 是 Anthropic 的旗舰模型,结合卓越智能与可扩展性能,适用于需要最高质量响应与推理的复杂任务。",
288
286
  "claude-sonnet-4-20250514-thinking.description": "Claude Sonnet 4 Thinking 可生成近乎即时的响应或可视化的逐步推理过程。",
289
287
  "claude-sonnet-4-20250514.description": "Claude Sonnet 4 能够生成几乎即时的响应,或展示可视化的逐步思考过程。",
@@ -392,6 +390,29 @@
392
390
  "deepseek-v3.2-think.description": "DeepSeek V3.2 Think 是一款完整的深度思考模型,具备更强的长链推理能力。",
393
391
  "deepseek-v3.2.description": "DeepSeek-V3.2 是深度求索推出的首个将思考融入工具使用的混合推理模型,采用高效架构节省算力,结合大规模强化学习提升能力与大规模合成任务数据增强泛化能力,三者融合使其性能媲美 GPT-5-High,输出长度大幅降低,显著减少计算开销与用户等待时间。",
394
392
  "deepseek-v3.description": "DeepSeek-V3 是一款强大的 MoE 模型,总参数量为 671B,每个 token 激活参数为 37B。",
393
+ "deepseek-vl2-small.description": "DeepSeek VL2 Small 是一款轻量级多模态模型,适用于资源受限和高并发场景。",
394
+ "deepseek-vl2.description": "DeepSeek VL2 是一款多模态模型,专注于图文理解和细粒度视觉问答。",
395
+ "deepseek/deepseek-chat-v3-0324.description": "DeepSeek V3 是一款拥有 685B 参数的 MoE 模型,是 DeepSeek 旗舰聊天系列的最新版本。\n\n该模型基于 [DeepSeek V3](/deepseek/deepseek-chat-v3) 构建,在多项任务中表现出色。",
396
+ "deepseek/deepseek-chat-v3-0324:free.description": "DeepSeek V3 是一款拥有 685B 参数的 MoE 模型,是 DeepSeek 旗舰聊天系列的最新版本。\n\n该模型基于 [DeepSeek V3](/deepseek/deepseek-chat-v3) 构建,在多项任务中表现出色。",
397
+ "deepseek/deepseek-chat-v3.1.description": "DeepSeek-V3.1 是 DeepSeek 推出的长上下文混合推理模型,支持思考/非思考模式切换及工具集成。",
398
+ "deepseek/deepseek-chat.description": "DeepSeek-V3 是 DeepSeek 面向复杂任务和工具集成的高性能混合推理模型。",
399
+ "deepseek/deepseek-r1-0528.description": "DeepSeek R1 0528 是一款更新版本,专注于开放可用性和更深层次的推理能力。",
400
+ "deepseek/deepseek-r1-0528:free.description": "DeepSeek-R1 在仅需极少标注数据的情况下显著提升推理能力,并在最终答案前输出思维链以提高准确性。",
401
+ "deepseek/deepseek-r1-distill-llama-70b.description": "DeepSeek R1 Distill Llama 70B 是基于 Llama 3.3 70B 蒸馏而成的大语言模型,使用 DeepSeek R1 输出进行微调,在性能上可媲美大型前沿模型。",
402
+ "deepseek/deepseek-r1-distill-llama-8b.description": "DeepSeek R1 Distill Llama 8B 是基于 Llama-3.1-8B-Instruct 蒸馏而成的大语言模型,使用 DeepSeek R1 输出进行训练。",
403
+ "deepseek/deepseek-r1-distill-qwen-14b.description": "DeepSeek R1 Distill Qwen 14B 是基于 Qwen 2.5 14B 蒸馏而成的大语言模型,使用 DeepSeek R1 输出进行训练。在多个基准测试中超越 OpenAI o1-mini,在密集模型中达到 SOTA 水平。基准亮点:\nAIME 2024 pass@1: 69.7\nMATH-500 pass@1: 93.9\nCodeForces Rating: 1481\n基于 DeepSeek R1 输出的微调实现了与更大前沿模型的竞争性能。",
404
+ "deepseek/deepseek-r1-distill-qwen-32b.description": "DeepSeek R1 Distill Qwen 32B 是基于 Qwen 2.5 32B 蒸馏而成的大语言模型,使用 DeepSeek R1 输出进行训练。在多个基准测试中超越 OpenAI o1-mini,在密集模型中达到 SOTA 水平。基准亮点:\nAIME 2024 pass@1: 72.6\nMATH-500 pass@1: 94.3\nCodeForces Rating: 1691\n基于 DeepSeek R1 输出的微调实现了与更大前沿模型的竞争性能。",
405
+ "deepseek/deepseek-r1.description": "DeepSeek R1 已更新为 DeepSeek-R1-0528。通过更强的计算资源和后训练算法优化,显著提升了推理深度与能力。在数学、编程和通用逻辑基准测试中表现优异,接近 o3 和 Gemini 2.5 Pro 等领先模型。",
406
+ "deepseek/deepseek-r1/community.description": "DeepSeek R1 是 DeepSeek 团队最新开源模型,在数学、编程和推理任务中表现出色,性能可与 OpenAI o1 相媲美。",
407
+ "deepseek/deepseek-r1:free.description": "DeepSeek-R1 在仅需极少标注数据的情况下显著提升推理能力,并在最终答案前输出思维链以提高准确性。",
408
+ "deepseek/deepseek-reasoner.description": "DeepSeek-V3 Thinking(reasoner)是 DeepSeek 的实验性推理模型,适用于高复杂度推理任务。",
409
+ "deepseek/deepseek-v3.1-base.description": "DeepSeek V3.1 Base 是 DeepSeek V3 模型的改进版本。",
410
+ "deepseek/deepseek-v3.description": "一款快速的通用大语言模型,具备增强的推理能力。",
411
+ "deepseek/deepseek-v3/community.description": "DeepSeek-V3 在推理速度方面相较前代实现重大突破,在开源模型中排名第一,并可媲美最先进的闭源模型。DeepSeek-V3 采用了在 DeepSeek-V2 中验证的多头潜在注意力(MLA)和 DeepSeekMoE 架构,并引入了无损辅助策略以实现负载均衡,以及多 token 预测训练目标以增强性能。",
412
+ "deepseek_r1.description": "DeepSeek-R1 是一款基于强化学习的推理模型,解决了重复性和可读性问题。在强化学习前,使用冷启动数据进一步提升推理能力。在数学、编程和推理任务中表现与 OpenAI-o1 相当,训练过程精心设计以提升整体效果。",
413
+ "deepseek_r1_distill_llama_70b.description": "DeepSeek-R1-Distill-Llama-70B 是基于 Llama-3.3-70B-Instruct 蒸馏而成。作为 DeepSeek-R1 系列的一部分,使用 DeepSeek-R1 生成的样本进行微调,在数学、编程和推理方面表现出色。",
414
+ "deepseek_r1_distill_qwen_14b.description": "DeepSeek-R1-Distill-Qwen-14B 是基于 Qwen2.5-14B 蒸馏而成,并使用 DeepSeek-R1 生成的 80 万高质量样本进行微调,具备强大的推理能力。",
415
+ "deepseek_r1_distill_qwen_32b.description": "DeepSeek-R1-Distill-Qwen-32B 是基于 Qwen2.5-32B 蒸馏而成,并使用 DeepSeek-R1 生成的 80 万高质量样本进行微调,在数学、编程和推理方面表现卓越。",
395
416
  "gemini-flash-latest.description": "Latest release of Gemini Flash",
396
417
  "gemini-flash-lite-latest.description": "Latest release of Gemini Flash-Lite",
397
418
  "gemini-pro-latest.description": "Latest release of Gemini Pro",
@@ -644,4 +665,4 @@
644
665
  "zai/glm-4.5.description": "GLM-4.5 系列专为智能体设计,旗舰版 GLM-4.5 结合推理、编程和智能体能力,总参数 355B(激活 32B),提供双模式混合推理系统。",
645
666
  "zai/glm-4.5v.description": "GLM-4.5V 基于 GLM-4.5-Air 构建,继承 GLM-4.1V-Thinking 的成熟技术,采用强大的 106B 参数 MoE 架构扩展能力。",
646
667
  "zenmux/auto.description": "ZenMux 自动路由根据请求自动选择性价比最高、性能最优的支持模型。"
647
- }
668
+ }
@@ -63,6 +63,7 @@
63
63
  "volcengine.description": "字节跳动的模型服务平台,提供安全、功能丰富、具备价格优势的模型访问服务,并支持数据、微调、推理与评估的端到端工具链。",
64
64
  "wenxin.description": "文心是一个面向企业的基础模型与 AI 原生应用开发一体化平台,提供生成式 AI 模型与应用工作流的端到端工具支持。",
65
65
  "xai.description": "xAI 致力于构建加速科学发现的 AI,使命是加深人类对宇宙的理解。",
66
+ "xiaomimimo.description": "小米 MiMo 提供兼容 OpenAI API 的对话模型服务。mimo-v2-flash 模型支持深度推理、流式输出、函数调用、256K 上下文窗口,以及最多 128K 的输出。",
66
67
  "xinference.description": "Xorbits Inference(Xinference)是一个开源平台,简化 AI 模型的运行与集成,支持在本地或云端运行开源大模型、向量模型与多模态模型,构建强大的 AI 应用。",
67
68
  "zenmux.description": "ZenMux 是一个统一的 AI 聚合平台,支持 OpenAI、Anthropic、Google VertexAI 等,具备灵活路由能力,便于模型切换与管理。",
68
69
  "zeroone.description": "01.AI 推动以人为本的 AI 2.0 革命,利用大模型创造经济与社会价值,构建新型 AI 生态与商业模式。",
@@ -481,6 +481,16 @@
481
481
  "fal-ai/nano-banana.description": "Nano Banana 是 Google 最新、最快且最高效的原生多模態模型,支援透過對話進行圖像生成與編輯。",
482
482
  "fal-ai/qwen-image-edit.description": "來自 Qwen 團隊的專業圖像編輯模型,支援語義與外觀編輯,能精準處理中英文文字,並實現風格轉換、物體旋轉等高品質編輯。",
483
483
  "fal-ai/qwen-image.description": "來自 Qwen 團隊的強大圖像生成模型,具備優秀的中文文字渲染與多樣化視覺風格。",
484
+ "flux-1-schnell.description": "來自黑森林實驗室的 12B 參數文字轉圖像模型,透過潛在對抗擴散蒸餾技術,在 1 至 4 步內生成高品質圖像。其表現媲美封閉式替代方案,並以 Apache-2.0 授權釋出,供個人、研究與商業用途。",
485
+ "flux-dev.description": "FLUX.1 [dev] 是一款開放權重的蒸餾模型,僅限非商業用途。它保有接近專業水準的圖像品質與指令遵循能力,同時運行更高效,資源使用優於同等大小的標準模型。",
486
+ "flux-kontext-max.description": "最先進的語境圖像生成與編輯技術,結合文字與圖像輸入,實現精準且一致的結果。",
487
+ "flux-kontext-pro.description": "最先進的語境圖像生成與編輯技術,結合文字與圖像輸入,實現精準且一致的結果。",
488
+ "flux-merged.description": "FLUX.1-merged 結合了「DEV」版本的深層特徵與「Schnell」版本的高速優勢,拓展性能極限並擴大應用範圍。",
489
+ "flux-pro-1.1-ultra.description": "支援 4MP 輸出的超高解析度圖像生成,10 秒內產出清晰圖像。",
490
+ "flux-pro-1.1.description": "升級版專業級圖像生成模型,具備卓越圖像品質與精準提示遵循能力。",
491
+ "flux-pro.description": "頂級商業圖像生成模型,擁有無與倫比的圖像品質與多樣化輸出能力。",
492
+ "flux-schnell.description": "FLUX.1 [schnell] 是最先進的開源少步驟模型,超越同類競品,甚至優於如 Midjourney v6.0 與 DALL-E 3(HD)等強大非蒸餾模型。其精細調校保留預訓練多樣性,顯著提升視覺品質、指令遵循、尺寸與比例變化、字體處理與輸出多樣性。",
493
+ "flux.1-schnell.description": "FLUX.1-schnell 是一款高效能圖像生成模型,支援快速多風格輸出。",
484
494
  "gemini-flash-latest.description": "Gemini Flash 最新版本",
485
495
  "gemini-flash-lite-latest.description": "Gemini Flash-Lite 最新版本",
486
496
  "gemini-pro-latest.description": "Gemini Pro 最新版本",
@@ -746,4 +756,4 @@
746
756
  "zai/glm-4.5.description": "GLM-4.5 系列專為代理設計。旗艦版 GLM-4.5 結合推理、編碼與代理能力,總參數 355B(啟用 32B),提供混合推理系統的雙模式運行。",
747
757
  "zai/glm-4.5v.description": "GLM-4.5V 建構於 GLM-4.5-Air 基礎上,延續 GLM-4.1V-Thinking 技術,並以強大的 106B MoE 架構擴展能力。",
748
758
  "zenmux/auto.description": "ZenMux 自動路由會根據您的請求,從支援的選項中選擇性價比最高、效能最佳的模型。"
749
- }
759
+ }
@@ -63,6 +63,7 @@
63
63
  "volcengine.description": "字節跳動的模型服務平台,提供安全、功能豐富且具成本效益的模型存取,並支援資料、微調、推理與評估的端到端工具鏈。",
64
64
  "wenxin.description": "文心是一個企業級的基礎模型與 AI 原生應用開發平台,提供生成式 AI 模型與應用流程的端到端工具。",
65
65
  "xai.description": "xAI 致力於加速科學發現,目標是深化人類對宇宙的理解。",
66
+ "xiaomimimo.description": "小米 MiMo 提供一項支援 OpenAI 相容 API 的對話模型服務。mimo-v2-flash 模型支援深度推理、串流輸出、函式呼叫、256K 上下文視窗,以及最多 128K 的輸出。",
66
67
  "xinference.description": "Xorbits Inference(Xinference)是一個開源平台,簡化 AI 模型的運行與整合,支援在本地或雲端運行開源 LLM、嵌入模型與多模態模型,打造強大的 AI 應用。",
67
68
  "zenmux.description": "ZenMux 是一個統一的 AI 聚合平台,支援 OpenAI、Anthropic、Google VertexAI 等,具備靈活路由功能,便於模型切換與管理。",
68
69
  "zeroone.description": "01.AI 推動以人為本的 AI 2.0 革命,透過大型語言模型創造經濟與社會價值,構建全新 AI 生態與商業模式。",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/lobehub",
3
- "version": "2.0.0-next.212",
3
+ "version": "2.0.0-next.214",
4
4
  "description": "LobeHub - an open-source,comprehensive AI Agent 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",
@@ -205,7 +205,7 @@
205
205
  "@lobehub/icons": "^4.0.2",
206
206
  "@lobehub/market-sdk": "^0.25.1",
207
207
  "@lobehub/tts": "^4.0.2",
208
- "@lobehub/ui": "^4.8.0",
208
+ "@lobehub/ui": "^4.9.0",
209
209
  "@modelcontextprotocol/sdk": "^1.25.1",
210
210
  "@neondatabase/serverless": "^1.0.2",
211
211
  "@next/third-parties": "^16.1.1",
@@ -234,7 +234,7 @@
234
234
  "@zumer/snapdom": "^1.9.14",
235
235
  "ahooks": "^3.9.6",
236
236
  "antd": "^6.1.1",
237
- "antd-style": "^4.1.0",
237
+ "antd-style": "4.1.0",
238
238
  "async-retry": "^1.3.3",
239
239
  "bcryptjs": "^3.0.3",
240
240
  "better-auth": "1.4.6",
@@ -281,6 +281,7 @@
281
281
  "next": "^16.1.1",
282
282
  "next-auth": "5.0.0-beta.30",
283
283
  "next-mdx-remote": "^5.0.0",
284
+ "next-themes": "^0.4.6",
284
285
  "nextjs-toploader": "^3.9.17",
285
286
  "node-machine-id": "^1.1.12",
286
287
  "nodemailer": "^7.0.11",
@@ -2,7 +2,8 @@
2
2
 
3
3
  import { FileSearchResult } from '@lobechat/types';
4
4
  import { Center, Flexbox, MaterialFileTypeIcon, Text, Tooltip } from '@lobehub/ui';
5
- import { cx, useThemeMode } from 'antd-style';
5
+ import { cx } from 'antd-style';
6
+ import { useTheme } from 'next-themes';
6
7
  import { memo } from 'react';
7
8
 
8
9
  import { styles } from './style';
@@ -12,7 +13,8 @@ export interface FileItemProps extends FileSearchResult {
12
13
  }
13
14
 
14
15
  const FileItem = memo<FileItemProps>(({ fileId, fileName, relevanceScore }) => {
15
- const { isDarkMode } = useThemeMode();
16
+ const { resolvedTheme } = useTheme();
17
+ const isDarkMode = resolvedTheme === 'dark';
16
18
 
17
19
  return (
18
20
  <Flexbox
@@ -1,9 +1,9 @@
1
1
  import { type EditLocalFileParams } from '@lobechat/electron-client-ipc';
2
2
  import { type BuiltinInterventionProps } from '@lobechat/types';
3
3
  import { Flexbox, Icon, Skeleton, Text } from '@lobehub/ui';
4
- import { useThemeMode } from 'antd-style';
5
4
  import { createPatch } from 'diff';
6
5
  import { ChevronRight } from 'lucide-react';
6
+ import { useTheme } from 'next-themes';
7
7
  import path from 'path-browserify-esm';
8
8
  import React, { memo, useMemo } from 'react';
9
9
  import { Diff, Hunk, parseDiff } from 'react-diff-view';
@@ -29,7 +29,8 @@ const EditLocalFile = memo<BuiltinInterventionProps<EditLocalFileParams>>(({ arg
29
29
  },
30
30
  );
31
31
 
32
- const { isDarkMode } = useThemeMode();
32
+ const { resolvedTheme } = useTheme();
33
+ const isDarkMode = resolvedTheme === 'dark';
33
34
  // Generate diff from full file content
34
35
  const files = useMemo(() => {
35
36
  if (!fileData?.content) return [];
@@ -2,8 +2,8 @@ import { type EditLocalFileState } from '@lobechat/builtin-tool-local-system';
2
2
  import { type EditLocalFileParams } from '@lobechat/electron-client-ipc';
3
3
  import { type BuiltinRenderProps } from '@lobechat/types';
4
4
  import { Alert, Flexbox, Icon, Skeleton } from '@lobehub/ui';
5
- import { useThemeMode } from 'antd-style';
6
5
  import { ChevronRight } from 'lucide-react';
6
+ import { useTheme } from 'next-themes';
7
7
  import path from 'path-browserify-esm';
8
8
  import React, { memo, useMemo } from 'react';
9
9
  import { Diff, Hunk, parseDiff } from 'react-diff-view';
@@ -28,7 +28,8 @@ const EditLocalFile = memo<BuiltinRenderProps<EditLocalFileParams, EditLocalFile
28
28
  return [];
29
29
  }
30
30
  }, [pluginState?.diffText]);
31
- const { isDarkMode } = useThemeMode();
31
+ const { resolvedTheme } = useTheme();
32
+ const isDarkMode = resolvedTheme === 'dark';
32
33
 
33
34
  if (!args) return <Skeleton active />;
34
35
 
@@ -1,5 +1,3 @@
1
- export const LOBE_THEME_APPEARANCE = 'LOBE_THEME_APPEARANCE';
2
-
3
1
  export const LOBE_THEME_PRIMARY_COLOR = 'LOBE_THEME_PRIMARY_COLOR';
4
2
 
5
3
  export const LOBE_THEME_NEUTRAL_COLOR = 'LOBE_THEME_NEUTRAL_COLOR';
@@ -90,7 +90,7 @@ export interface UserMemoryIdentityItem {
90
90
  description?: string | null;
91
91
  id?: string;
92
92
  role?: string | null;
93
- /** Identity type: personal (角色), professional (职业), demographic (属性) */
93
+ /** Identity type: personal (role), professional (occupation), demographic (attribute) */
94
94
  type?: 'demographic' | 'personal' | 'professional' | string | null;
95
95
  [key: string]: unknown;
96
96
  }
@@ -31,31 +31,26 @@ export interface IRouteVariants {
31
31
  locale: Locales;
32
32
  neutralColor?: string;
33
33
  primaryColor?: string;
34
- theme: 'dark' | 'light';
35
34
  }
36
35
 
37
- const SUPPORTED_THEMES = ['dark', 'light'] as const;
38
-
39
36
  export const DEFAULT_VARIANTS: IRouteVariants = {
40
37
  isMobile: false,
41
38
  locale: DEFAULT_LANG,
42
- theme: 'light',
43
39
  };
44
40
 
45
41
  const SPLITTER = '__';
46
42
 
47
43
  export class RouteVariants {
48
44
  static serializeVariants = (variants: IRouteVariants): string =>
49
- [variants.locale, Number(variants.isMobile), variants.theme].join(SPLITTER);
45
+ [variants.locale, Number(variants.isMobile)].join(SPLITTER);
50
46
 
51
47
  static deserializeVariants = (serialized: string): IRouteVariants => {
52
48
  try {
53
- const [locale, isMobile, theme] = serialized.split(SPLITTER);
49
+ const [locale, isMobile] = serialized.split(SPLITTER);
54
50
 
55
51
  return {
56
52
  isMobile: isMobile === '1',
57
53
  locale: RouteVariants.isValidLocale(locale) ? (locale as Locales) : DEFAULT_VARIANTS.locale,
58
- theme: RouteVariants.isValidTheme(theme) ? (theme as any) : DEFAULT_VARIANTS.theme,
59
54
  };
60
55
  } catch {
61
56
  return { ...DEFAULT_VARIANTS };
@@ -68,6 +63,4 @@ export class RouteVariants {
68
63
  });
69
64
 
70
65
  private static isValidLocale = (locale: string): boolean => locales.includes(locale as any);
71
-
72
- private static isValidTheme = (theme: string): boolean => SUPPORTED_THEMES.includes(theme as any);
73
66
  }
@@ -25,5 +25,5 @@ export interface UserPathData {
25
25
  videos?: string; // User's home directory
26
26
  }
27
27
 
28
- export type ThemeMode = 'auto' | 'dark' | 'light';
28
+ export type ThemeMode = 'system' | 'dark' | 'light';
29
29
  export type ThemeAppearance = 'dark' | 'light' | string;
@@ -36,7 +36,7 @@ export interface LobeRuntimeAI {
36
36
  options?: TextToSpeechOptions,
37
37
  ) => Promise<ArrayBuffer>;
38
38
 
39
- // 模型管理相关接口
39
+ // Model management related interface
40
40
  pullModel?(params: PullModelParams, options?: ModelRequestOptions): Promise<Response>;
41
41
  }
42
42
  /* eslint-enabled */
@@ -479,6 +479,146 @@ describe('QwenAIStream', () => {
479
479
  `data: [{"function":{"arguments":"","name":"get_weather"},"id":"call_123","index":0,"type":"function"}]\n\n`,
480
480
  ]);
481
481
  });
482
+
483
+ it('should handle mixed text content followed by streaming tool calls (DeepSeek style)', async () => {
484
+ // This test simulates the stream pattern from DeepSeek models via Qwen API
485
+ // where text content is streamed first, followed by incremental tool call chunks
486
+ const mockOpenAIStream = new ReadableStream({
487
+ start(controller) {
488
+ // Text content chunks with role in first chunk
489
+ controller.enqueue({
490
+ choices: [
491
+ {
492
+ delta: { content: '看来', role: 'assistant' },
493
+ finish_reason: null,
494
+ index: 0,
495
+ },
496
+ ],
497
+ id: 'chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075',
498
+ model: 'deepseek-v3',
499
+ object: 'chat.completion.chunk',
500
+ created: 1767574524,
501
+ });
502
+ controller.enqueue({
503
+ choices: [
504
+ {
505
+ delta: { content: '我的' },
506
+ finish_reason: null,
507
+ index: 0,
508
+ },
509
+ ],
510
+ id: 'chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075',
511
+ model: 'deepseek-v3',
512
+ object: 'chat.completion.chunk',
513
+ created: 1767574524,
514
+ });
515
+ controller.enqueue({
516
+ choices: [
517
+ {
518
+ delta: { content: '函数调用格式有误。' },
519
+ finish_reason: null,
520
+ index: 0,
521
+ },
522
+ ],
523
+ id: 'chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075',
524
+ model: 'deepseek-v3',
525
+ object: 'chat.completion.chunk',
526
+ created: 1767574524,
527
+ });
528
+
529
+ // First tool call chunk with id, name, and partial arguments
530
+ controller.enqueue({
531
+ choices: [
532
+ {
533
+ delta: {
534
+ tool_calls: [
535
+ {
536
+ id: 'call_ff00c42325d74b979990cb',
537
+ type: 'function',
538
+ function: {
539
+ name: 'modelscope-time____get_current_time____mcp',
540
+ arguments: '{"',
541
+ },
542
+ index: 0,
543
+ },
544
+ ],
545
+ },
546
+ finish_reason: null,
547
+ index: 0,
548
+ },
549
+ ],
550
+ id: 'chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075',
551
+ model: 'deepseek-v3',
552
+ object: 'chat.completion.chunk',
553
+ created: 1767574524,
554
+ });
555
+
556
+ // Subsequent tool call chunk with only incremental arguments (no id)
557
+ controller.enqueue({
558
+ choices: [
559
+ {
560
+ delta: {
561
+ tool_calls: [
562
+ {
563
+ type: 'function',
564
+ function: {
565
+ arguments: 'timezone":"America/New_York"}',
566
+ },
567
+ index: 0,
568
+ },
569
+ ],
570
+ },
571
+ finish_reason: null,
572
+ index: 0,
573
+ },
574
+ ],
575
+ id: 'chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075',
576
+ model: 'deepseek-v3',
577
+ object: 'chat.completion.chunk',
578
+ created: 1767574524,
579
+ });
580
+
581
+ controller.close();
582
+ },
583
+ });
584
+
585
+ const onTextMock = vi.fn();
586
+ const onToolCallMock = vi.fn();
587
+
588
+ const protocolStream = QwenAIStream(mockOpenAIStream, {
589
+ callbacks: {
590
+ onText: onTextMock,
591
+ onToolsCalling: onToolCallMock,
592
+ },
593
+ });
594
+
595
+ const decoder = new TextDecoder();
596
+ const chunks = [];
597
+
598
+ // @ts-ignore
599
+ for await (const chunk of protocolStream) {
600
+ chunks.push(decoder.decode(chunk, { stream: true }));
601
+ }
602
+
603
+ // Verify complete chunks array
604
+ expect(chunks).toEqual([
605
+ 'id: chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075\n',
606
+ 'event: text\n',
607
+ 'data: "看来"\n\n',
608
+ 'id: chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075\n',
609
+ 'event: text\n',
610
+ 'data: "我的"\n\n',
611
+ 'id: chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075\n',
612
+ 'event: text\n',
613
+ 'data: "函数调用格式有误。"\n\n',
614
+ 'id: chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075\n',
615
+ 'event: tool_calls\n',
616
+ 'data: [{"function":{"arguments":"{\\"","name":"modelscope-time____get_current_time____mcp"},"id":"call_ff00c42325d74b979990cb","index":0,"type":"function"}]\n\n',
617
+ 'id: chatcmpl-4f901cb2-91bc-9763-a2c8-3ed58e9f4075\n',
618
+ 'event: tool_calls\n',
619
+ 'data: [{"function":{"arguments":"timezone\\":\\"America/New_York\\"}","name":null},"id":"call_ff00c42325d74b979990cb","index":0,"type":"function"}]\n\n',
620
+ ]);
621
+ });
482
622
  });
483
623
 
484
624
  describe('transformQwenStream', () => {
@@ -70,8 +70,18 @@ export const transformQwenStream = (
70
70
 
71
71
  if (item.delta?.tool_calls) {
72
72
  return {
73
- data: item.delta.tool_calls.map(
74
- (value, index): StreamToolCallChunkData => ({
73
+ data: item.delta.tool_calls.map((value, index): StreamToolCallChunkData => {
74
+ // Store first tool call's info in streamContext for subsequent chunks
75
+ // (similar pattern to OpenAI stream handling)
76
+ if (streamContext && !streamContext.tool && value.id && value.function?.name) {
77
+ streamContext.tool = {
78
+ id: value.id,
79
+ index: typeof value.index !== 'undefined' ? value.index : index,
80
+ name: value.function.name,
81
+ };
82
+ }
83
+
84
+ return {
75
85
  // Qwen models may send tool_calls in two separate chunks:
76
86
  // 1. First chunk: {id, name} without arguments
77
87
  // 2. Second chunk: {id, arguments} without name
@@ -81,11 +91,13 @@ export const transformQwenStream = (
81
91
  arguments: value.function?.arguments ?? '',
82
92
  name: value.function?.name ?? null,
83
93
  },
84
- id: value.id || generateToolCallId(index, value.function?.name),
94
+ // For incremental chunks without id, use the stored tool id from streamContext
95
+ id:
96
+ value.id || streamContext?.tool?.id || generateToolCallId(index, value.function?.name),
85
97
  index: typeof value.index !== 'undefined' ? value.index : index,
86
98
  type: value.type || 'function',
87
- }),
88
- ),
99
+ };
100
+ }),
89
101
  id: chunk.id,
90
102
  type: 'tool_calls',
91
103
  } as StreamProtocolToolCallChunk;
@@ -62,15 +62,15 @@ export interface OpenAIChatMessage {
62
62
  export interface ChatStreamPayload {
63
63
  apiMode?: 'chatCompletion' | 'responses';
64
64
  /**
65
- * 开启上下文缓存
65
+ * Enable context caching
66
66
  */
67
67
  enabledContextCaching?: boolean;
68
68
  /**
69
- * 是否开启搜索
69
+ * Whether to enable search
70
70
  */
71
71
  enabledSearch?: boolean;
72
72
  /**
73
- * @title 控制生成文本中的惩罚系数,用于减少重复性
73
+ * @title Penalty coefficient for reducing repetitiveness in generated text
74
74
  * @default 0
75
75
  */
76
76
  frequency_penalty?: number;
@@ -83,23 +83,23 @@ export interface ChatStreamPayload {
83
83
  */
84
84
  imageResolution?: '1K' | '2K' | '4K';
85
85
  /**
86
- * @title 生成文本的最大长度
86
+ * @title Maximum length of generated text
87
87
  */
88
88
  max_tokens?: number;
89
89
  /**
90
- * @title 聊天信息列表
90
+ * @title List of chat messages
91
91
  */
92
92
  messages: OpenAIChatMessage[];
93
93
  /**
94
- * @title 模型名称
94
+ * @title Model name
95
95
  */
96
96
  model: string;
97
97
  /**
98
- * @title 返回的文本数量
98
+ * @title Number of text responses to return
99
99
  */
100
100
  n?: number;
101
101
  /**
102
- * @title 控制生成文本中的惩罚系数,用于减少主题的变化
102
+ * @title Penalty coefficient for reducing topic variation in generated text
103
103
  * @default 0
104
104
  */
105
105
  presence_penalty?: number;
@@ -112,12 +112,12 @@ export interface ChatStreamPayload {
112
112
  responseMode?: 'stream' | 'json';
113
113
  response_format?: ChatResponseFormat;
114
114
  /**
115
- * @title 是否开启流式请求
115
+ * @title Whether to enable streaming requests
116
116
  * @default true
117
117
  */
118
118
  stream?: boolean;
119
119
  /**
120
- * @title 生成文本的随机度量,用于控制文本的创造性和多样性
120
+ * @title Randomness measure for generated text, controls creativity and diversity
121
121
  * @default 1
122
122
  */
123
123
  temperature?: number;
@@ -139,13 +139,13 @@ export interface ChatStreamPayload {
139
139
  tool_choice?: string;
140
140
  tools?: ChatCompletionTool[];
141
141
  /**
142
- * @title 控制生成文本中最高概率的单个令牌
142
+ * @title Controls the highest probability single token in generated text
143
143
  * @default 1
144
144
  */
145
145
  top_p?: number;
146
146
  truncation?: 'auto' | 'disabled';
147
147
  /**
148
- * @title Gemini URL 上下文获取工具开关
148
+ * @title Gemini URL context fetching tool toggle
149
149
  */
150
150
  urlContext?: boolean;
151
151
  verbosity?: 'low' | 'medium' | 'high';