> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/labs-voice-agent/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/labs-voice-agent/_mcp/server.

# nemo_voice_agent.evaluation.scenarios.data.tau2_airline.base

Tau2-airline scenario base + seed scenarios.

`Tau2AirlineBaseScenario` glues together:

* `Tau2BaseScenario` (cross-domain machinery: voice-task index, `_gold_replay`,
  Persona/Task stubs, structured user side, `policy.md` loader)
* `TAU2_AIRLINE_TOOL_NAME_TO_CLASS` (the 14 ported tools)

Each scenario subclass only needs to set `tau2_id` (e.g. `"0"`). Everything
else (current\_date, tool map, db, policy, expected\_scenario\_db,
reference\_answer, user\_persona / user\_task / user\_actions) derives from the
upstream data files via cached properties.

Hand-authored seed scenarios live at the bottom of this file. Auto-scaffolded
scenarios land in `group_Nx.py` siblings via the scaffold
generator at `scripts/prepare_tau2_data/generate_airline_scaffolds.py`.

## Module Contents

### Classes

| Name                                                                                                               | Description                                                                    |
| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| [`Tau2AirlineBaseScenario`](#nemo_voice_agent-evaluation-scenarios-data-tau2_airline-base-Tau2AirlineBaseScenario) | Base class for scenarios ported from tau2-bench/airline (voice-user-sim-v1.0). |

### API

```python
class nemo_voice_agent.evaluation.scenarios.data.tau2_airline.base.Tau2AirlineBaseScenario()
```

**Bases:** [Tau2BaseScenario](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/scenarios/data/tau2_common#nemo_voice_agent-evaluation-scenarios-data-tau2_common-Tau2BaseScenario)

Base class for scenarios ported from tau2-bench/airline (voice-user-sim-v1.0).

Subclasses must set `tau2_id` (the key from `tasks.json`). For example::

@register\_eval\_scenario
class Tau2Airline0(Tau2AirlineBaseScenario):
name = "tau2\_airline\_\_0"
tau2\_id = "0"

Everything else (current\_date, tool registry, expected DB, reference action
list, user persona/task) derives from the upstream files via
`Tau2BaseScenario` machinery.

**`agent_resources`**

Full tau2\_airline tool surface (all 14 ported tools) + per-scenario info.

Tool keys are the **Tool class names** (matching the `@register_schema_tool_for_eval`
registry keys); each maps to an empty kwargs dict because tau2 tools take only
`shared_state` which the bot server injects automatically. The scenario DB
flows in via `setup_shared_state` (seeded with a deep copy of `db.json`).

Note: this OVERRIDES `Tau2BaseScenario.agent_resources` (which returns an
empty stub). The stub exists for Scenario-contract introspection; the live
run needs the populated dict to actually register tools.

---

**`domain`**

---

**`has_user_state`**

---

**`success_signals`**

---

```python
nemo_voice_agent.evaluation.scenarios.data.tau2_airline.base.Tau2AirlineBaseScenario._build_tool_map(
    state: dict
) -> typing.Dict[str, typing.Any]
```

Instantiate one of each ported tool, bound to the given `state`.

Used by `Tau2BaseScenario._gold_replay` to dispatch reference actions.
For live runs the agent bot constructs its own tool instances via the
usual `register_schema_tools_to_llm` path with `shared_state=state`.