Re-run all current evaluator bindings against a v2 conversation
v2 alias of POST /v1/sessions/{id}/reevaluate.
The legacy eval endpoint already operates on the conv_* Conversation
model and works unchanged — this thin alias keeps the admin UI’s path
family consistent under /v2/conversations. Wipes existing EvalRuns and
re-runs the currently bound evaluators with fresh snapshots; rejects (409)
while any run for the conversation is pending / running.
POST
Re-run all current evaluator bindings against a v2 conversation
Previous
Run one v2 conversation turn with an SSE responseSSE 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.
Next
Re-run all current evaluator bindings against a v2 conversation