Blueprint Catalog¶
The Blueprint-visible nodes exposed by the Tryll Unreal plugin, grouped by category. Use this page to find which Blueprint function or event to place; use the Unreal C++ API Reference and the feature reference pages for parameter-level detail.
Most nodes live under two UObjects; the speaker, lip-sync and voice-input components add their own (below):
UTryllSubsystem— aUGameInstanceSubsystem. Access from any Blueprint with theGet Tryll Subsystemnode (GameplayStatics → GetGameInstance → GetSubsystem<TryllSubsystem>).UTryllAgentComponent— anUActorComponent. Add one to any actor; whenbAutoCreateOnConnectistrue(the default), it auto-creates its agent once the session is ready (connected and the session created), queuing if it spawns earlier. (The property name predates the session-ready semantics.)
Static helper libraries (Tryll|Languages, Tryll|Intent), the
UTryllKvResidencyPolicy component (Tryll|KV Cache), and the generated
node-params factory are not listed here; see their class pages.
Categories use the pipe convention (Tryll|Connection,
Tryll|Models, …) so everything appears grouped under a single
Tryll folder in the Blueprint context menu.
Connection — Tryll|Connection¶
On UTryllSubsystem.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Connect | Callable | — | — | Starts the background connect. Fires OnConnectionChanged(true) when ready. Uses the host/port from project settings; see Run the Tryll Server. |
| Disconnect | Callable | — | — | Closes the socket. Fires OnConnectionChanged(false) once torn down. |
| Is Connected | Pure | — | bool |
True while the background state is Connected. |
| Get Session Id | Pure | — | int64 |
Server-assigned session id; 0 when disconnected. |
Session — Tryll|Session¶
On UTryllSubsystem.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Create Session | Callable | Game Name (FString, default empty), Locale (FString, BCP-47, default empty), Use Project Locale When Empty (bool, default true) |
— | Sends CreateSessionRequest. Fires OnCreateSessionComplete(bSuccess). Mandatory and one-shot: only valid once, immediately after OnConnectionChanged(true). Storage root comes from Project Settings Storage Data Folder via the launcher (--storage-root), not this node. See Agent Parameters and Server Configuration. |
| Create Session From Settings | Callable | — | — | Same as Create Session but reads Game Name and Locale from Project Settings → Tryll Client, and sends the engine warm-up hint built from the Model Manager manifest. There are no engine settings: each model's catalog entry names its engine. This is what Auto Create Session calls for you. |
| Is Session Ready | Pure | — | bool |
True once the session has been created (connected and CreateSession succeeded). |
| Set Session Locale | Callable | Locale (FString, BCP-47; empty clears it) |
— | Changes the session language without recreating the session. Applies to every agent from its next turn (TTS language, locale template keys); content already bound to a node does not swap. Fires OnSetSessionLocaleComplete(Locale, bSuccess). |
| Set Inference Throttle | Callable | Level (float, 0–1) |
— | Reports how hard the server should yield the GPU back to your game. 0 = full speed (the default for a session that never calls it), 1 = maximum yielding. Fire-and-forget — no response, no completion event, nothing to await — so calling it every tick is fine. Never changes what is generated, only how fast. See Wire Protocol. |
Models — Tryll|Models¶
On UTryllSubsystem.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Request Download Model | Callable | Model Name (FString) |
— | Kicks off a download. Progress arrives via OnDownloadProgress; completion via OnDownloadComplete. |
| Request Load Model | Callable | Model Name (FString), Placement (ETryllMemoryPlacement, default Auto), Is Override (bool, default false) |
— | Loads and pins a locally-available model. The model's catalog entry names the engine that runs it. Placement applies to this load only and is used only when Is Override is true; otherwise the session's per-model hint applies. Placement is a hint the server may downgrade. Fires OnLoadModelComplete(ModelName, bSuccess). |
| Request Unload Model | Callable | Model Name (FString) |
— | Unloads a loaded model. Fires OnUnloadModelComplete(ModelName, bSuccess). |
| Build Engine Declarations Flat | Callable (static, on UTryllRuntimeSettings) |
— | TArray<int32> |
The optional engine warm-up hint as flattened (role, engine) ordinal pairs, derived from the models registered in the Model Manager. Advisory only: it never selects or gates an engine. |
| Set User Models Catalog Path | Callable (static, on UTryllRuntimeSettings, category Tryll) |
Relative Path (FString; empty clears) |
bool, Out Error (FString) |
Stores a project-relative custom models catalog. Returns false for a path outside the project. With auto-launch on, a running server is restarted and an open session is dropped. |
Model listing is not a Blueprint node. Call the C++
UTryllSubsystem::RequestListModels(OnComplete), then read the result in its
callback or bind OnListModelsComplete. See
Model Management for lifecycle rules.
Agent — Tryll|Agent¶
On UTryllAgentComponent.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Create Agent | Callable | — | — | Creates a server-side agent from the component's Workflow Asset (fails with OnError if none is assigned). Fires OnAgentReady. With bAutoCreateOnConnect (the default) it runs automatically once the session is ready (Is Session Ready, after CreateSession succeeds), not on raw connect. |
| Destroy Agent | Callable | — | — | Destroys the server-side agent. Fires the subsystem's OnAgentDestroyed(AgentId). |
| Send Message | Callable | Message (FString) |
— | Sends a user turn. Streams back via OnAnswerText; ends with OnTurnComplete. If the agent exists but is busy (a running turn or a KV-cache operation), the message is queued instead of dropped (only the newest is kept) and OnMessageQueued fires. See Stream Answers to UI. |
| Try Flush Pending Message | Callable | — | bool |
Hands the queued message to the agent if it can accept one now. Returns true only when a message was sent. Called automatically on agent-ready, turn-complete, and cache-operation-complete. |
| Has Pending Message | Pure | — | bool |
True while a queued message is waiting for the agent. |
| Get Pending Message | Pure | — | FString |
The queued message, or empty. |
| Is Turn In Flight | Pure | — | bool |
True while a turn this component started has not completed. |
| Get Paused Node | Pure | — | FString |
The node the turn is paused after, or empty when not paused. While non-empty, Send Message fails with AgentBusy until Resume or Cancel. |
| Cancel | Callable | Mode (ETryllCancelMode, default StopAndKeep) |
— | Cooperatively stop the in-flight turn. Ends with OnTurnComplete(Cancelled). Idle cancel is a no-op. See Cancelling a turn. |
| Resume | Callable | Resume Node (FString, default empty) |
— | Resume a paused turn. Empty continues via the pending exit; non-empty jumps to that node. Fires OnResumed. See How to pause and resume a turn. |
| Get Node Params Baseline | Callable | Node Name (FString) |
UTryllNodeParamsBase |
The authored params for a node. Clone it, edit fields, then pass to Change Params. Call after OnAgentReady; returns null for an unknown node. |
| Change Params | Callable | Node Name (FString), Params (UTryllNodeParamsBase) |
— | Mutate a node parameter at runtime (the agent must be idle or paused). Fires OnParamChanged. See Change Agent Parameters. |
| Is Agent Ready | Pure | — | bool |
True after OnAgentReady has fired. |
| Get Agent Id | Pure | — | int64 |
Server-assigned agent id; 0 before ready. |
See UTryllAgentComponent for the full property and
method reference.
Tools — Tryll|Tools¶
On UTryllAgentComponent. Use these to answer a paused AwaitResult tool
call from Blueprint.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Resume With Tool Result | Callable | Tool Result (FTryllToolResult: CallId, Result), Resume Node (FString, default empty) |
— | Resumes the paused turn with one result correlated to a tool-call id. Fires OnResumed. |
| Resume With Tool Results | Callable | Tool Results (TArray<FTryllToolResult>), Resume Node (FString, default empty) |
— | Resumes with the complete result batch for one paused tool-call pass. An incomplete or duplicate batch is rejected (InvalidToolResults, 3016). Fires OnResumed. |
| Retry Paused Tool Batch | Callable | — | — | Re-runs the retained paused batch: handlers that already produced a result are skipped, the rest run, and a fresh resume is sent. No-op without a retained batch. |
| Has Paused Tool Batch | Pure | — | bool |
True while a paused tool-call batch is retained (until a successful resume, turn end or cancel, destroy, or disconnect). |
KV Cache — Tryll|KV Cache¶
On UTryllAgentComponent. Calls are idle-only.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Prefill KV Cache | Callable | — | — | Synchronises every eligible language-model context to its reusable prefix. Fires OnKvCachePrefilled or OnKvCachePrefillError. |
| Evict KV Cache | Callable | — | — | Releases every eligible raw language-model context while retaining the agent. Idempotent. Fires OnKvCacheEvicted or OnKvCacheEvictError. |
| Get KV Cache Status | Callable | — | — | Reads aggregate residency and prefix status. Fires OnKvCacheStatus or OnKvCacheStatusError. |
The component's KV Cache Initialization property is in the same category.
| Event | Payload | Fires when |
|---|---|---|
| On KV Cache Prefilled | Result (FTryllKvCachePrefillResult) |
A prefill request completed with aggregate counts and status. |
| On KV Cache Evicted | Result (FTryllKvCacheEvictResult) |
An eviction request completed with aggregate counts and status. |
| On KV Cache Status | Result (FTryllKvCacheStatus) |
A status request completed. |
| On KV Cache Prefill Error / Evict Error / Status Error | ErrorMessage (FString) |
The corresponding lifecycle operation failed. |
Dialog — Tryll|Dialog¶
On UTryllAgentComponent. Both calls are strict idle-only (AgentBusy while
a turn is running, paused, or during a KV-cache operation). See
Seed and edit dialog history.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Append Interactions | Callable | Interactions (TArray<FTryllDialogInteraction>) |
— | Appends scripted user/assistant pairs without running the graph. An empty side is omitted; both empty is skipped. Fires OnInteractionsAppended or OnAppendInteractionsError. |
| Remove Interactions From End | Callable | Count (int32) |
— | Removes whole interactions from the end of the dialog. Fires OnInteractionsRemoved or OnRemoveInteractionsError. |
| Event | Payload | Fires when |
|---|---|---|
| On Interactions Appended | Count (int32) |
Append Interactions succeeded. |
| On Append Interactions Error | ErrorMessage (FString) |
Append Interactions failed. |
| On Interactions Removed | Count (int32) |
Remove Interactions From End succeeded. |
| On Remove Interactions Error | ErrorMessage (FString) |
Remove Interactions From End failed. |
Variables — Tryll|Variables¶
On UTryllAgentComponent, via Get Variables. See
Agent Variables for the full model. Setters validate
locally and return an FTryllError immediately for an unknown name or type mismatch — no
wire round-trip. Writes are batched and flushed automatically immediately before the next
Send Message / Resume / Change Params call.
The component Details panel also exposes declaration-driven Variable Overrides and a Live Agent — Variables section (dirty status + Flush Now) when a PIE agent or Tryll Chat preview agent is attached. Unchecking an override assigns the workflow declaration default on the live mirror.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Get Variables | Callable (on UTryllAgentComponent) |
— | UTryllAgentVariables |
The agent's variables mirror, or null when no agent is ready. Has an execution pin. Call after OnAgentReady. |
| Set Int Variable | Callable (on UTryllAgentVariables) |
Name (FString), Value (int64) |
FTryllError |
Assigns a declared Int variable. |
| Set Float Variable | Callable | Name (FString), Value (float) |
FTryllError |
Assigns a declared Float variable. |
| Set String Variable | Callable | Name (FString), Value (FString) |
FTryllError |
Assigns a declared String variable. |
| Set Bool Variable | Callable | Name (FString), Value (bool) |
FTryllError |
Assigns a declared Bool variable. |
| Set String Set Variable | Callable | Name (FString), Value (TArray<FString>) |
FTryllError |
Replaces a declared StringSet variable wholesale. |
| Add To Set Variable | Callable | Name (FString), Element (FString) |
FTryllError |
Idempotent insert into a StringSet variable. |
| Remove From Set Variable | Callable | Name (FString), Element (FString) |
FTryllError |
Idempotent removal from a StringSet variable. |
| Reset Variable | Callable | Name (FString) |
FTryllError |
Restores the CreateAgent-time initial value. |
| Is Dirty | Pure | — | bool |
True when staged mutations have not been flushed yet. |
| Flush If Dirty | Callable | — | — | Eager wire flush (same as Details Flush Now). No-op when clean. |
| Get Int Variable | Pure | Name (FString) |
int64, bFound (bool) |
Current value; bFound is false if the name isn't declared. |
| Get Float Variable | Pure | Name (FString) |
float, bFound (bool) |
Current value; bFound false if undeclared. |
| Get String Variable | Pure | Name (FString) |
FString, bFound (bool) |
Current value; bFound false if undeclared. |
| Get Bool Variable | Pure | Name (FString) |
bool, bFound (bool) |
Current value; bFound false if undeclared. |
| Get String Set Variable | Pure | Name (FString) |
TArray<FString>, bFound (bool) |
Current value; bFound false if undeclared. |
Voice Input — Tryll|Voice¶
On UTryllVoiceInputComponent. Add one to an actor (optionally alongside a
UTryllAgentComponent) and download an STT model in the Model Manager.
See UTryllVoiceInputComponent for the full
property list.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Create Voice Input | Callable | — | — | Creates the server-side STT handle. Fires OnVoiceInputCreated. Normally automatic when bCreateOnConnect is true. |
| Destroy Voice Input | Callable | — | — | Releases the server-side STT handle. |
| Begin Utterance | Callable | Agent Override (UTryllAgentComponent, optional) |
— | Opens an utterance and starts mic capture. The final transcript routes to the override, else TargetAgent, else transcribe-only. |
| End Utterance | Callable | — | — | Commits the utterance (push-to-talk release). |
| Cancel Utterance | Callable | — | — | Drops the utterance without producing a transcript. |
| Has Voice Input | Pure | — | bool |
True once the handle exists. |
| Is Utterance Active | Pure | — | bool |
True while an utterance is open. |
| Get Microphone Status | Pure | — | ETryllMicrophoneStatus |
Result of the last microphone check: Unknown, Available, NoDevice or CaptureFailed. |
| Get Microphone Status Message | Pure | — | FString |
Why the microphone is unavailable; empty when it is not. |
| Is Microphone Unavailable | Pure | — | bool |
True for NoDevice or CaptureFailed. Show "type to chat"; Begin Utterance re-checks and recovers once a microphone appears. |
Events — Tryll|Events (on UTryllAgentComponent)¶
Bind these on each agent component instance. All are
BlueprintAssignable, so Bind Event to … nodes work directly.
| Event | Payload | Fires when |
|---|---|---|
| On Agent Ready | — | Server confirms agent creation. |
| On Answer Text | NodeName (FString), Text (FString), bIsFinal (bool) |
Streaming token chunk. NodeName names the producing node (multi-sender graphs). bIsFinal is true on the last chunk before OnTurnComplete. (No bIsDelta pin — the Blueprint delegate is 3-param; the C++ agent handle carries bIsDelta separately.) |
| On Answer Full | FullText (FString) |
After OnTurnComplete, with the full accumulated response. |
| On Turn Complete | Status (ETryllTurnStatus), DebugInfo (FString), TokensGenerated (int32) |
Turn ended. DebugInfo is populated only when bEnableDiagnostics is set. |
| On Error | ErrorMessage (FString) |
Any agent-level error (send failure, server error response). |
| On Param Changed | bSuccess (bool), ErrorMessage (FString) |
A ChangeParams request completed; ErrorMessage is empty on success. |
| On Resumed | bSuccess (bool), ErrorMessage (FString) |
A Resume request completed; ErrorMessage is empty on success, otherwise describes AgentNotPaused (3012) or UnknownNode (3005). |
| On Tool Call | ToolName (FString), ArgumentsJson (FString) |
A ToolCall node on this agent with a non-RouteOnly disposition detected a call. No agent id: this component is the agent. |
| On Tool Call With Id | CallId (FString), ToolName (FString), ArgumentsJson (FString) |
Same call, with the id to echo in tool_results. |
| On Tool Call Detailed | Call (FTryllToolCall) |
Same call, including node name and disposition. Also suppresses this component's On Node Event. |
| On Intent Classified | Classification (FTryllIntentClassification) |
Embedding ClassifyIntent on this agent. The struct has no AgentId. |
| On Intent LLM Classified | Classification (FTryllIntentLlmClassification) |
ClassifyIntentLLM on this agent. The struct has no AgentId. |
| On Paused | NodeName (FString), PendingExit (FString) |
This agent's turn paused between nodes. Binding it suppresses this component's On Node Event for the pause. |
| On Node Event | NodeName (FString), EventType (FString), KvPairs (TArray<FTryllNodeEventKeyValue>) |
Generic fallback for this agent when no typed listener is bound on this component. |
A typed listener on this component does not suppress the subsystem events below, and the reverse.
The KV-cache and dialog events are listed with their nodes above. One more
component event sits under Tryll|Agent:
| Event | Payload | Fires when |
|---|---|---|
| On Message Queued | Message (FString) |
Send Message could not hand the message over yet and queued it. Use it to show a "waiting to send" state. |
Voice — Tryll|TTS (on UTryllAgentComponent)¶
The agent's voice is a voice profile: a
UTryllVoiceProfile data asset (Content Browser Tryll ▸ Voice Profile)
assigned to the component's Voice Profile property (Tryll|TTS, editable,
Blueprint read-only). Every speaking node of the workflow (Speak, Generate And
Speak) uses it. A workflow that speaks needs one: without it the server refuses
the agent with AgentVoiceRequired (3025), the component logs an error at
Create Agent, and Data Validation flags the component. One workflow can
serve many characters, each with its own profile.
The component's Voice Delivery row is a per-agent override of the profile's default mode. Enable its checkbox and choose neutral or one of the assigned profile's modes. It is used by the next Create Agent without modifying the shared profile asset, and a change applies immediately to a live PIE or Tryll Chat agent.
| Node | Kind | Inputs | Outputs | Notes |
|---|---|---|---|---|
| Set Voice | Callable | New Voice (UTryllVoiceProfile) |
— | With a live agent, replaces its voice (idle only: AgentBusy 3004 during a turn; InvalidVoiceProfile 3023 when the model cannot use the profile, and the old voice stays) and assigns Voice Profile on success. The active delivery mode survives when the new profile defines a mode of the same name. Without an agent it only assigns Voice Profile for the next Create Agent. Fires OnVoiceChanged. |
| Set Delivery Mode | Callable | Mode (FString), Intensity (float, default 1, advanced) |
— | Switches the voice's delivery mode, for example angry. Allowed mid-turn; applies from the next sentence. neutral always works; a mode the profile does not define fails with UnknownDeliveryMode (3024) and the current mode stays. Intensity (0–1) scales the mode where the model can use it. Fires OnDeliveryModeChanged. |
| Get Delivery Mode | Pure | — | FString |
The mode last applied to the live agent; the profile's default mode (empty = neutral) before any switch. |
| Event | Payload | Fires when |
|---|---|---|
| On Voice Changed | Error (FTryllError) |
Set Voice completed. Error.Code is 0 on success. |
| On Delivery Mode Changed | Mode (FString), Error (FTryllError) |
Set Delivery Mode completed. Error.Code is 0 on success, 3024 for an undefined mode, 3025 when the agent has no voice. |
Events — Tryll|TTS (on UTryllSpeakerComponent)¶
UTryllAgentComponent plays TTS audio through the UTryllSpeakerComponent on
its actor, and adds one at CreateAgent if the graph speaks and there is none.
Add one yourself to bind these events to react to the audio lifecycle. Every
Started is followed by exactly one Finished (unless the component ends play
mid-speech). The agent's Speaker property (Tryll|TTS, Blueprint read/write,
set on a placed instance) picks a specific speaker; it is read at CreateAgent.
| Event | Payload | Fires when |
|---|---|---|
| On Tts Audio Started | — | The first PCM chunk of a turn is queued — speech is about to begin. Once per turn, even when several nodes speak. |
| On Tts Audio Finished | — | The turn is complete and its queued audio has been handed to the audio engine (its own buffers, a few tens of ms, still play out). Also fires immediately when Stop Playback cuts speech off. |
| Function | Kind | Returns | Description |
|---|---|---|---|
| Stop Playback | Callable | — | Drops all queued audio and ignores further audio until the next turn announces its audio format. Fires On Tts Audio Finished if speech was playing. Does not cancel the turn — call Cancel on the agent for that. Safe to call repeatedly. |
| Get Sample Rate | Pure | int32 |
Sample rate of the current TTS stream, in Hz. 0 before the first format announcement. |
| Get Output Latency Ms | Pure | float |
Audio engine output buffering after the speaker's playback clock, in milliseconds. 0 without an audio device. Tryll Lip Sync subtracts it when Compensate Output Latency is on. |
See Add Voice Output to an Agent for the full setup workflow.
Functions — Tryll|Lip Sync (on UTryllLipSyncComponent)¶
Tryll Lip Sync plays the server's viseme track on a face with ARKit morph targets. See Add Lip Sync to a Character.
| Function | Kind | Parameters | Returns | Description |
|---|---|---|---|---|
| Set Intensity | Callable | InIntensity (float) |
— | Scales every mouth pose. 0 keeps the mouth at rest. |
| Bind Face | Callable | InFaceMesh (USkeletalMeshComponent) |
— | Rebinds to a face mesh, for example after spawning or swapping it at runtime. |
| Is Face Bound | Pure | — | bool |
true once at least one ARKit morph target from the pose table was found on the face. |
| Get Bound Channel Count | Pure | — | int32 |
How many pose-table channels were found as morph targets. |
| Get Active Viseme | Pure | — | ETryllViseme |
The viseme showing now. |
| Get Applied Jaw Open | Pure | — | float |
jawOpen as written this frame, 0–1. |
| Property | Type | Access | Description |
|---|---|---|---|
| Speaker | UTryllSpeakerComponent |
Blueprint read/write | The speaker whose track plays. Empty = the first one on the owner. |
| Face Mesh | USkeletalMeshComponent |
Blueprint read/write | The face to drive. Empty = searched on the owner; a mesh named Face wins. |
| Settings | FTryllVisemeSettings |
Blueprint read/write | Intensity, smoothing, sync offset and latency compensation; applied every tick. |
| Poses | TArray<FTryllVisemePose> |
Editor only | The pose table. Read at BeginPlay. |
Events — Tryll|Events (on UTryllVoiceInputComponent)¶
| Event | Payload | Fires when |
|---|---|---|
| On Transcript Update | Update (FTryllTranscriptUpdate) |
Each transcript update — partial and final. Read Update.Kind (SpeechStart / Partial / SegmentFinal / UtteranceFinal) and Update.Text. |
| On Error | ErrorMessage (FString) |
Any voice error, message only. |
| On Error Detailed | Error (FTryllError) |
Fires with On Error, carrying the code — e.g. MicrophoneUnavailable (4108) when there is no usable microphone, VoiceInputStarting (4109) while voice input is being (re)created. |
| On Voice Input Created | — | The STT handle has been created. |
See Use Voice Input and
UTryllVoiceInputComponent.
Events — Tryll|Events (on UTryllSubsystem)¶
Bind these once per connection, typically in Event BeginPlay. The tool-call,
intent, pause, and node-event rows are the all agents surface. Prefer the
matching events on UTryllAgentComponent when you only care about one NPC.
| Event | Payload | Fires when |
|---|---|---|
| On Connection Changed | bConnected (bool) |
Transport state flipped. true means the session is ready to configure. |
| On Error | ErrorMessage (FString) |
Subsystem-level error (transport, protocol, model). |
| On Agent Destroyed | AgentId (int64) |
A server-side agent was destroyed (by DestroyAgent or session tear-down). |
| On Create Session Complete | bSuccess (bool) |
Response to CreateSession. |
| On List Models Complete | Models (TArray<FTryllModelInfo>), bSuccess (bool) |
Response to the C++ RequestListModels. |
| On Set Session Locale Complete | Locale (FString), bSuccess (bool) |
Response to Set Session Locale. |
| On Get Memory Consumption Complete | Snapshot (FTryllMemorySnapshot), bSuccess (bool) |
Response to RequestGetMemoryConsumption. Session-scoped, server-wide; never AgentBusy. Bind after a C++ call — the request itself is not a Blueprint node. See Inspect Server Memory. |
| On Download Progress | ModelName (FString), BytesDownloaded (int64), TotalBytes (int64), Percent (float) |
Periodic download update. Percent is 0–100. TotalBytes may be 0 when the server does not know the content length — fall back to Percent. |
| On Download Complete | ModelName (FString), bSuccess (bool), ErrorMessage (FString) |
Download finished or failed. ErrorMessage is empty on success. |
| On Load Model Complete | ModelName (FString), bSuccess (bool) |
Response to RequestLoadModel. |
| On Unload Model Complete | ModelName (FString), bSuccess (bool) |
Response to RequestUnloadModel. |
| On Tool Call | AgentId (int64), ToolName (FString), ArgumentsJson (FString) |
All-agents form of the component event. A ToolCall node with a non-RouteOnly disposition detected a call. See Define and Handle Tool Calls. |
| On Intent Classified | AgentId (int64), Classification (FTryllIntentClassification) |
All-agents form. Embedding ClassifyIntent with notify_client OnFound/Always. The agent id is this pin; the struct does not repeat it. See Build an Intent-Driven NPC. |
| On Intent LLM Classified | AgentId (int64), Classification (FTryllIntentLlmClassification) |
All-agents form. ClassifyIntentLLM with notify_client OnFound/Always. The agent id is this pin. |
| On Paused | AgentId (int64), NodeName (FString), PendingExit (FString) |
All-agents form. The executor paused a turn between nodes (Pause node, or a ToolCall with a pausing disposition). See How to pause and resume a turn. |
| On Tool Call With Id | AgentId (int64), CallId (FString), ToolName (FString), ArgumentsJson (FString) |
All-agents form of the component event. Use CallId when resuming with a result. |
| On Tool Call Detailed | AgentId (int64), Call (FTryllToolCall) |
All-agents form. Fired in addition to On Tool Call / On Tool Call With Id; binding it does not suppress On Node Event. |
| On Node Event | AgentId (int64), NodeName (FString), EventType (FString), KvPairs (TArray<FTryllNodeEventKeyValue>) |
All-agents generic fallback when no typed listener is bound on the subsystem. An agent-scope listener does not suppress this, and the reverse. |
| On Create String Storage Complete | Name (FString), bSuccess (bool) |
Response to CreateStringStorage. |
| On Destroy String Storage Complete | Name (FString), bSuccess (bool) |
Response to DestroyStringStorage. |
| On Create Embedded String Storage Complete | Name (FString), RecordCount (int32), bSuccess (bool) |
Response to CreateEmbeddedStringStorage. |
| On Destroy Embedded String Storage Complete | Name (FString), bSuccess (bool) |
Response to DestroyEmbeddedStringStorage. |
String-storage requests are C++-only
The four completion events above are Blueprint-assignable, but the
matching request calls (RequestCreateStringStorage and its
…FromFile / …Keyed variants, RequestCreateEmbeddedStringStorage
and its …FromStrings variant, and the two destroy calls) take C++
callbacks and are not exposed as Blueprint nodes — initiate them
from C++. For most graphs you don't need them at all: pin a storage by
relative path in the node's params and the server loads it at
agent-creation time. See String Storage and
Embedded String Storage.
Assets and structs (editable in Details panel)¶
These are Blueprint-visible types, not callable nodes. You configure
them on the UTryllAgentComponent's Details panel or inside a
UTryllWorkflowAsset.
| Type | Kind | Purpose |
|---|---|---|
UTryllWorkflowAsset |
UDataAsset |
Content-Browser asset wrapping an FTryllGraphDescription. Assign one to the component to avoid authoring the graph in C++. |
UTryllSpeakerComponent |
UActorComponent |
Plays streaming TTS audio from an agent. Add to the same actor as UTryllAgentComponent; found at CreateAgent, or added then if the graph speaks and the actor has none. See Add Voice Output to an Agent. |
UTryllLipSyncComponent |
UActorComponent |
Tryll Lip Sync: plays the viseme track on ARKit morph targets. Add next to a UTryllSpeakerComponent. See Add Lip Sync to a Character. |
UTryllVoiceInputComponent |
UActorComponent |
Captures the microphone and streams STT. Add to an actor; routes the final transcript to a sibling UTryllAgentComponent. Requires an STT model on disk (Model Manager). |
UTryllVoiceProfile |
UPrimaryDataAsset |
An agent's voice. Content Browser Tryll ▸ Voice Profile; assign it to UTryllAgentComponent::VoiceProfile. Its Details panel shows only the fields the chosen model can use (from the model catalog) and lists what the server would reject. |
FTryllVoiceProfileData |
USTRUCT(BlueprintType) |
The profile's fields (Voice on the asset): TtsModelName (required), SpeakerId, ReferenceVoice, VoiceDescription, Speed, Lang, Expressiveness, Prepare, bEmitVisemes (turns on the lip-sync track), DeliveryModes, DefaultDeliveryMode. |
FTryllDeliveryMode |
USTRUCT(BlueprintType) |
One named delivery: Name, ReferenceVoice, Instruction, Expressiveness (-1 = the profile's), SpeedScale. |
UTryllGenerateAndSpeakParams, UTryllSpeakParams |
UObject (EditInlineNew) |
Node params for Generate And Speak and Speak. They hold no voice settings (protocol v27): only text routing and sentence chunking. The voice is the agent's Voice Profile. |
ETryllViseme, FTryllVisemeEvent |
UENUM / USTRUCT(BlueprintType) |
The 15 visemes, and one track event: SampleOffset (int64), Viseme, Weight. |
FTryllVisemePose, FTryllVisemeChannelWeight, FTryllVisemeSettings |
USTRUCT(BlueprintType) |
A viseme's ARKit channel weights, and the lip-sync tuning settings. |
FTryllGraphDescription |
USTRUCT(BlueprintType) |
The full graph: Nodes, StartNode, and DefaultModelName. Exits are fields on each node's params; there is no separate routes list. |
FTryllVariableDecl |
USTRUCT(BlueprintType) |
Declares one Agent Variable: name, type, initial value. Editable in the UTryllWorkflowAsset's Variables array. |
FTryllVariableOverride |
USTRUCT(BlueprintType) |
Per-instance override of a declared variable's initial value, editable in UTryllAgentComponent::VariableOverrides (Material-Instance pattern). |
FTryllModelInfo |
USTRUCT(BlueprintType) |
Row returned by RequestListModels / OnListModelsComplete; fields mirror Model Management. |
FTryllMemorySnapshot |
USTRUCT(BlueprintType) |
Server-wide RAM/VRAM snapshot from RequestGetMemoryConsumption. |
ETryllMemoryTier |
UENUM(BlueprintType) |
Confidence of a memory figure: Measured, Derived, Estimated. |
FTryllIntentClassification |
USTRUCT(BlueprintType) |
Embedding ClassifyIntent payload: node name, intent, record id, record index, distance, not-found reason. No AgentId — the session event pin or the component scope carries it. |
FTryllIntentLlmClassification |
USTRUCT(BlueprintType) |
ClassifyIntentLLM payload: node name, intent, top and second probability, label probabilities, not-found reason. No AgentId. |
FTryllNodeEventKeyValue |
USTRUCT(BlueprintType) |
One key/value pair on On Node Event. |
FTryllError |
USTRUCT(BlueprintType) |
Error envelope used in some event payloads. Code matches ETryllErrorCode. |
ETryllInferenceEngine |
UENUM(BlueprintType) |
Names the catalog engines (LlamaCpp, SherpaOnnx, OnnxRuntime, …). Each model's catalog entry names its engine. CreateSession does not take this enum. |
ETryllNodeType |
UENUM(BlueprintType) |
Node type selector used inside FTryllGraphDescription. |
ETryllTurnStatus |
UENUM(BlueprintType) |
Turn outcome carried by OnTurnComplete (Success, Error, Cancelled, PauseTimedOut). PauseTimedOut means a pause outlived its timeout and the pausing node had no timeout exit. |
ETryllCancelMode |
UENUM(BlueprintType) |
Cancel mode for Cancel: StopAndKeep (chat Stop) or StopAndDiscard (rollback the interaction). |
ETryllKvCacheInitialization |
UENUM(BlueprintType) |
Agent-creation choice: AllocateOnly, Prefill, or DeferAllocation. |
FTryllKvCacheStatus |
USTRUCT(BlueprintType) |
Aggregate KV-cache applicability, residency, reusable-prefix status, eligible-node count, and optional diagnostics. |
ETryllModelStatus |
UENUM(BlueprintType) |
Model lifecycle state returned inside FTryllModelInfo. |
ETryllErrorCode |
UENUM(BlueprintType) |
Mirrors the server error codes. |
Project Settings — Tryll Client¶
Set under Project Settings → Plugins → Tryll Client (UTryllRuntimeSettings,
persisted to Config/DefaultGame.ini). These drive the auto-launch /
auto-connect / auto-create-session flow, so the components above create
themselves with no code.
| Setting | Default | Purpose |
|---|---|---|
bAutoLaunchServer |
true |
Spawn the bundled server on startup. |
LlamaCppBackend |
Vulkan |
llama.cpp GPU plugin (Vulkan / Auto). Passed as --llama-backend. Auto prefers CUDA on NVIDIA and ships CUDA DLLs; Vulkan skips them. Ignored when auto-launch is off. |
bAutoConnect |
true |
Connect once the subsystem initializes. |
bAutoCreateSession |
true |
Create the session from registered models once connected. |
GameName |
empty | Telemetry grouping slug. |
StorageDataFolder |
TryllStorage |
Project-relative root outside Content/; launcher passes --storage-root. |
ConnectMaxAttempts / ConnectRetryDelaySeconds |
20 / 1.0 |
Connect-retry policy. |
Full per-field detail: UTryllRuntimeSettings.
Typical Blueprint flows¶
First inference — bind OnConnectionChanged on the subsystem,
call CreateSession on bConnected=true, wait for
OnCreateSessionComplete, then call CreateAgent on the
component. See First Inference in Unreal.
Streaming a reply — bind OnAnswerText on the agent component,
append Text to your UI widget on each event, show the "done" state
on OnTurnComplete. See Stream Answers to UI.
Handling a tool call — bind OnToolCall on the agent component, parse
ArgumentsJson, run your game-side logic. The subsystem event is the
all-agents form. See
Define and Handle Tool Calls.
Speaking NPC — add UTryllSpeakerComponent to the actor alongside
UTryllAgentComponent. Download a TTS model in the Model Manager.
Use a UTryllWorkflowAsset with a GenerateAndSpeak (or Speak) node,
create a Voice Profile asset that names the TTS model, and assign it to the
agent component's Voice Profile. Call Set Delivery Mode to make the
character sound angry or calm. For mouth movement, add Tryll Lip Sync and
turn on Emit Visemes in the voice profile (see
Add Lip Sync to a Character).
Bind On Tts Audio Started / On Tts Audio Finished on the speaker
component for other reactions, and call Stop Playback on it to cut the
NPC off. See
Add Voice Output to an Agent.
Prepare an NPC during loading — set the component's KV Cache
Initialization to Prefill, or call Prefill KV Cache while the agent is
idle. Evict KV Cache later to release only LLM context memory; the next
Send Message restores it automatically. See Manage an Agent's KV
Cache.
Save and load — ExportDialog / ImportDialog are C++ only (the snapshot
is not Blueprint-exposed). Store the canonical TDLG bytes in your own save
file next to variables and game state. See
Save and Load Agent State.
Related¶
- Unreal C++ API Reference — every header and class summarised.
- Component class pages: UTryllAgentComponent, UTryllSpeakerComponent, UTryllVoiceInputComponent, UTryllWorkflowAsset, UTryllRuntimeSettings.
- Agent Parameters
- Workflow Nodes
- Model Management
- Error Codes
- First Inference in Unreal