@lobehub/chat 1.88.22 → 1.89.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 +50 -0
- package/Dockerfile +2 -0
- package/Dockerfile.database +2 -0
- package/Dockerfile.pglite +2 -0
- package/changelog/v1.json +18 -0
- package/docs/usage/providers/modelscope.mdx +113 -0
- package/docs/usage/providers/modelscope.zh-CN.mdx +133 -0
- package/locales/ar/welcome.json +1 -1
- package/locales/bg-BG/welcome.json +1 -1
- package/locales/de-DE/welcome.json +1 -1
- package/locales/en-US/welcome.json +1 -1
- package/locales/es-ES/welcome.json +1 -1
- package/locales/fa-IR/welcome.json +1 -1
- package/locales/fr-FR/welcome.json +1 -1
- package/locales/it-IT/welcome.json +1 -1
- package/locales/ja-JP/welcome.json +1 -1
- package/locales/ko-KR/welcome.json +1 -1
- package/locales/nl-NL/welcome.json +1 -1
- package/locales/pl-PL/welcome.json +1 -1
- package/locales/pt-BR/welcome.json +1 -1
- package/locales/ru-RU/welcome.json +1 -1
- package/locales/tr-TR/welcome.json +1 -1
- package/locales/vi-VN/welcome.json +1 -1
- package/locales/zh-CN/welcome.json +1 -1
- package/locales/zh-TW/welcome.json +1 -1
- package/package.json +1 -1
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatList/WelcomeChatItem/InboxWelcome/AddButton.tsx +32 -0
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatList/WelcomeChatItem/InboxWelcome/index.tsx +22 -2
- package/src/config/aiModels/index.ts +3 -0
- package/src/config/aiModels/modelscope.ts +63 -0
- package/src/config/llm.ts +6 -0
- package/src/config/modelProviders/index.ts +4 -0
- package/src/config/modelProviders/modelscope.ts +62 -0
- package/src/libs/model-runtime/modelscope/index.ts +69 -0
- package/src/libs/model-runtime/runtimeMap.ts +6 -4
- package/src/libs/model-runtime/types/type.ts +1 -0
- package/src/locales/default/welcome.ts +1 -1
- package/src/types/user/settings/keyVaults.ts +1 -0
package/CHANGELOG.md
CHANGED
@@ -2,6 +2,56 @@
|
|
2
2
|
|
3
3
|
# Changelog
|
4
4
|
|
5
|
+
## [Version 1.89.0](https://github.com/lobehub/lobe-chat/compare/v1.88.23...v1.89.0)
|
6
|
+
|
7
|
+
<sup>Released on **2025-06-01**</sup>
|
8
|
+
|
9
|
+
#### ✨ Features
|
10
|
+
|
11
|
+
- **misc**: Support ModelScope Provider.
|
12
|
+
|
13
|
+
<br/>
|
14
|
+
|
15
|
+
<details>
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
17
|
+
|
18
|
+
#### What's improved
|
19
|
+
|
20
|
+
- **misc**: Support ModelScope Provider, closes [#8026](https://github.com/lobehub/lobe-chat/issues/8026) ([7b91dfd](https://github.com/lobehub/lobe-chat/commit/7b91dfd))
|
21
|
+
|
22
|
+
</details>
|
23
|
+
|
24
|
+
<div align="right">
|
25
|
+
|
26
|
+
[](#readme-top)
|
27
|
+
|
28
|
+
</div>
|
29
|
+
|
30
|
+
### [Version 1.88.23](https://github.com/lobehub/lobe-chat/compare/v1.88.22...v1.88.23)
|
31
|
+
|
32
|
+
<sup>Released on **2025-05-31**</sup>
|
33
|
+
|
34
|
+
#### 💄 Styles
|
35
|
+
|
36
|
+
- **misc**: `+` in the welcome message can be clicked to create an assistant.
|
37
|
+
|
38
|
+
<br/>
|
39
|
+
|
40
|
+
<details>
|
41
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
42
|
+
|
43
|
+
#### Styles
|
44
|
+
|
45
|
+
- **misc**: `+` in the welcome message can be clicked to create an assistant, closes [#7984](https://github.com/lobehub/lobe-chat/issues/7984) ([9f07e4c](https://github.com/lobehub/lobe-chat/commit/9f07e4c))
|
46
|
+
|
47
|
+
</details>
|
48
|
+
|
49
|
+
<div align="right">
|
50
|
+
|
51
|
+
[](#readme-top)
|
52
|
+
|
53
|
+
</div>
|
54
|
+
|
5
55
|
### [Version 1.88.22](https://github.com/lobehub/lobe-chat/compare/v1.88.21...v1.88.22)
|
6
56
|
|
7
57
|
<sup>Released on **2025-05-31**</sup>
|
package/Dockerfile
CHANGED
@@ -186,6 +186,8 @@ ENV \
|
|
186
186
|
MINIMAX_API_KEY="" MINIMAX_MODEL_LIST="" \
|
187
187
|
# Mistral
|
188
188
|
MISTRAL_API_KEY="" MISTRAL_MODEL_LIST="" \
|
189
|
+
# ModelScope
|
190
|
+
MODELSCOPE_API_KEY="" MODELSCOPE_MODEL_LIST="" MODELSCOPE_PROXY_URL="" \
|
189
191
|
# Moonshot
|
190
192
|
MOONSHOT_API_KEY="" MOONSHOT_MODEL_LIST="" MOONSHOT_PROXY_URL="" \
|
191
193
|
# Novita
|
package/Dockerfile.database
CHANGED
@@ -230,6 +230,8 @@ ENV \
|
|
230
230
|
MINIMAX_API_KEY="" MINIMAX_MODEL_LIST="" \
|
231
231
|
# Mistral
|
232
232
|
MISTRAL_API_KEY="" MISTRAL_MODEL_LIST="" \
|
233
|
+
# ModelScope
|
234
|
+
MODELSCOPE_API_KEY="" MODELSCOPE_MODEL_LIST="" MODELSCOPE_PROXY_URL="" \
|
233
235
|
# Moonshot
|
234
236
|
MOONSHOT_API_KEY="" MOONSHOT_MODEL_LIST="" MOONSHOT_PROXY_URL="" \
|
235
237
|
# Novita
|
package/Dockerfile.pglite
CHANGED
@@ -188,6 +188,8 @@ ENV \
|
|
188
188
|
MINIMAX_API_KEY="" MINIMAX_MODEL_LIST="" \
|
189
189
|
# Mistral
|
190
190
|
MISTRAL_API_KEY="" MISTRAL_MODEL_LIST="" \
|
191
|
+
# ModelScope
|
192
|
+
MODELSCOPE_API_KEY="" MODELSCOPE_MODEL_LIST="" MODELSCOPE_PROXY_URL="" \
|
191
193
|
# Moonshot
|
192
194
|
MOONSHOT_API_KEY="" MOONSHOT_MODEL_LIST="" MOONSHOT_PROXY_URL="" \
|
193
195
|
# Novita
|
package/changelog/v1.json
CHANGED
@@ -1,4 +1,22 @@
|
|
1
1
|
[
|
2
|
+
{
|
3
|
+
"children": {
|
4
|
+
"features": [
|
5
|
+
"Support ModelScope Provider."
|
6
|
+
]
|
7
|
+
},
|
8
|
+
"date": "2025-06-01",
|
9
|
+
"version": "1.89.0"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"children": {
|
13
|
+
"improvements": [
|
14
|
+
"+ in the welcome message can be clicked to create an assistant."
|
15
|
+
]
|
16
|
+
},
|
17
|
+
"date": "2025-05-31",
|
18
|
+
"version": "1.88.23"
|
19
|
+
},
|
2
20
|
{
|
3
21
|
"children": {
|
4
22
|
"improvements": [
|
@@ -0,0 +1,113 @@
|
|
1
|
+
---
|
2
|
+
title: ModelScope Provider Setup
|
3
|
+
description: Learn how to configure and use ModelScope provider in LobeChat
|
4
|
+
tags:
|
5
|
+
- ModelScope
|
6
|
+
---
|
7
|
+
|
8
|
+
# ModelScope Provider Setup
|
9
|
+
|
10
|
+
ModelScope (魔塔社区) is Alibaba's open-source model community that provides access to various AI models. This guide will help you set up the ModelScope provider in LobeChat.
|
11
|
+
|
12
|
+
## Prerequisites
|
13
|
+
|
14
|
+
Before using ModelScope API, you need to:
|
15
|
+
|
16
|
+
1. **Create a ModelScope Account**
|
17
|
+
- Visit [ModelScope](https://www.modelscope.cn/)
|
18
|
+
- Register for an account
|
19
|
+
|
20
|
+
2. **Bind Alibaba Cloud Account**
|
21
|
+
- **Important**: ModelScope API requires binding with an Alibaba Cloud account
|
22
|
+
- Visit your [ModelScope Access Token page](https://www.modelscope.cn/my/myaccesstoken)
|
23
|
+
- Follow the instructions to bind your Alibaba Cloud account
|
24
|
+
- This step is mandatory for API access
|
25
|
+
|
26
|
+
3. **Get API Token**
|
27
|
+
- After binding your Alibaba Cloud account, generate an API token
|
28
|
+
- Copy the token for use in LobeChat
|
29
|
+
|
30
|
+
## Configuration
|
31
|
+
|
32
|
+
### Environment Variables
|
33
|
+
|
34
|
+
Add the following environment variables to your `.env` file:
|
35
|
+
|
36
|
+
```bash
|
37
|
+
# Enable ModelScope provider
|
38
|
+
ENABLED_MODELSCOPE=1
|
39
|
+
|
40
|
+
# ModelScope API key (required)
|
41
|
+
MODELSCOPE_API_KEY=your_modelscope_api_token
|
42
|
+
|
43
|
+
# Optional: Custom model list (comma-separated)
|
44
|
+
MODELSCOPE_MODEL_LIST=deepseek-ai/DeepSeek-V3-0324,Qwen/Qwen3-235B-A22B
|
45
|
+
|
46
|
+
# Optional: Proxy URL if needed
|
47
|
+
MODELSCOPE_PROXY_URL=https://your-proxy-url
|
48
|
+
```
|
49
|
+
|
50
|
+
### Docker Configuration
|
51
|
+
|
52
|
+
If using Docker, add the ModelScope environment variables to your `docker-compose.yml`:
|
53
|
+
|
54
|
+
```yaml
|
55
|
+
environment:
|
56
|
+
- ENABLED_MODELSCOPE=1
|
57
|
+
- MODELSCOPE_API_KEY=your_modelscope_api_token
|
58
|
+
- MODELSCOPE_MODEL_LIST=deepseek-ai/DeepSeek-V3-0324,Qwen/Qwen3-235B-A22B
|
59
|
+
```
|
60
|
+
|
61
|
+
## Available Models
|
62
|
+
|
63
|
+
ModelScope provides access to various models including:
|
64
|
+
|
65
|
+
- **DeepSeek Models**: DeepSeek-V3, DeepSeek-R1 series
|
66
|
+
- **Qwen Models**: Qwen3 series, Qwen2.5 series
|
67
|
+
- **Llama Models**: Meta-Llama-3 series
|
68
|
+
- **Other Models**: Various open-source models
|
69
|
+
|
70
|
+
## Troubleshooting
|
71
|
+
|
72
|
+
### Common Issues
|
73
|
+
|
74
|
+
1. **"Please bind your Alibaba Cloud account before use" Error**
|
75
|
+
- This means you haven't bound your Alibaba Cloud account to ModelScope
|
76
|
+
- Visit [ModelScope Access Token page](https://www.modelscope.cn/my/myaccesstoken)
|
77
|
+
- Complete the Alibaba Cloud account binding process
|
78
|
+
|
79
|
+
2. **401 Authentication Error**
|
80
|
+
- Check if your API token is correct
|
81
|
+
- Ensure the token hasn't expired
|
82
|
+
- Verify that your Alibaba Cloud account is properly bound
|
83
|
+
|
84
|
+
3. **Model Not Available**
|
85
|
+
- Some models may require additional permissions
|
86
|
+
- Check the model's page on ModelScope for access requirements
|
87
|
+
|
88
|
+
### Debug Mode
|
89
|
+
|
90
|
+
Enable debug mode to see detailed logs:
|
91
|
+
|
92
|
+
```bash
|
93
|
+
DEBUG_MODELSCOPE_CHAT_COMPLETION=1
|
94
|
+
```
|
95
|
+
|
96
|
+
## Notes
|
97
|
+
|
98
|
+
- ModelScope API is compatible with OpenAI API format
|
99
|
+
- The service is primarily designed for users in China
|
100
|
+
- Some models may have usage limitations or require additional verification
|
101
|
+
- API responses are in Chinese by default for some models
|
102
|
+
|
103
|
+
## Support
|
104
|
+
|
105
|
+
For ModelScope-specific issues:
|
106
|
+
|
107
|
+
- Visit [ModelScope Documentation](https://www.modelscope.cn/docs)
|
108
|
+
- Check [ModelScope Community](https://www.modelscope.cn/community)
|
109
|
+
|
110
|
+
For LobeChat integration issues:
|
111
|
+
|
112
|
+
- Check our [GitHub Issues](https://github.com/lobehub/lobe-chat/issues)
|
113
|
+
- Join our community discussions
|
@@ -0,0 +1,133 @@
|
|
1
|
+
---
|
2
|
+
title: ModelScope 提供商配置
|
3
|
+
description: 学习如何在 LobeChat 中配置和使用 ModelScope 提供商
|
4
|
+
tags:
|
5
|
+
- ModelScope
|
6
|
+
---
|
7
|
+
|
8
|
+
# ModelScope 提供商配置
|
9
|
+
|
10
|
+
ModelScope(魔塔社区)是阿里巴巴的开源模型社区,提供各种 AI 模型的访问服务。本指南将帮助您在 LobeChat 中设置 ModelScope 提供商。
|
11
|
+
|
12
|
+
## 前置条件
|
13
|
+
|
14
|
+
在使用 ModelScope API 之前,您需要:
|
15
|
+
|
16
|
+
1. **创建 ModelScope 账户**
|
17
|
+
- 访问 [ModelScope](https://www.modelscope.cn/)
|
18
|
+
- 注册账户
|
19
|
+
|
20
|
+
2. **绑定阿里云账户**
|
21
|
+
- **重要**:ModelScope API 需要绑定阿里云账户
|
22
|
+
- 访问您的 [ModelScope 访问令牌页面](https://www.modelscope.cn/my/myaccesstoken)
|
23
|
+
- 按照说明绑定您的阿里云账户
|
24
|
+
- 此步骤是 API 访问的必要条件
|
25
|
+
|
26
|
+
3. **获取 API 令牌**
|
27
|
+
- 绑定阿里云账户后,生成 API 令牌
|
28
|
+
- 复制令牌以在 LobeChat 中使用
|
29
|
+
|
30
|
+
## 配置
|
31
|
+
|
32
|
+
### 环境变量
|
33
|
+
|
34
|
+
在您的 `.env` 文件中添加以下环境变量:
|
35
|
+
|
36
|
+
```bash
|
37
|
+
# 启用 ModelScope 提供商
|
38
|
+
ENABLED_MODELSCOPE=1
|
39
|
+
|
40
|
+
# ModelScope API 密钥(必需)
|
41
|
+
MODELSCOPE_API_KEY=your_modelscope_api_token
|
42
|
+
|
43
|
+
# 可选:自定义模型列表(逗号分隔)
|
44
|
+
MODELSCOPE_MODEL_LIST=deepseek-ai/DeepSeek-V3-0324,Qwen/Qwen3-235B-A22B
|
45
|
+
|
46
|
+
# 可选:代理 URL(如需要)
|
47
|
+
MODELSCOPE_PROXY_URL=https://your-proxy-url
|
48
|
+
```
|
49
|
+
|
50
|
+
### Docker 配置
|
51
|
+
|
52
|
+
如果使用 Docker,请在您的 `docker-compose.yml` 中添加 ModelScope 环境变量:
|
53
|
+
|
54
|
+
```yaml
|
55
|
+
environment:
|
56
|
+
- ENABLED_MODELSCOPE=1
|
57
|
+
- MODELSCOPE_API_KEY=your_modelscope_api_token
|
58
|
+
- MODELSCOPE_MODEL_LIST=deepseek-ai/DeepSeek-V3-0324,Qwen/Qwen3-235B-A22B
|
59
|
+
```
|
60
|
+
|
61
|
+
## 可用模型
|
62
|
+
|
63
|
+
ModelScope 提供各种模型的访问,包括:
|
64
|
+
|
65
|
+
- **DeepSeek 模型**:DeepSeek-V3、DeepSeek-R1 系列
|
66
|
+
- **Qwen 模型**:Qwen3 系列、Qwen2.5 系列
|
67
|
+
- **Llama 模型**:Meta-Llama-3 系列
|
68
|
+
- **其他模型**:各种开源模型
|
69
|
+
|
70
|
+
## 故障排除
|
71
|
+
|
72
|
+
### 常见问题
|
73
|
+
|
74
|
+
1. **"请先绑定阿里云账户后使用" 错误**
|
75
|
+
- 这意味着您还没有将阿里云账户绑定到 ModelScope
|
76
|
+
- 访问 [ModelScope 访问令牌页面](https://www.modelscope.cn/my/myaccesstoken)
|
77
|
+
- 完成阿里云账户绑定流程
|
78
|
+
|
79
|
+
2. **401 认证错误**
|
80
|
+
- 检查您的 API 令牌是否正确
|
81
|
+
- 确保令牌没有过期
|
82
|
+
- 验证您的阿里云账户是否正确绑定
|
83
|
+
|
84
|
+
3. **模型不可用**
|
85
|
+
- 某些模型可能需要额外权限
|
86
|
+
- 查看 ModelScope 上模型页面的访问要求
|
87
|
+
|
88
|
+
### 调试模式
|
89
|
+
|
90
|
+
启用调试模式以查看详细日志:
|
91
|
+
|
92
|
+
```bash
|
93
|
+
DEBUG_MODELSCOPE_CHAT_COMPLETION=1
|
94
|
+
```
|
95
|
+
|
96
|
+
## 注意事项
|
97
|
+
|
98
|
+
- ModelScope API 与 OpenAI API 格式兼容
|
99
|
+
- 该服务主要面向中国用户设计
|
100
|
+
- 某些模型可能有使用限制或需要额外验证
|
101
|
+
- 某些模型的 API 响应默认为中文
|
102
|
+
|
103
|
+
## 支持
|
104
|
+
|
105
|
+
对于 ModelScope 特定问题:
|
106
|
+
|
107
|
+
- 访问 [ModelScope 文档](https://www.modelscope.cn/docs)
|
108
|
+
- 查看 [ModelScope 社区](https://www.modelscope.cn/community)
|
109
|
+
|
110
|
+
对于 LobeChat 集成问题:
|
111
|
+
|
112
|
+
- 查看我们的 [GitHub Issues](https://github.com/lobehub/lobe-chat/issues)
|
113
|
+
- 加入我们的社区讨论
|
114
|
+
|
115
|
+
## 模型 ID 格式
|
116
|
+
|
117
|
+
ModelScope 使用命名空间前缀格式的模型 ID,例如:
|
118
|
+
|
119
|
+
```
|
120
|
+
deepseek-ai/DeepSeek-V3-0324
|
121
|
+
deepseek-ai/DeepSeek-R1-0528
|
122
|
+
Qwen/Qwen3-235B-A22B
|
123
|
+
Qwen/Qwen3-32B
|
124
|
+
```
|
125
|
+
|
126
|
+
在配置模型列表时,请使用完整的模型 ID 格式。
|
127
|
+
|
128
|
+
## API 限制
|
129
|
+
|
130
|
+
- ModelScope API 有速率限制
|
131
|
+
- 某些模型可能需要特殊权限
|
132
|
+
- 建议在生产环境中监控 API 使用情况
|
133
|
+
- 部分高级模型可能需要付费使用
|
package/locales/ar/welcome.json
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "تغيير",
|
5
5
|
"title": "إضافة توصيات المساعدين:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "أنا مساعدك الذكي الشخصي {{appName}}، كيف يمكنني مساعدتك
|
7
|
+
"defaultMessage": "أنا مساعدك الذكي الشخصي {{appName}}، كيف يمكنني مساعدتك الآن؟<br />إذا كنت بحاجة إلى مساعد أكثر احترافية أو تخصيصًا، يمكنك النقر على <plus /> لإنشاء مساعد مخصص",
|
8
8
|
"defaultMessageWithoutCreate": "أنا مساعدك الذكي الشخصي {{appName}}، كيف يمكنني مساعدتك الآن؟",
|
9
9
|
"qa": {
|
10
10
|
"q01": "ما هو LobeHub؟",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Смени",
|
5
5
|
"title": "Препоръчване на нови асистенти:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Аз съм вашият личен интелигентен асистент {{appName}}. Как мога да ви помогна
|
7
|
+
"defaultMessage": "Аз съм вашият личен интелигентен асистент {{appName}}. Как мога да ви помогна сега?<br />Ако имате нужда от по-професионален или персонализиран асистент, можете да кликнете на <plus />, за да създадете персонализиран асистент.",
|
8
8
|
"defaultMessageWithoutCreate": "Аз съм вашият личен интелигентен асистент {{appName}}. Как мога да ви помогна сега?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "Какво е LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Ersetzen",
|
5
5
|
"title": "Neue Assistentenempfehlung:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Ich bin Ihr persönlicher intelligenter Assistent {{appName}}. Wie kann ich Ihnen jetzt helfen
|
7
|
+
"defaultMessage": "Ich bin Ihr persönlicher intelligenter Assistent {{appName}}. Wie kann ich Ihnen jetzt helfen?<br />Wenn Sie einen professionelleren oder maßgeschneiderten Assistenten benötigen, klicken Sie auf <plus />, um einen benutzerdefinierten Assistenten zu erstellen.",
|
8
8
|
"defaultMessageWithoutCreate": "Ich bin Ihr persönlicher intelligenter Assistent {{appName}}. Wie kann ich Ihnen jetzt helfen?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "Was ist LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Replace Batch",
|
5
5
|
"title": "New Assistant Recommendations:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "I am your personal intelligent assistant {{appName}}. How can I assist you today
|
7
|
+
"defaultMessage": "I am your personal intelligent assistant {{appName}}. How can I assist you today?<br />If you need a more professional or customized assistant, you can click <plus /> to create a custom assistant.",
|
8
8
|
"defaultMessageWithoutCreate": "I am your personal intelligent assistant {{appName}}. How can I assist you today?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "What is LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Cambiar grupo",
|
5
5
|
"title": "Recomendación de asistentes nuevos:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Soy su asistente inteligente personal {{appName}}. ¿En qué puedo ayudarle ahora
|
7
|
+
"defaultMessage": "Soy su asistente inteligente personal {{appName}}. ¿En qué puedo ayudarle ahora?<br />Si necesita un asistente más profesional o personalizado, puede hacer clic en <plus /> para crear un asistente personalizado.",
|
8
8
|
"defaultMessageWithoutCreate": "Soy su asistente inteligente personal {{appName}}. ¿En qué puedo ayudarle ahora?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "¿Qué es LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "تغییر دسته",
|
5
5
|
"title": "دستیارهای جدید پیشنهادی:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "من دستیار هوشمند شخصی شما {{appName}} هستم، چطور میتوانم به شما کمک
|
7
|
+
"defaultMessage": "من دستیار هوشمند شخصی شما {{appName}} هستم، چطور میتوانم به شما کمک کنم؟<br />اگر به دستیارهای حرفهایتر یا سفارشی نیاز دارید، میتوانید با کلیک بر روی <plus /> یک دستیار سفارشی ایجاد کنید.",
|
8
8
|
"defaultMessageWithoutCreate": "من دستیار هوشمند شخصی شما {{appName}} هستم، چطور میتوانم به شما کمک کنم؟",
|
9
9
|
"qa": {
|
10
10
|
"q01": "LobeHub چیست؟",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Remplacer",
|
5
5
|
"title": "Nouvelles recommandations d'assistants :"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Je suis votre assistant intelligent personnel {{appName}}. Que puis-je faire pour vous maintenant
|
7
|
+
"defaultMessage": "Je suis votre assistant intelligent personnel {{appName}}. Que puis-je faire pour vous maintenant ?<br />Si vous avez besoin d'un assistant plus professionnel ou personnalisé, vous pouvez cliquer sur <plus /> pour créer un assistant sur mesure.",
|
8
8
|
"defaultMessageWithoutCreate": "Je suis votre assistant intelligent personnel {{appName}}. Que puis-je faire pour vous maintenant ?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "Qu'est-ce que LobeHub ?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Cambia gruppo",
|
5
5
|
"title": "Nuova raccomandazione assistente:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Sono il tuo assistente intelligente personale {{appName}}. Come posso aiutarti adesso
|
7
|
+
"defaultMessage": "Sono il tuo assistente intelligente personale {{appName}}. Come posso aiutarti adesso?<br />Se hai bisogno di un assistente più professionale o personalizzato, puoi cliccare su <plus /> per creare un assistente personalizzato.",
|
8
8
|
"defaultMessageWithoutCreate": "Sono il tuo assistente intelligente personale {{appName}}. Come posso aiutarti adesso?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "Che cos'è LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "別のグループ",
|
5
5
|
"title": "新しいアシスタントのおすすめ:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "私はあなたのプライベートインテリジェントアシスタント {{appName}}
|
7
|
+
"defaultMessage": "私はあなたのプライベートインテリジェントアシスタント {{appName}} です。今、何をお手伝いできますか?<br />より専門的またはカスタマイズされたアシスタントが必要な場合は、<plus /> をクリックしてカスタムアシスタントを作成してください。",
|
8
8
|
"defaultMessageWithoutCreate": "私はあなたのプライベートインテリジェントアシスタント {{appName}} です。今、何をお手伝いできますか?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "LobeHub とは何ですか?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "다른 것으로 바꾸기",
|
5
5
|
"title": "새로운 보조 추천: "
|
6
6
|
},
|
7
|
-
"defaultMessage": "저는 당신의 개인 스마트 어시스턴트 {{appName}}입니다. 지금 무엇을
|
7
|
+
"defaultMessage": "저는 당신의 개인 스마트 어시스턴트 {{appName}}입니다. 지금 무엇을 도와드릴까요?<br />더 전문적이거나 맞춤형 어시스턴트가 필요하시면 <plus />를 클릭하여 사용자 정의 어시스턴트를 생성하세요.",
|
8
8
|
"defaultMessageWithoutCreate": "저는 당신의 개인 스마트 어시스턴트 {{appName}}입니다. 지금 무엇을 도와드릴까요?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "LobeHub란 무엇인가요?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Vervang een groep",
|
5
5
|
"title": "Nieuwe aanbeveling assistent: "
|
6
6
|
},
|
7
|
-
"defaultMessage": "Ik ben uw persoonlijke slimme assistent {{appName}}. Hoe kan ik u nu helpen
|
7
|
+
"defaultMessage": "Ik ben uw persoonlijke slimme assistent {{appName}}. Hoe kan ik u nu helpen?<br />Als u een meer professionele of op maat gemaakte assistent nodig heeft, kunt u op <plus /> klikken om een aangepaste assistent te maken.",
|
8
8
|
"defaultMessageWithoutCreate": "Ik ben uw persoonlijke slimme assistent {{appName}}. Hoe kan ik u nu helpen?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "Wat is LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Zmień",
|
5
5
|
"title": "Nowe zalecenia asystenta:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Jestem Twoim osobistym inteligentnym asystentem {{appName}}. W czym mogę Ci teraz pomóc
|
7
|
+
"defaultMessage": "Jestem Twoim osobistym inteligentnym asystentem {{appName}}. W czym mogę Ci teraz pomóc?<br />Jeśli potrzebujesz bardziej profesjonalnego lub dostosowanego asystenta, kliknij <plus />, aby utworzyć niestandardowego asystenta.",
|
8
8
|
"defaultMessageWithoutCreate": "Jestem Twoim osobistym inteligentnym asystentem {{appName}}. W czym mogę Ci teraz pomóc?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "Czym jest LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Trocar",
|
5
5
|
"title": "Recomendação de assistentes adicionais:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Eu sou seu assistente inteligente pessoal {{appName}}. Como posso ajudá-lo agora
|
7
|
+
"defaultMessage": "Eu sou seu assistente inteligente pessoal {{appName}}. Como posso ajudá-lo agora?<br />Se você precisar de um assistente mais profissional ou personalizado, clique em <plus /> para criar um assistente personalizado.",
|
8
8
|
"defaultMessageWithoutCreate": "Eu sou seu assistente inteligente pessoal {{appName}}. Como posso ajudá-lo agora?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "O que é o LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Заменить",
|
5
5
|
"title": "Рекомендации новых агентов:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Я ваш личный интеллектуальный помощник {{appName}}. Чем я могу вам помочь
|
7
|
+
"defaultMessage": "Я ваш личный интеллектуальный помощник {{appName}}. Чем я могу вам помочь сейчас?<br />Если вам нужен более профессиональный или индивидуальный помощник, нажмите <plus />, чтобы создать кастомного помощника.",
|
8
8
|
"defaultMessageWithoutCreate": "Я ваш личный интеллектуальный помощник {{appName}}. Чем я могу вам помочь сейчас?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "Что такое LobeHub?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Başka bir grup",
|
5
5
|
"title": "Yeni Asistan Önerileri:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "Ben sizin özel akıllı asistanınız {{appName}}. Şu anda size nasıl yardımcı olabilirim
|
7
|
+
"defaultMessage": "Ben sizin özel akıllı asistanınız {{appName}}. Şu anda size nasıl yardımcı olabilirim?<br />Daha profesyonel veya özel bir asistan istiyorsanız, özel asistan oluşturmak için <plus /> butonuna tıklayabilirsiniz.",
|
8
8
|
"defaultMessageWithoutCreate": "Ben sizin özel akıllı asistanınız {{appName}}. Şu anda size nasıl yardımcı olabilirim?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "LobeHub nedir?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "Thay đổi",
|
5
5
|
"title": "Đề xuất trợ lý mới: "
|
6
6
|
},
|
7
|
-
"defaultMessage": "Tôi là trợ lý thông minh cá nhân của bạn {{appName}}. Xin hỏi tôi có thể giúp gì cho bạn ngay bây gi
|
7
|
+
"defaultMessage": "Tôi là trợ lý thông minh cá nhân của bạn {{appName}}. Xin hỏi tôi có thể giúp gì cho bạn ngay bây giờ?<br />Nếu bạn cần một trợ lý chuyên nghiệp hoặc tùy chỉnh hơn, hãy nhấp vào <plus /> để tạo trợ lý tùy chỉnh.",
|
8
8
|
"defaultMessageWithoutCreate": "Tôi là trợ lý thông minh cá nhân của bạn {{appName}}. Xin hỏi tôi có thể giúp gì cho bạn ngay bây giờ?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "LobeHub là gì?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "换一批",
|
5
5
|
"title": "新增助手推荐:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "我是您的私人智能助理 {{appName}}
|
7
|
+
"defaultMessage": "我是您的私人智能助理 {{appName}} ,请问现在能帮您做什么?<br />如果需要获得更加专业或定制的助手,可以点击 <plus /> 创建自定义助手",
|
8
8
|
"defaultMessageWithoutCreate": "我是您的私人智能助理 {{appName}} ,请问现在能帮您做什么?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "LobeHub 是什么?",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
"replaceBtn": "換一批",
|
5
5
|
"title": "新增助理推薦:"
|
6
6
|
},
|
7
|
-
"defaultMessage": "我是您的私人智能助理 {{appName}}
|
7
|
+
"defaultMessage": "我是您的私人智能助理 {{appName}} ,請問現在能幫您做什麼?<br />如果需要獲得更加專業或定制的助手,可以點擊 <plus /> 創建自定義助手",
|
8
8
|
"defaultMessageWithoutCreate": "我是您的私人智能助理 {{appName}} ,請問現在能幫您做什麼?",
|
9
9
|
"qa": {
|
10
10
|
"q01": "LobeHub 是什麼?",
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@lobehub/chat",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.89.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",
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { Button } from '@lobehub/ui';
|
2
|
+
import { memo } from 'react';
|
3
|
+
|
4
|
+
import { useActionSWR } from '@/libs/swr';
|
5
|
+
import { useSessionStore } from '@/store/session';
|
6
|
+
|
7
|
+
const AddButton = memo(() => {
|
8
|
+
const createSession = useSessionStore((s) => s.createSession);
|
9
|
+
const { mutate, isValidating } = useActionSWR(['session.createSession', undefined], () => {
|
10
|
+
return createSession({ group: undefined });
|
11
|
+
});
|
12
|
+
|
13
|
+
return (
|
14
|
+
<Button
|
15
|
+
loading={isValidating}
|
16
|
+
onClick={() => mutate()}
|
17
|
+
style={{
|
18
|
+
alignItems: 'center',
|
19
|
+
borderRadius: 4,
|
20
|
+
height: '20px',
|
21
|
+
justifyContent: 'center',
|
22
|
+
padding: '0 1px',
|
23
|
+
width: '20px',
|
24
|
+
}}
|
25
|
+
variant={'filled'}
|
26
|
+
>
|
27
|
+
+
|
28
|
+
</Button>
|
29
|
+
);
|
30
|
+
});
|
31
|
+
|
32
|
+
export default AddButton;
|
@@ -3,7 +3,7 @@
|
|
3
3
|
import { FluentEmoji, Markdown } from '@lobehub/ui';
|
4
4
|
import { createStyles } from 'antd-style';
|
5
5
|
import { memo } from 'react';
|
6
|
-
import { useTranslation } from 'react-i18next';
|
6
|
+
import { Trans, useTranslation } from 'react-i18next';
|
7
7
|
import { Center, Flexbox } from 'react-layout-kit';
|
8
8
|
|
9
9
|
import { BRANDING_NAME } from '@/const/branding';
|
@@ -11,6 +11,7 @@ import { isCustomBranding } from '@/const/version';
|
|
11
11
|
import { useGreeting } from '@/hooks/useGreeting';
|
12
12
|
import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
|
13
13
|
|
14
|
+
import AddButton from './AddButton';
|
14
15
|
import AgentsSuggest from './AgentsSuggest';
|
15
16
|
import QuestionSuggest from './QuestionSuggest';
|
16
17
|
|
@@ -53,7 +54,26 @@ const InboxWelcome = memo(() => {
|
|
53
54
|
<FluentEmoji emoji={'👋'} size={40} type={'anim'} />
|
54
55
|
<h1 className={styles.title}>{greeting}</h1>
|
55
56
|
</Flexbox>
|
56
|
-
<Markdown
|
57
|
+
<Markdown
|
58
|
+
className={styles.desc}
|
59
|
+
customRender={(dom, context) => {
|
60
|
+
if (context.text.includes('<plus />')) {
|
61
|
+
return (
|
62
|
+
<Trans
|
63
|
+
components={{
|
64
|
+
br: <br />,
|
65
|
+
plus: <AddButton />,
|
66
|
+
}}
|
67
|
+
i18nKey="guide.defaultMessage"
|
68
|
+
ns="welcome"
|
69
|
+
values={{ appName: BRANDING_NAME }}
|
70
|
+
/>
|
71
|
+
);
|
72
|
+
}
|
73
|
+
return dom;
|
74
|
+
}}
|
75
|
+
variant={'chat'}
|
76
|
+
>
|
57
77
|
{t(showCreateSession ? 'guide.defaultMessage' : 'guide.defaultMessageWithoutCreate', {
|
58
78
|
appName: BRANDING_NAME,
|
59
79
|
})}
|
@@ -24,6 +24,7 @@ import { default as jina } from './jina';
|
|
24
24
|
import { default as lmstudio } from './lmstudio';
|
25
25
|
import { default as minimax } from './minimax';
|
26
26
|
import { default as mistral } from './mistral';
|
27
|
+
import { default as modelscope } from './modelscope';
|
27
28
|
import { default as moonshot } from './moonshot';
|
28
29
|
import { default as novita } from './novita';
|
29
30
|
import { default as nvidia } from './nvidia';
|
@@ -97,6 +98,7 @@ export const LOBE_DEFAULT_MODEL_LIST = buildDefaultModelList({
|
|
97
98
|
lmstudio,
|
98
99
|
minimax,
|
99
100
|
mistral,
|
101
|
+
modelscope,
|
100
102
|
moonshot,
|
101
103
|
novita,
|
102
104
|
nvidia,
|
@@ -151,6 +153,7 @@ export { default as jina } from './jina';
|
|
151
153
|
export { default as lmstudio } from './lmstudio';
|
152
154
|
export { default as minimax } from './minimax';
|
153
155
|
export { default as mistral } from './mistral';
|
156
|
+
export { default as modelscope } from './modelscope';
|
154
157
|
export { default as moonshot } from './moonshot';
|
155
158
|
export { default as novita } from './novita';
|
156
159
|
export { default as nvidia } from './nvidia';
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import { AIChatModelCard } from '@/types/aiModel';
|
2
|
+
|
3
|
+
const modelscopeChatModels: AIChatModelCard[] = [
|
4
|
+
{
|
5
|
+
abilities: {
|
6
|
+
functionCall: true,
|
7
|
+
},
|
8
|
+
contextWindowTokens: 131_072,
|
9
|
+
description: 'DeepSeek-V3是DeepSeek第三代模型,在多项基准测试中表现优异。',
|
10
|
+
displayName: 'DeepSeek-V3-0324',
|
11
|
+
enabled: true,
|
12
|
+
id: 'deepseek-ai/DeepSeek-V3-0324',
|
13
|
+
type: 'chat',
|
14
|
+
},
|
15
|
+
{
|
16
|
+
abilities: {
|
17
|
+
functionCall: true,
|
18
|
+
},
|
19
|
+
contextWindowTokens: 131_072,
|
20
|
+
description: 'DeepSeek-V3是DeepSeek第三代模型的最新版本,具有强大的推理和对话能力。',
|
21
|
+
displayName: 'DeepSeek-V3',
|
22
|
+
enabled: true,
|
23
|
+
id: 'deepseek-ai/DeepSeek-V3',
|
24
|
+
type: 'chat',
|
25
|
+
},
|
26
|
+
{
|
27
|
+
abilities: {
|
28
|
+
functionCall: true,
|
29
|
+
},
|
30
|
+
contextWindowTokens: 131_072,
|
31
|
+
description: 'DeepSeek-R1是DeepSeek最新的推理模型,专注于复杂推理任务。',
|
32
|
+
displayName: 'DeepSeek-R1',
|
33
|
+
enabled: true,
|
34
|
+
id: 'deepseek-ai/DeepSeek-R1',
|
35
|
+
type: 'chat',
|
36
|
+
},
|
37
|
+
{
|
38
|
+
abilities: {
|
39
|
+
functionCall: true,
|
40
|
+
},
|
41
|
+
contextWindowTokens: 131_072,
|
42
|
+
description: 'Qwen3-235B-A22B是通义千问3代超大规模模型,提供顶级的AI能力。',
|
43
|
+
displayName: 'Qwen3-235B-A22B',
|
44
|
+
enabled: true,
|
45
|
+
id: 'Qwen/Qwen3-235B-A22B',
|
46
|
+
type: 'chat',
|
47
|
+
},
|
48
|
+
{
|
49
|
+
abilities: {
|
50
|
+
functionCall: true,
|
51
|
+
},
|
52
|
+
contextWindowTokens: 131_072,
|
53
|
+
description: 'Qwen3-32B是通义千问3代模型,具有强大的推理和对话能力。',
|
54
|
+
displayName: 'Qwen3-32B',
|
55
|
+
enabled: true,
|
56
|
+
id: 'Qwen/Qwen3-32B',
|
57
|
+
type: 'chat',
|
58
|
+
},
|
59
|
+
];
|
60
|
+
|
61
|
+
export const allModels = [...modelscopeChatModels];
|
62
|
+
|
63
|
+
export default allModels;
|
package/src/config/llm.ts
CHANGED
@@ -162,6 +162,9 @@ export const getLLMConfig = () => {
|
|
162
162
|
|
163
163
|
ENABLED_INFINIAI: z.boolean(),
|
164
164
|
INFINIAI_API_KEY: z.string().optional(),
|
165
|
+
|
166
|
+
ENABLED_MODELSCOPE: z.boolean(),
|
167
|
+
MODELSCOPE_API_KEY: z.string().optional(),
|
165
168
|
},
|
166
169
|
runtimeEnv: {
|
167
170
|
API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE,
|
@@ -322,6 +325,9 @@ export const getLLMConfig = () => {
|
|
322
325
|
|
323
326
|
ENABLED_INFINIAI: !!process.env.INFINIAI_API_KEY,
|
324
327
|
INFINIAI_API_KEY: process.env.INFINIAI_API_KEY,
|
328
|
+
|
329
|
+
ENABLED_MODELSCOPE: !!process.env.MODELSCOPE_API_KEY,
|
330
|
+
MODELSCOPE_API_KEY: process.env.MODELSCOPE_API_KEY,
|
325
331
|
},
|
326
332
|
});
|
327
333
|
};
|
@@ -24,6 +24,7 @@ import JinaProvider from './jina';
|
|
24
24
|
import LMStudioProvider from './lmstudio';
|
25
25
|
import MinimaxProvider from './minimax';
|
26
26
|
import MistralProvider from './mistral';
|
27
|
+
import ModelScopeProvider from './modelscope';
|
27
28
|
import MoonshotProvider from './moonshot';
|
28
29
|
import NovitaProvider from './novita';
|
29
30
|
import NvidiaProvider from './nvidia';
|
@@ -67,6 +68,7 @@ export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
|
|
67
68
|
GithubProvider.chatModels,
|
68
69
|
MinimaxProvider.chatModels,
|
69
70
|
MistralProvider.chatModels,
|
71
|
+
ModelScopeProvider.chatModels,
|
70
72
|
MoonshotProvider.chatModels,
|
71
73
|
OllamaProvider.chatModels,
|
72
74
|
VLLMProvider.chatModels,
|
@@ -130,6 +132,7 @@ export const DEFAULT_MODEL_PROVIDER_LIST = [
|
|
130
132
|
GroqProvider,
|
131
133
|
PerplexityProvider,
|
132
134
|
MistralProvider,
|
135
|
+
ModelScopeProvider,
|
133
136
|
Ai21Provider,
|
134
137
|
UpstageProvider,
|
135
138
|
XAIProvider,
|
@@ -194,6 +197,7 @@ export { default as JinaProviderCard } from './jina';
|
|
194
197
|
export { default as LMStudioProviderCard } from './lmstudio';
|
195
198
|
export { default as MinimaxProviderCard } from './minimax';
|
196
199
|
export { default as MistralProviderCard } from './mistral';
|
200
|
+
export { default as ModelScopeProviderCard } from './modelscope';
|
197
201
|
export { default as MoonshotProviderCard } from './moonshot';
|
198
202
|
export { default as NovitaProviderCard } from './novita';
|
199
203
|
export { default as NvidiaProviderCard } from './nvidia';
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import { ModelProviderCard } from '@/types/llm';
|
2
|
+
|
3
|
+
// ref: https://modelscope.cn/docs/model-service/API-Inference/intro
|
4
|
+
const ModelScope: ModelProviderCard = {
|
5
|
+
chatModels: [
|
6
|
+
{
|
7
|
+
contextWindowTokens: 131_072,
|
8
|
+
description: 'DeepSeek-V3是DeepSeek第三代模型,在多项基准测试中表现优异。',
|
9
|
+
displayName: 'DeepSeek-V3-0324',
|
10
|
+
enabled: true,
|
11
|
+
functionCall: true,
|
12
|
+
id: 'deepseek-ai/DeepSeek-V3-0324',
|
13
|
+
},
|
14
|
+
{
|
15
|
+
contextWindowTokens: 131_072,
|
16
|
+
description: 'DeepSeek-V3是DeepSeek第三代模型的最新版本,具有强大的推理和对话能力。',
|
17
|
+
displayName: 'DeepSeek-V3',
|
18
|
+
enabled: true,
|
19
|
+
functionCall: true,
|
20
|
+
id: 'deepseek-ai/DeepSeek-V3',
|
21
|
+
},
|
22
|
+
{
|
23
|
+
contextWindowTokens: 131_072,
|
24
|
+
description: 'DeepSeek-R1是DeepSeek最新的推理模型,专注于复杂推理任务。',
|
25
|
+
displayName: 'DeepSeek-R1',
|
26
|
+
enabled: true,
|
27
|
+
functionCall: true,
|
28
|
+
id: 'deepseek-ai/DeepSeek-R1',
|
29
|
+
},
|
30
|
+
{
|
31
|
+
contextWindowTokens: 131_072,
|
32
|
+
description: 'Qwen3-235B-A22B是通义千问3代超大规模模型,提供顶级的AI能力。',
|
33
|
+
displayName: 'Qwen3-235B-A22B',
|
34
|
+
enabled: true,
|
35
|
+
functionCall: true,
|
36
|
+
id: 'Qwen/Qwen3-235B-A22B',
|
37
|
+
},
|
38
|
+
{
|
39
|
+
contextWindowTokens: 131_072,
|
40
|
+
description: 'Qwen3-32B是通义千问3代模型,具有强大的推理和对话能力。',
|
41
|
+
displayName: 'Qwen3-32B',
|
42
|
+
enabled: true,
|
43
|
+
functionCall: true,
|
44
|
+
id: 'Qwen/Qwen3-32B',
|
45
|
+
},
|
46
|
+
],
|
47
|
+
checkModel: 'Qwen/Qwen3-32B',
|
48
|
+
description: 'ModelScope是阿里云推出的模型即服务平台,提供丰富的AI模型和推理服务。',
|
49
|
+
id: 'modelscope',
|
50
|
+
modelList: { showModelFetcher: true },
|
51
|
+
name: 'ModelScope',
|
52
|
+
settings: {
|
53
|
+
proxyUrl: {
|
54
|
+
placeholder: 'https://api-inference.modelscope.cn/v1',
|
55
|
+
},
|
56
|
+
sdkType: 'openai',
|
57
|
+
showModelFetcher: true,
|
58
|
+
},
|
59
|
+
url: 'https://modelscope.cn',
|
60
|
+
};
|
61
|
+
|
62
|
+
export default ModelScope;
|
@@ -0,0 +1,69 @@
|
|
1
|
+
|
2
|
+
import type { ChatModelCard } from '@/types/llm';
|
3
|
+
|
4
|
+
import { ModelProvider } from '../types';
|
5
|
+
import { LobeOpenAICompatibleFactory } from '../utils/openaiCompatibleFactory';
|
6
|
+
|
7
|
+
export interface ModelScopeModelCard {
|
8
|
+
created: number;
|
9
|
+
id: string;
|
10
|
+
object: string;
|
11
|
+
owned_by: string;
|
12
|
+
}
|
13
|
+
|
14
|
+
export const LobeModelScopeAI = LobeOpenAICompatibleFactory({
|
15
|
+
baseURL: 'https://api-inference.modelscope.cn/v1',
|
16
|
+
debug: {
|
17
|
+
chatCompletion: () => process.env.DEBUG_MODELSCOPE_CHAT_COMPLETION === '1',
|
18
|
+
},
|
19
|
+
models: async ({ client }) => {
|
20
|
+
const { LOBE_DEFAULT_MODEL_LIST } = await import('@/config/aiModels');
|
21
|
+
|
22
|
+
const functionCallKeywords = ['qwen', 'deepseek', 'llama'];
|
23
|
+
|
24
|
+
const visionKeywords = ['qwen-vl', 'qwen2-vl', 'llava'];
|
25
|
+
|
26
|
+
const reasoningKeywords = ['qwq', 'deepseek-r1'];
|
27
|
+
|
28
|
+
try {
|
29
|
+
const modelsPage = (await client.models.list()) as any;
|
30
|
+
const modelList: ModelScopeModelCard[] = modelsPage.data || [];
|
31
|
+
|
32
|
+
return modelList
|
33
|
+
.map((model) => {
|
34
|
+
const knownModel = LOBE_DEFAULT_MODEL_LIST.find(
|
35
|
+
(m) => model.id.toLowerCase() === m.id.toLowerCase(),
|
36
|
+
);
|
37
|
+
|
38
|
+
const modelId = model.id.toLowerCase();
|
39
|
+
|
40
|
+
return {
|
41
|
+
contextWindowTokens: knownModel?.contextWindowTokens ?? undefined,
|
42
|
+
displayName: knownModel?.displayName ?? model.id,
|
43
|
+
enabled: knownModel?.enabled || false,
|
44
|
+
functionCall:
|
45
|
+
functionCallKeywords.some((keyword) => modelId.includes(keyword)) ||
|
46
|
+
knownModel?.abilities?.functionCall ||
|
47
|
+
false,
|
48
|
+
id: model.id,
|
49
|
+
reasoning:
|
50
|
+
reasoningKeywords.some((keyword) => modelId.includes(keyword)) ||
|
51
|
+
knownModel?.abilities?.reasoning ||
|
52
|
+
false,
|
53
|
+
vision:
|
54
|
+
visionKeywords.some((keyword) => modelId.includes(keyword)) ||
|
55
|
+
knownModel?.abilities?.vision ||
|
56
|
+
false,
|
57
|
+
};
|
58
|
+
})
|
59
|
+
.filter(Boolean) as ChatModelCard[];
|
60
|
+
} catch (error) {
|
61
|
+
console.warn(
|
62
|
+
'Failed to fetch ModelScope models. Please ensure your ModelScope API key is valid and your Alibaba Cloud account is properly bound:',
|
63
|
+
error,
|
64
|
+
);
|
65
|
+
return [];
|
66
|
+
}
|
67
|
+
},
|
68
|
+
provider: ModelProvider.ModelScope,
|
69
|
+
});
|
@@ -1,17 +1,17 @@
|
|
1
1
|
import { LobeAi21AI } from './ai21';
|
2
2
|
import { LobeAi360AI } from './ai360';
|
3
|
-
import LobeAnthropicAI from './anthropic';
|
3
|
+
import { LobeAnthropicAI } from './anthropic';
|
4
4
|
import { LobeAzureOpenAI } from './azureOpenai';
|
5
5
|
import { LobeAzureAI } from './azureai';
|
6
6
|
import { LobeBaichuanAI } from './baichuan';
|
7
|
-
import LobeBedrockAI from './bedrock';
|
7
|
+
import { LobeBedrockAI } from './bedrock';
|
8
8
|
import { LobeCloudflareAI } from './cloudflare';
|
9
9
|
import { LobeCohereAI } from './cohere';
|
10
10
|
import { LobeDeepSeekAI } from './deepseek';
|
11
11
|
import { LobeFireworksAI } from './fireworksai';
|
12
12
|
import { LobeGiteeAI } from './giteeai';
|
13
13
|
import { LobeGithubAI } from './github';
|
14
|
-
import LobeGoogleAI from './google';
|
14
|
+
import { LobeGoogleAI } from './google';
|
15
15
|
import { LobeGroq } from './groq';
|
16
16
|
import { LobeHigressAI } from './higress';
|
17
17
|
import { LobeHuggingFaceAI } from './huggingface';
|
@@ -22,10 +22,11 @@ import { LobeJinaAI } from './jina';
|
|
22
22
|
import { LobeLMStudioAI } from './lmstudio';
|
23
23
|
import { LobeMinimaxAI } from './minimax';
|
24
24
|
import { LobeMistralAI } from './mistral';
|
25
|
+
import { LobeModelScopeAI } from './modelscope';
|
25
26
|
import { LobeMoonshotAI } from './moonshot';
|
26
27
|
import { LobeNovitaAI } from './novita';
|
27
28
|
import { LobeNvidiaAI } from './nvidia';
|
28
|
-
import LobeOllamaAI from './ollama';
|
29
|
+
import { LobeOllamaAI } from './ollama';
|
29
30
|
import { LobeOpenAI } from './openai';
|
30
31
|
import { LobeOpenRouterAI } from './openrouter';
|
31
32
|
import { LobePerplexityAI } from './perplexity';
|
@@ -75,6 +76,7 @@ export const providerRuntimeMap = {
|
|
75
76
|
lmstudio: LobeLMStudioAI,
|
76
77
|
minimax: LobeMinimaxAI,
|
77
78
|
mistral: LobeMistralAI,
|
79
|
+
modelscope: LobeModelScopeAI,
|
78
80
|
moonshot: LobeMoonshotAI,
|
79
81
|
novita: LobeNovitaAI,
|
80
82
|
nvidia: LobeNvidiaAI,
|
@@ -5,7 +5,7 @@ export default {
|
|
5
5
|
title: '新增助手推荐:',
|
6
6
|
},
|
7
7
|
defaultMessage:
|
8
|
-
'我是您的私人智能助理 {{appName}}
|
8
|
+
'我是您的私人智能助理 {{appName}} ,请问现在能帮您做什么?<br />如果需要获得更加专业或定制的助手,可以点击 <plus /> 创建自定义助手',
|
9
9
|
defaultMessageWithoutCreate: '我是您的私人智能助理 {{appName}} ,请问现在能帮您做什么?',
|
10
10
|
qa: {
|
11
11
|
q01: 'LobeHub 是什么?',
|
@@ -58,6 +58,7 @@ export interface UserKeyVaults extends SearchEngineKeyVaults {
|
|
58
58
|
lobehub?: any;
|
59
59
|
minimax?: OpenAICompatibleKeyVault;
|
60
60
|
mistral?: OpenAICompatibleKeyVault;
|
61
|
+
modelscope?: OpenAICompatibleKeyVault;
|
61
62
|
moonshot?: OpenAICompatibleKeyVault;
|
62
63
|
novita?: OpenAICompatibleKeyVault;
|
63
64
|
nvidia?: OpenAICompatibleKeyVault;
|