@lobehub/chat 1.40.1 → 1.40.2
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 +25 -0
- package/changelog/v1.json +9 -0
- package/package.json +1 -1
- package/src/app/(main)/discover/(detail)/model/[...slugs]/features/Actions.tsx +1 -1
- package/src/app/(main)/discover/(detail)/model/[...slugs]/features/Header.tsx +1 -1
- package/src/app/(main)/discover/(detail)/model/[...slugs]/features/InfoSidebar/SuggestionItem.tsx +2 -2
- package/src/app/(main)/discover/(detail)/model/[...slugs]/features/ProviderList/ProviderItem.tsx +1 -1
- package/src/app/(main)/discover/(detail)/provider/[slug]/features/ModelList/ModelItem.tsx +3 -3
- package/src/app/(main)/discover/(list)/models/features/Card.tsx +6 -2
- package/src/app/(main)/settings/llm/ProviderList/Cloudflare/index.tsx +1 -5
- package/src/app/(main)/settings/llm/components/ProviderModelList/ModelFetcher.tsx +2 -2
- package/src/components/ModelSelect/index.tsx +7 -4
- package/src/config/__tests__/app.test.ts +6 -2
- package/src/config/app.ts +1 -2
- package/src/config/modelProviders/ai21.ts +2 -2
- package/src/config/modelProviders/ai360.ts +4 -4
- package/src/config/modelProviders/anthropic.ts +8 -8
- package/src/config/modelProviders/azure.ts +5 -5
- package/src/config/modelProviders/baichuan.ts +6 -6
- package/src/config/modelProviders/bedrock.ts +14 -14
- package/src/config/modelProviders/cloudflare.ts +12 -11
- package/src/config/modelProviders/deepseek.ts +1 -1
- package/src/config/modelProviders/fireworksai.ts +29 -27
- package/src/config/modelProviders/giteeai.ts +7 -7
- package/src/config/modelProviders/github.ts +29 -28
- package/src/config/modelProviders/google.ts +18 -19
- package/src/config/modelProviders/groq.ts +13 -13
- package/src/config/modelProviders/higress.ts +195 -194
- package/src/config/modelProviders/huggingface.ts +7 -7
- package/src/config/modelProviders/hunyuan.ts +25 -17
- package/src/config/modelProviders/internlm.ts +6 -4
- package/src/config/modelProviders/minimax.ts +5 -5
- package/src/config/modelProviders/mistral.ts +14 -16
- package/src/config/modelProviders/moonshot.ts +3 -3
- package/src/config/modelProviders/novita.ts +15 -15
- package/src/config/modelProviders/ollama.ts +46 -46
- package/src/config/modelProviders/openai.ts +23 -22
- package/src/config/modelProviders/openrouter.ts +20 -18
- package/src/config/modelProviders/perplexity.ts +7 -7
- package/src/config/modelProviders/qwen.ts +23 -25
- package/src/config/modelProviders/sensenova.ts +8 -8
- package/src/config/modelProviders/siliconcloud.ts +138 -92
- package/src/config/modelProviders/spark.ts +6 -6
- package/src/config/modelProviders/stepfun.ts +9 -9
- package/src/config/modelProviders/taichu.ts +2 -3
- package/src/config/modelProviders/togetherai.ts +57 -48
- package/src/config/modelProviders/upstage.ts +3 -3
- package/src/config/modelProviders/wenxin.ts +12 -12
- package/src/config/modelProviders/xai.ts +4 -4
- package/src/config/modelProviders/zeroone.ts +11 -11
- package/src/config/modelProviders/zhipu.ts +17 -16
- package/src/database/_deprecated/core/model.ts +1 -1
- package/src/database/_deprecated/models/sessionGroup.ts +4 -1
- package/src/database/client/migrations.json +2 -5
- package/src/database/migrations/meta/0012_snapshot.json +176 -518
- package/src/database/schemas/agent.ts +1 -1
- package/src/database/schemas/message.ts +1 -0
- package/src/database/schemas/session.ts +1 -0
- package/src/database/server/models/topic.ts +19 -17
- package/src/features/DebugUI/Content.tsx +0 -1
- package/src/features/PluginStore/index.tsx +2 -2
- package/src/layout/GlobalProvider/AntdV5MonkeyPatch.tsx +4 -4
- package/src/libs/agent-runtime/google/index.ts +4 -3
- package/src/libs/agent-runtime/higress/index.ts +1 -1
- package/src/libs/agent-runtime/huggingface/index.ts +2 -4
- package/src/libs/agent-runtime/minimax/index.ts +5 -10
- package/src/libs/agent-runtime/mistral/index.ts +3 -6
- package/src/libs/agent-runtime/moonshot/index.ts +3 -6
- package/src/libs/agent-runtime/novita/__snapshots__/index.test.ts.snap +18 -18
- package/src/libs/agent-runtime/novita/index.ts +1 -1
- package/src/libs/agent-runtime/openai/__snapshots__/index.test.ts.snap +10 -10
- package/src/libs/agent-runtime/openrouter/__snapshots__/index.test.ts.snap +168 -168
- package/src/libs/agent-runtime/openrouter/index.ts +1 -1
- package/src/libs/agent-runtime/perplexity/index.ts +4 -4
- package/src/libs/agent-runtime/sensenova/index.ts +9 -3
- package/src/libs/agent-runtime/taichu/index.ts +4 -10
- package/src/libs/agent-runtime/utils/streams/minimax.test.ts +5 -2
- package/src/libs/agent-runtime/utils/streams/minimax.ts +4 -1
- package/src/libs/agent-runtime/zhipu/index.ts +12 -13
- package/src/libs/langchain/loaders/index.ts +2 -2
- package/src/libs/langchain/types.ts +9 -1
- package/src/locales/default/modelProvider.ts +1 -1
- package/src/migrations/FromV3ToV4/fixtures/ollama-output-v4.json +1 -1
- package/src/migrations/FromV6ToV7/types/v7.ts +0 -2
- package/src/server/globalConfig/genServerLLMConfig.test.ts +4 -4
- package/src/server/globalConfig/genServerLLMConfig.ts +29 -24
- package/src/server/globalConfig/index.ts +1 -2
- package/src/server/routers/edge/config/__snapshots__/index.test.ts.snap +9 -9
- package/src/server/routers/lambda/_template.ts +1 -1
- package/src/server/routers/lambda/knowledgeBase.ts +1 -1
- package/src/server/routers/lambda/session.ts +1 -1
- package/src/server/routers/lambda/sessionGroup.ts +1 -1
- package/src/server/routers/lambda/thread.ts +1 -1
- package/src/server/services/nextAuthUser/index.ts +1 -1
- package/src/store/user/slices/modelList/__snapshots__/action.test.ts.snap +1 -1
- package/src/store/user/slices/modelList/action.test.ts +4 -4
- package/src/store/user/slices/modelList/reducers/customModelCard.test.ts +6 -6
- package/src/store/user/slices/modelList/selectors/modelProvider.ts +3 -2
- package/src/tools/dalle/Render/Item/index.tsx +1 -1
- package/src/types/files/index.ts +0 -1
- package/src/types/llm.ts +4 -5
- package/src/utils/__snapshots__/parseModels.test.ts.snap +2 -2
- package/src/utils/genUserLLMConfig.test.ts +4 -4
- package/src/utils/genUserLLMConfig.ts +6 -4
- package/src/utils/parseModels.test.ts +16 -16
- package/src/utils/parseModels.ts +1 -1
- package/src/utils/server/jwt.ts +2 -6
@@ -82,6 +82,7 @@ exports[`parseModelString > only add the model 1`] = `
|
|
82
82
|
exports[`transformToChatModelCards > should have file with builtin models like gpt-4-0125-preview 1`] = `
|
83
83
|
[
|
84
84
|
{
|
85
|
+
"contextWindowTokens": 128000,
|
85
86
|
"description": "最新的 GPT-4 Turbo 模型具备视觉功能。现在,视觉请求可以使用 JSON 模式和函数调用。 GPT-4 Turbo 是一个增强版本,为多模态任务提供成本效益高的支持。它在准确性和效率之间找到平衡,适合需要进行实时交互的应用程序场景。",
|
86
87
|
"displayName": "ChatGPT-4",
|
87
88
|
"enabled": true,
|
@@ -92,9 +93,9 @@ exports[`transformToChatModelCards > should have file with builtin models like g
|
|
92
93
|
"input": 10,
|
93
94
|
"output": 30,
|
94
95
|
},
|
95
|
-
"tokens": 128000,
|
96
96
|
},
|
97
97
|
{
|
98
|
+
"contextWindowTokens": 128000,
|
98
99
|
"description": "最新的 GPT-4 Turbo 模型具备视觉功能。现在,视觉请求可以使用 JSON 模式和函数调用。 GPT-4 Turbo 是一个增强版本,为多模态任务提供成本效益高的支持。它在准确性和效率之间找到平衡,适合需要进行实时交互的应用程序场景。",
|
99
100
|
"displayName": "ChatGPT-4 Vision",
|
100
101
|
"enabled": true,
|
@@ -105,7 +106,6 @@ exports[`transformToChatModelCards > should have file with builtin models like g
|
|
105
106
|
"input": 10,
|
106
107
|
"output": 30,
|
107
108
|
},
|
108
|
-
"tokens": 128000,
|
109
109
|
"vision": true,
|
110
110
|
},
|
111
111
|
]
|
@@ -1,15 +1,15 @@
|
|
1
1
|
import { describe, expect, it, vi } from 'vitest';
|
2
2
|
|
3
|
-
import { genUserLLMConfig } from './genUserLLMConfig';
|
4
|
-
|
5
3
|
import { ModelProviderCard } from '@/types/llm';
|
6
4
|
|
5
|
+
import { genUserLLMConfig } from './genUserLLMConfig';
|
6
|
+
|
7
7
|
// Mock ModelProvider enum
|
8
8
|
vi.mock('@/libs/agent-runtime', () => ({
|
9
9
|
ModelProvider: {
|
10
10
|
Ollama: 'ollama',
|
11
11
|
OpenAI: 'openai',
|
12
|
-
}
|
12
|
+
},
|
13
13
|
}));
|
14
14
|
|
15
15
|
// Mock ProviderCards and filterEnabledModels
|
@@ -27,7 +27,7 @@ describe('genUserLLMConfig', () => {
|
|
27
27
|
it('should generate correct LLM config for Ollama and OpenAI', () => {
|
28
28
|
const specificConfig = {
|
29
29
|
ollama: { enabled: true, fetchOnClient: true },
|
30
|
-
openai: { enabled: true }
|
30
|
+
openai: { enabled: true },
|
31
31
|
};
|
32
32
|
const config = genUserLLMConfig(specificConfig);
|
33
33
|
|
@@ -1,20 +1,22 @@
|
|
1
1
|
import * as ProviderCards from '@/config/modelProviders';
|
2
|
-
|
3
2
|
import { ModelProvider } from '@/libs/agent-runtime';
|
4
|
-
|
5
3
|
import { ModelProviderCard } from '@/types/llm';
|
6
4
|
import { UserModelProviderConfig } from '@/types/user/settings';
|
7
5
|
|
8
6
|
export const genUserLLMConfig = (specificConfig: Record<any, any>): UserModelProviderConfig => {
|
9
7
|
return Object.keys(ModelProvider).reduce((config, providerKey) => {
|
10
8
|
const provider = ModelProvider[providerKey as keyof typeof ModelProvider];
|
11
|
-
const providerCard = ProviderCards[
|
9
|
+
const providerCard = ProviderCards[
|
10
|
+
`${providerKey}ProviderCard` as keyof typeof ProviderCards
|
11
|
+
] as ModelProviderCard;
|
12
12
|
const providerConfig = specificConfig[provider as keyof typeof specificConfig] || {};
|
13
13
|
|
14
14
|
config[provider] = {
|
15
15
|
enabled: providerConfig.enabled !== undefined ? providerConfig.enabled : false,
|
16
16
|
enabledModels: providerCard ? ProviderCards.filterEnabledModels(providerCard) : [],
|
17
|
-
...(providerConfig.fetchOnClient !== undefined && {
|
17
|
+
...(providerConfig.fetchOnClient !== undefined && {
|
18
|
+
fetchOnClient: providerConfig.fetchOnClient,
|
19
|
+
}),
|
18
20
|
};
|
19
21
|
|
20
22
|
return config;
|
@@ -37,7 +37,7 @@ describe('parseModelString', () => {
|
|
37
37
|
expect(result.add[0]).toEqual({
|
38
38
|
displayName: 'ChatGLM 6B',
|
39
39
|
id: 'chatglm-6b',
|
40
|
-
|
40
|
+
contextWindowTokens: 4096,
|
41
41
|
});
|
42
42
|
});
|
43
43
|
|
@@ -48,7 +48,7 @@ describe('parseModelString', () => {
|
|
48
48
|
displayName: '讯飞星火 v3.5',
|
49
49
|
functionCall: true,
|
50
50
|
id: 'spark-v3.5',
|
51
|
-
|
51
|
+
contextWindowTokens: 8192,
|
52
52
|
});
|
53
53
|
});
|
54
54
|
|
@@ -62,7 +62,7 @@ describe('parseModelString', () => {
|
|
62
62
|
displayName: 'Gemini 1.5 Flash',
|
63
63
|
vision: true,
|
64
64
|
id: 'gemini-1.5-flash-latest',
|
65
|
-
|
65
|
+
contextWindowTokens: 16000,
|
66
66
|
},
|
67
67
|
{
|
68
68
|
displayName: 'ChatGPT Plus',
|
@@ -70,7 +70,7 @@ describe('parseModelString', () => {
|
|
70
70
|
functionCall: true,
|
71
71
|
files: true,
|
72
72
|
id: 'gpt-4-all',
|
73
|
-
|
73
|
+
contextWindowTokens: 128000,
|
74
74
|
},
|
75
75
|
]);
|
76
76
|
});
|
@@ -85,14 +85,14 @@ describe('parseModelString', () => {
|
|
85
85
|
files: true,
|
86
86
|
functionCall: true,
|
87
87
|
id: 'gpt-4-0125-preview',
|
88
|
-
|
88
|
+
contextWindowTokens: 128000,
|
89
89
|
},
|
90
90
|
{
|
91
91
|
displayName: 'ChatGPT-4 Vision',
|
92
92
|
files: true,
|
93
93
|
functionCall: true,
|
94
94
|
id: 'gpt-4-turbo-2024-04-09',
|
95
|
-
|
95
|
+
contextWindowTokens: 128000,
|
96
96
|
vision: true,
|
97
97
|
},
|
98
98
|
]);
|
@@ -100,27 +100,27 @@ describe('parseModelString', () => {
|
|
100
100
|
|
101
101
|
it('should handle empty extension capability value', () => {
|
102
102
|
const result = parseModelString('model1<1024:>');
|
103
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
103
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024 });
|
104
104
|
});
|
105
105
|
|
106
106
|
it('should handle empty extension capability name', () => {
|
107
107
|
const result = parseModelString('model1<1024::file>');
|
108
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
108
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024, files: true });
|
109
109
|
});
|
110
110
|
|
111
111
|
it('should handle duplicate extension capabilities', () => {
|
112
112
|
const result = parseModelString('model1<1024:vision:vision>');
|
113
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
113
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024, vision: true });
|
114
114
|
});
|
115
115
|
|
116
116
|
it('should handle case-sensitive extension capability names', () => {
|
117
117
|
const result = parseModelString('model1<1024:VISION:FC:file>');
|
118
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
118
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024, files: true });
|
119
119
|
});
|
120
120
|
|
121
121
|
it('should handle case-sensitive extension capability values', () => {
|
122
122
|
const result = parseModelString('model1<1024:vision:Fc:File>');
|
123
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
123
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024, vision: true });
|
124
124
|
});
|
125
125
|
|
126
126
|
it('should handle empty angle brackets', () => {
|
@@ -155,27 +155,27 @@ describe('parseModelString', () => {
|
|
155
155
|
|
156
156
|
it('should handle digits followed by non-colon characters inside angle brackets', () => {
|
157
157
|
const result = parseModelString('model1<1024abc>');
|
158
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
158
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024 });
|
159
159
|
});
|
160
160
|
|
161
161
|
it('should handle digits followed by multiple colons inside angle brackets', () => {
|
162
162
|
const result = parseModelString('model1<1024::>');
|
163
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
163
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024 });
|
164
164
|
});
|
165
165
|
|
166
166
|
it('should handle digits followed by a colon and non-letter characters inside angle brackets', () => {
|
167
167
|
const result = parseModelString('model1<1024:123>');
|
168
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
168
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024 });
|
169
169
|
});
|
170
170
|
|
171
171
|
it('should handle digits followed by a colon and spaces inside angle brackets', () => {
|
172
172
|
const result = parseModelString('model1<1024: vision>');
|
173
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
173
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024 });
|
174
174
|
});
|
175
175
|
|
176
176
|
it('should handle digits followed by multiple colons and spaces inside angle brackets', () => {
|
177
177
|
const result = parseModelString('model1<1024: : vision>');
|
178
|
-
expect(result.add[0]).toEqual({ id: 'model1',
|
178
|
+
expect(result.add[0]).toEqual({ id: 'model1', contextWindowTokens: 1024 });
|
179
179
|
});
|
180
180
|
});
|
181
181
|
|
package/src/utils/parseModels.ts
CHANGED
@@ -56,7 +56,7 @@ export const parseModelString = (modelString: string = '', withDeploymentName =
|
|
56
56
|
|
57
57
|
if (capabilities.length > 0) {
|
58
58
|
const [maxTokenStr, ...capabilityList] = capabilities[0].replace('>', '').split(':');
|
59
|
-
model.
|
59
|
+
model.contextWindowTokens = parseInt(maxTokenStr, 10) || undefined;
|
60
60
|
|
61
61
|
for (const capability of capabilityList) {
|
62
62
|
switch (capability) {
|
package/src/utils/server/jwt.ts
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
import { importJWK, jwtVerify } from 'jose';
|
2
2
|
|
3
|
-
import {
|
4
|
-
JWTPayload,
|
5
|
-
JWT_SECRET_KEY,
|
6
|
-
NON_HTTP_PREFIX,
|
7
|
-
} from '@/const/auth';
|
3
|
+
import { JWTPayload, JWT_SECRET_KEY, NON_HTTP_PREFIX } from '@/const/auth';
|
8
4
|
|
9
5
|
export const getJWTPayload = async (token: string): Promise<JWTPayload> => {
|
10
6
|
//如果是 HTTP 协议发起的请求,直接解析 token
|
@@ -29,4 +25,4 @@ export const getJWTPayload = async (token: string): Promise<JWTPayload> => {
|
|
29
25
|
const { payload } = await jwtVerify(token, jwkSecretKey);
|
30
26
|
|
31
27
|
return payload as JWTPayload;
|
32
|
-
};
|
28
|
+
};
|