v0.3.0¶
This release adds server-side voice output (TTS), in-editor tooling
for Unity (a visual workflow graph editor and a model manager), and a
substantially simpler distribution model — the Tryll server now ships
inside the client package, so there is no separate server folder to copy or
wire up. Resource ownership gained explicit retention modes, and the
preferred way to supply knowledge bases and string storages is now a plain
relative file path on the node, with no Create…/Destroy… round-trip.
Several defaults and a couple of node parameters changed — see Breaking changes and behavior changes before upgrading.
Highlights¶
- Voice output — two new TTS nodes,
GenerateAndSpeakandSpeak, stream synthesized speech to the client, with ready-made playback components for Unity and Unreal. - Unity workflow graph editor — edit workflows visually instead of by hand. See Edit workflows in the graph editor.
- Model Manager window (Unity & Unreal) — browse, download, load/unload, and register models for builds from the editor. See Manage models in the editor.
- Bundled server — the server rides inside the client package; install one folder and you're done. See First inference in Unity / Unreal.
- File-path storage — supply a knowledge base or string storage by relative path, loaded on demand at
CreateAgenttime. See Ship storage folders for builds.
Voice output (TTS)¶
GenerateAndSpeaknode — fuses LLM generation with server-side text-to-speech. As the model produces tokens, the server segments them into sentences, synthesizes each to mono int16 PCM, and streamsTtsAudioFrame/TtsAudioFormatFramemessages alongside the usualAnswerTextdeltas — so an NPC starts speaking as soon as the first sentence is ready. Parameters:tts_model_name(optional — empty uses the first TTS voice in the catalog),speaker_id,speed(0.1–3.0), andmin_sentence_chars. See the TTS and Voice Output concept for the streaming pipeline.Speaknode — a TTS-only step that voices the latest assistant text produced upstream (for exampleCannedResponse → Speak), with no LLM pass. It uses the same voice parameters and playback components asGenerateAndSpeak; because the text is already complete, it pipelines synthesis across sentences rather than overlapping it with generation.- TTS session engine — declare a TTS backend (
TtsEngine = SherpaOnnx) when configuring the session. Without one,GenerateAndSpeakemits text only. - Client playback components —
TryllSpeaker(UnityMonoBehaviour, streamingAudioClip) andUTryllSpeakerComponent(Unreal,USoundWaveProcedural) wire the audio stream straight to the platform audio engine. In Unity the agent component adds aTryllSpeakerautomatically when the graph contains aGenerateAndSpeaknode; in Unreal the agent component auto-binds aUTryllSpeakerComponentalready present on the actor, so add one to your actor. - Step-by-step guide — Add voice output to an agent walks through both Unity and Unreal.
Unity editor tooling¶
- Workflow Graph editor — a new editor window renders a
TryllWorkflowAssetas a node graph: drag to wire exits, add and remove nodes, edit parameters in a property panel that reuses the Inspector drawers, with live validation and undo/redo. See Edit workflows in the graph editor. - Model Manager window (Unity & Unreal) — browse and filter the model catalog, download / load / unload / delete models, "Download all", and set each model's build-registration tier (Production / Experimental / Not registered). Registrations are stored project-side (a
TryllModelManifestasset in Unity;DefaultGame.iniin Unreal). See Manage models in the editor and the expanded Model Management reference.
Model management & memory¶
- Estimate memory footprint — a new how-to with a RAM-vs-VRAM recipe and download-size tables for every bundled language, embedding, STT, TTS, and VAD model, so you can confirm a line-up fits your target hardware before shipping.
DeleteModeland richerModelInfo—DeleteModelRequest(reverses a download back to Absent) is now documented, along with an expandedModelInfofield set (audience,tool_call_format,context_size,files,local_path,default_sampling, and more). See Model Management.
Distribution & packaging¶
- Server bundled inside the client package. The distribution is now split into per-engine archives —
tryll-unity-<version>.7zandtryll-unreal-<version>.7z— each with the server riding inside it (Unity:Packages/com.tryll.client/.Server/Default/; Unreal:<Plugin>/Binaries/ThirdParty/TryllServer/<variant>/). There is no separateserver/folder to copy and nomanifest.jsonedit to make. See First inference in Unity and Unreal. - No server-path settings. The
EditorServerExePath/BuildServerExePathsettings are gone — the server location is resolved from the package automatically, identically in the editor and in packaged builds. A single Auto Launch Server toggle remains. See Auto-launch the server and Unity Runtime Settings. - Unreal auto-connect / auto-configure. New
Auto ConnectandAuto Configure Sessionsettings (both default on), plusEngine/Stt Engine/Tts Engine/Embedding Engineproject-settings fields, mean the subsystem launches, connects, and configures the session for you. The first-inference Blueprint collapses to just handling the answer — no manualConnect/Configure Session/Create Agentwiring, and the old connect-vs-configure race is gone. See First inference in Unreal and the Unreal Blueprint catalog.
Storage & resource lifetime¶
- Retention modes (Pinned / OnDemand). Storage and model managers now carry an explicit retention mode.
Create…pins a resource;Destroy…unpins it (demoting file-backed storages to OnDemand, removing virtual/inline ones). Bytes are freed once the last reference drops. See Lifetime and Ownership. - File-path storage is the preferred mechanism. Set a node's
string_storageorembedded_string_storageparam to a relative file path under the session's storage folder, and the server loads it on demand atCreateAgenttime — no explicitCreate…/Destroy…round-trip. Extension infers the kind (.txt→ List,.json→ Map,.mm.json→ Multimap). ExplicitCreate…is now only needed to share inline data across agents. See String Storage and Embedded String Storage. - Ship storage folders for builds — a new how-to covering the storage file layout, formats, and per-platform packaging (Unity StreamingAssets, Unreal Additional Non-Asset Directories, and desktop builds).
Voice input improvements¶
- Hands-free turn semantics rewritten. During silence, empty
SegmentFinalheartbeats keep the turn armed; a non-empty final closes the turn and auto-sends.BeginUtterancenow documentsauto_finish_on_silence,max_utterance_ms, andagent_id. See Use voice input. - Hotwords by file path. Hotwords are now loaded from a relative file path (
hotwords_storage_path) rather than a pre-registeredStringStoragename. See Bias voice input with hotwords.
Server configuration & protocol¶
network_accesssetting — new server-config field (and--network-accessflag):"local"(default) binds to loopback only and raises no firewall prompt;"local_network"exposes the server on the LAN (one-time Windows Firewall prompt) and rejects non-LAN clients. See Server Configuration.storage_rootand per-sessionstorage_data_folder— new config field andCreateSessionparameter that anchor relative storage-path resolution, with a documented resolution chain. See Server Configuration and the Wire Protocol.- DebugCommand channel —
DebugCommandRequest/DebugCommandResponse, a diagnostic channel that is disabled by default and excluded from production builds, is now documented in the Wire Protocol.
Breaking changes and behavior changes¶
embedding_modelparam removed fromRetrieveandClassifyIntent. The embedding model now comes solely from the knowledge-base config file; the per-node parameter (and the wire field for file-backed KBs) is gone. See Retrieve and ClassifyIntent.- Auto-download no longer fetches embedding models.
CreateAgentauto-download now covers only language and TTS models. Embedding models for file-backed Retrieve / ClassifyIntent knowledge bases must be preloaded (or supplied viaCreateEmbeddedStringStorage). (Auto-download itself was removed entirely in v0.4.0 — see Auto model downloading removed above.) - Changed node defaults:
Generate/GenerateAndSpeak—placementdefault0→2.Retrieve—thresholddefault0.0→0.5.ClassifyIntent—threshold0.0→0.25,diagnostic_topk1→5.ClassifyIntentLLM—history_turns4→2,margin0.0→0.15.
- Distribution repackaged — single
tryll-<version>.7zsplit intotryll-unity-…andtryll-unreal-…; theEditorServerExePath/BuildServerExePathsettings were removed (see Distribution & packaging). - Unreal
CreateSessionsignature gainedGameNameandStorageDataFolderparameters (plus a newCreateSessionFromSettings()), andOnTurnCompletenow carriesDebugInfoandTokensGeneratedin addition toStatus. See the Unreal C++ reference and Blueprint catalog.
New error codes¶
3009 StorageOutsideRoot— a storage path is absolute or escapes the storage root with...3010 StorageFileNotFound— a relative storage path does not resolve to a file.3011 StorageKindMismatch— the resolved file's kind does not match the node's expectation.7004 StorageNameInUse— an inline/virtual storage name collides with a real file under the storage root.
See Error Codes for the full list.