@lobehub/lobehub 2.0.0-next.81 → 2.0.0-next.83

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 (78) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/changelog/v1.json +21 -0
  3. package/docs/usage/providers/comfyui.mdx +1 -1
  4. package/docs/usage/providers/comfyui.zh-CN.mdx +1 -1
  5. package/locales/ar/error.json +2 -2
  6. package/locales/ar/modelProvider.json +1 -1
  7. package/locales/ar/models.json +7 -1
  8. package/locales/bg-BG/error.json +2 -2
  9. package/locales/bg-BG/modelProvider.json +1 -1
  10. package/locales/bg-BG/models.json +7 -1
  11. package/locales/de-DE/error.json +2 -2
  12. package/locales/de-DE/modelProvider.json +1 -1
  13. package/locales/de-DE/models.json +7 -1
  14. package/locales/en-US/error.json +2 -2
  15. package/locales/en-US/modelProvider.json +1 -1
  16. package/locales/en-US/models.json +7 -1
  17. package/locales/es-ES/error.json +2 -2
  18. package/locales/es-ES/modelProvider.json +1 -1
  19. package/locales/es-ES/models.json +7 -1
  20. package/locales/fa-IR/error.json +2 -2
  21. package/locales/fa-IR/modelProvider.json +1 -1
  22. package/locales/fa-IR/models.json +7 -1
  23. package/locales/fr-FR/error.json +2 -2
  24. package/locales/fr-FR/modelProvider.json +1 -1
  25. package/locales/fr-FR/models.json +7 -1
  26. package/locales/it-IT/error.json +2 -2
  27. package/locales/it-IT/modelProvider.json +1 -1
  28. package/locales/it-IT/models.json +7 -1
  29. package/locales/ja-JP/error.json +2 -2
  30. package/locales/ja-JP/modelProvider.json +1 -1
  31. package/locales/ja-JP/models.json +7 -1
  32. package/locales/ko-KR/error.json +2 -2
  33. package/locales/ko-KR/modelProvider.json +1 -1
  34. package/locales/ko-KR/models.json +7 -1
  35. package/locales/nl-NL/error.json +2 -2
  36. package/locales/nl-NL/modelProvider.json +1 -1
  37. package/locales/nl-NL/models.json +7 -1
  38. package/locales/pl-PL/error.json +2 -2
  39. package/locales/pl-PL/modelProvider.json +1 -1
  40. package/locales/pl-PL/models.json +7 -1
  41. package/locales/pt-BR/error.json +2 -2
  42. package/locales/pt-BR/modelProvider.json +1 -1
  43. package/locales/pt-BR/models.json +7 -1
  44. package/locales/ru-RU/error.json +2 -2
  45. package/locales/ru-RU/modelProvider.json +1 -1
  46. package/locales/ru-RU/models.json +7 -1
  47. package/locales/tr-TR/error.json +2 -2
  48. package/locales/tr-TR/modelProvider.json +1 -1
  49. package/locales/tr-TR/models.json +7 -1
  50. package/locales/vi-VN/error.json +2 -2
  51. package/locales/vi-VN/modelProvider.json +1 -1
  52. package/locales/vi-VN/models.json +7 -1
  53. package/locales/zh-CN/error.json +2 -2
  54. package/locales/zh-CN/modelProvider.json +1 -1
  55. package/locales/zh-CN/models.json +7 -1
  56. package/locales/zh-TW/error.json +2 -2
  57. package/locales/zh-TW/modelProvider.json +1 -1
  58. package/locales/zh-TW/models.json +7 -1
  59. package/package.json +1 -1
  60. package/packages/model-bank/src/aiModels/novita.ts +3 -2
  61. package/packages/model-bank/src/aiModels/nvidia.ts +14 -0
  62. package/packages/model-bank/src/aiModels/ollamacloud.ts +23 -2
  63. package/packages/model-bank/src/aiModels/qwen.ts +88 -0
  64. package/packages/model-bank/src/aiModels/siliconcloud.ts +20 -0
  65. package/packages/model-bank/src/aiModels/vercelaigateway.ts +0 -17
  66. package/packages/model-bank/src/aiModels/volcengine.ts +1 -1
  67. package/packages/model-runtime/src/core/openaiCompatibleFactory/index.test.ts +108 -64
  68. package/packages/model-runtime/src/core/openaiCompatibleFactory/index.ts +150 -125
  69. package/packages/model-runtime/src/providers/newapi/index.test.ts +3 -75
  70. package/packages/model-runtime/src/providers/newapi/index.ts +1 -14
  71. package/packages/model-runtime/src/providers/openrouter/index.test.ts +3 -2
  72. package/packages/model-runtime/src/providers/openrouter/index.ts +1 -1
  73. package/src/app/[variants]/(main)/settings/provider/features/CreateNewProvider/index.tsx +19 -6
  74. package/src/app/[variants]/(main)/settings/provider/features/customProviderSdkOptions.ts +1 -0
  75. package/src/config/modelProviders/aihubmix.ts +1 -0
  76. package/src/config/modelProviders/newapi.ts +1 -0
  77. package/src/libs/trpc/client/lambda.ts +3 -1
  78. package/src/locales/default/modelProvider.ts +1 -1
