Commit Graph

7287 Commits

Author SHA1 Message Date
psychedelicious
be6ba57775 chore: flake8 2023-08-22 10:14:46 +10:00
psychedelicious
2f8d3022a0
Merge branch 'main' into feat/nodes-phase-3 2023-08-22 10:09:25 +10:00
psychedelicious
4da861e980 chore: clean up .gitignore 2023-08-22 10:02:03 +10:00
Lincoln Stein
9d7dfeb857
Merge branch 'main' into refactor/rename-performance-options 2023-08-21 19:47:55 -04:00
Lincoln Stein
572e6b892a
stats: handle exceptions (#4320)
## What type of PR is this? (check all applicable)

- [ ] Refactor
- [ ] Feature
- [x] Bug Fix
- [ ] Optimization
- [ ] Documentation Update
- [ ] Community Node Submission

## Description

[fix(stats): fix fail case when previous graph is
invalid](d1d2d5a47d)

When retrieving a graph, it is parsed through pydantic. It is possible
that this graph is invalid, and an error is thrown.

Handle this by deleting the failed graph from the stats if this occurs.

[fix(stats): fix InvocationStatsService
types](1b70bd1380)

- move docstrings to ABC
- `start_time: int` -> `start_time: float`
- remove class attribute assignments in `StatsContext`
- add `update_mem_stats()` to ABC
- add class attributes to ABC, because they are referenced in instances
of the class. if they should not be on the ABC, then maybe there needs
to be some restructuring

## QA Instructions, Screenshots, Recordings

<!-- 
Please provide steps on how to test changes, any hardware or 
software specifications as well as any other pertinent information. 
-->

On `main` (not this PR), create a situation in which an graph is valid
but will be rendered invalid on invoke. Easy way in node editor:
- create an `Integer Primitive` node, set value to 3
- create a `Resize Image` node and add an image to it
- route the output of `Integer Primitive` to the `width` of `Resize
Image`
- Invoke - this will cause first a `Validation Error` (expected), and if
you inspect the error in the JS console, you'll see it is a "session
retrieval error"
- Invoke again - this will also cause a `Validation Error`, but if you
inspect the error you should see it originates in the stats module (this
is the error this PR fixes)
- Fix the graph by setting the `Integer Primitive` to 512
- Invoke again - you get the same `Validation Error` originating from
stats, even tho there are no issues

Switch to this PR, and then you should only ever get the `Validation
Error` that that is classified as a "session retrieval error".
2023-08-21 19:47:21 -04:00
Kevin Turner
76750b0121 doc(development): add section on hot reloading with --dev_reload 2023-08-21 16:45:39 -07:00
Kevin Turner
3039f92e69 doc(development): small updates to backend development intro 2023-08-21 16:38:47 -07:00
Kevin Turner
88963dbe6e Merge remote-tracking branch 'origin/main' into feat/dev_reload
# Conflicts:
#	invokeai/app/api_app.py
#	invokeai/app/services/config.py
2023-08-21 09:04:31 -07:00
blessedcoolant
7b2079cf83 feat: Add hotkey for Add Nodes (Shift+A)
Standard with other tools like Blender
2023-08-22 03:31:29 +12:00
psychedelicious
535eb1db16
Merge branch 'main' into fix/stats/handle-exceptions 2023-08-21 19:19:32 +10:00
psychedelicious
01738deb23 feat(ui): add eslint rules
- `curly` requires conditionals to use curly braces
- `react/jsx-curly-brace-presence` requires string props to *not* have curly braces
2023-08-21 19:17:36 +10:00
psychedelicious
fbff22c94b feat(ui): memoize all components 2023-08-21 19:17:36 +10:00
psychedelicious
5c305b1eeb feat(ui): add app error boundary
Should catch all app crashes
2023-08-21 19:17:36 +10:00
psychedelicious
990b6b5f6a feat(ui): useful tooltips on invoke button 2023-08-21 19:17:36 +10:00
psychedelicious
2dfcba8654 fix(ui): fix graphs using old field names 2023-08-21 19:17:36 +10:00
psychedelicious
d95773f50f Revert "feat(nodes): make fields that accept connection input optional in OpenAPI schema"
This reverts commit 7325cbdd250153f347e3782265dd42783f7f1d00.
2023-08-21 19:17:36 +10:00
psychedelicious
6d111aac90 fix(ui): fix node opacity slider hitbox 2023-08-21 19:17:36 +10:00
psychedelicious
f9fc89b3c5 feat(ui): nodes scheduler type default value -> "euler" 2023-08-21 19:17:36 +10:00
psychedelicious
ab76d54c10 feat(ui): update node schema parsing
simplified logic thanks to backend changes
2023-08-21 19:17:36 +10:00
psychedelicious
56245a7406 chore(ui): regen types 2023-08-21 19:17:36 +10:00
psychedelicious
bf04e913c2 feat(nodes): make primitive outputs not optional, fix primitive invocation defaults 2023-08-21 19:17:36 +10:00
psychedelicious
cdc49456e8 feat(api): add additional class attribute to invocations and outputs in OpenAPI schema
It is `"invocation"` for invocations and `"output"` for outputs. Clients may use this to confidently and positively identify if an OpenAPI schema object is an invocation or output, instead of using a potentially fragile heuristic.
2023-08-21 19:17:36 +10:00
psychedelicious
37dc2d9d4d feat(nodes): update vae node tags 2023-08-21 19:17:36 +10:00
psychedelicious
6e1ddb671e feat(nodes): make fields that accept connection input optional in OpenAPI schema
Doing this via `BaseInvocation`'s `Config.schema_extra()` means all clients get an accurate OpenAPI schema.

Shifts the responsibility of correct types to the backend, where previously it was on the client.
2023-08-21 19:17:36 +10:00
psychedelicious
496a2db15c feat(nodes): make id, type required in BaseInvocation, BaseInvocationOutput
Doing this via these classes' `Config.schema_extra()` method makes it unintrusive and clients will get the correct types for these properties.

Shifts the responsibility of correct types to the backend, where previously it was on the client.
2023-08-21 19:17:36 +10:00
psychedelicious
5292eda0e4 feat(nodes): remove "Loader" from model nodes
They are not loaders, they are selectors - remove this to reduce confusion.
2023-08-21 19:17:36 +10:00
psychedelicious
4ac41bc4b1 feat(ui): adding node selects new node exclusively 2023-08-21 19:17:36 +10:00
psychedelicious
4be4fc6731 feat(ui): rework add node select
- `space` and `/` open floating add node select
- improved filter logic (partial word matches)
2023-08-21 19:17:36 +10:00
psychedelicious
a9fdc77edd feat(ui): rename node editor to workflow editor 2023-08-21 19:17:36 +10:00
psychedelicious
385765faec fix(ui): fix missing tags on template parse 2023-08-21 19:17:36 +10:00
psychedelicious
adb05cde5b feat(ui): simple partial search for nodes 2023-08-21 19:17:36 +10:00
psychedelicious
211e8203f8 feat(ui): organise nodes files
- also remove old `.gitignore` of `inputs/` which wasn't used and was ignoring a frontend folder
2023-08-21 19:17:36 +10:00
psychedelicious
0b9ae74192 fix(stats): RuntimeError: dictionary changed size during iteration 2023-08-21 19:17:36 +10:00
psychedelicious
165c57c001 feat(ui): add select all to workflow editor 2023-08-21 19:17:36 +10:00
psychedelicious
2514af79a0 feat(ui): crude node outputs display
Resets on invoke. Nothing fancy for the UI yet, just simple text (for numbers and strings) or image. For other output types, the output in JSON.
2023-08-21 19:17:36 +10:00
psychedelicious
f952f8f685 feat(ui): add typegen customisation for invocation outputs
The `type` property is required on all of them, but because this is defined in pydantic as a Literal, it is not required in the OpenAPI schema. Easier to fix this by changing the generated types than fiddling around with pydantic.
2023-08-21 19:17:36 +10:00
psychedelicious
484b572023 feat(nodes): primitives have value instead of a as field names 2023-08-21 19:17:36 +10:00
psychedelicious
cd9baf8092 fix(stats): fix InvocationStatsService types
- move docstrings to ABC
- `start_time: int` -> `start_time: float`
- remove class attribute assignments in `StatsContext`
- add `update_mem_stats()` to ABC
- add class attributes to ABC, because they are referenced in instances of the class. if they should not be on the ABC, then maybe there needs to be some restructuring
2023-08-21 19:17:36 +10:00
psychedelicious
81385d7d35 fix(stats): fix fail case when previous graph is invalid
When retrieving a graph, it is parsed through pydantic. It is possible that this graph is invalid, and an error is thrown.

Handle this by deleting the failed graph from the stats if this occurs.
2023-08-21 19:17:36 +10:00
psychedelicious
519bcb38c1 feat(ui): node delete, copy, paste 2023-08-21 19:17:36 +10:00
psychedelicious
567d46b646 feat(ui): delete key works on workflow editor 2023-08-21 19:17:36 +10:00
psychedelicious
030802295b feat(ui): reset only specific nodes/cnet that use images
Previously if an image was used in nodes and you deleted it, it would reset all of node editor. Same for controlnet.

Now it only resets the specific nodes or controlnets that used that image.
2023-08-21 19:17:36 +10:00
psychedelicious
a495c8c156 feat(ui): misc cleanups 2023-08-21 19:17:36 +10:00
psychedelicious
ae6db67068 feat(ui): add width to mantine selects 2023-08-21 19:17:36 +10:00
psychedelicious
3d84e7756a fix(nodes): fix field names 2023-08-21 19:17:36 +10:00
psychedelicious
98431b3de4 feat: add Scheduler as field type
- update node schemas
- add `UIType.Scheduler`
- add field type to schema parser, input components
2023-08-21 19:17:36 +10:00
psychedelicious
210a3f9aa7 feat(ui): make mantine single selects *exactly* the same size as chakra ones 2023-08-21 19:17:36 +10:00
psychedelicious
9332ce639c fix(ui): fix node mouse interactions
Add "nodrag", "nowheel" and "nopan" class names in interactable elements, as neeeded. This fixes the mouse interactions and also makes the node draggable from anywhere without needing shift.

Also fixes ctrl/cmd multi-select to support deselecting.
2023-08-21 19:17:36 +10:00
psychedelicious
84cf8bdc08 feat(ui): field context menu, add/remove from linear ui 2023-08-21 19:17:36 +10:00
psychedelicious
64a6aa0293 fix(ui): move BoardContextMenu to use IAIContextMenu 2023-08-21 19:17:36 +10:00