Skip to content

Commit 0708af9

Browse files
psychedeliciousmaryhipp
authored andcommitted
feat(ui): support imagen3/chatgpt-4o models in workflow editor
1 parent 1e85184 commit 0708af9

File tree

10 files changed

+216
-1
lines changed

10 files changed

+216
-1
lines changed

invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/InputFieldRenderer.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { FloatFieldInput } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldInput';
22
import { FloatFieldInputAndSlider } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldInputAndSlider';
33
import { FloatFieldSlider } from 'features/nodes/components/flow/nodes/Invocation/fields/FloatField/FloatFieldSlider';
4+
import ChatGPT4oModelFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ChatGPT4oModelFieldInputComponent';
45
import { FloatFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/FloatFieldCollectionInputComponent';
56
import { FloatGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/FloatGeneratorFieldComponent';
67
import { ImageFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ImageFieldCollectionInputComponent';
78
import { ImageGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ImageGeneratorFieldComponent';
9+
import Imagen3ModelFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/Imagen3ModelFieldInputComponent';
810
import { IntegerFieldCollectionInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/IntegerFieldCollectionInputComponent';
911
import { IntegerGeneratorFieldInputComponent } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/IntegerGeneratorFieldComponent';
1012
import ModelIdentifierFieldInputComponent from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelIdentifierFieldInputComponent';
@@ -23,6 +25,8 @@ import {
2325
isBoardFieldInputTemplate,
2426
isBooleanFieldInputInstance,
2527
isBooleanFieldInputTemplate,
28+
isChatGPT4oModelFieldInputInstance,
29+
isChatGPT4oModelFieldInputTemplate,
2630
isCLIPEmbedModelFieldInputInstance,
2731
isCLIPEmbedModelFieldInputTemplate,
2832
isCLIPGEmbedModelFieldInputInstance,
@@ -57,6 +61,8 @@ import {
5761
isImageFieldInputTemplate,
5862
isImageGeneratorFieldInputInstance,
5963
isImageGeneratorFieldInputTemplate,
64+
isImagen3ModelFieldInputInstance,
65+
isImagen3ModelFieldInputTemplate,
6066
isIntegerFieldCollectionInputInstance,
6167
isIntegerFieldCollectionInputTemplate,
6268
isIntegerFieldInputInstance,
@@ -394,6 +400,20 @@ export const InputFieldRenderer = memo(({ nodeId, fieldName, settings }: Props)
394400
return <FluxReduxModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
395401
}
396402

403+
if (isImagen3ModelFieldInputTemplate(template)) {
404+
if (!isImagen3ModelFieldInputInstance(field)) {
405+
return null;
406+
}
407+
return <Imagen3ModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
408+
}
409+
410+
if (isChatGPT4oModelFieldInputTemplate(template)) {
411+
if (!isChatGPT4oModelFieldInputInstance(field)) {
412+
return null;
413+
}
414+
return <ChatGPT4oModelFieldInputComponent nodeId={nodeId} field={field} fieldTemplate={template} />;
415+
}
416+
397417
if (isColorFieldInputTemplate(template)) {
398418
if (!isColorFieldInputInstance(field)) {
399419
return null;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { useAppDispatch } from 'app/store/storeHooks';
2+
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
3+
import { fieldChatGPT4oModelValueChanged } from 'features/nodes/store/nodesSlice';
4+
import type { ChatGPT4oModelFieldInputInstance, ChatGPT4oModelFieldInputTemplate } from 'features/nodes/types/field';
5+
import { memo, useCallback } from 'react';
6+
import { useChatGPT4oModels } from 'services/api/hooks/modelsByType';
7+
import type { ApiModelConfig } from 'services/api/types';
8+
9+
import type { FieldComponentProps } from './types';
10+
11+
const ChatGPT4oModelFieldInputComponent = (
12+
props: FieldComponentProps<ChatGPT4oModelFieldInputInstance, ChatGPT4oModelFieldInputTemplate>
13+
) => {
14+
const { nodeId, field } = props;
15+
const dispatch = useAppDispatch();
16+
17+
const [modelConfigs, { isLoading }] = useChatGPT4oModels();
18+
19+
const onChange = useCallback(
20+
(value: ApiModelConfig | null) => {
21+
if (!value) {
22+
return;
23+
}
24+
dispatch(
25+
fieldChatGPT4oModelValueChanged({
26+
nodeId,
27+
fieldName: field.name,
28+
value,
29+
})
30+
);
31+
},
32+
[dispatch, field.name, nodeId]
33+
);
34+
35+
return (
36+
<ModelFieldCombobox
37+
value={field.value}
38+
modelConfigs={modelConfigs}
39+
isLoadingConfigs={isLoading}
40+
onChange={onChange}
41+
required={props.fieldTemplate.required}
42+
/>
43+
);
44+
};
45+
46+
export default memo(ChatGPT4oModelFieldInputComponent);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { useAppDispatch } from 'app/store/storeHooks';
2+
import { ModelFieldCombobox } from 'features/nodes/components/flow/nodes/Invocation/fields/inputs/ModelFieldCombobox';
3+
import { fieldImagen3ModelValueChanged } from 'features/nodes/store/nodesSlice';
4+
import type { Imagen3ModelFieldInputInstance, Imagen3ModelFieldInputTemplate } from 'features/nodes/types/field';
5+
import { memo, useCallback } from 'react';
6+
import { useImagen3Models } from 'services/api/hooks/modelsByType';
7+
import type { ApiModelConfig } from 'services/api/types';
8+
9+
import type { FieldComponentProps } from './types';
10+
11+
const Imagen3ModelFieldInputComponent = (
12+
props: FieldComponentProps<Imagen3ModelFieldInputInstance, Imagen3ModelFieldInputTemplate>
13+
) => {
14+
const { nodeId, field } = props;
15+
const dispatch = useAppDispatch();
16+
17+
const [modelConfigs, { isLoading }] = useImagen3Models();
18+
19+
const onChange = useCallback(
20+
(value: ApiModelConfig | null) => {
21+
if (!value) {
22+
return;
23+
}
24+
dispatch(
25+
fieldImagen3ModelValueChanged({
26+
nodeId,
27+
fieldName: field.name,
28+
value,
29+
})
30+
);
31+
},
32+
[dispatch, field.name, nodeId]
33+
);
34+
35+
return (
36+
<ModelFieldCombobox
37+
value={field.value}
38+
modelConfigs={modelConfigs}
39+
isLoadingConfigs={isLoading}
40+
onChange={onChange}
41+
required={props.fieldTemplate.required}
42+
/>
43+
);
44+
};
45+
46+
export default memo(Imagen3ModelFieldInputComponent);

invokeai/frontend/web/src/features/nodes/store/nodesSlice.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { SHARED_NODE_PROPERTIES } from 'features/nodes/types/constants';
2323
import type {
2424
BoardFieldValue,
2525
BooleanFieldValue,
26+
ChatGPT4oModelFieldValue,
2627
CLIPEmbedModelFieldValue,
2728
CLIPGEmbedModelFieldValue,
2829
CLIPLEmbedModelFieldValue,
@@ -38,6 +39,7 @@ import type {
3839
ImageFieldCollectionValue,
3940
ImageFieldValue,
4041
ImageGeneratorFieldValue,
42+
Imagen3ModelFieldValue,
4143
IntegerFieldCollectionValue,
4244
IntegerFieldValue,
4345
IntegerGeneratorFieldValue,
@@ -61,6 +63,7 @@ import type {
6163
import {
6264
zBoardFieldValue,
6365
zBooleanFieldValue,
66+
zChatGPT4oModelFieldValue,
6467
zCLIPEmbedModelFieldValue,
6568
zCLIPGEmbedModelFieldValue,
6669
zCLIPLEmbedModelFieldValue,
@@ -76,6 +79,7 @@ import {
7679
zImageFieldCollectionValue,
7780
zImageFieldValue,
7881
zImageGeneratorFieldValue,
82+
zImagen3ModelFieldValue,
7983
zIntegerFieldCollectionValue,
8084
zIntegerFieldValue,
8185
zIntegerGeneratorFieldValue,
@@ -512,6 +516,12 @@ export const nodesSlice = createSlice({
512516
fieldFluxReduxModelValueChanged: (state, action: FieldValueAction<FluxReduxModelFieldValue>) => {
513517
fieldValueReducer(state, action, zFluxReduxModelFieldValue);
514518
},
519+
fieldImagen3ModelValueChanged: (state, action: FieldValueAction<Imagen3ModelFieldValue>) => {
520+
fieldValueReducer(state, action, zImagen3ModelFieldValue);
521+
},
522+
fieldChatGPT4oModelValueChanged: (state, action: FieldValueAction<ChatGPT4oModelFieldValue>) => {
523+
fieldValueReducer(state, action, zChatGPT4oModelFieldValue);
524+
},
515525
fieldEnumModelValueChanged: (state, action: FieldValueAction<EnumFieldValue>) => {
516526
fieldValueReducer(state, action, zEnumFieldValue);
517527
},
@@ -679,6 +689,8 @@ export const {
679689
fieldFluxVAEModelValueChanged,
680690
fieldSigLipModelValueChanged,
681691
fieldFluxReduxModelValueChanged,
692+
fieldImagen3ModelValueChanged,
693+
fieldChatGPT4oModelValueChanged,
682694
fieldFloatGeneratorValueChanged,
683695
fieldIntegerGeneratorValueChanged,
684696
fieldStringGeneratorValueChanged,

invokeai/frontend/web/src/features/nodes/types/field.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,14 @@ const zFluxReduxModelFieldType = zFieldTypeBase.extend({
248248
name: z.literal('FluxReduxModelField'),
249249
originalType: zStatelessFieldType.optional(),
250250
});
251+
const zImagen3ModelFieldType = zFieldTypeBase.extend({
252+
name: z.literal('Imagen3ModelField'),
253+
originalType: zStatelessFieldType.optional(),
254+
});
255+
const zChatGPT4oModelFieldType = zFieldTypeBase.extend({
256+
name: z.literal('ChatGPT4oModelField'),
257+
originalType: zStatelessFieldType.optional(),
258+
});
251259
const zSchedulerFieldType = zFieldTypeBase.extend({
252260
name: z.literal('SchedulerField'),
253261
originalType: zStatelessFieldType.optional(),
@@ -298,6 +306,8 @@ const zStatefulFieldType = z.union([
298306
zFluxVAEModelFieldType,
299307
zSigLipModelFieldType,
300308
zFluxReduxModelFieldType,
309+
zImagen3ModelFieldType,
310+
zChatGPT4oModelFieldType,
301311
zColorFieldType,
302312
zSchedulerFieldType,
303313
zFloatGeneratorFieldType,
@@ -336,6 +346,8 @@ const modelFieldTypeNames = [
336346
zFluxVAEModelFieldType.shape.name.value,
337347
zSigLipModelFieldType.shape.name.value,
338348
zFluxReduxModelFieldType.shape.name.value,
349+
zImagen3ModelFieldType.shape.name.value,
350+
zChatGPT4oModelFieldType.shape.name.value,
339351
// Stateless model fields
340352
'UNetField',
341353
'VAEField',
@@ -1177,6 +1189,42 @@ export const isFluxReduxModelFieldInputTemplate =
11771189
buildTemplateTypeGuard<FluxReduxModelFieldInputTemplate>('FluxReduxModelField');
11781190
// #endregion
11791191

1192+
// #region Imagen3ModelField
1193+
export const zImagen3ModelFieldValue = zModelIdentifierField.optional();
1194+
const zImagen3ModelFieldInputInstance = zFieldInputInstanceBase.extend({
1195+
value: zImagen3ModelFieldValue,
1196+
});
1197+
const zImagen3ModelFieldInputTemplate = zFieldInputTemplateBase.extend({
1198+
type: zImagen3ModelFieldType,
1199+
originalType: zFieldType.optional(),
1200+
default: zImagen3ModelFieldValue,
1201+
});
1202+
export type Imagen3ModelFieldValue = z.infer<typeof zImagen3ModelFieldValue>;
1203+
export type Imagen3ModelFieldInputInstance = z.infer<typeof zImagen3ModelFieldInputInstance>;
1204+
export type Imagen3ModelFieldInputTemplate = z.infer<typeof zImagen3ModelFieldInputTemplate>;
1205+
export const isImagen3ModelFieldInputInstance = buildInstanceTypeGuard(zImagen3ModelFieldInputInstance);
1206+
export const isImagen3ModelFieldInputTemplate =
1207+
buildTemplateTypeGuard<Imagen3ModelFieldInputTemplate>('Imagen3ModelField');
1208+
// #endregion
1209+
1210+
// #region ChatGPT4oModelField
1211+
export const zChatGPT4oModelFieldValue = zModelIdentifierField.optional();
1212+
const zChatGPT4oModelFieldInputInstance = zFieldInputInstanceBase.extend({
1213+
value: zChatGPT4oModelFieldValue,
1214+
});
1215+
const zChatGPT4oModelFieldInputTemplate = zFieldInputTemplateBase.extend({
1216+
type: zChatGPT4oModelFieldType,
1217+
originalType: zFieldType.optional(),
1218+
default: zChatGPT4oModelFieldValue,
1219+
});
1220+
export type ChatGPT4oModelFieldValue = z.infer<typeof zChatGPT4oModelFieldValue>;
1221+
export type ChatGPT4oModelFieldInputInstance = z.infer<typeof zChatGPT4oModelFieldInputInstance>;
1222+
export type ChatGPT4oModelFieldInputTemplate = z.infer<typeof zChatGPT4oModelFieldInputTemplate>;
1223+
export const isChatGPT4oModelFieldInputInstance = buildInstanceTypeGuard(zChatGPT4oModelFieldInputInstance);
1224+
export const isChatGPT4oModelFieldInputTemplate =
1225+
buildTemplateTypeGuard<ChatGPT4oModelFieldInputTemplate>('ChatGPT4oModelField');
1226+
// #endregion
1227+
11801228
// #region SchedulerField
11811229
export const zSchedulerFieldValue = zSchedulerField.optional();
11821230
const zSchedulerFieldInputInstance = zFieldInputInstanceBase.extend({
@@ -1808,6 +1856,8 @@ export const zStatefulFieldValue = z.union([
18081856
zControlLoRAModelFieldValue,
18091857
zSigLipModelFieldValue,
18101858
zFluxReduxModelFieldValue,
1859+
zImagen3ModelFieldValue,
1860+
zChatGPT4oModelFieldValue,
18111861
zColorFieldValue,
18121862
zSchedulerFieldValue,
18131863
zFloatGeneratorFieldValue,
@@ -1898,6 +1948,8 @@ const zStatefulFieldInputTemplate = z.union([
18981948
zControlLoRAModelFieldInputTemplate,
18991949
zSigLipModelFieldInputTemplate,
19001950
zFluxReduxModelFieldInputTemplate,
1951+
zImagen3ModelFieldInputTemplate,
1952+
zChatGPT4oModelFieldInputTemplate,
19011953
zColorFieldInputTemplate,
19021954
zSchedulerFieldInputTemplate,
19031955
zStatelessFieldInputTemplate,

invokeai/frontend/web/src/features/nodes/util/schema/buildFieldInputInstance.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ const FIELD_VALUE_FALLBACK_MAP: Record<StatefulFieldType['name'], FieldValue> =
3333
ControlLoRAModelField: undefined,
3434
SigLipModelField: undefined,
3535
FluxReduxModelField: undefined,
36+
Imagen3ModelField: undefined,
37+
ChatGPT4oModelField: undefined,
3638
FloatGeneratorField: undefined,
3739
IntegerGeneratorField: undefined,
3840
StringGeneratorField: undefined,

invokeai/frontend/web/src/features/nodes/util/schema/buildFieldInputTemplate.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { FieldParseError } from 'features/nodes/types/error';
22
import type {
33
BoardFieldInputTemplate,
44
BooleanFieldInputTemplate,
5+
ChatGPT4oModelFieldInputTemplate,
56
CLIPEmbedModelFieldInputTemplate,
67
CLIPGEmbedModelFieldInputTemplate,
78
CLIPLEmbedModelFieldInputTemplate,
@@ -21,6 +22,7 @@ import type {
2122
ImageFieldCollectionInputTemplate,
2223
ImageFieldInputTemplate,
2324
ImageGeneratorFieldInputTemplate,
25+
Imagen3ModelFieldInputTemplate,
2426
IntegerFieldCollectionInputTemplate,
2527
IntegerFieldInputTemplate,
2628
IntegerGeneratorFieldInputTemplate,
@@ -585,6 +587,32 @@ const buildFluxReduxModelFieldInputTemplate: FieldInputTemplateBuilder<FluxRedux
585587
return template;
586588
};
587589

590+
const buildImagen3ModelFieldInputTemplate: FieldInputTemplateBuilder<Imagen3ModelFieldInputTemplate> = ({
591+
schemaObject,
592+
baseField,
593+
fieldType,
594+
}) => {
595+
const template: Imagen3ModelFieldInputTemplate = {
596+
...baseField,
597+
type: fieldType,
598+
default: schemaObject.default ?? undefined,
599+
};
600+
return template;
601+
};
602+
603+
const buildChatGPT4oModelFieldInputTemplate: FieldInputTemplateBuilder<ChatGPT4oModelFieldInputTemplate> = ({
604+
schemaObject,
605+
baseField,
606+
fieldType,
607+
}) => {
608+
const template: ChatGPT4oModelFieldInputTemplate = {
609+
...baseField,
610+
type: fieldType,
611+
default: schemaObject.default ?? undefined,
612+
};
613+
return template;
614+
};
615+
588616
const buildBoardFieldInputTemplate: FieldInputTemplateBuilder<BoardFieldInputTemplate> = ({
589617
schemaObject,
590618
baseField,
@@ -791,6 +819,8 @@ export const TEMPLATE_BUILDER_MAP: Record<StatefulFieldType['name'], FieldInputT
791819
ControlLoRAModelField: buildControlLoRAModelFieldInputTemplate,
792820
SigLipModelField: buildSigLipModelFieldInputTemplate,
793821
FluxReduxModelField: buildFluxReduxModelFieldInputTemplate,
822+
Imagen3ModelField: buildImagen3ModelFieldInputTemplate,
823+
ChatGPT4oModelField: buildChatGPT4oModelFieldInputTemplate,
794824
FloatGeneratorField: buildFloatGeneratorFieldInputTemplate,
795825
IntegerGeneratorField: buildIntegerGeneratorFieldInputTemplate,
796826
StringGeneratorField: buildStringGeneratorFieldInputTemplate,

invokeai/frontend/web/src/services/api/hooks/modelsByType.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
isFluxMainModelModelConfig,
2020
isFluxReduxModelConfig,
2121
isFluxVAEModelConfig,
22+
isImagen3ModelConfig,
2223
isIPAdapterModelConfig,
2324
isLLaVAModelConfig,
2425
isLoRAModelConfig,
@@ -89,6 +90,8 @@ export const useRegionalReferenceImageModels = buildModelsHook(
8990
(config) => isIPAdapterModelConfig(config) || isFluxReduxModelConfig(config)
9091
);
9192
export const useLLaVAModels = buildModelsHook(isLLaVAModelConfig);
93+
export const useImagen3Models = buildModelsHook(isImagen3ModelConfig);
94+
export const useChatGPT4oModels = buildModelsHook(isChatGPT4oModelConfig);
9295

9396
// const buildModelsSelector =
9497
// <T extends AnyModelConfig>(typeGuard: (config: AnyModelConfig) => config is T): Selector<RootState, T[]> =>

invokeai/frontend/web/src/services/api/schema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21071,7 +21071,7 @@ export type components = {
2107121071
* used, and the type will be ignored. They are included here for backwards compatibility.
2107221072
* @enum {string}
2107321073
*/
21074-
UIType: "MainModelField" | "CogView4MainModelField" | "FluxMainModelField" | "SD3MainModelField" | "SDXLMainModelField" | "SDXLRefinerModelField" | "ONNXModelField" | "VAEModelField" | "FluxVAEModelField" | "LoRAModelField" | "ControlNetModelField" | "IPAdapterModelField" | "T2IAdapterModelField" | "T5EncoderModelField" | "CLIPEmbedModelField" | "CLIPLEmbedModelField" | "CLIPGEmbedModelField" | "SpandrelImageToImageModelField" | "ControlLoRAModelField" | "SigLipModelField" | "FluxReduxModelField" | "LLaVAModelField" | "SchedulerField" | "AnyField" | "CollectionField" | "CollectionItemField" | "DEPRECATED_Boolean" | "DEPRECATED_Color" | "DEPRECATED_Conditioning" | "DEPRECATED_Control" | "DEPRECATED_Float" | "DEPRECATED_Image" | "DEPRECATED_Integer" | "DEPRECATED_Latents" | "DEPRECATED_String" | "DEPRECATED_BooleanCollection" | "DEPRECATED_ColorCollection" | "DEPRECATED_ConditioningCollection" | "DEPRECATED_ControlCollection" | "DEPRECATED_FloatCollection" | "DEPRECATED_ImageCollection" | "DEPRECATED_IntegerCollection" | "DEPRECATED_LatentsCollection" | "DEPRECATED_StringCollection" | "DEPRECATED_BooleanPolymorphic" | "DEPRECATED_ColorPolymorphic" | "DEPRECATED_ConditioningPolymorphic" | "DEPRECATED_ControlPolymorphic" | "DEPRECATED_FloatPolymorphic" | "DEPRECATED_ImagePolymorphic" | "DEPRECATED_IntegerPolymorphic" | "DEPRECATED_LatentsPolymorphic" | "DEPRECATED_StringPolymorphic" | "DEPRECATED_UNet" | "DEPRECATED_Vae" | "DEPRECATED_CLIP" | "DEPRECATED_Collection" | "DEPRECATED_CollectionItem" | "DEPRECATED_Enum" | "DEPRECATED_WorkflowField" | "DEPRECATED_IsIntermediate" | "DEPRECATED_BoardField" | "DEPRECATED_MetadataItem" | "DEPRECATED_MetadataItemCollection" | "DEPRECATED_MetadataItemPolymorphic" | "DEPRECATED_MetadataDict";
21074+
UIType: "MainModelField" | "CogView4MainModelField" | "FluxMainModelField" | "SD3MainModelField" | "SDXLMainModelField" | "SDXLRefinerModelField" | "ONNXModelField" | "VAEModelField" | "FluxVAEModelField" | "LoRAModelField" | "ControlNetModelField" | "IPAdapterModelField" | "T2IAdapterModelField" | "T5EncoderModelField" | "CLIPEmbedModelField" | "CLIPLEmbedModelField" | "CLIPGEmbedModelField" | "SpandrelImageToImageModelField" | "ControlLoRAModelField" | "SigLipModelField" | "FluxReduxModelField" | "LLaVAModelField" | "Imagen3ModelField" | "ChatGPT4oModelField" | "SchedulerField" | "AnyField" | "CollectionField" | "CollectionItemField" | "DEPRECATED_Boolean" | "DEPRECATED_Color" | "DEPRECATED_Conditioning" | "DEPRECATED_Control" | "DEPRECATED_Float" | "DEPRECATED_Image" | "DEPRECATED_Integer" | "DEPRECATED_Latents" | "DEPRECATED_String" | "DEPRECATED_BooleanCollection" | "DEPRECATED_ColorCollection" | "DEPRECATED_ConditioningCollection" | "DEPRECATED_ControlCollection" | "DEPRECATED_FloatCollection" | "DEPRECATED_ImageCollection" | "DEPRECATED_IntegerCollection" | "DEPRECATED_LatentsCollection" | "DEPRECATED_StringCollection" | "DEPRECATED_BooleanPolymorphic" | "DEPRECATED_ColorPolymorphic" | "DEPRECATED_ConditioningPolymorphic" | "DEPRECATED_ControlPolymorphic" | "DEPRECATED_FloatPolymorphic" | "DEPRECATED_ImagePolymorphic" | "DEPRECATED_IntegerPolymorphic" | "DEPRECATED_LatentsPolymorphic" | "DEPRECATED_StringPolymorphic" | "DEPRECATED_UNet" | "DEPRECATED_Vae" | "DEPRECATED_CLIP" | "DEPRECATED_Collection" | "DEPRECATED_CollectionItem" | "DEPRECATED_Enum" | "DEPRECATED_WorkflowField" | "DEPRECATED_IsIntermediate" | "DEPRECATED_BoardField" | "DEPRECATED_MetadataItem" | "DEPRECATED_MetadataItemCollection" | "DEPRECATED_MetadataItemPolymorphic" | "DEPRECATED_MetadataDict";
2107521075
/** UNetField */
2107621076
UNetField: {
2107721077
/** @description Info to load unet submodel */

invokeai/frontend/web/src/services/api/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ export const isChatGPT4oModelConfig = (config: AnyModelConfig): config is ApiMod
232232
return config.type === 'main' && config.base === 'chatgpt-4o';
233233
};
234234

235+
export const isImagen3ModelConfig = (config: AnyModelConfig): config is ApiModelConfig => {
236+
return config.type === 'main' && config.base === 'imagen3';
237+
};
238+
235239
export const isNonRefinerMainModelConfig = (config: AnyModelConfig): config is MainModelConfig => {
236240
return config.type === 'main' && config.base !== 'sdxl-refiner';
237241
};

0 commit comments

Comments
 (0)