fix(nodes): ip adapter uses valid ModelIdentifierField for image encoder model

- Add class method to `ModelIdentifierField` to construct the field from a model config
- Use this to construct a valid IP adapter model field
This commit is contained in:
psychedelicious 2024-03-11 09:18:10 +11:00 committed by Kent Keirsey
parent 145bb45858
commit 8c2ff794d5
2 changed files with 15 additions and 2 deletions

View File

@ -97,7 +97,7 @@ class IPAdapterInvocation(BaseInvocation):
ip_adapter=IPAdapterField(
image=self.image,
ip_adapter_model=self.ip_adapter_model,
image_encoder_model=ModelIdentifierField(key=image_encoder_models[0].key),
image_encoder_model=ModelIdentifierField.from_config(image_encoder_models[0]),
weight=self.weight,
begin_step_percent=self.begin_step_percent,
end_step_percent=self.end_step_percent,

View File

@ -6,7 +6,7 @@ from pydantic import BaseModel, Field
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField, OutputField, UIType
from invokeai.app.services.shared.invocation_context import InvocationContext
from invokeai.app.shared.models import FreeUConfig
from invokeai.backend.model_manager.config import BaseModelType, ModelType, SubModelType
from invokeai.backend.model_manager.config import AnyModelConfig, BaseModelType, ModelType, SubModelType
from .baseinvocation import (
BaseInvocation,
@ -26,6 +26,19 @@ class ModelIdentifierField(BaseModel):
description="The submodel to load, if this is a main model", default=None
)
@classmethod
def from_config(
cls, config: "AnyModelConfig", submodel_type: Optional[SubModelType] = None
) -> "ModelIdentifierField":
return cls(
key=config.key,
hash=config.hash,
name=config.name,
base=config.base,
type=config.type,
submodel_type=submodel_type,
)
class LoRAField(BaseModel):
lora: ModelIdentifierField = Field(description="Info to load lora model")