Run one v2 conversation turn with an SSE response
SSE counterpart to POST /conversations/{id}/turns.
Token streaming: the v2 ConversationTurnDriver prepares a snapshot, computes without a checked-out connection, and then finalizes atomically. It accepts an on_token callback that the orchestrators/runnables fire as the answer streams (speculative losers and transferring members are filtered upstream — a Supervisor buffers the speculation and flushes only on continue). We bridge that push-callback to this pull-generator with an :class:asyncio.Queue: the driver runs as a task that enqueues each token delta, and the generator drains the queue into delta frames as they arrive. When the driver finishes we emit a complete frame carrying the v2 TurnResponse JSON (including the server-measured turn_ttft_ms). The wire contract (delta / complete / error frames) matches /v1/runtime/turn/stream so the UI needs no change.
DB session lifecycle: the per-request session commits admission before the response is constructed, is connection-free while the driver task computes, and commits finalization before the complete frame. The generator only touches the session after the driver task has finished, so the two never race on it.
Path parameters
Query parameters
Request body
Response
Successful Response