Skip to content

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, GenerateAndSpeak and Speak, 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 CreateAgent time. See Ship storage folders for builds.

Voice output (TTS)

  • GenerateAndSpeak node — 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 streams TtsAudioFrame / TtsAudioFormatFrame messages alongside the usual AnswerText deltas — 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), and min_sentence_chars. See the TTS and Voice Output concept for the streaming pipeline.
  • Speak node — a TTS-only step that voices the latest assistant text produced upstream (for example CannedResponse → Speak), with no LLM pass. It uses the same voice parameters and playback components as GenerateAndSpeak; 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, GenerateAndSpeak emits text only.
  • Client playback componentsTryllSpeaker (Unity MonoBehaviour, streaming AudioClip) and UTryllSpeakerComponent (Unreal, USoundWaveProcedural) wire the audio stream straight to the platform audio engine. In Unity the agent component adds a TryllSpeaker automatically when the graph contains a GenerateAndSpeak node; in Unreal the agent component auto-binds a UTryllSpeakerComponent already present on the actor, so add one to your actor.
  • Step-by-step guideAdd voice output to an agent walks through both Unity and Unreal.

Unity editor tooling

  • Workflow Graph editor — a new editor window renders a TryllWorkflowAsset as 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 TryllModelManifest asset in Unity; DefaultGame.ini in 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.
  • DeleteModel and richer ModelInfoDeleteModelRequest (reverses a download back to Absent) is now documented, along with an expanded ModelInfo field 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>.7z and tryll-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 separate server/ folder to copy and no manifest.json edit to make. See First inference in Unity and Unreal.
  • No server-path settings. The EditorServerExePath / BuildServerExePath settings 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 Connect and Auto Configure Session settings (both default on), plus Engine / Stt Engine / Tts Engine / Embedding Engine project-settings fields, mean the subsystem launches, connects, and configures the session for you. The first-inference Blueprint collapses to just handling the answer — no manual Connect / Configure Session / Create Agent wiring, 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_storage or embedded_string_storage param to a relative file path under the session's storage folder, and the server loads it on demand at CreateAgent time — no explicit Create… / Destroy… round-trip. Extension infers the kind (.txt → List, .json → Map, .mm.json → Multimap). Explicit Create… 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 SegmentFinal heartbeats keep the turn armed; a non-empty final closes the turn and auto-sends. BeginUtterance now documents auto_finish_on_silence, max_utterance_ms, and agent_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-registered StringStorage name. See Bias voice input with hotwords.

Server configuration & protocol

  • network_access setting — new server-config field (and --network-access flag): "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_root and per-session storage_data_folder — new config field and CreateSession parameter that anchor relative storage-path resolution, with a documented resolution chain. See Server Configuration and the Wire Protocol.
  • DebugCommand channelDebugCommandRequest / 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_model param removed from Retrieve and ClassifyIntent. 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. CreateAgent auto-download now covers only language and TTS models. Embedding models for file-backed Retrieve / ClassifyIntent knowledge bases must be preloaded (or supplied via CreateEmbeddedStringStorage). (Auto-download itself was removed entirely in v0.4.0 — see Auto model downloading removed above.)
  • Changed node defaults:
    • Generate / GenerateAndSpeakplacement default 02.
    • Retrievethreshold default 0.00.5.
    • ClassifyIntentthreshold 0.00.25, diagnostic_topk 15.
    • ClassifyIntentLLMhistory_turns 42, margin 0.00.15.
  • Distribution repackaged — single tryll-<version>.7z split into tryll-unity-… and tryll-unreal-…; the EditorServerExePath / BuildServerExePath settings were removed (see Distribution & packaging).
  • Unreal CreateSession signature gained GameName and StorageDataFolder parameters (plus a new CreateSessionFromSettings()), and OnTurnComplete now carries DebugInfo and TokensGenerated in addition to Status. 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.