Skip to content

Commit 55b98a6

Browse files
fix: fix model hardware options (#1652)
Because - fix model hardware options This commit - fix model hardware options --------- Co-authored-by: Alexander Petcoglo <[email protected]>
1 parent fecc379 commit 55b98a6

File tree

6 files changed

+82
-64
lines changed

6 files changed

+82
-64
lines changed

packages/design-system/src/ui-helpers/getModelHardwareToolkit.ts

Lines changed: 0 additions & 18 deletions
This file was deleted.

packages/design-system/src/ui-helpers/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,3 @@ export { getModelInstanceTaskToolkit } from "./getModelInstanceTaskToolkit";
22
export { getModelDefinitionToolkit } from "./getModelDefinitionToolkit";
33
export { getPipelineModeToolkit } from "./getPipelineModeToolkit";
44
export { getModelRegionToolkit } from "./getModelRegionToolkit";
5-
export { getModelHardwareToolkit } from "./getModelHardwareToolkit";

packages/sdk/src/model/types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ export type ModelDefinition = {
6161
updateTime: string;
6262
};
6363

64+
export type Hardware = {
65+
title: string;
66+
value: string;
67+
};
68+
6469
export type Model = {
6570
name: string;
6671
uid: string;
@@ -100,7 +105,7 @@ export type Model = {
100105

101106
export type ModelRegion = {
102107
regionName: string;
103-
hardware: string[];
108+
hardware: Hardware[];
104109
};
105110

106111
export type ModelWatchState = {

packages/toolkit/src/components/card-model/CardModel.tsx

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import type { Model } from "instill-sdk";
44
import * as React from "react";
55
import Link from "next/link";
66

7-
import {
8-
getModelHardwareToolkit,
9-
getModelRegionToolkit,
10-
} from "@instill-ai/design-system";
7+
import { getModelRegionToolkit } from "@instill-ai/design-system";
118

129
import { ImageWithFallback } from "..";
10+
import {
11+
InstillStore,
12+
useInstillStore,
13+
useModelAvailableRegions,
14+
useShallow,
15+
} from "../../lib";
1316
import { Menu } from "./Menu";
1417
import { Stats } from "./Stats";
1518
import { Tags } from "./Tags";
@@ -31,8 +34,34 @@ const OWNER = {
3134
id: null,
3235
};
3336

37+
const selector = (store: InstillStore) => ({
38+
accessToken: store.accessToken,
39+
enabledQuery: store.enabledQuery,
40+
});
41+
3442
export const CardModel = (props: CardModelProps) => {
3543
const { model, onDelete } = props;
44+
45+
const { accessToken, enabledQuery } = useInstillStore(useShallow(selector));
46+
47+
const modelRegions = useModelAvailableRegions({ accessToken, enabledQuery });
48+
49+
const targetHardware = React.useMemo(() => {
50+
if (!modelRegions.isSuccess || !model) {
51+
return null;
52+
}
53+
54+
const targetRegion = modelRegions.data.find(
55+
(region) => region.regionName === model.region,
56+
);
57+
58+
const targetHardware = targetRegion?.hardware.find(
59+
(hardware) => hardware.value === model.hardware,
60+
);
61+
62+
return targetHardware ?? null;
63+
}, [modelRegions.data, modelRegions.isSuccess, model]);
64+
3665
const owner = React.useMemo(() => {
3766
if (!model) {
3867
return OWNER;
@@ -81,7 +110,7 @@ export const CardModel = (props: CardModelProps) => {
81110
: model.visibility
82111
}
83112
region={getModelRegionToolkit(model.region) || ""}
84-
hardware={getModelHardwareToolkit(model.hardware) || model.hardware}
113+
hardware={targetHardware?.title ?? model.hardware}
85114
/>
86115
<p className="product-body-text-2-regular text-semantic-fg-secondary">
87116
{model.description}

packages/toolkit/src/view/model/CreateModelForm.tsx

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { z } from "zod";
1414
import {
1515
Button,
1616
Form,
17-
getModelHardwareToolkit,
1817
getModelInstanceTaskToolkit,
1918
getModelRegionToolkit,
2019
Icons,
@@ -171,18 +170,15 @@ export const CreateModelForm = () => {
171170
value: item.regionName,
172171
title: getModelRegionToolkit(item.regionName) || "Unknown",
173172
}));
174-
const newHardwareOptions: Record<string, Option[]> =
175-
modelRegions.data.reduce((acc, curr) => {
176-
const regionHardware = curr.hardware.map((item) => ({
177-
value: item,
178-
title: getModelHardwareToolkit(item),
179-
}));
180-
181-
return {
182-
...acc,
183-
[curr.regionName]: regionHardware,
184-
};
185-
}, {});
173+
174+
const newHardwareOptions: Record<string, Option[]> = {};
175+
176+
for (const region of modelRegions.data) {
177+
newHardwareOptions[region.regionName] = region.hardware.map((item) => ({
178+
...item,
179+
value: item.value || "Custom",
180+
}));
181+
}
186182

187183
setRegionOptions(newRegionOptions);
188184
setHardwareOptions(newHardwareOptions);
@@ -498,9 +494,7 @@ export const CreateModelForm = () => {
498494

499495
form.setValue("hardware", targetValue);
500496
}
501-
{
502-
updateCustomHardware("");
503-
}
497+
updateCustomHardware("");
504498
}}
505499
>
506500
<Select.Trigger className="mt-auto w-full">

packages/toolkit/src/view/model/view-model/ModelSettingsEditForm.tsx

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { z } from "zod";
1414
import {
1515
Button,
1616
Form,
17-
getModelHardwareToolkit,
1817
Icons,
1918
Input,
2019
RadioGroup,
@@ -41,11 +40,6 @@ export type ModelSettingsEditFormProps = {
4140
onUpdate: () => void;
4241
};
4342

44-
type Option = {
45-
value: string;
46-
title: string;
47-
};
48-
4943
const EditModelSchema = z
5044
.object({
5145
description: z.string().optional(),
@@ -93,26 +87,40 @@ export const ModelSettingsEditForm = ({
9387
return [];
9488
}
9589

96-
return modelRegions.data
97-
.find((item) => item.regionName === model.region)
98-
?.hardware.reduce(
99-
(acc: Option[], hardwareName) => [
100-
...acc,
101-
{
102-
value: hardwareName,
103-
title: getModelHardwareToolkit(hardwareName) || "Unknown",
104-
},
105-
],
106-
[],
107-
);
90+
const targetModelRegion = modelRegions.data.find(
91+
(item) => item.regionName === model.region,
92+
);
93+
94+
return (
95+
targetModelRegion?.hardware.map((item) => ({
96+
...item,
97+
value: item.value || "Custom",
98+
})) ?? []
99+
);
108100
}, [modelRegions, model]);
109101

102+
React.useEffect(() => {
103+
if (hardwareCustomValue || !model || !hardwareOptions.length) {
104+
return;
105+
}
106+
107+
const targetHardware = hardwareOptions.find(
108+
(h) => h.value === model.hardware,
109+
);
110+
111+
if (!targetHardware) {
112+
setHardwareCustomValue(model.hardware);
113+
}
114+
}, [model, hardwareOptions, hardwareCustomValue]);
115+
110116
const defaultValues = React.useMemo(() => {
111-
if (!model) {
117+
if (!model || hardwareOptions.length === 0) {
112118
return undefined;
113119
}
114120

115-
const hardwareName = getModelHardwareToolkit(model.hardware);
121+
const targetHardware = hardwareOptions.find(
122+
(h) => h.value === model.hardware,
123+
);
116124

117125
return {
118126
description: model.description,
@@ -123,19 +131,20 @@ export const ModelSettingsEditForm = ({
123131
Visibility,
124132
"VISIBILITY_UNSPECIFIED"
125133
>,
126-
hardware: hardwareName === null ? "Custom" : model.hardware,
127-
hardwareCustom: hardwareName === null ? model.hardware : "",
134+
hardware: targetHardware ? targetHardware.value : "Custom",
135+
hardwareCustom: targetHardware ? "" : model.hardware,
128136
profileImage: model.profileImage,
129137
tags: model.tags.join(", "),
130138
};
131-
}, [model]);
139+
}, [model, hardwareOptions]);
132140

133141
const form = useForm<z.infer<typeof EditModelSchema>>({
134142
resolver: zodResolver(EditModelSchema),
135143
mode: "onChange",
136144
values: defaultValues,
137145
disabled: !model?.permission.canEdit,
138146
});
147+
139148
const updateNamespaceModel = useUpdateNamespaceModel();
140149

141150
async function onSubmit(data: z.infer<typeof EditModelSchema>) {

0 commit comments

Comments
 (0)