v1

latestOpenAPI 3.1.0raw.githubusercontent.com2026-06-304917042.1 MB
runtime v2

Run one v2 conversation turn with an SSE response

SSE counterpart to POST /v2/conversations/{id}/turns.

Token streaming: the v2 ConversationTurnDriver runs the turn as one read-modify-write transaction but now 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 runs the org-scope check and the turn (inside the driver task), and is committed before the complete frame so the FastAPI dependency teardown doesn't hold it open across the response. The generator only touches the session after the driver task has finished, so the two never race on it.

post/v1/v2/conversations/{conversation_id}/turns/stream

Path parameters

conversation_idstring uuid required

Query parameters

traceboolean

Request body

user_messagestring required
for_updateboolean
include_evidenceboolean
evidence_view'display' | 'full'

Response

Successful Response

{"stackTrail":"paths:/v1/v2/conversations/{conversation_id}/turns/stream:post:responses:200:content:application/json:schema","oasType":"schema","type":"unknown"}