Circuit generation should likely be the main crate and shared code from this crate. The existing code does a relatively good job at separating this via traits and modules but it should isolate circuit generation code into its own crate.
Existing garb/eval tooling in the modules can be moved to a smaller subcrate or a separate repo