InvokeAI/invokeai/app/services
psychedelicious 9bd78823a3 refactor(events): use pydantic schemas for events
Our events handling and implementation has a couple pain points:
- Adding or removing data from event payloads requires changes wherever the events are dispatched from.
- We have no type safety for events and need to rely on string matching and dict access when interacting with events.
- Frontend types for socket events must be manually typed. This has caused several bugs.

`fastapi-events` has a neat feature where you can create a pydantic model as an event payload, give it an `__event_name__` attr, and then dispatch the model directly.

This allows us to eliminate a layer of indirection and some unpleasant complexity:
- Event handler callbacks get type hints for their event payloads, and can use `isinstance` on them if needed.
- Event payload construction is now the responsibility of the event itself (a pydantic model), not the service. Every event model has a `build` class method, encapsulating this logic. The build methods are provided as few args as possible. For example, `InvocationStartedEvent.build()` gets the invocation instance and queue item, and can choose the data it wants to include in the event payload.
- Frontend event types may be autogenerated from the OpenAPI schema. We use the payload registry feature of `fastapi-events` to collect all payload models into one place, making it trivial to keep our schema and frontend types in sync.

This commit moves the backend over to this improved event handling setup.
2024-05-27 09:06:02 +10:00
..
board_image_records feat(db): add SQLiteMigrator to perform db migrations 2023-12-11 16:14:25 +11:00
board_images feat: refactor services folder/module structure 2023-10-12 12:15:06 -04:00
board_records feat(db): add SQLiteMigrator to perform db migrations 2023-12-11 16:14:25 +11:00
boards feat(api): chore: pydantic & fastapi upgrade 2023-10-17 14:59:25 +11:00
bulk_download refactor(events): use pydantic schemas for events 2024-05-27 09:06:02 +10:00
config [util] Add generic torch device class (#6174) 2024-04-15 13:12:49 +00:00
download refactor(events): use pydantic schemas for events 2024-05-27 09:06:02 +10:00
events refactor(events): use pydantic schemas for events 2024-05-27 09:06:02 +10:00
image_files feat(app): simplified create image API 2024-05-18 09:04:37 +10:00
image_records fix(app): pass image metadata as stringified json 2024-05-18 09:04:37 +10:00
images fix(app): type annotations in images service 2024-05-18 09:04:37 +10:00
invocation_cache fix(nodes): correctly serialize outputs 2024-03-06 08:14:12 -05:00
invocation_stats fix(nodes): fix typing on stats service context manager 2024-03-01 10:42:33 +11:00
item_storage revert(nodes): revert making tensors/conditioning use item storage 2024-03-01 10:42:33 +11:00
model_images docs(mm): update comment about model images 2024-03-08 12:26:35 +11:00
model_install refactor(events): use pydantic schemas for events 2024-05-27 09:06:02 +10:00
model_load refactor(events): use pydantic schemas for events 2024-05-27 09:06:02 +10:00
model_manager [util] Add generic torch device class (#6174) 2024-04-15 13:12:49 +00:00
model_records Fix minor bugs involving model manager handling of model paths (#6024) 2024-03-22 01:14:45 +00:00
names feat: refactor services folder/module structure 2023-10-12 12:15:06 -04:00
object_serializer tidy(app): remove unused class 2024-04-23 17:12:14 +10:00
session_processor refactor(events): use pydantic schemas for events 2024-05-27 09:06:02 +10:00
session_queue refactor(events): use pydantic schemas for events 2024-05-27 09:06:02 +10:00
shared refactor(events): use pydantic schemas for events 2024-05-27 09:06:02 +10:00
urls cleanup 2024-03-06 21:57:41 -05:00
workflow_records chore(nodes): update default workflows for v4 2024-03-22 02:21:33 -07:00
__init__.py all files migrated; tweaks needed 2023-03-03 00:02:15 -05:00
invocation_services.py tidy(mm): ModelImages service 2024-03-06 21:57:41 -05:00
invoker.py refactor(nodes): merge processors 2024-03-01 10:42:33 +11:00