@lobehub/chat 1.44.0 → 1.44.1
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/next.config.ts +1 -1
- package/package.json +1 -1
- package/src/components/ModelSelect/index.tsx +18 -7
- package/src/database/repositories/aiInfra/index.ts +4 -2
- package/src/database/server/models/aiModel.ts +1 -0
- package/src/features/ModelSelect/index.tsx +8 -1
- package/src/features/ModelSwitchPanel/index.tsx +8 -1
- package/src/store/aiInfra/slices/aiProvider/action.ts +2 -2
- package/src/store/user/slices/modelList/selectors/modelProvider.ts +1 -0
- package/src/types/aiModel.ts +4 -0
- package/src/types/aiProvider.ts +4 -2
package/CHANGELOG.md
CHANGED
@@ -2,6 +2,31 @@
|
|
2
2
|
|
3
3
|
# Changelog
|
4
4
|
|
5
|
+
### [Version 1.44.1](https://github.com/lobehub/lobe-chat/compare/v1.44.0...v1.44.1)
|
6
|
+
|
7
|
+
<sup>Released on **2025-01-08**</sup>
|
8
|
+
|
9
|
+
#### 🐛 Bug Fixes
|
10
|
+
|
11
|
+
- **misc**: Fix model select not auto update and sort issue.
|
12
|
+
|
13
|
+
<br/>
|
14
|
+
|
15
|
+
<details>
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
17
|
+
|
18
|
+
#### What's fixed
|
19
|
+
|
20
|
+
- **misc**: Fix model select not auto update and sort issue, closes [#5330](https://github.com/lobehub/lobe-chat/issues/5330) ([dc76d6f](https://github.com/lobehub/lobe-chat/commit/dc76d6f))
|
21
|
+
|
22
|
+
</details>
|
23
|
+
|
24
|
+
<div align="right">
|
25
|
+
|
26
|
+
[](#readme-top)
|
27
|
+
|
28
|
+
</div>
|
29
|
+
|
5
30
|
## [Version 1.44.0](https://github.com/lobehub/lobe-chat/compare/v1.43.6...v1.44.0)
|
6
31
|
|
7
32
|
<sup>Released on **2025-01-07**</sup>
|
package/changelog/v1.json
CHANGED
package/next.config.ts
CHANGED
@@ -164,7 +164,7 @@ const nextConfig: NextConfig = {
|
|
164
164
|
source: '/welcome',
|
165
165
|
},
|
166
166
|
],
|
167
|
-
serverExternalPackages: ['@electric-sql/pglite', '
|
167
|
+
serverExternalPackages: ['@electric-sql/pglite', 'sharp'],
|
168
168
|
|
169
169
|
transpilePackages: ['pdfjs-dist', 'mermaid'],
|
170
170
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@lobehub/chat",
|
3
|
-
"version": "1.44.
|
3
|
+
"version": "1.44.1",
|
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",
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { IconAvatarProps, ModelIcon, ProviderIcon } from '@lobehub/icons';
|
2
|
-
import { Icon, Tooltip } from '@lobehub/ui';
|
2
|
+
import { Avatar, Icon, Tooltip } from '@lobehub/ui';
|
3
3
|
import { Typography } from 'antd';
|
4
4
|
import { createStyles } from 'antd-style';
|
5
5
|
import { Infinity, LucideEye, LucidePaperclip, ToyBrick } from 'lucide-react';
|
@@ -10,6 +10,7 @@ import { useTranslation } from 'react-i18next';
|
|
10
10
|
import { Center, Flexbox } from 'react-layout-kit';
|
11
11
|
|
12
12
|
import { ModelAbilities } from '@/types/aiModel';
|
13
|
+
import { AiProviderSourceType } from '@/types/aiProvider';
|
13
14
|
import { ChatModelCard } from '@/types/llm';
|
14
15
|
import { formatTokenNumber } from '@/utils/format';
|
15
16
|
|
@@ -153,16 +154,26 @@ export const ModelItemRender = memo<ModelItemRenderProps>(({ showInfoTag = true,
|
|
153
154
|
});
|
154
155
|
|
155
156
|
interface ProviderItemRenderProps {
|
157
|
+
logo?: string;
|
156
158
|
name: string;
|
157
159
|
provider: string;
|
160
|
+
source?: AiProviderSourceType;
|
158
161
|
}
|
159
162
|
|
160
|
-
export const ProviderItemRender = memo<ProviderItemRenderProps>(
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
)
|
163
|
+
export const ProviderItemRender = memo<ProviderItemRenderProps>(
|
164
|
+
({ provider, name, source, logo }) => {
|
165
|
+
return (
|
166
|
+
<Flexbox align={'center'} gap={4} horizontal>
|
167
|
+
{source === 'custom' && !!logo ? (
|
168
|
+
<Avatar avatar={logo} size={20} style={{ filter: 'grayscale(1)' }} title={name} />
|
169
|
+
) : (
|
170
|
+
<ProviderIcon provider={provider} size={20} type={'mono'} />
|
171
|
+
)}
|
172
|
+
{name}
|
173
|
+
</Flexbox>
|
174
|
+
);
|
175
|
+
},
|
176
|
+
);
|
166
177
|
|
167
178
|
interface LabelRendererProps {
|
168
179
|
Icon: FC<IconAvatarProps>;
|
@@ -62,7 +62,7 @@ export class AiInfraRepos {
|
|
62
62
|
return list
|
63
63
|
.filter((item) => item.enabled)
|
64
64
|
.sort((a, b) => a.sort! - b.sort!)
|
65
|
-
.map((item) => ({ id: item.id, name: item.name, source: item.source }));
|
65
|
+
.map((item) => ({ id: item.id, logo: item.logo, name: item.name, source: item.source }));
|
66
66
|
};
|
67
67
|
|
68
68
|
getEnabledModels = async () => {
|
@@ -86,7 +86,9 @@ export class AiInfraRepos {
|
|
86
86
|
{ concurrency: 10 },
|
87
87
|
);
|
88
88
|
|
89
|
-
return [...modelList.flat(), ...userEnabledModels]
|
89
|
+
return [...modelList.flat(), ...userEnabledModels].sort(
|
90
|
+
(a, b) => (a?.sort || -1) - (b?.sort || -1),
|
91
|
+
) as EnabledAiModel[];
|
90
92
|
};
|
91
93
|
|
92
94
|
getAiProviderModelList = async (providerId: string) => {
|
@@ -46,7 +46,14 @@ const ModelSelect = memo<ModelSelectProps>(({ value, onChange, showAbility = tru
|
|
46
46
|
}
|
47
47
|
|
48
48
|
return enabledList.map((provider) => ({
|
49
|
-
label:
|
49
|
+
label: (
|
50
|
+
<ProviderItemRender
|
51
|
+
logo={provider.logo}
|
52
|
+
name={provider.name}
|
53
|
+
provider={provider.id}
|
54
|
+
source={provider.source}
|
55
|
+
/>
|
56
|
+
),
|
50
57
|
options: getChatModels(provider),
|
51
58
|
}));
|
52
59
|
}, [enabledList]);
|
@@ -88,7 +88,14 @@ const ModelSwitchPanel = memo<PropsWithChildren>(({ children }) => {
|
|
88
88
|
return enabledList.map((provider) => ({
|
89
89
|
children: getModelItems(provider),
|
90
90
|
key: provider.id,
|
91
|
-
label:
|
91
|
+
label: (
|
92
|
+
<ProviderItemRender
|
93
|
+
logo={provider.logo}
|
94
|
+
name={provider.name}
|
95
|
+
provider={provider.id}
|
96
|
+
source={provider.source}
|
97
|
+
/>
|
98
|
+
),
|
92
99
|
type: 'group',
|
93
100
|
}));
|
94
101
|
}, [enabledList]);
|
@@ -84,7 +84,7 @@ export const createAiProviderSlice: StateCreator<
|
|
84
84
|
await get().refreshAiProviderRuntimeState();
|
85
85
|
},
|
86
86
|
refreshAiProviderRuntimeState: async () => {
|
87
|
-
await mutate(AiProviderSwrKey.fetchAiProviderRuntimeState);
|
87
|
+
await mutate([AiProviderSwrKey.fetchAiProviderRuntimeState, true]);
|
88
88
|
},
|
89
89
|
removeAiProvider: async (id) => {
|
90
90
|
await aiProviderService.deleteAiProvider(id);
|
@@ -187,8 +187,8 @@ export const createAiProviderSlice: StateCreator<
|
|
187
187
|
|
188
188
|
// 3. 组装最终数据结构
|
189
189
|
const enabledChatModelList = data.enabledAiProviders.map((provider) => ({
|
190
|
+
...provider,
|
190
191
|
children: getModelListByType(provider.id, 'chat'),
|
191
|
-
id: provider.id,
|
192
192
|
name: provider.name || provider.id,
|
193
193
|
}));
|
194
194
|
|
package/src/types/aiModel.ts
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
import { z } from 'zod';
|
2
2
|
|
3
|
+
import { AiProviderSourceType } from '@/types/aiProvider';
|
4
|
+
|
3
5
|
export type ModelPriceCurrency = 'CNY' | 'USD';
|
4
6
|
|
5
7
|
export const AiModelSourceEnum = {
|
@@ -312,5 +314,7 @@ interface AiModelForSelect {
|
|
312
314
|
export interface EnabledProviderWithModels {
|
313
315
|
children: AiModelForSelect[];
|
314
316
|
id: string;
|
317
|
+
logo?: string;
|
315
318
|
name: string;
|
319
|
+
source: AiProviderSourceType;
|
316
320
|
}
|
package/src/types/aiProvider.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { z } from 'zod';
|
2
2
|
|
3
|
-
import { AiModelConfig,
|
3
|
+
import { AiModelConfig, AiModelType, ModelAbilities } from '@/types/aiModel';
|
4
4
|
import { SmoothingParams } from '@/types/llm';
|
5
5
|
|
6
6
|
export const AiProviderSourceEnum = {
|
@@ -182,8 +182,9 @@ export interface AiProviderSortMap {
|
|
182
182
|
|
183
183
|
export interface EnabledProvider {
|
184
184
|
id: string;
|
185
|
+
logo?: string;
|
185
186
|
name?: string;
|
186
|
-
source:
|
187
|
+
source: AiProviderSourceType;
|
187
188
|
}
|
188
189
|
|
189
190
|
export interface EnabledAiModel {
|
@@ -193,6 +194,7 @@ export interface EnabledAiModel {
|
|
193
194
|
displayName?: string;
|
194
195
|
id: string;
|
195
196
|
providerId: string;
|
197
|
+
sort?: number;
|
196
198
|
type: AiModelType;
|
197
199
|
}
|
198
200
|
|