@lobehub/chat 1.23.0 → 1.24.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/Dockerfile +19 -15
  3. package/Dockerfile.database +20 -16
  4. package/locales/ar/modelProvider.json +16 -0
  5. package/locales/ar/models.json +27 -0
  6. package/locales/ar/providers.json +1 -0
  7. package/locales/bg-BG/modelProvider.json +16 -0
  8. package/locales/bg-BG/models.json +27 -0
  9. package/locales/bg-BG/providers.json +1 -0
  10. package/locales/de-DE/modelProvider.json +16 -0
  11. package/locales/de-DE/models.json +27 -0
  12. package/locales/de-DE/providers.json +1 -0
  13. package/locales/en-US/modelProvider.json +16 -0
  14. package/locales/en-US/models.json +27 -0
  15. package/locales/en-US/providers.json +1 -0
  16. package/locales/es-ES/modelProvider.json +16 -0
  17. package/locales/es-ES/models.json +27 -0
  18. package/locales/es-ES/providers.json +1 -0
  19. package/locales/fr-FR/modelProvider.json +16 -0
  20. package/locales/fr-FR/models.json +27 -0
  21. package/locales/fr-FR/providers.json +1 -0
  22. package/locales/it-IT/modelProvider.json +16 -0
  23. package/locales/it-IT/models.json +27 -0
  24. package/locales/it-IT/providers.json +1 -0
  25. package/locales/ja-JP/modelProvider.json +16 -0
  26. package/locales/ja-JP/models.json +27 -0
  27. package/locales/ja-JP/providers.json +1 -0
  28. package/locales/ko-KR/modelProvider.json +16 -0
  29. package/locales/ko-KR/models.json +27 -0
  30. package/locales/ko-KR/providers.json +1 -0
  31. package/locales/nl-NL/modelProvider.json +16 -0
  32. package/locales/nl-NL/models.json +27 -0
  33. package/locales/nl-NL/providers.json +1 -0
  34. package/locales/pl-PL/modelProvider.json +16 -0
  35. package/locales/pl-PL/models.json +27 -0
  36. package/locales/pl-PL/providers.json +1 -0
  37. package/locales/pt-BR/modelProvider.json +16 -0
  38. package/locales/pt-BR/models.json +27 -0
  39. package/locales/pt-BR/providers.json +1 -0
  40. package/locales/ru-RU/modelProvider.json +16 -0
  41. package/locales/ru-RU/models.json +27 -0
  42. package/locales/ru-RU/providers.json +1 -0
  43. package/locales/tr-TR/modelProvider.json +16 -0
  44. package/locales/tr-TR/models.json +27 -0
  45. package/locales/tr-TR/providers.json +1 -0
  46. package/locales/vi-VN/modelProvider.json +16 -0
  47. package/locales/vi-VN/models.json +27 -0
  48. package/locales/vi-VN/providers.json +1 -0
  49. package/locales/zh-CN/modelProvider.json +16 -0
  50. package/locales/zh-CN/models.json +27 -0
  51. package/locales/zh-CN/providers.json +1 -0
  52. package/locales/zh-TW/modelProvider.json +16 -0
  53. package/locales/zh-TW/models.json +27 -0
  54. package/locales/zh-TW/providers.json +1 -0
  55. package/package.json +3 -3
  56. package/src/app/(main)/settings/llm/ProviderList/SenseNova/index.tsx +44 -0
  57. package/src/app/(main)/settings/llm/ProviderList/providers.tsx +4 -0
  58. package/src/config/llm.ts +38 -0
  59. package/src/config/modelProviders/index.ts +4 -0
  60. package/src/config/modelProviders/sensenova.ts +124 -0
  61. package/src/config/modelProviders/spark.ts +6 -6
  62. package/src/const/auth.ts +3 -0
  63. package/src/const/settings/llm.ts +5 -0
  64. package/src/features/Conversation/Error/APIKeyForm/SenseNova.tsx +49 -0
  65. package/src/features/Conversation/Error/APIKeyForm/index.tsx +3 -0
  66. package/src/libs/agent-runtime/AgentRuntime.ts +7 -0
  67. package/src/libs/agent-runtime/index.ts +1 -0
  68. package/src/libs/agent-runtime/sensenova/authToken.test.ts +18 -0
  69. package/src/libs/agent-runtime/sensenova/authToken.ts +27 -0
  70. package/src/libs/agent-runtime/sensenova/index.test.ts +321 -0
  71. package/src/libs/agent-runtime/sensenova/index.ts +98 -0
  72. package/src/libs/agent-runtime/types/type.ts +1 -0
  73. package/src/locales/default/modelProvider.ts +17 -0
  74. package/src/server/globalConfig/index.ts +158 -16
  75. package/src/server/modules/AgentRuntime/index.ts +10 -0
  76. package/src/services/_auth.ts +14 -0
  77. package/src/store/user/slices/modelList/selectors/keyVaults.ts +2 -0
  78. package/src/store/user/slices/modelList/selectors/modelConfig.ts +2 -0
  79. package/src/types/user/settings/keyVaults.ts +6 -0
