Skip to main content

Configuring Evaluations

eval/conftest.yml controls which LLM models power the simulation and evaluation steps:
eval/conftest.yml
Configure simulation and evaluation independently. We recommend using gpt-5.1-2025-11-13 for both.

Overriding Evaluation Prompts

There are three built-in prompt templates, each overridable with a custom Jinja2 template: the simulated user prompt (drives the LLM-as-user), the criteria judge prompt (scores your quality criteria), and the metrics judge prompt (computes quality metrics):
eval/conftest.yml
Paths are relative to your project root. If omitted, the built-in templates are used.

Default built-in prompts

Rasa ships three default Jinja2 templates for simulation and evaluation. They are selected automatically when the corresponding *_prompt key is omitted from eval/conftest.yml. Copy one into your project (for example under prompt_templates/) and point eval/conftest.yml at it when you want to customize behavior.
Drives the LLM-as-user during simulation. Injects simulation_context from the scenario YAML and returns a JSON object with the next user message and a done flag.
simulated_user_system_prompt.jinja2

Adding custom metrics

Built-in scale metrics are helpfulness, repair_quality, coherence, and tone. The built-in binary metric is task_completion. These are informational and do not gate the run’s pass/fail verdict. To add your own metrics (for example politeness or language_consistency):
  1. Copy the default metrics judge prompt into your project, for example in prompt_templates/metrics_evaluation.jinja2.
  2. Add a descriptive paragraph for each custom metric in the prompt body, following the same rubric style as the built-in metrics.
  3. Extend the JSON response schema at the bottom of the template so the judge returns your new keys:
  1. Point metrics_judge_prompt in eval/conftest.yml at your customized file.
Custom metrics appear in the Quality Metrics section of each run_N.txt result file alongside the built-in metrics.

MCP Tools

Both tools are registered on the rasa tools run FastMCP server.

validate_scenario

Validates a scenario YAML file before running any simulation. The skill calls this automatically after generating a scenario. You can also invoke it directly to check a file you have written or edited by hand. Checks:
  • YAML syntax and structure
  • All assertion types are valid
  • Slot names referenced in initial_slots, slot_was_set, and slot_was_not_set assertions exist in the domain with compatible types
  • All validation errors are reported together, not one at a time

evaluate_agent

Runs the simulation and evaluation loop for a given scenario. It:
  1. Loads eval/conftest.yml and the scenario YAML
  2. (If initial_slots are set) sends /session_start to bootstrap the session, then injects slots into the fresh sim-<uuid> conversation
  3. Runs an LLM-simulated multi-turn conversation against your running Rasa server
  4. Fetches the tracker and runs deterministic assertions against the full event history
  5. Passes the transcript to the LLM judge, which scores criteria and computes quality metrics
  6. Writes a per-run result file and updates the experiment summary
Use run_count (default: 1, max: 10) to run the same scenario multiple times and account for LLM non-determinism. A scenario that passes 3/3 is a more reliable signal than one that passes 1/1. You can control this in natural language - the agent will set run_count accordingly:

Reading Results

Results are written to eval/results/<experiment_id>/ and preserved across runs:
The experiment ID is a timestamp in YYYY-MM-DD_HH-MM-SS format, generated once per session and shared across all evaluate_agent calls so that multiple scenarios land under the same folder.

Per-run file

Each run_N.txt contains the full evaluation output for one simulated conversation:
Quality Metricsbot_quality is the average of the four built-in scale metrics (helpfulness, repair_quality, coherence, tone). task_completion is a binary pass/fail verdict. Quality metrics are informational: they do not gate the run’s pass/fail result. If a metric outcome must be a hard requirement, express it as a criterion instead.

Summary file

summary.txt contains per-scenario pass/fail counts, run ratios, wall-clock timing, a direct path to each scenario’s result folder, and a “Scenarios requiring attention” section listing any scenarios where not all runs passed:

Inspecting a Simulated Conversation

Every result file includes an Inspector URL. Open it in your browser to step through the conversation turn by turn and inspect slot values and tracker events. Simulated conversations use a sim- prefix on the sender ID (e.g. sim-f3a1b2c4), so they are clearly distinguished from real user conversations.