I love seeing all the different approaches to this. My solution was to break all the recipes up into dependency tiers (coils & gears T1, circuits T2, inserters T3 etc.), which would then let me use the sorting on the advanced combinator to sort the execution. I guess it kinda works how the player crafting queue works:
counter cell holding an index
If logi_requests[index] is not craftable: increment index (counter resets at logi_requests.len)
If we “lock on” to something craftable we save it to mem
Calculate the total resources required (raw and intermediates) using lookup combinators and have that all on a line
Raws get requested, intermediates get “oned out” by a decider and then multiplied by the tier values.
That then gets picked by an advanced combinator which is sorting it by low to high and sent to the assembler.
It then makes as many as needed before moving onto the next thing until eventually it satisfies the saved logi request
It then resets the counter and everything starts again.
I liked that it was resilient to constantly changing network requests and made efficient use of the logi bots with bulk requests
I originally used splitters but then switched to just filtering the inserters pulling from the loop. Since the loop recycles anyway it didn’t matter if they missed some/the splitters felt like overkill.
For overflow I had inserters controlled by logi levels feeding into recyclers