Some function calls (particularly expansion of generic types) can and should be undone before the orchestrator returns to the frontend.
The most natural way to do this will be to use the cache: we store the input and output of a function call, then see if certain outputs (specifically Z1K1s) are still present in the ZObject. We can then replace those elements of the ZObject with their unexpanded equivalents.