Skip to content

Commit 2335dcf

Browse files
committed
refactor: remove ModelProviderIdType and update related types
1 parent c67e645 commit 2335dcf

File tree

28 files changed

+279
-184
lines changed

28 files changed

+279
-184
lines changed

packages/global/core/ai/model.d.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { ModelTypeEnum } from './model';
2-
import type { ModelProviderIdType } from './provider';
32

43
type PriceType = {
54
charsPointsPrice?: number; // 1k chars=n points; 60s=n points;
@@ -9,7 +8,7 @@ type PriceType = {
98
outputPrice?: number; // 1k tokens=n points
109
};
1110
type BaseModelItemType = {
12-
provider: ModelProviderIdType;
11+
provider: string;
1312
model: string;
1413
name: string;
1514
avatar?: string; // model icon, from provider

packages/global/core/ai/model.ts

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { i18nT } from '../../../web/i18n/utils';
22
import type { LLMModelItemType, STTModelType, EmbeddingModelItemType } from './model.d';
3-
import { getModelProvider, type ModelProviderIdType } from './provider';
43

54
export enum ModelTypeEnum {
65
llm = 'llm',
@@ -54,29 +53,6 @@ export const defaultSTTModels: STTModelType[] = [
5453
}
5554
];
5655

57-
export const getModelFromList = (
58-
modelList: { provider: ModelProviderIdType; name: string; model: string }[],
59-
model: string,
60-
language: string
61-
):
62-
| {
63-
avatar: string;
64-
provider: ModelProviderIdType;
65-
name: string;
66-
model: string;
67-
}
68-
| undefined => {
69-
const modelData = modelList.find((item) => item.model === model) ?? modelList[0];
70-
if (!modelData) {
71-
return;
72-
}
73-
const provider = getModelProvider(modelData.provider, language);
74-
return {
75-
...modelData,
76-
avatar: provider.avatar
77-
};
78-
};
79-
8056
export const modelTypeList = [
8157
{ label: i18nT('common:model.type.chat'), value: ModelTypeEnum.llm },
8258
{ label: i18nT('common:model.type.embedding'), value: ModelTypeEnum.embedding },

packages/global/core/ai/provider.ts

Lines changed: 0 additions & 77 deletions
This file was deleted.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import type { I18nStringType } from '../../../common/i18n/type';
2+
3+
export type ModelShowType = {
4+
id: string;
5+
name: string;
6+
avatar: string;
7+
order: number;
8+
};
9+
10+
export type ModelProviderType = {
11+
id: string;
12+
name: I18nStringType;
13+
avatar: string;
14+
order: number;
15+
};
16+
17+
export type ModelProviderListType = {
18+
id: string;
19+
name: I18nStringType | string;
20+
avatar: string;
21+
provider: string;
22+
};
23+
24+
declare global {
25+
var ModelProviders_cache:
26+
| { listData: Array<ModelProviderType>; mapData: Map<string, ModelProviderType> }
27+
| undefined;
28+
var aiproxyIdMap_cache:
29+
| { listData: Array<ModelProviderListType>; mapData: Map<string, ModelProviderListType> }
30+
| undefined;
31+
}

packages/global/sdk/fastgpt-plugin.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
export * from '@fastgpt-sdk/plugin';
2+
3+
export { default } from '@fastgpt-sdk/plugin';

packages/service/core/ai/config/utils.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
type RerankModelItemType
1010
} from '@fastgpt/global/core/ai/model.d';
1111
import { debounce } from 'lodash';
12-
import { getModelProvider } from '@fastgpt/global/core/ai/provider';
12+
import { getModelProvider } from '../../../core/app/provider/controller';
1313
import { findModelFromAlldata } from '../model';
1414
import {
1515
reloadFastGPTConfigBuffer,
@@ -18,6 +18,7 @@ import {
1818
import { delay } from '@fastgpt/global/common/system/utils';
1919
import { pluginClient } from '../../../thirdProvider/fastgptPlugin';
2020
import { setCron } from '../../../common/system/cron';
21+
import { preloadModelProviders } from '../../../core/app/provider/controller';
2122

2223
export const loadSystemModels = async (init = false, language = 'en') => {
2324
const pushModel = (model: SystemModelItemType) => {
@@ -258,6 +259,7 @@ export const cronRefreshModels = async () => {
258259
setCron('*/5 * * * *', async () => {
259260
// 1. 更新模型(所有节点都会触发)
260261
await loadSystemModels(true);
262+
await preloadModelProviders();
261263
// 2. 更新缓存(仅主节点触发)
262264
await updateFastGPTConfigBuffer();
263265
});
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import type { I18nStringType } from '@fastgpt/global/common/i18n/type';
2+
import { getProviderList } from '../../app/tool/api';
3+
import type { ModelProviderType } from '@fastgpt/global/core/app/model/type';
4+
5+
export const defaultProvider: ModelProviderType = {
6+
id: 'Other',
7+
name: { en: 'Other' } as I18nStringType,
8+
avatar: 'model/other',
9+
order: 0
10+
};
11+
12+
export const defaultMapData = [
13+
{
14+
id: 'Other',
15+
name: 'Other',
16+
avatar: 'model/other',
17+
provider: 'Other'
18+
}
19+
];
20+
21+
// Preload model providers
22+
export async function preloadModelProviders(): Promise<void> {
23+
const res = await getProviderList();
24+
25+
const ModelProviders = Object.entries(res.ModelProviders).map(
26+
([id, info]: [string, I18nStringType], index: number) => ({
27+
id: id,
28+
name: info,
29+
avatar: `/api/system/plugin/models/${id}.svg`,
30+
order: index
31+
})
32+
);
33+
34+
const aiproxyIdMap = Object.entries(res.aiproxyIdMap).map(
35+
([id, info]: [
36+
string,
37+
{ name: I18nStringType | string; provider: string; avatar?: string }
38+
]) => ({
39+
id,
40+
name: info.name,
41+
avatar: info.avatar || defaultProvider.avatar,
42+
provider: info.provider
43+
})
44+
);
45+
global.ModelProviders_cache = {
46+
listData: ModelProviders,
47+
mapData: new Map(ModelProviders.map((item) => [item.id, item]))
48+
};
49+
global.aiproxyIdMap_cache = {
50+
listData: aiproxyIdMap,
51+
mapData: new Map(aiproxyIdMap.map((item) => [item.id, item]))
52+
};
53+
}
54+
55+
export const getModelProvider = (provider?: string, language = 'en') => {
56+
if (!provider) {
57+
return defaultProvider;
58+
}
59+
60+
const providerData = global.ModelProviders_cache?.mapData.get(provider);
61+
if (!providerData) {
62+
return defaultProvider;
63+
}
64+
65+
return {
66+
...providerData,
67+
name: (providerData.name as I18nStringType)[language as keyof I18nStringType]
68+
};
69+
};

packages/service/core/app/tool/api.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ export async function APIGetSystemToolList() {
2222
return Promise.reject(res.body);
2323
}
2424

25+
export async function getProviderList() {
26+
const res = await pluginClient.model.provider();
27+
return res.status === 200 ? res.body : Promise.reject(res.body);
28+
}
29+
2530
const runToolInstance = new RunToolWithStream({
2631
baseUrl: BASE_URL,
2732
token: TOKEN

packages/service/thirdProvider/fastgptPlugin/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createClient } from '@fastgpt/global/sdk/fastgpt-plugin';
1+
import createClient from '@fastgpt/global/sdk/fastgpt-plugin';
22

33
export const BASE_URL = process.env.PLUGIN_BASE_URL || '';
44
export const TOKEN = process.env.PLUGIN_TOKEN || '';

0 commit comments

Comments
 (0)