Skip to content

Commit bb80697

Browse files
committed
Only install starter models if not already installed
1 parent 9a530c7 commit bb80697

File tree

3 files changed

+28
-7
lines changed

3 files changed

+28
-7
lines changed

invokeai/frontend/web/src/features/modelManagerV2/subpanels/AddModelPanel/StarterModels/StartModelsResultItem.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import { memo, useCallback, useMemo } from 'react';
55
import { useTranslation } from 'react-i18next';
66
import { PiPlusBold } from 'react-icons/pi';
77
import type { GetStarterModelsResponse } from 'services/api/endpoints/models';
8+
import type { AnyModelConfig } from 'services/api/types';
89

910
type Props = {
1011
result: GetStarterModelsResponse[number];
12+
modelList: AnyModelConfig[];
1113
};
12-
export const StarterModelsResultItem = memo(({ result }: Props) => {
14+
export const StarterModelsResultItem = memo(({ result, modelList }: Props) => {
1315
const { t } = useTranslation();
1416
const allSources = useMemo(() => {
1517
const _allSources = [
@@ -38,9 +40,12 @@ export const StarterModelsResultItem = memo(({ result }: Props) => {
3840

3941
const onClick = useCallback(() => {
4042
for (const { config, source } of allSources) {
43+
if (modelList.some((mc) => config.base === mc.base && config.name === mc.name && config.type === mc.type)) {
44+
continue;
45+
}
4146
installModel({ config, source });
4247
}
43-
}, [allSources, installModel]);
48+
}, [modelList, allSources, installModel]);
4449

4550
return (
4651
<Flex alignItems="center" justifyContent="space-between" w="100%" gap={3}>

invokeai/frontend/web/src/features/modelManagerV2/subpanels/AddModelPanel/StarterModels/StarterModelsForm.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,31 @@
11
import { Flex } from '@invoke-ai/ui-library';
2+
import { EMPTY_ARRAY } from 'app/store/constants';
23
import { FetchingModelsLoader } from 'features/modelManagerV2/subpanels/ModelManagerPanel/FetchingModelsLoader';
3-
import { memo } from 'react';
4-
import { useGetStarterModelsQuery } from 'services/api/endpoints/models';
4+
import { memo, useMemo } from 'react';
5+
import {
6+
modelConfigsAdapterSelectors,
7+
useGetModelConfigsQuery,
8+
useGetStarterModelsQuery,
9+
} from 'services/api/endpoints/models';
510

611
import { StarterModelsResults } from './StarterModelsResults';
712

813
export const StarterModelsForm = memo(() => {
914
const { isLoading, data } = useGetStarterModelsQuery();
15+
const { data: modelListRes } = useGetModelConfigsQuery();
16+
17+
const modelList = useMemo(() => {
18+
if (!modelListRes) {
19+
return EMPTY_ARRAY;
20+
}
21+
22+
return modelConfigsAdapterSelectors.selectAll(modelListRes);
23+
}, [modelListRes]);
1024

1125
return (
1226
<Flex flexDir="column" height="100%" gap={3}>
1327
{isLoading && <FetchingModelsLoader loadingMessage="Loading Embeddings..." />}
14-
{data && <StarterModelsResults results={data} />}
28+
{data && <StarterModelsResults results={data} modelList={modelList} />}
1529
</Flex>
1630
);
1731
});

invokeai/frontend/web/src/features/modelManagerV2/subpanels/AddModelPanel/StarterModels/StarterModelsResults.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ import { memo, useCallback, useMemo, useState } from 'react';
55
import { useTranslation } from 'react-i18next';
66
import { PiXBold } from 'react-icons/pi';
77
import type { GetStarterModelsResponse } from 'services/api/endpoints/models';
8+
import type { AnyModelConfig } from 'services/api/types';
89

910
import { StarterModelsResultItem } from './StartModelsResultItem';
1011

1112
type StarterModelsResultsProps = {
1213
results: NonNullable<GetStarterModelsResponse>;
14+
modelList: AnyModelConfig[];
1315
};
1416

15-
export const StarterModelsResults = memo(({ results }: StarterModelsResultsProps) => {
17+
export const StarterModelsResults = memo(({ results, modelList }: StarterModelsResultsProps) => {
1618
const { t } = useTranslation();
1719
const [searchTerm, setSearchTerm] = useState('');
1820

@@ -72,7 +74,7 @@ export const StarterModelsResults = memo(({ results }: StarterModelsResultsProps
7274
<ScrollableContent>
7375
<Flex flexDir="column" gap={3}>
7476
{filteredResults.map((result) => (
75-
<StarterModelsResultItem key={result.source} result={result} />
77+
<StarterModelsResultItem key={result.source} result={result} modelList={modelList} />
7678
))}
7779
</Flex>
7880
</ScrollableContent>

0 commit comments

Comments
 (0)