File size: 1,618 Bytes
8a37e0a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import { EMPTY_ARRAY } from 'app/store/constants';
import { useCallback } from 'react';
import { modelConfigsAdapterSelectors, useGetModelConfigsQuery } from 'services/api/endpoints/models';
import type { StarterModel } from 'services/api/types';
type ModelInstallArg = {
config: Pick<StarterModel, 'name' | 'base' | 'type' | 'description' | 'format'>;
source: string;
};
/**
* Flattens a starter model and its dependencies into a list of models, including the starter model itself.
*/
export const flattenStarterModel = (starterModel: StarterModel): StarterModel[] => {
return [starterModel, ...(starterModel.dependencies || [])];
};
export const useBuildModelInstallArg = () => {
const { modelList } = useGetModelConfigsQuery(undefined, {
selectFromResult: ({ data }) => ({ modelList: data ? modelConfigsAdapterSelectors.selectAll(data) : EMPTY_ARRAY }),
});
const getIsInstalled = useCallback(
({ source, name, base, type, is_installed, previous_names }: StarterModel): boolean =>
modelList.some(
(mc) =>
is_installed ||
source === mc.source ||
(base === mc.base && (name === mc.name || previous_names?.includes(name)) && type === mc.type)
),
[modelList]
);
const buildModelInstallArg = useCallback((starterModel: StarterModel): ModelInstallArg => {
const { name, base, type, source, description, format } = starterModel;
return {
config: {
name,
base,
type,
description,
format,
},
source,
};
}, []);
return { getIsInstalled, buildModelInstallArg };
};
|