@@ -236,6 +236,9 @@
236
236
  "MiniMaxAI/MiniMax-M1-80k": {
237
237
  "description": "MiniMax-M1 là mô hình suy luận chú ý hỗn hợp quy mô lớn với trọng số mã nguồn mở, sở hữu 456 tỷ 600 triệu tham số, mỗi Token có thể kích hoạt khoảng 45,9 tỷ tham số. Mô hình hỗ trợ ngữ cảnh siêu dài lên đến 1 triệu Token một cách nguyên bản, và thông qua cơ chế chú ý chớp nhoáng, trong các tác vụ sinh 100.000 Token tiết kiệm 75% lượng phép tính dấu chấm động so với DeepSeek R1. Đồng thời, MiniMax-M1 áp dụng kiến trúc MoE (chuyên gia hỗn hợp), kết hợp thuật toán CISPO và thiết kế chú ý hỗn hợp trong huấn luyện tăng cường hiệu quả, đạt hiệu suất hàng đầu trong ngành khi suy luận đầu vào dài và các kịch bản kỹ thuật phần mềm thực tế."
238
238
  },
239
+ "MiniMaxAI/MiniMax-M2": {
240
+ "description": "MiniMax-M2 tái định nghĩa hiệu suất cho các tác nhân AI. Đây là một mô hình MoE nhỏ gọn, nhanh chóng và tiết kiệm chi phí, với tổng số 230 tỷ tham số và 10 tỷ tham số kích hoạt, được thiết kế để đạt hiệu năng hàng đầu trong các tác vụ mã hóa và tác nhân, đồng thời duy trì trí tuệ nhân tạo tổng quát mạnh mẽ. Chỉ với 10 tỷ tham số kích hoạt, MiniMax-M2 có thể mang lại hiệu suất tương đương với các mô hình quy mô lớn, khiến nó trở thành lựa chọn lý tưởng cho các ứng dụng hiệu suất cao."
241
+ },
239
242
  "Moonshot-Kimi-K2-Instruct": {
240
243
  "description": "Tổng tham số 1T, tham số kích hoạt 32B. Trong các mô hình không suy nghĩ, đạt trình độ hàng đầu về kiến thức tiên tiến, toán học và lập trình, đặc biệt phù hợp với các tác vụ đại lý chung. Được tối ưu kỹ lưỡng cho tác vụ đại lý, không chỉ trả lời câu hỏi mà còn có thể thực hiện hành động. Phù hợp nhất cho trò chuyện ứng biến, trải nghiệm đại lý chung, là mô hình phản xạ không cần suy nghĩ lâu."
241
244
  },
@@ -1155,7 +1158,7 @@
1155
1158
  "description": "DeepSeek-R1 đã cải thiện đáng kể khả năng suy luận của mô hình ngay cả khi có rất ít dữ liệu gán nhãn. Trước khi đưa ra câu trả lời cuối cùng, mô hình sẽ xuất ra một chuỗi suy nghĩ nhằm nâng cao độ chính xác của câu trả lời cuối."
1156
1159
  },
1157
1160
  "deepseek/deepseek-r1-distill-llama-70b": {
1158
- "description": "DeepSeek-R1-Distill-Llama-70B là biến thể chưng cất và hiệu quả hơn của mô hình Llama 70B. duy trì hiệu suất mạnh mẽ trong các nhiệm vụ tạo văn bản, giảm chi phí tính toán để dễ dàng triển khai nghiên cứu. Được Groq phục vụ bằng phần cứng đơn vị xử lý ngôn ngữ (LPU) tùy chỉnh để cung cấp suy luận nhanh và hiệu quả."
1161
+ "description": "DeepSeek R1 Distill Llama 70B là một mô hình ngôn ngữ lớn dựa trên Llama3.3 70B, được tinh chỉnh bằng đầu ra từ DeepSeek R1, mang lại hiệu suất cạnh tranh tương đương với các hình tiên tiến quy lớn."
1159
1162
  },
