interleave_projections(
self,
channels: list[str],
) -> AsyncIterator[tuple[strYield (channel_name, item) tuples across multiple projections.
One shared subscription drives all per-channel decoders; items arrive
in server-emit order (the SDK analog of GraphRunStream.interleave).
Note:
Handles and streams are yielded eagerly (before their sub-stream
completes), so items arrive interleaved in real time. To receive a
fully-resolved handle (output already populated), use the dedicated
thread.tool_calls / thread.messages projections instead.
Flat list of "values", "messages", "tool_calls",
"subgraphs", and/or extension names. Built-ins yield their
typed item (snapshot dict / AsyncChatModelStream /
ToolCallHandle / ScopedStreamHandle); an extension yields
its payload dict, keyed by the bare extension name.