@lobehub/chat
Version:
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.
144 lines (108 loc) • 4.84 kB
text/typescript
import { AIProviderStoreState } from '@/store/aiInfra/initialState';
import { AiModelSourceEnum } from '@/types/aiModel';
import { ModelSearchImplement } from '@/types/search';
const aiProviderChatModelListIds = (s: AIProviderStoreState) =>
s.aiProviderModelList.filter((item) => item.type === 'chat').map((item) => item.id);
// List
const enabledAiProviderModelList = (s: AIProviderStoreState) =>
s.aiProviderModelList.filter((item) => item.enabled);
const disabledAiProviderModelList = (s: AIProviderStoreState) =>
s.aiProviderModelList.filter((item) => !item.enabled);
const filteredAiProviderModelList = (s: AIProviderStoreState) => {
const keyword = s.modelSearchKeyword.toLowerCase().trim();
return s.aiProviderModelList.filter(
(model) =>
model.id.toLowerCase().includes(keyword) ||
model.displayName?.toLowerCase().includes(keyword),
);
};
const totalAiProviderModelList = (s: AIProviderStoreState) => s.aiProviderModelList.length;
const isEmptyAiProviderModelList = (s: AIProviderStoreState) => totalAiProviderModelList(s) === 0;
const getModelCard = (model: string, provider: string) => (s: AIProviderStoreState) =>
s.builtinAiModelList.find((item) => item.id === model && item.providerId === provider);
const hasRemoteModels = (s: AIProviderStoreState) =>
s.aiProviderModelList.some((m) => m.source === AiModelSourceEnum.Remote);
const isModelEnabled = (id: string) => (s: AIProviderStoreState) =>
enabledAiProviderModelList(s).some((i) => i.id === id);
const isModelLoading = (id: string) => (s: AIProviderStoreState) =>
s.aiModelLoadingIds.includes(id);
const getAiModelById = (id: string) => (s: AIProviderStoreState) =>
s.aiProviderModelList.find((i) => i.id === id);
const getEnabledModelById = (id: string, provider: string) => (s: AIProviderStoreState) =>
s.enabledAiModels?.find((i) => i.id === id && (provider ? provider === i.providerId : true));
const isModelSupportToolUse = (id: string, provider: string) => (s: AIProviderStoreState) => {
const model = getEnabledModelById(id, provider)(s);
return model?.abilities?.functionCall;
};
const isModelSupportFiles = (id: string, provider: string) => (s: AIProviderStoreState) => {
const model = getEnabledModelById(id, provider)(s);
return model?.abilities?.files;
};
const isModelSupportVision = (id: string, provider: string) => (s: AIProviderStoreState) => {
const model = getEnabledModelById(id, provider)(s);
return model?.abilities?.vision;
};
const isModelSupportReasoning = (id: string, provider: string) => (s: AIProviderStoreState) => {
const model = getEnabledModelById(id, provider)(s);
return model?.abilities?.reasoning;
};
const isModelHasContextWindowToken =
(id: string, provider: string) => (s: AIProviderStoreState) => {
const model = getEnabledModelById(id, provider)(s);
return typeof model?.contextWindowTokens === 'number';
};
const modelContextWindowTokens = (id: string, provider: string) => (s: AIProviderStoreState) => {
const model = getEnabledModelById(id, provider)(s);
return model?.contextWindowTokens;
};
const modelExtendParams = (id: string, provider: string) => (s: AIProviderStoreState) => {
const model = getEnabledModelById(id, provider)(s);
return model?.settings?.extendParams;
};
const isModelHasExtendParams = (id: string, provider: string) => (s: AIProviderStoreState) => {
const controls = modelExtendParams(id, provider)(s);
return !!controls && controls.length > 0;
};
const modelBuiltinSearchImpl = (id: string, provider: string) => (s: AIProviderStoreState) => {
const model = getEnabledModelById(id, provider)(s);
return model?.settings?.searchImpl;
};
const isModelHasBuiltinSearch = (id: string, provider: string) => (s: AIProviderStoreState) => {
const searchImpl = modelBuiltinSearchImpl(id, provider)(s);
return !!searchImpl;
};
const isModelHasBuiltinSearchConfig =
(id: string, provider: string) => (s: AIProviderStoreState) => {
const searchImpl = modelBuiltinSearchImpl(id, provider)(s);
return (
!!searchImpl &&
[ModelSearchImplement.Tool, ModelSearchImplement.Params].includes(
searchImpl as ModelSearchImplement,
)
);
};
export const aiModelSelectors = {
aiProviderChatModelListIds,
disabledAiProviderModelList,
enabledAiProviderModelList,
filteredAiProviderModelList,
getAiModelById,
getEnabledModelById,
getModelCard,
hasRemoteModels,
isEmptyAiProviderModelList,
isModelEnabled,
isModelHasBuiltinSearch,
isModelHasBuiltinSearchConfig,
isModelHasContextWindowToken,
isModelHasExtendParams,
isModelLoading,
isModelSupportFiles,
isModelSupportReasoning,
isModelSupportToolUse,
isModelSupportVision,
modelBuiltinSearchImpl,
modelContextWindowTokens,
modelExtendParams,
totalAiProviderModelList,
};