1160
1163
  "deepseek/deepseek-r1-distill-llama-8b": {
1161
1164
  "description": "DeepSeek R1 Distill Llama 8B là một mô hình ngôn ngữ lớn đã được tinh chế dựa trên Llama-3.1-8B-Instruct, được đào tạo bằng cách sử dụng đầu ra từ DeepSeek R1."
@@ -2462,6 +2465,9 @@
2462
2465
  "minimax/minimax-m2": {
2463
2466
  "description": "Được sinh ra để phục vụ mã hóa hiệu quả và quy trình làm việc của Agent."
2464
2467
  },
2468
+ "minimaxai/minimax-m2": {
2469
+ "description": "MiniMax-M2 là một mô hình chuyên gia hỗn hợp (MoE) nhỏ gọn, nhanh chóng và tiết kiệm chi phí, với tổng số 230 tỷ tham số và 10 tỷ tham số kích hoạt, được thiết kế để đạt hiệu suất hàng đầu trong các tác vụ mã hóa và tác nhân, đồng thời duy trì trí tuệ nhân tạo tổng quát mạnh mẽ. Mô hình này thể hiện xuất sắc trong chỉnh sửa nhiều tệp, vòng lặp mã hóa-chạy-sửa lỗi, kiểm thử và sửa lỗi, cũng như các chuỗi công cụ liên kết dài phức tạp, là lựa chọn lý tưởng cho quy trình làm việc của nhà phát triển."
2470
+ },
2465
2471
  "ministral-3b-latest": {
2466
2472
  "description": "Ministral 3B là mô hình hàng đầu thế giới của Mistral về hiệu suất cạnh biên."
2467
2473
  },
@@ -99,10 +99,10 @@
99
99
  "SubscriptionKeyMismatch": "很抱歉,由于系统偶发故障,当前订阅用量暂时失效,请点击下方按钮恢复订阅,或邮件联系我们获取支持",
100
100
  "CreateMessageError": "很抱歉,消息未能正常发送,请复制内容后重新发送,刷新页面后此消息将不会保留",
101
101
  "LocationNotSupportError": "很抱歉,你的所在地区不支持此模型服务,可能是由于区域限制或服务未开通。请确认当前地区是否支持使用此服务,或尝试使用切换到其他地区后重试。",
102
- "InsufficientQuota": "很抱歉,该密钥的配额(quota)已达上限,请检查账户余额是否充足,或增大密钥配额后再试",
102
+ "InsufficientQuota": "很抱歉,该密钥的配额 (quota) 已达上限,请检查账户余额是否充足,或增大密钥配额后再试",
103
103
  "ModelNotFound": "很抱歉,无法请求到相应的模型,可能是模型不存在或者没有访问权限导致,请更换 API Key 或调整访问权限后重试",
104
104
  "ExceededContextWindow": "当前请求内容超出模型可处理的长度,请减少内容量后重试",
105
- "QuotaLimitReached": "很抱歉,当前 Token 用量或请求次数已达该密钥的配额(quota)上限,请增加该密钥的配额或稍后再试",
105
+ "QuotaLimitReached": "很抱歉,当前 Token 用量或请求次数已达该密钥的配额 (quota) 上限,请增加该密钥的配额或稍后再试",
106
106
  "PermissionDenied": "很抱歉,你没有权限访问该服务,请检查你的密钥是否有访问权限",
107
107
  "InvalidProviderAPIKey": "{{provider}} API Key 不正确或为空,请检查 {{provider}} API Key 后重试",
108
108
  "ProviderBizError": "请求 {{provider}} 服务出错,请根据以下信息排查或重试",
@@ -295,7 +295,7 @@
295
295
  },
296
296
  "helpDoc": "配置教程",
297
297
  "responsesApi": {
298
- "desc": "采用 OpenAI 新一代请求格式规范,解锁思维链等进阶特性",
298
+ "desc": "采用 OpenAI 新一代请求格式规范,解锁思维链等进阶特性 (仅 OpenAI 模型支持)",
299
299
  "title": "使用 Responses API 规范"
300
300
  },
301
301
  "waitingForMore": "更多模型正在 <1>计划接入</1> 中,敬请期待"
@@ -236,6 +236,9 @@
236
236
  "MiniMaxAI/MiniMax-M1-80k": {
237
237
  "description": "MiniMax-M1 是开源权重的大规模混合注意力推理模型,拥有 4560 亿参数,每个 Token 可激活约 459 亿参数。模型原生支持 100 万 Token 的超长上下文,并通过闪电注意力机制,在 10 万 Token 的生成任务中相比 DeepSeek R1 节省 75% 的浮点运算量。同时,MiniMax-M1 采用 MoE(混合专家)架构,结合 CISPO 算法与混合注意力设计的高效强化学习训练,在长输入推理与真实软件工程场景中实现了业界领先的性能。"
238
238
  },
239
+ "MiniMaxAI/MiniMax-M2": {
240
+ "description": "MiniMax-M2 为智能体重新定义了效率。它是一款紧凑、快速且经济高效的 MoE 模型,拥有 2300 亿总参数和 100 亿激活参数,专为编码和智能体任务的顶级性能而打造,同时保持强大的通用智能。仅需 100 亿激活参数,MiniMax-M2 就能提供与大规模模型相媲美的性能,使其成为高效率应用的理想选择。"
241
+ },
239
242
  "Moonshot-Kimi-K2-Instruct": {
240
243
  "description": "总参数 1T,激活参数 32B。 非思维模型中,在前沿知识、数学和编码方面达到了顶尖水平,更擅长通用 Agent 任务。 针对代理任务进行了精心优化,不仅能回答问题,还能采取行动。 最适用于即兴、通用聊天和代理体验,是一款无需长时间思考的反射级模型。"
241
244
  },
@@ -1155,7 +1158,7 @@
1155
1158
  "description": "DeepSeek-R1 在仅有极少标注数据的情况下,极大提升了模型推理能力。在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。"
1156
1159
  },
1157
1160
  "deepseek/deepseek-r1-distill-llama-70b": {
1158
- "description": "DeepSeek-R1-Distill-Llama-70B 70B Llama 模型的蒸馏、更高效变体。它在文本生成任务中保持强大性能,减少计算开销以便于部署和研究。由 Groq 使用其自定义语言处理单元 (LPU) 硬件提供服务,以提供快速高效的推理。"
1161
+ "description": "DeepSeek R1 Distill Llama 70B是基于Llama3.3 70B的大型语言模型,该模型利用DeepSeek R1输出的微调,实现了与大型前沿模型相当的竞争性能。"
1159
1162
  },
