Skip to main content

Live practice

A human talking to the simulated customer in real time, over a WebSocket.

wss://your-host/api/nn-coach/live?token=<session-token>&scenario_uuid=<uuid>&mode=voice

The token goes in the query string because a browser WebSocket cannot set headers — the same reason the other binaries' live sockets work this way.

Parameters​

ParamRequiredNotes
token✓Session token
scenario_uuid✓Which scenario to practise
mode—voice for spoken practice; anything else is text
rep_name—The trainee's name, used in the transcript
proxy_model—Overrides the service default
tts_provider—Overrides the service default
agent_opens—Overrides the scenario's setting
StatusCause
401{"detail": "invalid or expired token"}
404No such scenario in your organization

Health​

GET /api/nn-coach/live/health

{ "available": true, "proxy_model": "x-ai/grok-4.3", "turn_timeout_sec": 600 }

available reports whether live practice can run on this deployment.

How it differs from a run​

RunLive practice
Who plays the repAn LLMA person
TransportHTTP, asynchronousWebSocket, synchronous
What it testsThe deployed agent's promptThe trainee
ScoredYesYes, when the call ends

A run is a regression test. Live practice is training. They share personas, scenarios, and the rubric, so a team practises against exactly the customers the prompts are tested against.

Voice mode​

In voice, the trainee speaks and the persona replies through TTS, with the persona's speech_profile shaping pace, fillers, and whether they interrupt. A persona with interrupts_agent: true talks over a trainee who runs long — which is the whole point of practising against them.

Text mode is the fallback when a deployment has no speech providers configured, and it is faster to iterate on wording with.