mirror of
https://github.com/labring/FastGPT.git
synced 2025-12-30 00:32:50 +00:00
282 lines
9.0 KiB
TypeScript
282 lines
9.0 KiB
TypeScript
import { create, devtools, persist, immer } from '@fastgpt/web/common/zustand';
|
|
import axios from 'axios';
|
|
import type { OAuthEnum } from '@fastgpt/global/support/user/constant';
|
|
import type {
|
|
TTSModelType,
|
|
LLMModelItemType,
|
|
RerankModelItemType,
|
|
EmbeddingModelItemType,
|
|
STTModelType
|
|
} from '@fastgpt/global/core/ai/model.d';
|
|
import type { InitDateResponse } from '@/pages/api/common/system/getInitData';
|
|
import { type FastGPTFeConfigsType } from '@fastgpt/global/common/system/types';
|
|
import { type SubPlanType } from '@fastgpt/global/support/wallet/sub/type';
|
|
import { ModelTypeEnum } from '@fastgpt/global/core/ai/model';
|
|
import type { TeamErrEnum } from '@fastgpt/global/common/error/code/team';
|
|
import type { SystemDefaultModelType } from '@fastgpt/service/core/ai/type';
|
|
import {
|
|
defaultProvider,
|
|
formatModelProviders,
|
|
type langType,
|
|
type ModelProviderItemType
|
|
} from '@fastgpt/global/core/ai/provider';
|
|
import { getMyModels, getOperationalAd } from './api';
|
|
|
|
type LoginStoreType = { provider: `${OAuthEnum}`; lastRoute: string; state: string };
|
|
|
|
export type NotSufficientModalType =
|
|
| TeamErrEnum.datasetSizeNotEnough
|
|
| TeamErrEnum.aiPointsNotEnough
|
|
| TeamErrEnum.datasetAmountNotEnough
|
|
| TeamErrEnum.teamMemberOverSize
|
|
| TeamErrEnum.appAmountNotEnough
|
|
| TeamErrEnum.ticketNotAvailable;
|
|
|
|
type State = {
|
|
initd: boolean;
|
|
setInitd: () => void;
|
|
|
|
lastRoute: string;
|
|
setLastRoute: (e: string) => void;
|
|
lastAppListRouteType?: string;
|
|
setLastAppListRouteType: (e?: string) => void;
|
|
|
|
loginStore?: LoginStoreType;
|
|
setLoginStore: (e?: LoginStoreType) => void;
|
|
|
|
loading: boolean;
|
|
setLoading: (val: boolean) => null;
|
|
gitStar: number;
|
|
loadGitStar: () => Promise<void>;
|
|
|
|
notSufficientModalType?: NotSufficientModalType;
|
|
setNotSufficientModalType: (val?: NotSufficientModalType) => void;
|
|
|
|
initDataBufferId?: string;
|
|
feConfigs: FastGPTFeConfigsType;
|
|
subPlans?: SubPlanType;
|
|
systemVersion: string;
|
|
|
|
modelProviders: Record<langType, ModelProviderItemType[]>;
|
|
modelProviderMap: Record<langType, Record<string, ModelProviderItemType>>;
|
|
aiproxyIdMap: NonNullable<InitDateResponse['aiproxyIdMap']>;
|
|
defaultModels: SystemDefaultModelType;
|
|
llmModelList: LLMModelItemType[];
|
|
datasetModelList: LLMModelItemType[];
|
|
embeddingModelList: EmbeddingModelItemType[];
|
|
ttsModelList: TTSModelType[];
|
|
reRankModelList: RerankModelItemType[];
|
|
sttModelList: STTModelType[];
|
|
myModelList: {
|
|
modelSet: Set<string>;
|
|
versionKey: string;
|
|
};
|
|
operationalAd?: { operationalAdImage: string; operationalAdLink: string; id: string };
|
|
loadOperationalAd: () => Promise<void>;
|
|
getMyModelList: () => Promise<Set<string>>;
|
|
getVlmModelList: () => LLMModelItemType[];
|
|
getModelProviders: (language?: string) => ModelProviderItemType[];
|
|
getModelProvider: (provider?: string, language?: string) => ModelProviderItemType;
|
|
|
|
initStaticData: (e: InitDateResponse) => void;
|
|
|
|
appType?: string;
|
|
setAppType: (e?: string) => void;
|
|
};
|
|
|
|
export const useSystemStore = create<State>()(
|
|
devtools(
|
|
persist(
|
|
immer((set, get) => ({
|
|
appType: undefined,
|
|
setAppType(e) {
|
|
set((state) => {
|
|
state.appType = e;
|
|
});
|
|
},
|
|
initd: false,
|
|
setInitd() {
|
|
set((state) => {
|
|
state.initd = true;
|
|
});
|
|
},
|
|
lastRoute: '/dashboard/agent',
|
|
setLastRoute(e) {
|
|
set((state) => {
|
|
state.lastRoute = e;
|
|
});
|
|
},
|
|
lastAppListRouteType: undefined,
|
|
setLastAppListRouteType(e) {
|
|
set((state) => {
|
|
state.lastAppListRouteType = e;
|
|
});
|
|
},
|
|
loginStore: undefined,
|
|
setLoginStore(e) {
|
|
set((state) => {
|
|
state.loginStore = e;
|
|
});
|
|
},
|
|
loading: false,
|
|
setLoading: (val: boolean) => {
|
|
set((state) => {
|
|
state.loading = val;
|
|
});
|
|
return null;
|
|
},
|
|
|
|
gitStar: 26500,
|
|
async loadGitStar() {
|
|
if (!get().feConfigs?.show_git) return;
|
|
try {
|
|
const { data: git } = await axios.get('https://api.github.com/repos/labring/FastGPT');
|
|
|
|
set((state) => {
|
|
state.gitStar = git.stargazers_count;
|
|
});
|
|
} catch (error) {}
|
|
},
|
|
|
|
notSufficientModalType: undefined,
|
|
setNotSufficientModalType(type) {
|
|
set((state) => {
|
|
state.notSufficientModalType = type;
|
|
});
|
|
},
|
|
|
|
initDataBufferId: undefined,
|
|
feConfigs: {},
|
|
subPlans: undefined,
|
|
systemVersion: '0.0.0',
|
|
|
|
modelProviders: {
|
|
en: [],
|
|
'zh-CN': [],
|
|
'zh-Hant': []
|
|
},
|
|
modelProviderMap: {
|
|
en: {},
|
|
'zh-CN': {},
|
|
'zh-Hant': {}
|
|
},
|
|
aiproxyIdMap: {},
|
|
defaultModels: {},
|
|
llmModelList: [],
|
|
datasetModelList: [],
|
|
embeddingModelList: [],
|
|
ttsModelList: [],
|
|
reRankModelList: [],
|
|
sttModelList: [],
|
|
myModelList: {
|
|
modelSet: new Set(),
|
|
versionKey: ''
|
|
},
|
|
operationalAd: undefined,
|
|
loadOperationalAd: async () => {
|
|
try {
|
|
const res = await getOperationalAd();
|
|
set((state) => {
|
|
state.operationalAd = res;
|
|
});
|
|
} catch (error) {
|
|
console.log('Get operational ad error', error);
|
|
}
|
|
},
|
|
getMyModelList: async () => {
|
|
try {
|
|
const res = await getMyModels({ versionKey: get().myModelList.versionKey });
|
|
if (res.isRefreshed === false) {
|
|
return new Set(get().myModelList.modelSet);
|
|
} else {
|
|
set((state) => {
|
|
state.myModelList = {
|
|
modelSet: new Set(res.models),
|
|
versionKey: res.versionKey
|
|
};
|
|
});
|
|
return new Set(res.models);
|
|
}
|
|
} catch {
|
|
console.log('Get my modals error');
|
|
}
|
|
return new Set(get().myModelList.modelSet);
|
|
},
|
|
|
|
getVlmModelList: () => {
|
|
return get().llmModelList.filter((item) => item.vision);
|
|
},
|
|
getModelProviders(language = 'en') {
|
|
return get().modelProviders[language as langType] ?? [];
|
|
},
|
|
getModelProvider(provider, language = 'en') {
|
|
if (!provider) {
|
|
return defaultProvider;
|
|
}
|
|
return get().modelProviderMap[language as langType][provider] ?? {};
|
|
},
|
|
initStaticData(res) {
|
|
set((state) => {
|
|
state.initDataBufferId = res.bufferId;
|
|
|
|
state.feConfigs = res.feConfigs ?? state.feConfigs;
|
|
state.subPlans = res.subPlans ?? state.subPlans;
|
|
state.systemVersion = res.systemVersion ?? state.systemVersion;
|
|
|
|
if (res.modelProviders) {
|
|
const { ModelProviderListCache, ModelProviderMapCache } = formatModelProviders(
|
|
res.modelProviders
|
|
);
|
|
state.modelProviders = ModelProviderListCache ?? state.modelProviders;
|
|
state.modelProviderMap = ModelProviderMapCache ?? state.modelProviderMap;
|
|
}
|
|
state.aiproxyIdMap = res.aiproxyIdMap ?? state.aiproxyIdMap;
|
|
|
|
state.llmModelList =
|
|
res.activeModelList?.filter((item) => item.type === ModelTypeEnum.llm) ??
|
|
state.llmModelList;
|
|
state.datasetModelList = state.llmModelList.filter((item) => item.datasetProcess);
|
|
state.embeddingModelList =
|
|
res.activeModelList?.filter((item) => item.type === ModelTypeEnum.embedding) ??
|
|
state.embeddingModelList;
|
|
state.ttsModelList =
|
|
res.activeModelList?.filter((item) => item.type === ModelTypeEnum.tts) ??
|
|
state.ttsModelList;
|
|
state.reRankModelList =
|
|
res.activeModelList?.filter((item) => item.type === ModelTypeEnum.rerank) ??
|
|
state.reRankModelList;
|
|
state.sttModelList =
|
|
res.activeModelList?.filter((item) => item.type === ModelTypeEnum.stt) ??
|
|
state.sttModelList;
|
|
|
|
state.defaultModels = res.defaultModels ?? state.defaultModels;
|
|
});
|
|
}
|
|
})),
|
|
{
|
|
name: 'globalStore',
|
|
partialize: (state) => ({
|
|
gitStar: state.gitStar,
|
|
|
|
loginStore: state.loginStore,
|
|
initDataBufferId: state.initDataBufferId,
|
|
feConfigs: state.feConfigs,
|
|
subPlans: state.subPlans,
|
|
systemVersion: state.systemVersion,
|
|
|
|
modelProviders: state.modelProviders,
|
|
modelProviderMap: state.modelProviderMap,
|
|
aiproxyIdMap: state.aiproxyIdMap,
|
|
defaultModels: state.defaultModels,
|
|
llmModelList: state.llmModelList,
|
|
datasetModelList: state.datasetModelList,
|
|
embeddingModelList: state.embeddingModelList,
|
|
ttsModelList: state.ttsModelList,
|
|
reRankModelList: state.reRankModelList,
|
|
sttModelList: state.sttModelList
|
|
})
|
|
}
|
|
)
|
|
)
|
|
);
|