1160
1163
  "deepseek/deepseek-r1-distill-llama-8b": {
1161
1164
  "description": "DeepSeek R1 Distill Llama 8B 是一种基于 Llama-3.1-8B-Instruct 的蒸馏大语言模型,通过使用 DeepSeek R1 的输出进行训练而得。"
@@ -2462,6 +2465,9 @@
2462
2465
  "minimax/minimax-m2": {
2463
2466
  "description": "专为高效编码与 Agent 工作流而生"
2464
2467
  },
2468
+ "minimaxai/minimax-m2": {
2469
+ "description": "MiniMax-M2 是一款紧凑、快速且经济高效的混合专家(MoE)模型,拥有 2300 亿总参数和 100 亿激活参数,专为编码和智能体任务的顶级性能而打造,同时保持强大的通用智能。该模型在多文件编辑、编码-运行-修复闭环、测试校验修复以及复杂的长链接工具链方面表现优异,是开发者工作流的理想选择。"
2470
+ },
2465
2471
  "ministral-3b-latest": {
2466
2472
  "description": "Ministral 3B 是Mistral的世界顶级边缘模型。"
2467
2473
  },
@@ -102,7 +102,7 @@
102
102
  "SPII": "您的內容可能包含敏感個人身分資訊。為保護隱私,請移除相關敏感資訊後再試。",
103
103
  "default": "內容被阻擋:{{blockReason}}。請調整您的請求內容後再試。"
104
104
  },
105
- "InsufficientQuota": "很抱歉,該金鑰的配額已達上限,請檢查帳戶餘額是否充足,或增加金鑰配額後再試",
105
+ "InsufficientQuota": "很抱歉,該金鑰的配額已達上限,請檢查帳戶餘額是否充足,或提升金鑰配額後再試",
106
106
  "InvalidAccessCode": "密碼不正確或為空,請輸入正確的訪問密碼,或添加自定義 API 金鑰",
107
107
  "InvalidBedrockCredentials": "Bedrock 驗證未通過,請檢查 AccessKeyId/SecretAccessKey 後重試",
108
108
  "InvalidClerkUser": "很抱歉,你當前尚未登錄,請先登錄或註冊帳號後繼續操作",
@@ -131,7 +131,7 @@
131
131
  "PluginServerError": "外掛伺服器請求回傳錯誤。請根據下面的錯誤資訊檢查您的外掛描述檔案、外掛設定或伺服器實作",
132
132
  "PluginSettingsInvalid": "該外掛需要正確設定後才可以使用。請檢查您的設定是否正確",
133
133
  "ProviderBizError": "請求 {{provider}} 服務出錯,請根據以下資訊排查或重試",
134
- "QuotaLimitReached": "很抱歉,當前 Token 用量或請求次數已達該金鑰的配額上限,請增加該金鑰的配額或稍後再試",
134
+ "QuotaLimitReached": "很抱歉,目前的 Token 使用量或請求次數已達該金鑰的配額上限,請提升該金鑰的配額或稍後再試",
135
135
  "StreamChunkError": "流式請求的消息塊解析錯誤,請檢查當前 API 介面是否符合標準規範,或聯繫你的 API 供應商諮詢",
136
136
  "SubscriptionKeyMismatch": "很抱歉,由於系統偶發故障,當前訂閱用量暫時失效,請點擊下方按鈕恢復訂閱,或郵件聯繫我們獲取支持",
137
137
  "SubscriptionPlanLimit": "您的訂閱積分已用盡,無法使用該功能,請升級到更高計劃,或配置自訂模型 API 後繼續使用",
@@ -295,7 +295,7 @@
295
295
  },
296
296
  "helpDoc": "配置教程",
297
297
  "responsesApi": {
298
- "desc": "採用 OpenAI 新一代請求格式規範,解鎖思維鏈等進階特性",
298
+ "desc": "採用 OpenAI 新一代請求格式規範,解鎖思維鏈等進階功能(僅支援 OpenAI 模型)",
299
299
  "title": "使用 Responses API 規範"
300
300
  },
301
301
  "waitingForMore": "更多模型正在 <1>計劃接入</1> 中,敬請期待"
@@ -236,6 +236,9 @@
236
236
  "MiniMaxAI/MiniMax-M1-80k": {
237
237
  "description": "MiniMax-M1 是開源權重的大規模混合注意力推理模型,擁有 4560 億參數,每個 Token 可激活約 459 億參數。模型原生支援 100 萬 Token 的超長上下文,並透過閃電注意力機制,在 10 萬 Token 的生成任務中相比 DeepSeek R1 節省 75% 的浮點運算量。同時,MiniMax-M1 採用 MoE(混合專家)架構,結合 CISPO 演算法與混合注意力設計的高效強化學習訓練,在長輸入推理與真實軟體工程場景中實現了業界領先的性能。"
238
238
  },
239
+ "MiniMaxAI/MiniMax-M2": {
240
+ "description": "MiniMax-M2 為智慧體重新定義了效率。它是一款緊湊、快速且具高性價比的 MoE 模型,擁有 2300 億總參數與 100 億啟用參數,專為編碼與智慧體任務的頂級效能而打造,同時保有強大的通用智慧。僅需 100 億啟用參數,MiniMax-M2 即可提供媲美大型模型的效能,是高效率應用的理想選擇。"
241
+ },
239
242
  "Moonshot-Kimi-K2-Instruct": {
240
243
  "description": "總參數 1T,激活參數 32B。非思維模型中,在前沿知識、數學和編碼方面達到頂尖水平,更擅長通用 Agent 任務。針對代理任務進行了精心優化,不僅能回答問題,還能採取行動。最適用於即興、通用聊天和代理體驗,是一款無需長時間思考的反射級模型。"
241
244
  },