@@ -119,6 +119,22 @@
119
119
  "title": "下载指定的 Ollama 模型"
120
120
  }
121
121
  },
122
+ "sensenova": {
123
+ "sensenovaAccessKeyID": {
124
+ "desc": "填入 SenseNova Access Key ID",
125
+ "placeholder": "SenseNova Access Key ID",
126
+ "title": "Access Key ID"
127
+ },
128
+ "sensenovaAccessKeySecret": {
129
+ "desc": "填入 SenseNova Access Key Secret",
130
+ "placeholder": "SenseNova Access Key Secret",
131
+ "title": "Access Key Secret"
132
+ },
133
+ "unlock": {
134
+ "description": "输入你的 Access Key ID / Access Key Secret 即可开始会话。应用不会记录你的鉴权配置",
135
+ "title": "使用自定义 SenseNova 鉴权信息"
136
+ }
137
+ },
122
138
  "wenxin": {
123
139
  "accessKey": {
124
140
  "desc": "填入百度千帆平台的 Access Key",
@@ -155,6 +155,33 @@
155
155
  "Qwen/Qwen2.5-Math-72B-Instruct": {
156
156
  "description": "Qwen2.5-Math 专注于数学领域的问题求解,为高难度题提供专业解答。"
157
157
  },
158
+ "SenseChat": {
159
+ "description": "基础版本模型 (V4),4K上下文长度,通用能力强大"
160
+ },
161
+ "SenseChat-128K": {
162
+ "description": "基础版本模型 (V4),128K上下文长度,在长文本理解及生成等任务中表现出色"
163
+ },
164
+ "SenseChat-32K": {
165
+ "description": "基础版本模型 (V4),32K上下文长度,灵活应用于各类场景"
166
+ },
167
+ "SenseChat-5": {
168
+ "description": "最新版本模型 (V5.5),128K上下文长度,在数学推理、英文对话、指令跟随以及长文本理解等领域能力显著提升,比肩GPT-4o"
169
+ },
170
+ "SenseChat-5-Cantonese": {
171
+ "description": "32K上下文长度,在粤语的对话理解上超越了GPT-4,在知识、推理、数学及代码编写等多个领域均能与GPT-4 Turbo相媲美"
172
+ },
173
+ "SenseChat-Character": {
174
+ "description": "标准版模型,8K上下文长度,高响应速度"
175
+ },
176
+ "SenseChat-Character-Pro": {
177
+ "description": "高级版模型,32K上下文长度,能力全面提升,支持中/英文对话"
178
+ },
179
+ "SenseChat-Turbo": {
180
+ "description": "适用于快速问答、模型微调场景"
181
+ },
182
+ "SenseChat-Vision": {
183
+ "description": "最新版本模型 (V5.5),16K上下文长度,支持多图的输入,全面实现模型基础能力优化,在对象属性识别、空间关系、动作事件识别、场景理解、情感识别、逻辑常识推理和文本理解生成上都实现了较大提升。"
184
+ },
158
185
  "THUDM/glm-4-9b-chat": {
159
186
  "description": "GLM-4 9B 开放源码版本,为会话应用提供优化后的对话体验。"
160
187
  },
@@ -63,6 +63,7 @@
63
63
  "qwen": {
64
64
  "description": "通义千问是阿里云自主研发的超大规模语言模型,具有强大的自然语言理解和生成能力。它可以回答各种问题、创作文字内容、表达观点看法、撰写代码等,在多个领域发挥作用。"
65
65
  },
66
+ "sensenova": {},
66
67
  "siliconcloud": {
67
68
  "description": "SiliconCloud,基于优秀开源基础模型的高性价比 GenAI 云服务"
68
69
  },
@@ -119,6 +119,22 @@
119
119
  "title": "下載指定的 Ollama 模型"
120
120
  }
121
121
  },
