
Simulations require the Team or Scale plan.
Core concepts
Dataset
A collection of test cases. Each case has an input (the user message or prompt variables) and optionally an expected output or reference answer.
Scenario
A test configuration: which dataset to use, which target to test (a prompt/model, an HTTP endpoint, or a multi-turn conversation), and which evaluators to run.
Simulation run
One execution of a scenario — the platform runs each dataset item through your LLM configuration and collects outputs and scores.
Batch run
Multiple simulation runs executed in parallel, typically used to compare different prompt versions side by side.
Preparing a dataset
Before running simulations, you need a dataset of test cases. Simulations use the same datasets as Datasets — there’s no separate dataset-creation flow on the Simulations page, just a picker that lists your project’s existing datasets. Build one from real traces, upload a CSV, or add rows manually as described on the Datasets page, then select it when creating a scenario or starting a run below.Creating a scenario
1
Click New scenario
On the Simulations page, click New scenario.
2
Choose a default dataset and evaluator (optional)
Both can be picked here as defaults, or chosen per-run when you start a run.
3
Choose a target type
A scenario’s target is what actually receives each test case’s input. Pick one:
- Prompt Target — Zespan calls a model directly. Pick a project LLM connection/provider/model, then write a prompt template using
{{input}}for the test case’s input. - HTTP Target — Zespan sends each test case to a URL you control instead of calling a model itself. Configure the URL, HTTP method, and a JSON request body template (also using
{{input}}). Use this to simulate against your own deployed agent/service rather than a bare prompt. - Conversation (multi-turn) — Zespan runs a simulated multi-turn conversation: a “simulated user” model drives the conversation against an inner prompt or HTTP target for up to 20 turns, stopping on max turns, a keyword match, or an evaluator verdict. Use this for testing agents that need several exchanges to complete a task, not just a single-shot response. The inner target’s prompt template is applied to every turn, with
{{input}}standing in for that turn’s message — the initial test-case input on the first turn, and the simulated user’s reply on each turn after. Leave it as{{input}}to send each turn through untouched. The run’s Conversation Transcript always shows what the simulated user actually said, not the template-wrapped text the target received.
4
Add evaluators
Attach an evaluator to score the outputs — any evaluator defined on the Evaluations page. You can also add lightweight assertions (contains / not-contains / regex match) and a max-latency check directly on the scenario, independent of the evaluator.
5
Save the scenario
Click Save. The scenario is ready to run.
Prompt and conversation targets call an LLM through the project’s own LLM connection (HTTP targets never call an LLM — they call your URL instead). Without a connection configured, starting a run on a prompt or conversation scenario fails with “No LLM connection configured — add one in Settings → LLM Connections.” See LLM Connections.
Persona configuration for conversation scenarios
When a scenario’s target is Conversation (multi-turn), the simulated user’s behavior is driven by a Simulated User Prompt — a system prompt for the model playing your end user. You can write this prompt as free text, or use the structured Persona fields to compose it instead:
All persona fields are optional and independent of each other — set only the ones you care about. If at least one persona field is set, it composes the simulated user’s system prompt; if none are set, the free-text Simulated User Prompt is used as-is. Persona and free-text prompt are not combined — a scenario uses one or the other.
Running a simulation
Click Run now on any scenario to start a simulation run. Zespan:- Iterates over every item in the dataset
- Sends each item’s input to the scenario’s target — a model call, an HTTP request, or a simulated multi-turn conversation, depending on the target type
- Records the response, latency, token count, and cost
- Runs each configured evaluator on the output
- Aggregates results into a run summary
Batch runs — comparing versions
A batch run executes the same dataset against multiple configurations simultaneously, making it easy to compare prompt versions head-to-head.1
Click New batch run
Select two or more scenarios (or one scenario with multiple prompt version variants).
2
Start the batch
Click Run batch. All variants run in parallel.
3
Compare results
When all runs complete, the comparison view shows side-by-side scores, latency, and cost for each variant. Rows with significant differences are highlighted.
Reading run results
Each simulation run’s detail view shows:- Summary cards — average score per evaluator, total cost, average latency
- Per-item table — each dataset item with its output, scores, and a link to the full trace
- Score distribution — histogram of score spread across items
- Failed items — items where the model returned an error or a score below threshold
Plan limits
Simulations are a Team/Scale-only feature — every mutating simulations route (creating or editing a scenario, and starting, retrying, batching, or cancelling a run) requires the Team plan or above server-side. There is no intermediate Pro-tier access.

