How LLM Calls Work
When Reliant calls an LLM, it sends a structured request:- Text response (assistant message)
- Tool calls (requests to use tools)
- Stop reason (why the turn ended:
tool_use,incomplete,truncated,interrupted,refused,error,done— see CEL Expressions)
Tool Call Requirements
A model can only use the tools it was offered on that turn. Acall_llm node says what those are in tools_config:
Tool Matching Rules
- Tool calls reference tools by name
- The name must exactly match a tool offered on that turn
- Tool inputs must match the tool’s schema
- A call to a tool that was not offered is refused, never executed: the model gets an error result saying so (“Tool ‘write’ was not offered on this turn”) and can carry on
Best Practice
preloaded_tools is a starting bundle, not a boundary: list what the agent needs in hand, and let loadable_tools decide what it may reach for with load_tool. Leaving loadable_tools out means everything is loadable; an empty list means exactly what was preloaded and nothing more.
tag:coding:default, tag:shell, tag:web), globs (mcp__github__*) and exclusions (!tag:shell). The Tools reference lists every tool and its tags.
System Messages
System prompts set the LLM’s behavior and context. They’re sent first in every request.Where System Prompts Come From
- Node-level
system_prompton acall_llmnode - The workflow’s
system_promptinput, which a workflow passes to itscall_llmnode. The built-in agent’s is empty by default, which means Reliant’s own default prompt - A preset that sets
system_prompt, and a node’sargs, which override the preset’s value
System Prompt Best Practices
- Be specific about the task
- Define output format expectations
- Include examples if needed
- Keep it focused (long prompts waste tokens)
Context and Tokens
Context Window
Each model has a maximum context window (total tokens for input + output). The Models reference lists every model Reliant knows with its context window, generated from the same registry Reliant selects models from.Token Counting
Reliant tracks token usage per thread. When context grows large:- Compaction summarizes older messages once the thread passes the model’s compaction threshold (
compaction_thresholdon the Call LLM node’s output). The built-in agent does this on its own, with the loop’s own model - Filtering reduces tool result verbosity, when a workflow adds a filtering step (see Multi-Agent Patterns)
Caching
Providers that support prompt caching reuse a repeated prefix (the system prompt, tools and earlier messages) at a lower price. Reliant uses it automatically wherever the provider offers it; the Models reference marks those models with 💾.Provider Differences
Reliant drives every provider through the same request and output shape, so a workflow does not change when its model does: tool calls arrive astool_calls, and every provider’s way of ending a turn is mapped onto the same stop_reason values. What does differ between models is listed per model in the Models reference: context window, attachments, prompt caching, and whether and how hard it can think (thinking_level is clamped to the levels a model supports). Select models by tag rather than by ID, as the built-in workflows and presets do, so a workflow keeps working with whichever providers a user has connected.
Common Pitfalls
1. Tool Call Without Matching Tool
2. Context Overflow
3. Infinite Loops
4. Empty Tool Calls Array
5. Deciding Whether the Model Is Done
Response Tools
A response tool asks the model for structured output: a tool only the model can call, whose input is the answer you described with a JSON Schema.response_data:
has(nodes.<id>.response_data.choice), or use builtin://structured-agent, which keeps reminding the model until it answers through the tool.
Use for:
- Routing decisions
- Classification tasks
- Structured data extraction
Debugging LLM Issues
Look at the Run
Open the run in Workflows → Runs. Its page shows the transcript and how the run was launched, and Diagram shows the workflow’s steps as they ran. The context gauge in the chat header shows how much of the model’s window the thread is using. From a terminal,reliant workflow status <execution-id> prints a snapshot of a run and reliant workflow follow <execution-id> streams its events as they happen.
Common Fixes
See also: CEL Expressions