@@ -1155,7 +1158,7 @@
1155
1158
  "description": "DeepSeek-R1 在僅有極少標註資料的情況下,極大提升了模型推理能力。在輸出最終回答之前,模型會先輸出一段思維鏈內容,以提升最終答案的準確性。"
1156
1159
  },
1157
1160
  "deepseek/deepseek-r1-distill-llama-70b": {
1158
- "description": "DeepSeek-R1-Distill-Llama-70B 70B Llama 模型的蒸餾、更高效變體。它在文字生成任務中保持強大性能,減少計算開銷以便於部署和研究。由 Groq 使用其自訂語言處理單元 (LPU) 硬體提供服務,以提供快速高效的推理。"
1161
+ "description": "DeepSeek R1 Distill Llama 70B 是一款基於 Llama3.3 70B 的大型語言模型,透過 DeepSeek R1 的微調輸出,實現了與最先進大型模型相當的競爭效能。"
1159
1162
  },
1160
1163
  "deepseek/deepseek-r1-distill-llama-8b": {
1161
1164
  "description": "DeepSeek R1 Distill Llama 8B是一種基於Llama-3.1-8B-Instruct的蒸餾大語言模型,通過使用DeepSeek R1的輸出進行訓練而得。"
@@ -2462,6 +2465,9 @@
2462
2465
  "minimax/minimax-m2": {
2463
2466
  "description": "專為高效編碼與 Agent 工作流程而設計"
2464
2467
  },
2468
+ "minimaxai/minimax-m2": {
2469
+ "description": "MiniMax-M2 是一款緊湊、快速且具高性價比的混合專家(MoE)模型,擁有 2300 億總參數與 100 億啟用參數,專為編碼與智慧體任務的頂級效能而打造,同時保有強大的通用智慧。此模型在多檔案編輯、編碼-執行-修復閉環、測試驗證修復以及複雜的長鏈工具鏈方面表現優異,是開發者工作流程的理想選擇。"
2470
+ },
2465
2471
  "ministral-3b-latest": {
2466
2472
  "description": "Ministral 3B 是 Mistral 的全球頂尖邊緣模型。"
2467
2473
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/lobehub",
3
- "version": "2.0.0-next.81",
3
+ "version": "2.0.0-next.83",
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",
@@ -174,10 +174,11 @@ const novitaChatModels: AIChatModelCard[] = [
174
174
  contextWindowTokens: 131_072,
175
175
  displayName: 'OpenAI GPT OSS 120B',
176
176
  id: 'openai/gpt-oss-120b',
177
+ maxOutput: 32_768,
177
178
  pricing: {
178
179
  units: [
179
- { name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
180
- { name: 'textOutput', rate: 0.5, strategy: 'fixed', unit: 'millionTokens' },
180
+ { name: 'textInput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
181
+ { name: 'textOutput', rate: 0.25, strategy: 'fixed', unit: 'millionTokens' },
181
182
  ],
182
183
  },
183
184
  type: 'chat',
@@ -1,6 +1,20 @@
1
1
  import { AIChatModelCard } from '../types/aiModel';
2
2
 
3
3
  const nvidiaChatModels: AIChatModelCard[] = [
4
+ {
5
+ abilities: {
6
+ functionCall: true,
7
+ reasoning: true,
8
+ },
9
+ contextWindowTokens: 128_000,
10
+ description:
11
+ 'MiniMax-M2 是一款紧凑、快速且经济高效的混合专家(MoE)模型,拥有 2300 亿总参数和 100 亿激活参数,专为编码和智能体任务的顶级性能而打造,同时保持强大的通用智能。该模型在多文件编辑、编码-运行-修复闭环、测试校验修复以及复杂的长链接工具链方面表现优异,是开发者工作流的理想选择。',
12
+ displayName: 'MiniMax-M2',
13
+ enabled: true,
14
+ id: 'minimaxai/minimax-m2',
15
+ maxOutput: 16_384,
16
+ type: 'chat',
17
+ },
4
18
  {
5
19
  abilities: {
6
20
  functionCall: true,
@@ -1,6 +1,18 @@
1
1
  import { AIChatModelCard } from '../types/aiModel';
2
2
 
3
3
  const ollamaCloudModels: AIChatModelCard[] = [
4
+ {
5
+ abilities: {
6
+ functionCall: true,
7
+ reasoning: true,
8
+ },
9
+ contextWindowTokens: 200_000,
10
+ description: 'MiniMax M2 是专为编码和代理工作流程构建的高效大型语言模型。',
11
+ displayName: 'MiniMax M2',
12
+ enabled: true,
13
+ id: 'minimax-m2',
14
+ type: 'chat',
15
+ },
4
16
  {
5
17
  abilities: {
6
18
  functionCall: true,
@@ -36,7 +48,6 @@ const ollamaCloudModels: AIChatModelCard[] = [
36
48
  description:
37
49
  'DeepSeek V3.1:下一代推理模型,提升了复杂推理与链路思考能力,适合需要深入分析的任务。',
38
50
  displayName: 'DeepSeek V3.1',
39
- enabled: true,
40
51
  id: 'deepseek-v3.1:671b',
41
52
  type: 'chat',
42
53
  },
@@ -88,13 +99,23 @@ const ollamaCloudModels: AIChatModelCard[] = [
88
99
  id: 'qwen3-coder:480b',
89
100
  type: 'chat',
90
101
  },
102
+ {
103
+ abilities: {
104
+ functionCall: true,
105
+ vision: true,
106
+ },
107
+ contextWindowTokens: 262_144,
108
+ displayName: 'Qwen3 VL 235B Instruct',
109
+ id: 'qwen3-vl:235b-instruct',
110
+ type: 'chat',
111
+ },
91
112
  {
92
113
  abilities: {
93
114
  functionCall: true,
94
115
  reasoning: true,
95
116
  vision: true,
96
117
  },
97
- contextWindowTokens: 128_000,
118
+ contextWindowTokens: 262_144,
98
119
  displayName: 'Qwen3 VL 235B',
99
120
  id: 'qwen3-vl:235b',
100
121
  type: 'chat',
@@ -175,6 +175,51 @@ const qwenChatModels: AIChatModelCard[] = [
175
175
  },
176
176
  {
177
177
  abilities: {
178
+ functionCall: true,
179
+ reasoning: true,
180
+ },
181
+ contextWindowTokens: 202_752,
182
+ description: 'GLM系列模型是智谱AI专为智能体设计的混合推理模型,提供思考与非思考两种模式。',
183
+ displayName: 'GLM-4.6',
184
+ id: 'glm-4.6',
185
+ maxOutput: 16_384,
186
+ pricing: {
187
+ currency: 'CNY',
188
+ units: [
189
+ {
190
+ lookup: {
191
+ prices: {
192
+ '[0, 0.032]': 3,
193
+ '[0.032, infinity]': 4,
194
+ },
195
+ pricingParams: ['textInputRange'],
196
+ },
197
+ name: 'textInput',
198
+ strategy: 'lookup',
199
+ unit: 'millionTokens',
200
+ },
201
+ {
202
+ lookup: {
203
+ prices: {
204
+ '[0, 0.032]': 14,
205
+ '[0.032, infinity]': 16,
206
+ },
207
+ pricingParams: ['textInputRange'],
208
+ },
209
+ name: 'textOutput',
210
+ strategy: 'lookup',
211
+ unit: 'millionTokens',
212
+ },
213
+ ],
214
+ },
215
+ settings: {
216
+ extendParams: ['enableReasoning', 'reasoningBudgetToken'],
217
+ },
218
+ type: 'chat',
219
+ },
220
+ {
221
+ abilities: {
222
+ functionCall: true,
178
223
  reasoning: true,
179
224
  },
180
225
  contextWindowTokens: 131_072,
@@ -218,6 +263,7 @@ const qwenChatModels: AIChatModelCard[] = [
218
263
  },
219
264
  {
220
265
  abilities: {
266
+ functionCall: true,
221
267
  reasoning: true,
222
268
  },
223
269
  contextWindowTokens: 131_072,
@@ -1451,6 +1497,48 @@ const qwenChatModels: AIChatModelCard[] = [
1451
1497
  },
1452
1498
  type: 'chat',
1453
1499
  },
1500
+ {
1501
+ abilities: {
1502
+ vision: true,
1503
+ reasoning: true,
1504
+ },
1505
+ contextWindowTokens: 131_072,
1506
+ description: 'Qwen3 VL 32B 思考模式(开源版),针对高难度强推理与长视频理解场景,提供顶尖的视觉+文本推理能力。',
1507
+ displayName: 'Qwen3 VL 32B Thinking',
1508
+ id: 'qwen3-vl-32b-thinking',
1509
+ maxOutput: 32_768,
1510
+ organization: 'Qwen',
1511
+ pricing: {
1512
+ currency: 'CNY',
1513
+ units: [
1514
+ { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
1515
+ { name: 'textOutput', rate: 20, strategy: 'fixed', unit: 'millionTokens' },
1516
+ ],
1517
+ },
1518
+ settings: {
1519
+ extendParams: ['enableReasoning', 'reasoningBudgetToken'],
1520
+ },
1521
+ type: 'chat',
1522
+ },
1523
+ {
1524
+ abilities: {
1525
+ vision: true,
1526
+ },
1527
+ contextWindowTokens: 131_072,
1528
+ description: 'Qwen3 VL 32B 非思考模式(Instruct),适用于非思考指令场景,保持强大的视觉理解能力。',
1529
+ displayName: 'Qwen3 VL 32B Instruct',
1530
+ id: 'qwen3-vl-32b-instruct',
1531
+ maxOutput: 32_768,
1532
+ organization: 'Qwen',
1533
+ pricing: {
1534
+ currency: 'CNY',
1535
+ units: [
1536
+ { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
1537
+ { name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },
1538
+ ],
1539
+ },
1540
+ type: 'chat',
1541
+ },
1454
1542
  {
1455
1543
  config: {
1456
1544
  deploymentName: 'qwen-math-turbo-latest',
@@ -2,6 +2,26 @@ import { AIChatModelCard, AIImageModelCard } from '../types/aiModel';
2
2
 
3
3
  // https://siliconflow.cn/zh-cn/models
4
4
  const siliconcloudChatModels: AIChatModelCard[] = [
5
+ {
6
+ abilities: {
7
+ functionCall: true,
8
+ reasoning: true,
9
+ },
10
+ contextWindowTokens: 128_000,
11
+ description:
12
+ 'MiniMax-M2 为智能体重新定义了效率。它是一款紧凑、快速且经济高效的 MoE 模型,拥有 2300 亿总参数和 100 亿激活参数,专为编码和智能体任务的顶级性能而打造,同时保持强大的通用智能。仅需 100 亿激活参数,MiniMax-M2 就能提供与大规模模型相媲美的性能,使其成为高效率应用的理想选择。',
13
+ displayName: 'MiniMax-M2',
14
+ id: 'MiniMaxAI/MiniMax-M2',
15
+ pricing: {
16
+ currency: 'CNY',
17
+ units: [
18
+ { name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },
19
+ { name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },
20
+ ],
21
+ },
22
+ releasedAt: '2025-10-28',
23
+ type: 'chat',
24
+ },
5
25
  {
6
26
  abilities: {
7
27
  functionCall: true,
@@ -1565,23 +1565,6 @@ const vercelAIGatewayChatModels: AIChatModelCard[] = [
1565
1565
  },
1566
1566
  type: 'chat',
1567
1567
  },
1568
- {
1569
- abilities: {
1570
- functionCall: true,
1571
- },
1572
- contextWindowTokens: 131_072,
1573
- description:
1574
- 'DeepSeek-R1-Distill-Llama-70B 是 70B Llama 模型的蒸馏、更高效变体。它在文本生成任务中保持强大性能,减少计算开销以便于部署和研究。由 Groq 使用其自定义语言处理单元 (LPU) 硬件提供服务,以提供快速高效的推理。',
1575
- displayName: 'DeepSeek R1 Distill Llama 70B',
1576
- id: 'deepseek/deepseek-r1-distill-llama-70b',
1577
- pricing: {
1578
- units: [
1579
- { name: 'textInput', rate: 0.75, strategy: 'fixed', unit: 'millionTokens' },
1580
- { name: 'textOutput', rate: 0.99, strategy: 'fixed', unit: 'millionTokens' },
1581
- ],
1582
- },
1583
- type: 'chat',
1584
- },
1585
1568
  {
1586
1569
  abilities: {
1587
1570
  functionCall: true,
@@ -37,7 +37,7 @@ const doubaoChatModels: AIChatModelCard[] = [
37
37
  config: {
38
38
  deploymentName: 'kimi-k2-250905',
39
39
  },
40
- contextWindowTokens: 131_072,
40
+ contextWindowTokens: 262_144,
41
41
  description:
42
42
  'Kimi-K2 是一款Moonshot AI推出的具备超强代码和 Agent 能力的 MoE 架构基础模型,总参数 1T,激活参数 32B。在通用知识推理、编程、数学、Agent 等主要类别的基准性能测试中,K2 模型的性能超过其他主流开源模型。',
43
43
  displayName: 'Kimi K2',
@@ -1007,78 +1007,122 @@ describe('LobeOpenAICompatibleFactory', () => {
1007
1007
  });
1008
1008
 
1009
1009
  describe('responses routing', () => {
1010
- it('should route to Responses API when chatCompletion.useResponse is true', async () => {
1011
- const LobeMockProviderUseResponses = createOpenAICompatibleRuntime({
1012
- baseURL: 'https://api.test.com/v1',
1013
- chatCompletion: {
1014
- useResponse: true,
1015
- },
1016
- provider: ModelProvider.OpenAI,
1017
- });
1010
+ it(
1011
+ 'should route to Responses API when chatCompletion.useResponse is true',
1012
+ async () => {
1013
+ const LobeMockProviderUseResponses = createOpenAICompatibleRuntime({
1014
+ baseURL: 'https://api.test.com/v1',
1015
+ chatCompletion: {
1016
+ useResponse: true,
1017
+ },
1018
+ provider: ModelProvider.OpenAI,
1019
+ });
1018
1020
 
1019
- const inst = new LobeMockProviderUseResponses({ apiKey: 'test' });
1021
+ const inst = new LobeMockProviderUseResponses({ apiKey: 'test' });
1020
1022
 
1021
- // mock responses.create to return a stream-like with tee
1022
- const prod = new ReadableStream();
1023
- const debug = new ReadableStream();
1024
- const mockResponsesCreate = vi
1025
- .spyOn(inst['client'].responses, 'create')
1026
- .mockResolvedValue({ tee: () => [prod, debug] } as any);
1023
+ // Mock responses.create to return a proper stream-like object
1024
+ const mockResponsesCreate = vi
1025
+ .spyOn(inst['client'].responses, 'create')
1026
+ .mockResolvedValue({
1027
+ toReadableStream: () =>
1028
+ new ReadableStream({
1029
+ start(controller) {
1030
+ controller.close();
1031
+ },
1032
+ }),
1033
+ } as any);
1027
1034
 
1028
- await inst.chat({
1029
- messages: [{ content: 'hi', role: 'user' }],
1030
- model: 'any-model',
1031
- temperature: 0,
1032
- });
1035
+ // Mock getModelPricing to prevent async issues
1036
+ vi.mock('../../utils/model', () => ({
1037
+ getModelPricing: vi.fn().mockResolvedValue({}),
1038
+ }));
1033
1039
 
1034
- expect(mockResponsesCreate).toHaveBeenCalled();
1035
- });
1040
+ try {
1041
+ await inst.chat({
1042
+ messages: [{ content: 'hi', role: 'user' }],
1043
+ model: 'any-model',
1044
+ temperature: 0,
1045
+ });
1046
+ } catch (e) {
1047
+ // Catch errors from incomplete mocking, we only care that responses.create was called
1048
+ }
1036
1049
 
1037
- it('should route to Responses API when model matches useResponseModels', async () => {
1038
- const LobeMockProviderUseResponseModels = createOpenAICompatibleRuntime({
1039
- baseURL: 'https://api.test.com/v1',
1040
- chatCompletion: {
1041
- useResponseModels: ['special-model', /special-\w+/],
1042
- },
1043
- provider: ModelProvider.OpenAI,
1044
- });
1045
- const inst = new LobeMockProviderUseResponseModels({ apiKey: 'test' });
1046
- const spy = vi.spyOn(inst['client'].responses, 'create');
1047
- // Prevent hanging by mocking normal chat completion stream
1048
- vi.spyOn(inst['client'].chat.completions, 'create').mockResolvedValue(
1049
- new ReadableStream() as any,
1050
- );
1050
+ expect(mockResponsesCreate).toHaveBeenCalled();
1051
+ },
1052
+ { timeout: 10000 },
1053
+ );
1051
1054
 
1052
- // First invocation: model contains the string
1053
- spy.mockResolvedValueOnce({
1054
- tee: () => [new ReadableStream(), new ReadableStream()],
1055
- } as any);
1056
- await inst.chat({
1057
- messages: [{ content: 'hi', role: 'user' }],
1058
- model: 'prefix-special-model-suffix',
1059
- temperature: 0,
1060
- });
1061
- expect(spy).toHaveBeenCalledTimes(1);
1055
+ it(
1056
+ 'should route to Responses API when model matches useResponseModels',
1057
+ async () => {
1058
+ const LobeMockProviderUseResponseModels = createOpenAICompatibleRuntime({
1059
+ baseURL: 'https://api.test.com/v1',
1060
+ chatCompletion: {
1061
+ useResponseModels: ['special-model', /special-\w+/],
1062
+ },
1063
+ provider: ModelProvider.OpenAI,
1064
+ });
1065
+ const inst = new LobeMockProviderUseResponseModels({ apiKey: 'test' });
1066
+ const spy = vi.spyOn(inst['client'].responses, 'create');
1067
+ // Prevent hanging by mocking normal chat completion stream
1068
+ vi.spyOn(inst['client'].chat.completions, 'create').mockResolvedValue(
1069
+ new ReadableStream() as any,
1070
+ );
1062
1071
 
1063
- // Second invocation: model matches the RegExp
1064
- spy.mockResolvedValueOnce({
1065
- tee: () => [new ReadableStream(), new ReadableStream()],
1066
- } as any);
1067
- await inst.chat({
1068
- messages: [{ content: 'hi', role: 'user' }],
1069
- model: 'special-xyz',
1070
- temperature: 0,
1071
- });
1072
- expect(spy).toHaveBeenCalledTimes(2);
1072
+ // First invocation: model contains the string
1073
+ spy.mockResolvedValueOnce({
1074
+ toReadableStream: () =>
1075
+ new ReadableStream({
1076
+ start(controller) {
1077
+ controller.close();
1078
+ },
1079
+ }),
1080
+ } as any);
1081
+ try {
1082
+ await inst.chat({
1083
+ messages: [{ content: 'hi', role: 'user' }],
1084
+ model: 'prefix-special-model-suffix',
1085
+ temperature: 0,
1086
+ });
1087
+ } catch (e) {
1088
+ // Catch errors from incomplete mocking
1089
+ }
1090
+ expect(spy).toHaveBeenCalledTimes(1);
1073
1091
 
1074
- // Third invocation: model does not match any useResponseModels patterns
1075
- await inst.chat({
1076
- messages: [{ content: 'hi', role: 'user' }],
1077
- model: 'unrelated-model',
1078
- temperature: 0,
1079
- });
1080
- expect(spy).toHaveBeenCalledTimes(2); // Ensure no additional calls were made
1081
- });
1092
+ // Second invocation: model matches the RegExp
1093
+ spy.mockResolvedValueOnce({
1094
+ toReadableStream: () =>
1095
+ new ReadableStream({
1096
+ start(controller) {
1097
+ controller.close();
1098
+ },
1099
+ }),
1100
+ } as any);
1101
+ try {
1102
+ await inst.chat({
1103
+ messages: [{ content: 'hi', role: 'user' }],
1104
+ model: 'special-xyz',
1105
+ temperature: 0,
1106
+ });
1107
+ } catch (e) {
1108
+ // Catch errors from incomplete mocking
1109
+ }
1110
+ expect(spy).toHaveBeenCalledTimes(2);
1111
+
1112
+ // Third invocation: model does not match any useResponseModels patterns
1113
+ try {
1114
+ await inst.chat({
1115
+ messages: [{ content: 'hi', role: 'user' }],
1116
+ model: 'unrelated-model',
1117
+ temperature: 0,
1118
+ });
1119
+ } catch (e) {
1120
+ // Catch errors
1121
+ }
1122
+ expect(spy).toHaveBeenCalledTimes(2); // Ensure no additional calls were made
1123
+ },
1124
+ { timeout: 10000 },
1125
+ );
1082
1126
  });
1083
1127
 
1084
1128
  describe('DEBUG', () => {