v0.4.0¶
This release builds on v0.3.0 with new session setup — a mandatory
CreateSession call that replaces ConfigureSession — mid-turn control
(cancel a running turn, or pause and resume it between nodes), more reliable
tool calling driven by each model's own chat template, and a broader voice
output stack with per-agent synthesis language and zero-shot voice cloning.
Some client APIs were renamed, a couple of node parameters changed, auto model downloading was removed, and the wire protocol changed — so existing integrations must be updated and rebuilt. See Breaking changes and behavior changes before upgrading.
Highlights¶
CreateSessionreplacesConfigureSession— session setup is now a single mandatory call made right after connecting. See Agents and Sessions and Connect and Manage a Session.- Pause and resume a turn — suspend a turn between nodes, react to a tool call or mutate parameters, then continue the same turn. See Pause and resume a turn.
- Cancel a turn — stop an in-flight turn cleanly, keeping or discarding the partial reply. See Cancelling a turn.
- Simpler, more reliable tool calling — tool support now comes from the model's own chat template, so there is no
tool_call_formatto pick. See Tool Calling. - Voice cloning & multilingual TTS — clone a voice from a short reference clip (Pocket TTS) and pick a synthesis language per agent (Supertonic 3, 31 languages). See Clone a voice from an audio sample.
- Editor model guard — the Unity/Unreal editors verify every registered model is downloaded before Play/PIE, instead of failing cryptically at agent creation. See Verify required models before Play.
Session setup: CreateSession replaces ConfigureSession¶
Setting up a session is now a single, explicit step:
ConfigureSessionis renamedCreateSessionand is now mandatory and one-shot — call it exactly once, right after connecting, before any agent, model, storage, or voice request. It returns the server-allocatedsession_id.- Engines are fixed for the session's lifetime. To run with a different inference engine, open a new connection and create a new session.
- Requests are ordered. A request before
CreateSessionis rejected with2002 SessionNotReady; a secondCreateSessionwith2003 SessionAlreadyExists. Model-management calls (ListModels/LoadModel/UnloadModel/DownloadModel) now requireCreateSessionfirst too.
Client APIs were renamed to match across every platform (CreateSession /
create_session / OnCreateSessionComplete; Unreal's auto-configure setting is
now bAutoCreateSession). This is a breaking wire-protocol change, so update
your integration and rebuild against the new schema. See
Agents and Sessions and
Connect and Manage a Session.
Turn control: cancel, pause, and resume¶
- Cooperative turn cancellation. Send
CancelRequestto stop an in-flight turn at a safe boundary — between graph nodes, at a token boundary, or after the current TTS audio chunk.StopAndKeepkeeps the partial reply in history (what a chat "Stop" button uses);StopAndDiscarddrops the whole interaction as if it never happened. The turn ends withTurnStatus = Cancelled. Exposed on every client (Unity / Unreal / C++ / Python). See Cancelling a turn. - Pause and resume between nodes. A new
Pausenode (a no-op checkpoint) and theToolCallpause_after_tool_callparam (superseded bydispositionin v0.5.0) suspend a turn between nodes. While parked,ChangeAgentParam— normally rejected mid-turn — is allowed, so you can inspect a tool call and mutate a downstream node before continuing the same turn (no newSendMessage). Resume plainly via the wired exit, or pass aresume_nodeto jump. See Pause and resume a turn.
Simpler, more reliable tool calling¶
- No more format dialects. Tool definitions are now rendered — and calls parsed — using each model's own chat template, the exact syntax it was trained on, so tool calls are more reliable out of the box. You no longer pick a dialect: the
tool_call_formatparam is deprecated and ignored. See Tool Calling. - New
modeparam replacesgenerate_on_no_tool. A single three-way choice:call_or_answer(default — emit the residual text as a normal answer when no tool is called),detect_only(routeno_tool_calledwith no text), andrequire_call(force a tool call every turn).modeis mutable, so a node can flip between forcing a call and free chat without a rebuild. See Forcing a tool call. - Parallel tool calls. The new
parallel_tool_callsparam allows more than one call per turn where the model supports it (verified on Qwen and Granite) — so "open all the doors" can produce one call per door. - Prior tool calls stay in context. A turn's tool calls now carry forward into the next turn's prompt as a complete call/result pair (or are omitted together) — fixing small models that used to re-issue the same command or drift off task. See Tool-call history: complete pairs, never dangling.
- Clear error on unsupported models. Agent creation now fails up front when a model can't do tool calling, naming the model and how to fix it — instead of silently detecting no tool every turn. See Not every model can call tools.
Voice output: languages, voices, and cloning¶
- Voice cloning (Pocket TTS). Point a
GenerateAndSpeak/Speaknode's newtts_voiceparam at a short reference WAV (a path relative to the session storage root) and the agent speaks in that voice — no training or preprocessing step, and one loaded model serves many distinct voices concurrently. See Clone a voice from an audio sample. - Per-agent synthesis language. The new
tts_langparam selects the language on multilingual models (Supertonic 3 covers 31). Bothtts_langandtts_voiceare runtime-mutable, so a settings-menu language or voice switch is just a parameter change. - eSpeak-free Sherpa-ONNX. Tryll now builds against an eSpeak-free Sherpa-ONNX; Kokoro and VITS were removed. The supported TTS families are Supertonic and Pocket TTS — eSpeak-dependent families (Piper/VITS, Kokoro, KittenTTS, ZipVoice) fail to load with an error explaining this.
speaker_idis validated. An out-of-range voice index now fails agent creation with a message stating the model's valid range (Supertonic 3:0–9; Pocket TTS is single-speaker and must stay0— pick its voice withtts_voice).- Prompt-for-voice guidance. Add voice output to an agent now covers writing speakable prompts (no markdown, stage directions, or lists), which especially matters for models like Pocket TTS.
Agents, models & inference¶
- Stateless agents. A new
maintain_dialogue_historyflag onCreateAgent(defaulttrue). Set itfalseand the agent's history is cleared after each turn — useful for classification, routing, or tool-picking agents that gain nothing from prior turns and should not pay to store or project them. See Agent Parameters. - Per-node context size. A new
context_sizeparam onGenerate,GenerateAndSpeak,ToolCall, andClassifyIntentLLMoverrides the KV-cache / context window per node (validated against the model's trained maximum), instead of every node using the model default. See Generate. chat_template_filemodel override. Amodels.jsonvariant can now point at a Jinja chat-template file that replaces the GGUF's embedded template — the fix for a model that supports tool calling but whose GGUF conversion doesn't render it. See Model Management.- Editor model guard. Both editors verify every registered (Production / Experimental) model is downloaded before Play/PIE or the Chat window creates an agent, blocking behind a cancelable progress dialog if not; the Model Manager offers a Yes/No prompt instead of auto-downloading. Silero VAD is now manageable from the Model Manager. See Verify required models before Play.
Breaking changes and behavior changes¶
- Session setup changed (breaking wire-protocol change).
ConfigureSessionis renamedCreateSessionand is now mandatory and one-shot, with engines fixed per session — see Session setup above. Update your integration and rebuild against the new schema. - Auto model downloading removed. The
allow_auto_model_downloadingsession flag, itsSessionConfig/TryllRuntimeSettingsfields on every client, and the server-side download-then-build fallback inCreateAgent,CreateEmbeddedStringStorage, andCreateVoiceInputare gone. All three now fail fast (GraphCompilationFailed,ModelResolutionFailed, orSttModelLoadFailed) when a referenced model is not already on disk — acquire models explicitly beforehand via the editor Model Manager orDownloadModelRequest. tool_call_formatdeprecated and ignored. Tool prompting and parsing are driven by the model's chat template; the param is kept for wire/config compatibility but has no effect. Use a model whose template supports tool calling, or achat_template_fileoverride.generate_on_no_toolreplaced bymode. Rewritegenerate_on_no_tool=falseasmode=detect_onlyandgenerate_on_no_tool=trueasmode=call_or_answer. See Define and handle tool calls.speaker_idrange is now enforced. A value the TTS model can't satisfy fails agent creation instead of being silently accepted.- Unreal
bAutoConfigureSessionrenamedbAutoCreateSession, andConfigureSessionFromSettings()→CreateSessionFromSettings().
New error codes¶
2003 SessionAlreadyExists— a secondCreateSessionRequeston a connection that already has a session (CreateSessionis one-shot).3012 AgentNotPaused—Resumewas called but the agent is idle or actively running, not paused.
Retired: 6006 ModelAutoDownloadFailed is retired along with auto model
downloading and will not be reused; a missing model referenced by CreateAgent
/ CreateEmbeddedStringStorage / CreateVoiceInput now surfaces as
GraphCompilationFailed (3003), ModelResolutionFailed (6005), or
SttModelLoadFailed (4100) instead.
See Error Codes for the full list.