feat(nodes): add invocation schema customisation, add model selection

- add invocation schema customisation

done via fastapi's `Config` class and `schema_extra`. when using `Config`, inherit from `InvocationConfig` to get type hints.

where it makes sense - like for all math invocations - define a `MathInvocationConfig` class and have all invocations inherit from it.

this customisation can provide any arbitrary additional data to the UI. currently it provides tags and field type hints.

this is necessary for `model` type fields, which are actually string fields. without something like this, we can't reliably differentiate  `model` fields from normal `string` fields.

can also be used for future field types.

all invocations now have tags, and all `model` fields have ui type hints.

- fix model handling for invocations

added a helper to fall back to the default model if an invalid model name is chosen. model names in graphs now work.

- fix latents progress callback

noticed this wasn't correct while working on everything else.
This commit is contained in:
psychedelicious
2023-04-10 19:07:48 +10:00
parent 427db7c7e2
commit 07e3a0ec15
9 changed files with 228 additions and 64 deletions

View File

@ -4,6 +4,7 @@ from datetime import datetime, timezone
from typing import Literal, Union
from pydantic import Field
from invokeai.app.invocations.models.config import InvocationConfig
from invokeai.app.models.image import ImageField, ImageType
from ..services.invocation_services import InvocationServices
@ -22,6 +23,15 @@ class UpscaleInvocation(BaseInvocation):
level: Literal[2, 4] = Field(default=2, description="The upscale level")
#fmt: on
# Schema customisation
class Config(InvocationConfig):
schema_extra = {
"ui": {
"tags": ["upscaling", "image"],
},
}
def invoke(self, context: InvocationContext) -> ImageOutput:
image = context.services.images.get(
self.image.image_type, self.image.image_name