Rework graph.py by JPPhoto · Pull Request #8642 · invoke-ai/InvokeAI
Summary
This new graph.py keeps the same DAG model and validation but restructures runtime scheduling and readability: ready queues moved from public deque fields to internal, non-serialized structures grouped by node class, with a configurable class priority and optional batch cap; indegree is now seeded as unmet inputs (fixing iterator stalls) and children are enqueued via a single _enqueue_if_ready() helper; next() drains the active class queue, reseeds when empty, and _prepare() still expands iterators but with clearer predicates; minor fixes include catching ValueError in delete_edge, replacing magic port strings with ITEM_FIELD/COLLECTION_FIELD, and renaming helper methods for clarity. Functionality and performance are preserved aside from the scheduling policy change and the indegree correctness fix.
Additionally, there is a new README.md file that explains a bit about the classes in graph.py so future developers can get a head start.
Related Issues / Discussions
All of this was an effort to understand the execution engine better to support different types in the future - if, loops, and the like.
QA Instructions
I've run a number of workflows with these changes and all seems good.
Merge Plan
Checklist
- The PR has a short but descriptive title, suitable for a changelog
- Tests added / updated (if applicable)
- ❗Changes to a redux slice have a corresponding migration
- Documentation added / updated (if applicable)
- Updated
What's Newcopy (if doing a release after this PR)