Skip to content

Commit 9b62685

Browse files
authored
💄 style: Allow switching model type (lobehub#9529)
1 parent 249b46e commit 9b62685

File tree

5 files changed

+60
-5
lines changed

5 files changed

+60
-5
lines changed

packages/database/src/repositories/aiInfra/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export class AiInfraRepos {
128128
providerId: provider.id,
129129
settings: item.settings,
130130
sort: user.sort || undefined,
131-
type: item.type,
131+
type: user.type || item.type,
132132
};
133133
})
134134
.filter((item) => (filterEnabled ? item.enabled : true));

packages/model-bank/src/types/aiModel.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ export const CreateAiModelSchema = z.object({
327327
id: z.string(),
328328
providerId: z.string(),
329329
releasedAt: z.string().optional(),
330+
type: AiModelTypeSchema.optional(),
330331

331332
// checkModel: z.string().optional(),
332333
// homeUrl: z.string().optional(),
@@ -362,6 +363,7 @@ export const UpdateAiModelSchema = z.object({
362363
.optional(),
363364
contextWindowTokens: z.number().nullable().optional(),
364365
displayName: z.string().nullable().optional(),
366+
type: AiModelTypeSchema.optional(),
365367
});
366368

367369
export type UpdateAiModelParams = z.infer<typeof UpdateAiModelSchema>;

src/app/[variants]/(main)/settings/provider/features/ModelList/CreateNewModelModal/Form.tsx

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { Input } from '@lobehub/ui';
2-
import { Checkbox, Form, FormInstance } from 'antd';
3-
import { memo, useEffect } from 'react';
2+
import { Checkbox, Form, FormInstance, Select } from 'antd';
3+
import { memo, useEffect, useMemo } from 'react';
44
import { useTranslation } from 'react-i18next';
55

66
import MaxTokenSlider from '@/components/MaxTokenSlider';
77
import { useIsMobile } from '@/hooks/useIsMobile';
8-
import { AiModelType } from '../../../../../../../../../packages/model-bank/src/types/aiModel';
98
import { ChatModelCard } from '@/types/llm';
109

10+
import { AiModelType } from '../../../../../../../../../packages/model-bank/src/types/aiModel';
11+
1112
interface ModelConfigFormProps {
1213
idEditable?: boolean;
1314
initialValues?: ChatModelCard;
@@ -24,6 +25,30 @@ const ModelConfigForm = memo<ModelConfigFormProps>(
2425

2526
const isMobile = useIsMobile();
2627

28+
const modelTypeOptions = useMemo(
29+
() =>
30+
(
31+
[
32+
'chat',
33+
'embedding',
34+
'tts',
35+
'stt',
36+
'image',
37+
// 'text2video',
38+
// 'text2music',
39+
'realtime',
40+
] as AiModelType[]
41+
).map((value) => {
42+
const label = t(`providerModels.item.modelConfig.type.options.${value}`);
43+
44+
return {
45+
label: label !== value ? `${label} (${value})` : label,
46+
value,
47+
};
48+
}),
49+
[t],
50+
);
51+
2752
useEffect(() => {
2853
onFormInstanceReady(formInstance);
2954
}, []);
@@ -102,6 +127,16 @@ const ModelConfigForm = memo<ModelConfigFormProps>(
102127
>
103128
<Checkbox />
104129
</Form.Item>
130+
<Form.Item
131+
extra={t('providerModels.item.modelConfig.type.extra')}
132+
label={t('providerModels.item.modelConfig.type.title')}
133+
name={'type'}
134+
>
135+
<Select
136+
options={modelTypeOptions}
137+
placeholder={t('providerModels.item.modelConfig.type.placeholder')}
138+
/>
139+
</Form.Item>
105140
{/*<Form.Item*/}
106141
{/* extra={t('providerModels.item.modelConfig.files.extra')}*/}
107142
{/* label={t('providerModels.item.modelConfig.files.title')}*/}

src/locales/default/modelProvider.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,21 @@ export default {
299299
title: '最大上下文窗口',
300300
unlimited: '无限制',
301301
},
302+
type: {
303+
extra: '不同模型类型拥有差异化的使用场景与能力',
304+
options: {
305+
chat: '对话',
306+
embedding: '向量化',
307+
image: '图片生成',
308+
realtime: '实时对话',
309+
stt: '语音转文本',
310+
text2music: '文本转音乐',
311+
text2video: '文本转视频',
312+
tts: '语音合成',
313+
},
314+
placeholder: '请选择模型类型',
315+
title: '模型类型',
316+
},
302317
vision: {
303318
extra:
304319
'此配置将仅开启应用中的图片上传配置,是否支持识别完全取决于模型本身,请自行测试该模型的视觉识别能力可用性',

src/store/aiInfra/slices/aiProvider/action.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,10 @@ export const createAiProviderSlice: StateCreator<
160160
await get().refreshAiProviderRuntimeState();
161161
},
162162
refreshAiProviderRuntimeState: async () => {
163-
await mutate([AiProviderSwrKey.fetchAiProviderRuntimeState, true]);
163+
await Promise.all([
164+
mutate([AiProviderSwrKey.fetchAiProviderRuntimeState, true]),
165+
mutate([AiProviderSwrKey.fetchAiProviderRuntimeState, false]),
166+
]);
164167
},
165168
removeAiProvider: async (id) => {
166169
await aiProviderService.deleteAiProvider(id);

0 commit comments

Comments
 (0)