122
+ "sensenova": {
123
+ "sensenovaAccessKeyID": {
124
+ "desc": "填入 SenseNova Access Key ID",
125
+ "placeholder": "SenseNova Access Key ID",
126
+ "title": "Access Key ID"
127
+ },
128
+ "sensenovaAccessKeySecret": {
129
+ "desc": "填入 SenseNova Access Key Secret",
130
+ "placeholder": "SenseNova Access Key Secret",
131
+ "title": "Access Key Secret"
132
+ },
133
+ "unlock": {
134
+ "description": "輸入你的 Access Key ID / Access Key Secret 即可開始會話。應用不會記錄你的鑑權配置",
135
+ "title": "使用自訂的 SenseNova 鑑權資訊"
136
+ }
137
+ },
122
138
  "wenxin": {
123
139
  "accessKey": {
124
140
  "desc": "填入百度千帆平台的 Access Key",
@@ -155,6 +155,33 @@
155
155
  "Qwen/Qwen2.5-Math-72B-Instruct": {
156
156
  "description": "Qwen2.5-Math專注於數學領域的問題求解,為高難度題提供專業解答。"
157
157
  },
158
+ "SenseChat": {
159
+ "description": "基礎版本模型 (V4),4K上下文長度,通用能力強大"
160
+ },
161
+ "SenseChat-128K": {
162
+ "description": "基礎版本模型 (V4),128K上下文長度,在長文本理解及生成等任務中表現出色"
163
+ },
164
+ "SenseChat-32K": {
165
+ "description": "基礎版本模型 (V4),32K上下文長度,靈活應用於各類場景"
166
+ },
167
+ "SenseChat-5": {
168
+ "description": "最新版本模型 (V5.5),128K上下文長度,在數學推理、英文對話、指令跟隨以及長文本理解等領域能力顯著提升,比肩GPT-4o"
169
+ },
170
+ "SenseChat-5-Cantonese": {
171
+ "description": "32K上下文長度,在粵語的對話理解上超越了GPT-4,在知識、推理、數學及程式編寫等多個領域均能與GPT-4 Turbo相媲美"
172
+ },
173
+ "SenseChat-Character": {
174
+ "description": "標準版模型,8K上下文長度,高響應速度"
175
+ },
176
+ "SenseChat-Character-Pro": {
177
+ "description": "高級版模型,32K上下文長度,能力全面提升,支持中/英文對話"
178
+ },
179
+ "SenseChat-Turbo": {
180
+ "description": "適用於快速問答、模型微調場景"
181
+ },
182
+ "SenseChat-Vision": {
183
+ "description": "最新版本模型 (V5.5),16K上下文長度,支持多圖的輸入,全面實現模型基礎能力優化,在物件屬性識別、空間關係、動作事件識別、場景理解、情感識別、邏輯常識推理和文本理解生成上都實現了較大提升。"
184
+ },
158
185
  "THUDM/glm-4-9b-chat": {
159
186
  "description": "GLM-4 9B 開放源碼版本,為會話應用提供優化後的對話體驗。"
160
187
  },
@@ -63,6 +63,7 @@
63
63
  "qwen": {
64
64
  "description": "通義千問是阿里雲自主研發的超大規模語言模型,具有強大的自然語言理解和生成能力。它可以回答各種問題、創作文字內容、表達觀點看法、撰寫代碼等,在多個領域發揮作用。"
65
65
  },
66
+ "sensenova": {},
66
67
  "siliconcloud": {
67
68
  "description": "SiliconFlow 致力於加速 AGI,以惠及人類,通過易用與成本低的 GenAI 堆疊提升大規模 AI 效率。"
68
69
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.23.0",
3
+ "version": "1.24.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",
@@ -43,7 +43,7 @@
43
43
  "docs:seo": "lobe-seo && npm run lint:mdx",
44
44
  "i18n": "npm run workflow:i18n && lobe-i18n",
45
45
  "lint": "npm run lint:ts && npm run lint:style && npm run type-check && npm run lint:circular",
46
- "lint:circular": "dpdm src/**/*.ts --warning false --tree false --exit-code circular:1 -T true --skip-dynamic-imports circular",
46
+ "lint:circular": "dpdm src/**/*.ts --no-warning --no-tree --exit-code circular:1 --no-progress -T true --skip-dynamic-imports circular",
47
47
  "lint:md": "remark . --quiet --frail --output",
48
48
  "lint:mdx": "npm run workflow:mdx-with-lint && prettier -c --write \"{src,docs}/**/*.mdx\" && npm run workflow:mdx-with-lint",
49
49
  "lint:style": "stylelint \"{src,tests}/**/*.{js,jsx,ts,tsx}\" --fix",
@@ -270,7 +270,7 @@
270
270
  "commitlint": "^19.5.0",
271
271
  "consola": "^3.2.3",
272
272
  "dotenv": "^16.4.5",
273
- "dpdm": "^3.14.0",
273
+ "dpdm-fast": "^1.0.4",
274
274
  "drizzle-kit": "^0.26.0",
275
275
  "eslint": "^8.57.1",
276
276
  "eslint-plugin-mdx": "^2.3.4",
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+
3
+ import { Input } from 'antd';
4
+ import { useTranslation } from 'react-i18next';
5
+
6
+ import { SenseNovaProviderCard } from '@/config/modelProviders';
7
+ import { GlobalLLMProviderKey } from '@/types/user/settings';
8
+
9
+ import { KeyVaultsConfigKey } from '../../const';
10
+ import { ProviderItem } from '../../type';
11
+
12
+ const providerKey: GlobalLLMProviderKey = 'sensenova';
13
+
14
+ export const useSenseNovaProvider = (): ProviderItem => {
15
+ const { t } = useTranslation('modelProvider');
16
+
17
+ return {
18
+ ...SenseNovaProviderCard,
19
+ apiKeyItems: [
20
+ {
21
+ children: (
22
+ <Input.Password
23
+ autoComplete={'new-password'}
24
+ placeholder={t(`${providerKey}.sensenovaAccessKeyID.placeholder`)}
25
+ />
26
+ ),
27
+ desc: t(`${providerKey}.sensenovaAccessKeyID.desc`),
28
+ label: t(`${providerKey}.sensenovaAccessKeyID.title`),
29
+ name: [KeyVaultsConfigKey, providerKey, 'sensenovaAccessKeyID'],
30
+ },
31
+ {
32
+ children: (
33
+ <Input.Password
34
+ autoComplete={'new-password'}
35
+ placeholder={t(`${providerKey}.sensenovaAccessKeySecret.placeholder`)}
36
+ />
37
+ ),
38
+ desc: t(`${providerKey}.sensenovaAccessKeySecret.desc`),
39
+ label: t(`${providerKey}.sensenovaAccessKeySecret.title`),
40
+ name: [KeyVaultsConfigKey, providerKey, 'sensenovaAccessKeySecret'],
41
+ },
42
+ ],
43
+ };
44
+ };
@@ -35,6 +35,7 @@ import { useHuggingFaceProvider } from './HuggingFace';
35
35
  import { useOllamaProvider } from './Ollama';
36
36
  import { useOpenAIProvider } from './OpenAI';
37
37
  import { useWenxinProvider } from './Wenxin';
38
+ import { useSenseNovaProvider } from './SenseNova';
38
39
 
39
40
  export const useProviderList = (): ProviderItem[] => {
40
41
  const AzureProvider = useAzureProvider();
@@ -44,6 +45,7 @@ export const useProviderList = (): ProviderItem[] => {
44
45
  const GithubProvider = useGithubProvider();
45
46
  const HuggingFaceProvider = useHuggingFaceProvider();
46
47
  const WenxinProvider = useWenxinProvider();
48
+ const SenseNovaProvider = useSenseNovaProvider();
47
49
 
48
50
  return useMemo(
49
51
  () => [
@@ -71,6 +73,7 @@ export const useProviderList = (): ProviderItem[] => {
71
73
  SparkProviderCard,
72
74
  ZhiPuProviderCard,
73
75
  ZeroOneProviderCard,
76
+ SenseNovaProvider,
74
77
  StepfunProviderCard,
75
78
  MoonshotProviderCard,
76
79
  BaichuanProviderCard,
@@ -87,6 +90,7 @@ export const useProviderList = (): ProviderItem[] => {
87
90
  GithubProvider,
88
91
  WenxinProvider,
89
92
  HuggingFaceProvider,
93
+ SenseNovaProvider,
90
94
  ],
91
95
  );
92
96
  };
package/src/config/llm.ts CHANGED
@@ -24,6 +24,7 @@ export const getLLMConfig = () => {
24
24
 
25
25
  ENABLED_DEEPSEEK: z.boolean(),
26
26
  DEEPSEEK_API_KEY: z.string().optional(),
27
+ DEEPSEEK_MODEL_LIST: z.string().optional(),
27
28
 
28
29
  ENABLED_GOOGLE: z.boolean(),
29
30
  GOOGLE_API_KEY: z.string().optional(),
@@ -32,21 +33,26 @@ export const getLLMConfig = () => {
32
33
 
33
34
  ENABLED_MOONSHOT: z.boolean(),
34
35
  MOONSHOT_API_KEY: z.string().optional(),
36
+ MOONSHOT_MODEL_LIST: z.string().optional(),
35
37
  MOONSHOT_PROXY_URL: z.string().optional(),
36
38
 
37
39
  ENABLED_PERPLEXITY: z.boolean(),
38
40
  PERPLEXITY_API_KEY: z.string().optional(),
41
+ PERPLEXITY_MODEL_LIST: z.string().optional(),
39
42
  PERPLEXITY_PROXY_URL: z.string().optional(),
40
43
 
41
44
  ENABLED_ANTHROPIC: z.boolean(),
42
45
  ANTHROPIC_API_KEY: z.string().optional(),
46
+ ANTHROPIC_MODEL_LIST: z.string().optional(),
43
47
  ANTHROPIC_PROXY_URL: z.string().optional(),
44
48
 
45
49
  ENABLED_MINIMAX: z.boolean(),
50
+ MINIMAX_MODEL_LIST: z.string().optional(),
46
51
  MINIMAX_API_KEY: z.string().optional(),
47
52
 
48
53
  ENABLED_MISTRAL: z.boolean(),
49
54
  MISTRAL_API_KEY: z.string().optional(),
55
+ MISTRAL_MODEL_LIST: z.string().optional(),
50
56
 
51
57
  ENABLED_GROQ: z.boolean(),
52
58
  GROQ_API_KEY: z.string().optional(),
@@ -83,6 +89,7 @@ export const getLLMConfig = () => {
83
89
  ENABLED_WENXIN: z.boolean(),
84
90
  WENXIN_ACCESS_KEY: z.string().optional(),
85
91
  WENXIN_SECRET_KEY: z.string().optional(),
92
+ WENXIN_MODEL_LIST: z.string().optional(),
86
93
 
87
94
  ENABLED_OLLAMA: z.boolean(),
88
95
  OLLAMA_PROXY_URL: z.string().optional(),
@@ -94,6 +101,7 @@ export const getLLMConfig = () => {
94
101
 
95
102
  ENABLED_STEPFUN: z.boolean(),
96
103
  STEPFUN_API_KEY: z.string().optional(),
104
+ STEPFUN_MODEL_LIST: z.string().optional(),
97
105
 
98
106
  ENABLED_NOVITA: z.boolean(),
99
107
  NOVITA_API_KEY: z.string().optional(),
@@ -101,12 +109,15 @@ export const getLLMConfig = () => {
101
109
 
102
110
  ENABLED_BAICHUAN: z.boolean(),
103
111
  BAICHUAN_API_KEY: z.string().optional(),
112
+ BAICHUAN_MODEL_LIST: z.string().optional(),
104
113
 
105
114
  ENABLED_TAICHU: z.boolean(),
106
115
  TAICHU_API_KEY: z.string().optional(),
116
+ TAICHU_MODEL_LIST: z.string().optional(),
107
117
 
108
118
  ENABLED_AI360: z.boolean(),
109
119
  AI360_API_KEY: z.string().optional(),
120
+ AI360_MODEL_LIST: z.string().optional(),
110
121
 
111
122
  ENABLED_SILICONCLOUD: z.boolean(),
112
123
  SILICONCLOUD_API_KEY: z.string().optional(),
@@ -115,12 +126,15 @@ export const getLLMConfig = () => {
115
126
 
116
127
  ENABLED_UPSTAGE: z.boolean(),
117
128
  UPSTAGE_API_KEY: z.string().optional(),
129
+ UPSTAGE_MODEL_LIST: z.string().optional(),
118
130
 
119
131
  ENABLED_SPARK: z.boolean(),
120
132
  SPARK_API_KEY: z.string().optional(),
133
+ SPARK_MODEL_LIST: z.string().optional(),
121
134
 
122
135
  ENABLED_AI21: z.boolean(),
123
136
  AI21_API_KEY: z.string().optional(),
137
+ AI21_MODEL_LIST: z.string().optional(),
124
138
 
125
139
  ENABLED_HUNYUAN: z.boolean(),
126
140
  HUNYUAN_API_KEY: z.string().optional(),
@@ -130,6 +144,11 @@ export const getLLMConfig = () => {
130
144
  HUGGINGFACE_API_KEY: z.string().optional(),
131
145
  HUGGINGFACE_PROXY_URL: z.string().optional(),
132
146
  HUGGINGFACE_MODEL_LIST: z.string().optional(),
147
+
148
+ ENABLED_SENSENOVA: z.boolean(),
149
+ SENSENOVA_ACCESS_KEY_ID: z.string().optional(),
150
+ SENSENOVA_ACCESS_KEY_SECRET: z.string().optional(),
151
+ SENSENOVA_MODEL_LIST: z.string().optional(),
133
152
  },
134
153
  runtimeEnv: {
135
154
  API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE,
@@ -151,6 +170,7 @@ export const getLLMConfig = () => {
151
170
 
152
171
  ENABLED_DEEPSEEK: !!process.env.DEEPSEEK_API_KEY,
153
172
  DEEPSEEK_API_KEY: process.env.DEEPSEEK_API_KEY,
173
+ DEEPSEEK_MODEL_LIST: process.env.DEEPSEEK_MODEL_LIST,
154
174
 
155
175
  ENABLED_GOOGLE: !!process.env.GOOGLE_API_KEY,
156
176
  GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,
@@ -159,17 +179,21 @@ export const getLLMConfig = () => {
159
179
 
160
180
  ENABLED_PERPLEXITY: !!process.env.PERPLEXITY_API_KEY,
161
181
  PERPLEXITY_API_KEY: process.env.PERPLEXITY_API_KEY,
182
+ PERPLEXITY_MODEL_LIST: process.env.PERPLEXITY_MODEL_LIST,
162
183
  PERPLEXITY_PROXY_URL: process.env.PERPLEXITY_PROXY_URL,
163
184
 
164
185
  ENABLED_ANTHROPIC: !!process.env.ANTHROPIC_API_KEY,
165
186
  ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY,
187
+ ANTHROPIC_MODEL_LIST: process.env.ANTHROPIC_MODEL_LIST,
166
188
  ANTHROPIC_PROXY_URL: process.env.ANTHROPIC_PROXY_URL,
167
189
 
168
190
  ENABLED_MINIMAX: !!process.env.MINIMAX_API_KEY,
169
191
  MINIMAX_API_KEY: process.env.MINIMAX_API_KEY,
192
+ MINIMAX_MODEL_LIST: process.env.MINIMAX_MODEL_LIST,
170
193
 
171
194
  ENABLED_MISTRAL: !!process.env.MISTRAL_API_KEY,
172
195
  MISTRAL_API_KEY: process.env.MISTRAL_API_KEY,
196
+ MISTRAL_MODEL_LIST: process.env.MISTRAL_MODEL_LIST,
173
197
 
174
198
  ENABLED_OPENROUTER: !!process.env.OPENROUTER_API_KEY,
175
199
  OPENROUTER_API_KEY: process.env.OPENROUTER_API_KEY,
@@ -185,6 +209,7 @@ export const getLLMConfig = () => {
185
209
 
186
210
  ENABLED_MOONSHOT: !!process.env.MOONSHOT_API_KEY,
187
211
  MOONSHOT_API_KEY: process.env.MOONSHOT_API_KEY,
212
+ MOONSHOT_MODEL_LIST: process.env.MOONSHOT_MODEL_LIST,
188
213
  MOONSHOT_PROXY_URL: process.env.MOONSHOT_PROXY_URL,
189
214
 
190
215
  ENABLED_GROQ: !!process.env.GROQ_API_KEY,
@@ -210,6 +235,7 @@ export const getLLMConfig = () => {
210
235
  ENABLED_WENXIN: !!process.env.WENXIN_ACCESS_KEY && !!process.env.WENXIN_SECRET_KEY,
211
236
  WENXIN_ACCESS_KEY: process.env.WENXIN_ACCESS_KEY,
212
237
  WENXIN_SECRET_KEY: process.env.WENXIN_SECRET_KEY,
238
+ WENXIN_MODEL_LIST: process.env.WENXIN_MODEL_LIST,
213
239
 
214
240
  ENABLED_OLLAMA: process.env.ENABLED_OLLAMA !== '0',
215
241
  OLLAMA_PROXY_URL: process.env.OLLAMA_PROXY_URL || '',
@@ -221,6 +247,7 @@ export const getLLMConfig = () => {
221
247
 
222
248
  ENABLED_STEPFUN: !!process.env.STEPFUN_API_KEY,
223
249
  STEPFUN_API_KEY: process.env.STEPFUN_API_KEY,
250
+ STEPFUN_MODEL_LIST: process.env.STEPFUN_MODEL_LIST,
224
251
 
225
252
  ENABLED_NOVITA: !!process.env.NOVITA_API_KEY,
226
253
  NOVITA_API_KEY: process.env.NOVITA_API_KEY,
@@ -228,12 +255,15 @@ export const getLLMConfig = () => {
228
255
 
229
256
  ENABLED_BAICHUAN: !!process.env.BAICHUAN_API_KEY,
230
257
  BAICHUAN_API_KEY: process.env.BAICHUAN_API_KEY,
258
+ BAICHUAN_MODEL_LIST: process.env.BAICHUAN_MODEL_LIST,
231
259
 
232
260
  ENABLED_TAICHU: !!process.env.TAICHU_API_KEY,
233
261
  TAICHU_API_KEY: process.env.TAICHU_API_KEY,
262
+ TAICHU_MODEL_LIST: process.env.TAICHU_MODEL_LIST,
234
263
 
235
264
  ENABLED_AI360: !!process.env.AI360_API_KEY,
236
265
  AI360_API_KEY: process.env.AI360_API_KEY,
266
+ AI360_MODEL_LIST: process.env.AI360_MODEL_LIST,
237
267
 
238
268
  ENABLED_SILICONCLOUD: !!process.env.SILICONCLOUD_API_KEY,
239
269
  SILICONCLOUD_API_KEY: process.env.SILICONCLOUD_API_KEY,
@@ -242,12 +272,15 @@ export const getLLMConfig = () => {
242
272
 
243
273
  ENABLED_UPSTAGE: !!process.env.UPSTAGE_API_KEY,
244
274
  UPSTAGE_API_KEY: process.env.UPSTAGE_API_KEY,
275
+ UPSTAGE_MODEL_LIST: process.env.UPSTAGE_MODEL_LIST,
245
276
 
246
277
  ENABLED_SPARK: !!process.env.SPARK_API_KEY,
247
278
  SPARK_API_KEY: process.env.SPARK_API_KEY,
279
+ SPARK_MODEL_LIST: process.env.SPARK_MODEL_LIST,
248
280
 
249
281
  ENABLED_AI21: !!process.env.AI21_API_KEY,
250
282
  AI21_API_KEY: process.env.AI21_API_KEY,
283
+ AI21_MODEL_LIST: process.env.AI21_MODEL_LIST,
251
284
 
252
285
  ENABLED_HUNYUAN: !!process.env.HUNYUAN_API_KEY,
253
286
  HUNYUAN_API_KEY: process.env.HUNYUAN_API_KEY,
@@ -257,6 +290,11 @@ export const getLLMConfig = () => {
257
290
  HUGGINGFACE_API_KEY: process.env.HUGGINGFACE_API_KEY,
258
291
  HUGGINGFACE_PROXY_URL: process.env.HUGGINGFACE_PROXY_URL,
259
292
  HUGGINGFACE_MODEL_LIST: process.env.HUGGINGFACE_MODEL_LIST,
293
+
294
+ ENABLED_SENSENOVA: !!process.env.SENSENOVA_ACCESS_KEY_ID && !!process.env.SENSENOVA_ACCESS_KEY_SECRET,
295
+ SENSENOVA_ACCESS_KEY_ID: process.env.SENSENOVA_ACCESS_KEY_ID,
296
+ SENSENOVA_ACCESS_KEY_SECRET: process.env.SENSENOVA_ACCESS_KEY_SECRET,
297
+ SENSENOVA_MODEL_LIST: process.env.SENSENOVA_MODEL_LIST,
260
298
  },
261
299
  });
262
300
  };
@@ -22,6 +22,7 @@ import OpenAIProvider from './openai';
22
22
  import OpenRouterProvider from './openrouter';
23
23
  import PerplexityProvider from './perplexity';
24
24
  import QwenProvider from './qwen';
25
+ import SenseNovaProvider from './sensenova';
25
26
  import SiliconCloudProvider from './siliconcloud';
26
27
  import SparkProvider from './spark';
27
28
  import StepfunProvider from './stepfun';
@@ -63,6 +64,7 @@ export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
63
64
  Ai21Provider.chatModels,
64
65
  HunyuanProvider.chatModels,
65
66
  WenxinProvider.chatModels,
67
+ SenseNovaProvider.chatModels,
66
68
  ].flat();
67
69
 
68
70
  export const DEFAULT_MODEL_PROVIDER_LIST = [
@@ -90,6 +92,7 @@ export const DEFAULT_MODEL_PROVIDER_LIST = [
90
92
  SparkProvider,
91
93
  ZhiPuProvider,
92
94
  ZeroOneProvider,
95
+ SenseNovaProvider,
93
96
  StepfunProvider,
94
97
  MoonshotProvider,
95
98
  BaichuanProvider,
@@ -130,6 +133,7 @@ export { default as OpenAIProviderCard } from './openai';
130
133
  export { default as OpenRouterProviderCard } from './openrouter';
131
134
  export { default as PerplexityProviderCard } from './perplexity';
132
135
  export { default as QwenProviderCard } from './qwen';
136
+ export { default as SenseNovaProviderCard } from './sensenova';
133
137
  export { default as SiliconCloudProviderCard } from './siliconcloud';
134
138
  export { default as SparkProviderCard } from './spark';
135
139
  export { default as StepfunProviderCard } from './stepfun';
@@ -0,0 +1,124 @@
1
+ import { ModelProviderCard } from '@/types/llm';
2
+
3
+ // ref https://platform.sensenova.cn/pricing
4
+ // ref https://platform.sensenova.cn/release?path=/release-202409.md
5
+ const SenseNova: ModelProviderCard = {
6
+ chatModels: [
7
+ {
8
+ description: '最新版本模型 (V5.5),128K上下文长度,在数学推理、英文对话、指令跟随以及长文本理解等领域能力显著提升,比肩GPT-4o',
9
+ displayName: 'SenseChat 5.5',
10
+ enabled: true,
11
+ functionCall: true,
12
+ id: 'SenseChat-5',
13
+ pricing: {
14
+ currency: 'CNY',
15
+ input: 40,
16
+ output: 100,
17
+ },
18
+ tokens: 131_072,
19
+ },
20
+ {
21
+ description: '最新版本模型 (V5.5),16K上下文长度,支持多图的输入,全面实现模型基础能力优化,在对象属性识别、空间关系、动作事件识别、场景理解、情感识别、逻辑常识推理和文本理解生成上都实现了较大提升。',
22
+ displayName: 'SenseChat 5.5 Vision',
23
+ enabled: true,
24
+ id: 'SenseChat-Vision',
25
+ pricing: {
26
+ currency: 'CNY',
27
+ input: 100,
28
+ output: 100,
29
+ },
30
+ tokens: 16_384,
31
+ vision: true,
32
+ },
33
+ {
34
+ description: '适用于快速问答、模型微调场景',
35
+ displayName: 'SenseChat 5.0 Turbo',
36
+ enabled: true,
37
+ id: 'SenseChat-Turbo',
38
+ pricing: {
39
+ currency: 'CNY',
40
+ input: 2,
41
+ output: 5,
42
+ },
43
+ tokens: 32_768,
44
+ },
45
+ {
46
+ description: '32K上下文长度,在粤语的对话理解上超越了GPT-4,在知识、推理、数学及代码编写等多个领域均能与GPT-4 Turbo相媲美',
47
+ displayName: 'SenseChat 5.0 Cantonese',
48
+ id: 'SenseChat-5-Cantonese',
49
+ pricing: {
50
+ currency: 'CNY',
51
+ input: 27,
52
+ output: 27,
53
+ },
54
+ tokens: 32_768,
55
+ },
56
+ {
57
+ description: '基础版本模型 (V4),128K上下文长度,在长文本理解及生成等任务中表现出色',
58
+ displayName: 'SenseChat 4.0 128K',
59
+ enabled: true,
60
+ id: 'SenseChat-128K',
61
+ pricing: {
62
+ currency: 'CNY',
63
+ input: 60,
64
+ output: 60,
65
+ },
66
+ tokens: 131_072,
67
+ },
68
+ {
69
+ description: '基础版本模型 (V4),32K上下文长度,灵活应用于各类场景',
70
+ displayName: 'SenseChat 4.0 32K',
71
+ enabled: true,
72
+ id: 'SenseChat-32K',
73
+ pricing: {
74
+ currency: 'CNY',
75
+ input: 36,
76
+ output: 36,
77
+ },
78
+ tokens: 32_768,
79
+ },
80
+ {
81
+ description: '基础版本模型 (V4),4K上下文长度,通用能力强大',
82
+ displayName: 'SenseChat 4.0 4K',
83
+ enabled: true,
84
+ id: 'SenseChat',
85
+ pricing: {
86
+ currency: 'CNY',
87
+ input: 12,
88
+ output: 12,
89
+ },
90
+ tokens: 4096,
91
+ },
92
+ {
93
+ description: '标准版模型,8K上下文长度,高响应速度',
94
+ displayName: 'SenseChat Character',
95
+ id: 'SenseChat-Character',
96
+ pricing: {
97
+ currency: 'CNY',
98
+ input: 12,
99
+ output: 12,
100
+ },
101
+ tokens: 8192,
102
+ },
103
+ {
104
+ description: '高级版模型,32K上下文长度,能力全面提升,支持中/英文对话',
105
+ displayName: 'SenseChat Character Pro',
106
+ id: 'SenseChat-Character-Pro',
107
+ pricing: {
108
+ currency: 'CNY',
109
+ input: 15,
110
+ output: 15,
111
+ },
112
+ tokens: 32_768,
113
+ },
114
+ ],
115
+ checkModel: 'SenseChat-Turbo',
116
+ disableBrowserRequest: true,
117
+ id: 'sensenova',
118
+ modelList: { showModelFetcher: true },
119
+ modelsUrl: 'https://platform.sensenova.cn/pricing',
120
+ name: 'SenseNova',
121
+ url: 'https://platform.sensenova.cn/home',
122
+ };
123
+
124
+ export default SenseNova;
@@ -10,7 +10,7 @@ const Spark: ModelProviderCard = {
10
10
  displayName: 'Spark Lite',
11
11
  enabled: true,
12
12
  functionCall: false,
13
- id: 'general',
13
+ id: 'lite',
14
14
  maxOutput: 4096,
15
15
  tokens: 8192,
16
16
  },
@@ -30,14 +30,14 @@ const Spark: ModelProviderCard = {
30
30
  displayName: 'Spark Pro 128K',
31
31
  enabled: true,
32
32
  functionCall: false,
33
- id: 'Pro-128k',
33
+ id: 'pro-128k',
34
34
  maxOutput: 4096,
35
35
  tokens: 131_072,
36
36
  },
37
37
  {
38
38
  description:
39
39
  'Spark Max 为功能最为全面的版本,支持联网搜索及众多内置插件。其全面优化的核心能力以及系统角色设定和函数调用功能,使其在各种复杂应用场景中的表现极为优异和出色。',
40
- displayName: 'Spark 3.5 Max',
40
+ displayName: 'Spark Max',
41
41
  enabled: true,
42
42
  functionCall: false,
43
43
  id: 'generalv3.5',
@@ -47,10 +47,10 @@ const Spark: ModelProviderCard = {
47
47
  {
48
48
  description:
49
49
  'Spark Max 32K 配置了大上下文处理能力,更强的上下文理解和逻辑推理能力,支持32K tokens的文本输入,适用于长文档阅读、私有知识问答等场景',
50
- displayName: 'Spark 3.5 Max 32K',
50
+ displayName: 'Spark Max 32K',
51
51
  enabled: true,
52
52
  functionCall: false,
53
- id: 'Max-32k',
53
+ id: 'max-32k',
54
54
  maxOutput: 8192,
55
55
  tokens: 32_768,
56
56
  },
@@ -65,7 +65,7 @@ const Spark: ModelProviderCard = {
65
65
  tokens: 8192,
66
66
  },
67
67
  ],
68
- checkModel: 'general',
68
+ checkModel: 'lite',
69
69
  description:
70
70
  '科大讯飞星火大模型提供多领域、多语言的强大 AI 能力,利用先进的自然语言处理技术,构建适用于智能硬件、智慧医疗、智慧金融等多种垂直场景的创新应用。',
71
71
  id: 'spark',
package/src/const/auth.ts CHANGED
@@ -40,6 +40,9 @@ export interface JWTPayload {
40
40
  wenxinAccessKey?: string;
41
41
  wenxinSecretKey?: string;
42
42
 
43
+ sensenovaAccessKeyID?: string;
44
+ sensenovaAccessKeySecret?: string;
45
+
43
46
  /**
44
47
  * user id
45
48
  * in client db mode it's a uuid
@@ -20,6 +20,7 @@ import {
20
20
  OpenRouterProviderCard,
21
21
  PerplexityProviderCard,
22
22
  QwenProviderCard,
23
+ SenseNovaProviderCard,
23
24
  SiliconCloudProviderCard,
24
25
  SparkProviderCard,
25
26
  StepfunProviderCard,
@@ -123,6 +124,10 @@ export const DEFAULT_LLM_CONFIG: UserModelProviderConfig = {
123
124
  enabled: false,
124
125
  enabledModels: filterEnabledModels(QwenProviderCard),
125
126
  },
127
+ sensenova: {
128
+ enabled: false,
129
+ enabledModels: filterEnabledModels(SenseNovaProviderCard),
130
+ },
126
131
  siliconcloud: {
127
132
  enabled: false,
128
133
  enabledModels: filterEnabledModels(SiliconCloudProviderCard),