|
import { LlmModelType } from '@/constants/knowledge'; |
|
import { |
|
IFactory, |
|
IMyLlmValue, |
|
IThirdOAIModelCollection, |
|
} from '@/interfaces/database/llm'; |
|
import { |
|
IAddLlmRequestBody, |
|
IDeleteLlmRequestBody, |
|
} from '@/interfaces/request/llm'; |
|
import { sortLLmFactoryListBySpecifiedOrder } from '@/utils/commonUtil'; |
|
import { useCallback, useEffect, useMemo } from 'react'; |
|
import { useDispatch, useSelector } from 'umi'; |
|
|
|
export const useFetchLlmList = ( |
|
modelType?: LlmModelType, |
|
isOnMountFetching: boolean = true, |
|
) => { |
|
const dispatch = useDispatch(); |
|
|
|
const fetchLlmList = useCallback(() => { |
|
dispatch({ |
|
type: 'settingModel/llm_list', |
|
payload: { model_type: modelType }, |
|
}); |
|
}, [dispatch, modelType]); |
|
|
|
useEffect(() => { |
|
if (isOnMountFetching) { |
|
fetchLlmList(); |
|
} |
|
}, [fetchLlmList, isOnMountFetching]); |
|
|
|
return fetchLlmList; |
|
}; |
|
|
|
export const useSelectLlmInfo = () => { |
|
const llmInfo: IThirdOAIModelCollection = useSelector( |
|
(state: any) => state.settingModel.llmInfo, |
|
); |
|
|
|
return llmInfo; |
|
}; |
|
|
|
export const useSelectLlmOptions = () => { |
|
const llmInfo: IThirdOAIModelCollection = useSelectLlmInfo(); |
|
|
|
const embeddingModelOptions = useMemo(() => { |
|
return Object.entries(llmInfo).map(([key, value]) => { |
|
return { |
|
label: key, |
|
options: value.map((x) => ({ |
|
label: x.llm_name, |
|
value: x.llm_name, |
|
disabled: !x.available, |
|
})), |
|
}; |
|
}); |
|
}, [llmInfo]); |
|
|
|
return embeddingModelOptions; |
|
}; |
|
|
|
export const useSelectLlmOptionsByModelType = () => { |
|
const llmInfo: IThirdOAIModelCollection = useSelectLlmInfo(); |
|
|
|
const groupOptionsByModelType = (modelType: LlmModelType) => { |
|
return Object.entries(llmInfo) |
|
.filter(([, value]) => |
|
modelType ? value.some((x) => x.model_type.includes(modelType)) : true, |
|
) |
|
.map(([key, value]) => { |
|
return { |
|
label: key, |
|
options: value |
|
.filter((x) => |
|
modelType ? x.model_type.includes(modelType) : true, |
|
) |
|
.map((x) => ({ |
|
label: x.llm_name, |
|
value: x.llm_name, |
|
disabled: !x.available, |
|
})), |
|
}; |
|
}); |
|
}; |
|
|
|
return { |
|
[LlmModelType.Chat]: groupOptionsByModelType(LlmModelType.Chat), |
|
[LlmModelType.Embedding]: groupOptionsByModelType(LlmModelType.Embedding), |
|
[LlmModelType.Image2text]: groupOptionsByModelType(LlmModelType.Image2text), |
|
[LlmModelType.Speech2text]: groupOptionsByModelType( |
|
LlmModelType.Speech2text, |
|
), |
|
[LlmModelType.Rerank]: groupOptionsByModelType(LlmModelType.Rerank), |
|
}; |
|
}; |
|
|
|
export const useSelectLlmFactoryList = () => { |
|
const factoryList: IFactory[] = useSelector( |
|
(state: any) => state.settingModel.factoryList, |
|
); |
|
|
|
return factoryList; |
|
}; |
|
|
|
export const useSelectMyLlmList = () => { |
|
const myLlmList: Record<string, IMyLlmValue> = useSelector( |
|
(state: any) => state.settingModel.myLlmList, |
|
); |
|
|
|
return myLlmList; |
|
}; |
|
|
|
export const useFetchLlmFactoryListOnMount = () => { |
|
const dispatch = useDispatch(); |
|
const factoryList = useSelectLlmFactoryList(); |
|
const myLlmList = useSelectMyLlmList(); |
|
|
|
const list = useMemo(() => { |
|
const currentList = factoryList.filter((x) => |
|
Object.keys(myLlmList).every((y) => y !== x.name), |
|
); |
|
return sortLLmFactoryListBySpecifiedOrder(currentList); |
|
}, [factoryList, myLlmList]); |
|
|
|
const fetchLlmFactoryList = useCallback(() => { |
|
dispatch({ |
|
type: 'settingModel/factories_list', |
|
}); |
|
}, [dispatch]); |
|
|
|
useEffect(() => { |
|
fetchLlmFactoryList(); |
|
}, [fetchLlmFactoryList]); |
|
|
|
return list; |
|
}; |
|
|
|
export type LlmItem = { name: string; logo: string } & IMyLlmValue; |
|
|
|
export const useFetchMyLlmListOnMount = () => { |
|
const dispatch = useDispatch(); |
|
const llmList = useSelectMyLlmList(); |
|
const factoryList = useSelectLlmFactoryList(); |
|
|
|
const list: Array<LlmItem> = useMemo(() => { |
|
return Object.entries(llmList).map(([key, value]) => ({ |
|
name: key, |
|
logo: factoryList.find((x) => x.name === key)?.logo ?? '', |
|
...value, |
|
})); |
|
}, [llmList, factoryList]); |
|
|
|
const fetchMyLlmList = useCallback(() => { |
|
dispatch({ |
|
type: 'settingModel/my_llm', |
|
}); |
|
}, [dispatch]); |
|
|
|
useEffect(() => { |
|
fetchMyLlmList(); |
|
}, [fetchMyLlmList]); |
|
|
|
return list; |
|
}; |
|
|
|
export interface IApiKeySavingParams { |
|
llm_factory: string; |
|
api_key: string; |
|
llm_name?: string; |
|
model_type?: string; |
|
base_url?: string; |
|
} |
|
|
|
export const useSaveApiKey = () => { |
|
const dispatch = useDispatch(); |
|
|
|
const saveApiKey = useCallback( |
|
(savingParams: IApiKeySavingParams) => { |
|
return dispatch<any>({ |
|
type: 'settingModel/set_api_key', |
|
payload: savingParams, |
|
}); |
|
}, |
|
[dispatch], |
|
); |
|
|
|
return saveApiKey; |
|
}; |
|
|
|
export interface ISystemModelSettingSavingParams { |
|
tenant_id: string; |
|
name?: string; |
|
asr_id: string; |
|
embd_id: string; |
|
img2txt_id: string; |
|
llm_id: string; |
|
} |
|
|
|
export const useSaveTenantInfo = () => { |
|
const dispatch = useDispatch(); |
|
|
|
const saveTenantInfo = useCallback( |
|
(savingParams: ISystemModelSettingSavingParams) => { |
|
return dispatch<any>({ |
|
type: 'settingModel/set_tenant_info', |
|
payload: savingParams, |
|
}); |
|
}, |
|
[dispatch], |
|
); |
|
|
|
return saveTenantInfo; |
|
}; |
|
|
|
export const useAddLlm = () => { |
|
const dispatch = useDispatch(); |
|
|
|
const addLlm = useCallback( |
|
(requestBody: IAddLlmRequestBody) => { |
|
return dispatch<any>({ |
|
type: 'settingModel/add_llm', |
|
payload: requestBody, |
|
}); |
|
}, |
|
[dispatch], |
|
); |
|
|
|
return addLlm; |
|
}; |
|
|
|
export const useDeleteLlm = () => { |
|
const dispatch = useDispatch(); |
|
|
|
const deleteLlm = useCallback( |
|
(requestBody: IDeleteLlmRequestBody) => { |
|
return dispatch<any>({ |
|
type: 'settingModel/delete_llm', |
|
payload: requestBody, |
|
}); |
|
}, |
|
[dispatch], |
|
); |
|
|
|
return deleteLlm; |
|
}; |
|
|