Parallelize extraction orchestrator to reduce pipeline latency#1823
Open
ankitgmishra wants to merge 1 commit into
Open
Parallelize extraction orchestrator to reduce pipeline latency#1823ankitgmishra wants to merge 1 commit into
ankitgmishra wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Problem:
Currently, the
graphify extractorchestrator incli.pyruns its extraction stages sequentially. On a large repository, the CLI waits for AST extraction to completely finish before it begins the Semantic extraction, and waits for Semantic to finish before starting PostgreSQL/Cargo introspections. This creates an unnecessary linear bottleneck since these stages are entirely independent of one another.The Solution:
This PR refactors the core orchestrator in
cli.pyto run the extraction stages concurrently, effectively masking the I/O and processing time of the faster stages behind the longest-running stage (typically Semantic LLM extraction).Key Changes:
cli.pyinto standalone functions (run_ast,run_semantic,run_pg,run_cargo).concurrent.futures.ThreadPoolExecutorto dispatch these functions simultaneously.sem_cache_hits,sem_cache_misses) so CLI summary outputs remain correct.Testing & Edge Cases Handled:
Added a comprehensive test suite (
tests/test_parallel_orchestration.py) to validate:time.sleepmocks that tasks run in parallel.SystemExit(1)and aborts the CLI gracefully rather than failing silently.graph.jsonwithout data loss.Performance Impact:
max(AST Time, Semantic Time)= Total Time(On large codebases, this effectively reduces the AST extraction time to
0.0sof overhead as it runs completely invisibly in the background during the LLM network calls).