psychedelicious
aa9695e377
tidy(download): _download_job
-> _multifile_job
2024-06-03 10:15:53 +10:00
psychedelicious
c58ac1e80d
tidy(mm): minor formatting
2024-06-03 10:11:08 +10:00
psychedelicious
6cc6a45274
feat(download): add type for callback_name
...
Just a bit of typo protection in lieu of full type safety for these methods, which is difficult due to the typing of `DownloadEventHandler`.
2024-06-03 10:05:52 +10:00
psychedelicious
521f907f58
tidy(nodes): infill
...
- Set `self._context=context` instead of passing it as an arg
2024-06-03 09:43:25 +10:00
psychedelicious
ccdecf21a3
tidy(nodes): cnet processors
...
- Set `self._context=context` instead of changing the type signature of `run_processor`
- Tidy a few typing things
2024-06-03 09:41:17 +10:00
psychedelicious
b124440023
tidy(mm): move load_model_from_url
from mm to invocation context
2024-06-03 08:51:21 +10:00
psychedelicious
e3a70e598e
docs(app): simplify docstring in invocation_context
2024-06-03 08:40:29 +10:00
psychedelicious
132bbf330a
tidy(app): remove unnecessary changes in invocation_context
...
- Any mypy issues are a misconfiguration of mypy
- Use simple conditionals instead of ternaries
- Consistent & standards-compliant docstring formatting
- Use `dict` instead of `typing.Dict`
2024-06-03 08:35:23 +10:00
Lincoln Stein
2276f327e5
Merge branch 'main' into lstein/feat/simple-mm2-api
2024-06-02 09:45:31 -04:00
psychedelicious
6b24424727
feat(ui): add help icon to compare toolbar
2024-06-02 15:30:00 +10:00
psychedelicious
7153d846a9
feat(ui): add hotkey to cycle compare modes
2024-06-02 15:30:00 +10:00
psychedelicious
9a0b77ad38
feat(ui): add hotkey to swap comparison images
2024-06-02 15:30:00 +10:00
psychedelicious
220d45967e
fix(ui): typo
2024-06-02 15:30:00 +10:00
psychedelicious
038a482ef0
feat(ui): rework visibility conditions for image viewer
2024-06-02 15:30:00 +10:00
psychedelicious
c325ad3432
feat(ui): add hotkey hint to exit compare button
2024-06-02 15:30:00 +10:00
psychedelicious
449bc4dbe5
feat(ui): abstract out and share logic between comparisons
2024-06-02 15:30:00 +10:00
psychedelicious
34d68a3663
feat(ui): hover comparison mode
2024-06-02 15:30:00 +10:00
psychedelicious
8bb9571485
feat(ui): tweak slider divider styling
2024-06-02 15:30:00 +10:00
psychedelicious
08bcc71e99
fix(ui): workflows fit on load
2024-06-02 15:30:00 +10:00
psychedelicious
ff2b2fad83
feat(ui): revise drop zones
...
The main viewer area has two drop zones:
- Select for Viewer
- Select for Compare
These do what you'd imagine they would do.
2024-06-02 15:30:00 +10:00
psychedelicious
0f0a6852f1
fix(ui): make compare image scale with first image when using contain fit
2024-06-02 15:30:00 +10:00
psychedelicious
745140fa6b
feat(ui): "first image"/"second image" -> "viewer image"/"compare image"
2024-06-02 15:30:00 +10:00
psychedelicious
405fc46888
feat(ui): z/esc first exit compare before closing viewer
2024-06-02 15:30:00 +10:00
psychedelicious
ca728ca29f
fix(ui): ignore context menu in slider view
...
It doesn't make sense to allow context menu here, because the context menu will technically be on a div and not an image - there won't be any image options there.
2024-06-02 15:30:00 +10:00
psychedelicious
d0fca53e67
fix(ui): only clear comparison image on alt click of gallery image
...
This logic can't e in the reducer else it applies to dnd events which isn't right
2024-06-02 15:30:00 +10:00
psychedelicious
ad9740d72d
feat(ui): alt-click comparison image exits compare
2024-06-02 15:30:00 +10:00
psychedelicious
1c9c982b63
feat(ui): use appropriate cursor on slider
2024-06-02 15:30:00 +10:00
psychedelicious
3cfd2755c2
fix(ui): when changing viewer state, always clear compare image
2024-06-02 15:30:00 +10:00
psychedelicious
8ea4067f83
feat(ui): rework compare toolbar
2024-06-02 15:30:00 +10:00
psychedelicious
940de6a5c5
fix(ui): allow drop of currently-selected image for compare
2024-06-02 15:30:00 +10:00
psychedelicious
dd74e89127
fix(ui): close context menu on click select for compare
2024-06-02 15:30:00 +10:00
psychedelicious
69da67e920
fix(ui): dnd on board
...
Copy-paste error broke this
2024-06-02 15:30:00 +10:00
psychedelicious
76b1f241d7
fix(ui): useGalleryNavigation callback typing issue
2024-06-02 15:30:00 +10:00
psychedelicious
0e5336d8fa
feat(ui): rework comparison activation, add hotkeys
2024-06-02 15:30:00 +10:00
psychedelicious
3501636018
feat(ui): add fill mode for slider comparison
2024-06-02 15:30:00 +10:00
psychedelicious
e4ce188500
feat(ui): image selection gallery state & tweaks
2024-06-02 15:30:00 +10:00
psychedelicious
e976571fba
build(ui): remove unused dep
2024-06-02 15:30:00 +10:00
psychedelicious
0da36c1238
feat(ui): use IAIDndImage for compare mode
2024-06-02 15:30:00 +10:00
psychedelicious
4ef8cbd9d0
fix(ui): use isValidDrop in imageDropped listener
...
It was possible for a drop event to be invalid but still processed. Fixed by slightly changing the signature of isValidDrop.
2024-06-02 15:30:00 +10:00
psychedelicious
8f8ddd620b
feat(ui): add comparison modes, side-by-side view
2024-06-02 15:30:00 +10:00
psychedelicious
1af53aed60
feat(ui): fix image comparison slider resizing/aspect ratio jank
2024-06-02 15:30:00 +10:00
psychedelicious
7a4bbd092e
feat(ui): revised image comparison slider
...
Should work for any components and image now.
2024-06-02 15:30:00 +10:00
psychedelicious
72bbcb2d94
feat(ui): slider working for all aspect ratios
2024-06-02 15:30:00 +10:00
psychedelicious
c2eef93476
feat(ui): wip slider implementations
2024-06-02 15:30:00 +10:00
psychedelicious
a983f27aad
fix(ui): update types
2024-05-30 12:03:38 +10:00
psychedelicious
7cb32d3d83
chore(ui): typegen
2024-05-30 12:03:38 +10:00
psychedelicious
ac56ab79a7
fix(app): add dynamic validator to AnyInvocation & AnyInvocationOutput
...
This fixes the tests and slightly changes output types.
2024-05-30 12:03:38 +10:00
psychedelicious
50d3030471
feat(app): dynamic type adapters for invocations & outputs
...
Keep track of whether or not the typeadapter needs to be updated. Allows for dynamic invocation and output unions.
2024-05-30 12:03:38 +10:00
psychedelicious
5beec8211a
feat(api): sort openapi schemas
...
Reduces the constant changes to the frontend client types due to inconsistent ordering of pydantic models.
2024-05-30 12:03:38 +10:00
psychedelicious
5a4d10467b
feat(ui): use updated types
2024-05-30 12:03:38 +10:00
psychedelicious
7590f3005e
chore(ui): typegen
2024-05-30 12:03:03 +10:00
psychedelicious
2f9ebdec69
fix(app): openapi schema generation
...
Some tech debt related to dynamic pydantic schemas for invocations became problematic. Including the invocations and results in the event schemas was breaking pydantic's handling of ref schemas. I don't really understand why - I think it's a pydantic bug in a remote edge case that we are hitting.
After many failed attempts I landed on this implementation, which is actually much tidier than what was in there before.
- Create pydantic-enabled types for `AnyInvocation` and `AnyInvocationOutput` and use these in place of the janky dynamic unions. Actually, they are kinda the same, but better encapsulated. Use these in `Graph`, `GraphExecutionState`, `InvocationEventBase` and `InvocationCompleteEvent`.
- Revise the custom openapi function to work with the new models.
- Split out the custom openapi function to a separate file. Add a `post_transform` callback so consumers can customize the output schema.
- Update makefile scripts.
2024-05-30 12:03:03 +10:00
psychedelicious
843f82c837
fix(ui): remove overly strict constraints on control adapter weight
2024-05-29 19:01:28 -07:00
Lincoln Stein
21a60af881
when unlocking models, offload_unlocked_models should prune to vram limit only ( #6450 )
...
Co-authored-by: Lincoln Stein <lstein@gmail.com>
2024-05-29 03:01:21 +00:00
Lincoln Stein
ead1748c54
issue a download progress event when install download starts
2024-05-28 19:30:42 -04:00
Ryan Dick
829b9ad66b
Add a callout about the hackiness of dropping tokens in the TextualInversionManager.
2024-05-28 05:11:54 -07:00
Ryan Dick
3aa1c8d3a8
Update TextualInversionManager for compatibility with the latest transformers release. See https://github.com/invoke-ai/InvokeAI/issues/6445 .
2024-05-28 05:11:54 -07:00
Ryan Dick
994c61b67a
Add docs to TextualInversionManager and improve types. No changes to functionality.
2024-05-28 05:11:54 -07:00
psychedelicious
21aa42627b
feat(events): add dynamic invocation & result validators
...
This is required to get these event fields to deserialize correctly. If omitted, pydantic uses `BaseInvocation`/`BaseInvocationOutput`, which is not correct.
This is similar to the workaround in the `Graph` and `GraphExecutionState` classes where we need to fanagle pydantic with manual validation handling.
2024-05-28 05:11:37 -07:00
psychedelicious
a4f88ff834
feat(events): add __event_name__
as ClassVar to EventBase
...
This improves types for event consumers that need to access the event name.
2024-05-28 05:11:37 -07:00
Lincoln Stein
cd12ca6e85
add migration_11; fix typo
2024-05-27 22:40:01 -04:00
Lincoln Stein
34e1eb19f9
merge with main and resolve conflicts
2024-05-27 22:20:34 -04:00
psychedelicious
ddff9b4584
fix(events): typing for download event handler
2024-05-27 11:13:47 +10:00
psychedelicious
b50133d5e1
feat(events): register event schemas
...
This allows for events to be dispatched using dicts as payloads, and have the dicts validated as pydantic schemas.
2024-05-27 11:13:47 +10:00
psychedelicious
5388f5a817
fix(ui): edit variant for main models only
...
Closes #6444
2024-05-27 11:02:00 +10:00
psychedelicious
27a3eb15f8
feat(ui): update event types
2024-05-27 10:17:02 +10:00
psychedelicious
4b2d57a5e0
chore(ui): typegen
...
Note about the huge diff: I had a different version of pydantic installed at some point, which slightly altered a _ton_ of schema components. This typegen was done on the correct version of pydantic and un-does those alterations, in addition to the intentional changes to event models.
2024-05-27 10:17:02 +10:00
psychedelicious
bbb90ff949
feat(events): restore whole invocation to event payloads
...
Removing this is a breaking API change - some consumers of the events need the whole invocation. Didn't realize that until now.
2024-05-27 10:17:02 +10:00
psychedelicious
9d9801b2c2
feat(events): stronger generic typing for event registration
2024-05-27 10:17:02 +10:00
psychedelicious
8498d4344b
docs: update docstrings in sockets.py
2024-05-27 09:06:02 +10:00
psychedelicious
dfad37a262
docs: update comments & docstrings
2024-05-27 09:06:02 +10:00
psychedelicious
89dede7bad
feat(ui): simplify client sio redux actions
...
- Add a simple helper to create socket actions in a less error-prone way
- Organize and tidy sio files
2024-05-27 09:06:02 +10:00
psychedelicious
60784a4361
feat(ui): update client for removal of session events
2024-05-27 09:06:02 +10:00
psychedelicious
3d8774d295
chore(ui): typegen
2024-05-27 09:06:02 +10:00
psychedelicious
084cf26ed6
refactor: remove all session events
...
There's no longer any need for session-scoped events now that we have the session queue. Session started/completed/canceled map 1-to-1 to queue item status events, but queue item status events also have an event for failed state.
We can simplify queue and processor handling substantially by removing session events and instead using queue item events.
- Remove the session-scoped events entirely.
- Remove all event handling from session queue. The processor still needs to respond to some events from the queue: `QueueClearedEvent`, `BatchEnqueuedEvent` and `QueueItemStatusChangedEvent`.
- Pass an `is_canceled` callback to the invocation context instead of the cancel event
- Update processor logic to ensure the local instance of the current queue item is synced with the instance in the database. This prevents race conditions and ensures lifecycle callback do not get stale callbacks.
- Update docstrings and comments
- Add `complete_queue_item` method to session queue service as an explicit way to mark a queue item as successfully completed. Previously, the queue listened for session complete events to do this.
Closes #6442
2024-05-27 09:06:02 +10:00
psychedelicious
8592f5c6e1
feat(events): move event sets outside sio class
...
This lets the event sets be consumed programmatically.
2024-05-27 09:06:02 +10:00
psychedelicious
368127bd25
feat(events): register_events supports single event
2024-05-27 09:06:02 +10:00
psychedelicious
c0aabcd8ea
tidy(events): use tuple index access for event payloads
2024-05-27 09:06:02 +10:00
psychedelicious
ed6c716ddc
fix(mm): emit correct event when model load complete
2024-05-27 09:06:02 +10:00
psychedelicious
eaf67b2150
feat(ui): add logging for session events
2024-05-27 09:06:02 +10:00
psychedelicious
575943d0ad
fix(processor): move session started event to session runner
2024-05-27 09:06:02 +10:00
psychedelicious
25d1d2b591
tidy(processor): use separate handlers for each event type
...
Just a bit clearer without needing `isinstance` checks.
2024-05-27 09:06:02 +10:00
psychedelicious
39415428de
chore(ui): typegen
2024-05-27 09:06:02 +10:00
psychedelicious
64d553f72c
feat(events): restore temp handling of user/project
2024-05-27 09:06:02 +10:00
psychedelicious
a9f773c03c
fix(mm): port changes into new model_install_common file
...
Some subtle changes happened between this PR's last update and now. Bring them into the file.
2024-05-27 09:06:02 +10:00
psychedelicious
585feccf82
fix(ui): update event handling to match new types
2024-05-27 09:06:02 +10:00
psychedelicious
cbd3b15cae
chore(ui): typegen
2024-05-27 09:06:02 +10:00
psychedelicious
cc56918453
tidy(ui): remove old unused session subscribe actions
2024-05-27 09:06:02 +10:00
psychedelicious
f82df2661a
docs: clarify comment in api_app
2024-05-27 09:06:02 +10:00
psychedelicious
a1d68eb319
fix(ui): denoise percentage
2024-05-27 09:06:02 +10:00
psychedelicious
8b5caa7e57
chore(ui): typegen
2024-05-27 09:06:02 +10:00
psychedelicious
b3a051250f
feat(api): sort socket event names for openapi schema
...
Deterministic ordering prevents extraneous, non-functional changes to the autogenerated types
2024-05-27 09:06:02 +10:00
psychedelicious
0f733c42fc
fix(events): fix denoise progress percentage
...
- Restore calculation of step percentage but in the backend instead of client
- Simplify signatures for denoise progress event callbacks
- Clean up `step_callback.py` (types, do not recreate constant matrix on every step, formatting)
2024-05-27 09:06:02 +10:00
psychedelicious
ec4f10aed3
chore(ui): typegen
2024-05-27 09:06:02 +10:00
psychedelicious
d97186dfc8
feat(events): remove payload registry, add method to get event classes
...
We don't need to use the payload schema registry. All our events are dispatched as pydantic models, which are already validated on instantiation.
We do want to add all events to the OpenAPI schema, and we referred to the payload schema registry for this. To get all events, add a simple helper to EventBase. This is functionally identical to using the schema registry.
2024-05-27 09:06:02 +10:00
psychedelicious
18b4f1b72a
feat(ui): add missing socket events
2024-05-27 09:06:02 +10:00
psychedelicious
5cdf71b72f
feat(events): add missing events
...
These events weren't being emitted via socket.io:
- DownloadCancelledEvent
- DownloadCompleteEvent
- DownloadErrorEvent
- DownloadProgressEvent
- DownloadStartedEvent
- ModelInstallDownloadsCompleteEvent
2024-05-27 09:06:02 +10:00
psychedelicious
88a2340b95
feat(events): use builder pattern for download events
2024-05-27 09:06:02 +10:00
psychedelicious
1be4cab2d9
fix(events): dump events with mode="json"
...
Ensures all model events are serializable.
2024-05-27 09:06:02 +10:00
psychedelicious
567b87cc50
docs(events): update event docstrings
2024-05-27 09:06:02 +10:00