> 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

## Subpackages

* **[`nemo_voice_agent.evaluation.scenarios`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/scenarios)**
* **[`nemo_voice_agent.evaluation.tools`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/tools)**

## Submodules

* **[`nemo_voice_agent.evaluation.bridge`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/bridge)**
* **[`nemo_voice_agent.evaluation.db_hash`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/db_hash)**
* **[`nemo_voice_agent.evaluation.db_state_predicates`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/db_state_predicates)**
* **[`nemo_voice_agent.evaluation.initialization_functions`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/initialization_functions)**
* **[`nemo_voice_agent.evaluation.resume`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/resume)**
* **[`nemo_voice_agent.evaluation.runner`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/runner)**
* **[`nemo_voice_agent.evaluation.sync_appliers`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/sync_appliers)**
* **[`nemo_voice_agent.evaluation.utils`](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/utils)**

## Package Contents

### Functions

| Name                                                                    | Description                                                         |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------- |
| [`get_eval_data_root`](#nemo_voice_agent-evaluation-get_eval_data_root) | Resolve the root directory for evaluation fixture data.             |
| [`load_db_artifact`](#nemo_voice_agent-evaluation-load_db_artifact)     | Load a tau2-style DB artifact, transparently handling sharded form. |

### API

```python
nemo_voice_agent.evaluation.get_eval_data_root() -> pathlib.Path
```

Resolve the root directory for evaluation fixture data.

Checks `$EVAL_DATA_ROOT` first; falls back to packaged data under
`nemo_voice_agent/evaluation/data`, then the legacy `&lt;repo&gt;/evaluation/data`
layout.
Lazy (function, not module constant) so env-var changes after import take
effect — useful for tests and for bridge/server processes setting it
differently.

Convention: `db_path` and similar fixture-path values stored in
`shared_state_init` are always **relative** to this root, so bridge and
server can resolve to different absolute roots.

```python
nemo_voice_agent.evaluation.load_db_artifact(
    path: typing.Union[str, pathlib.Path]
) -> typing.Dict[str, typing.Any]
```

Load a tau2-style DB artifact, transparently handling sharded form.

Some upstream `db.json` files exceed file size limits (e.g.,
5 MB per-file cap), so they're sharded into `&lt;name&gt;/&lt;table&gt;.json`
one-file-per-top-level-key. This helper accepts either form:

* `&lt;path&gt;.json` file → `json.loads(read_text())`
* `&lt;path&gt;/` directory → `&#123;stem: json.loads(read_text())&#125;` for
  every `*.json` file under it (top-level only; no recursion).

The two layouts are byte-equivalent at the in-memory `dict` level
so callers (gold replay, bot-side state, predicates) don't care
which on-disk shape a given domain uses.

The caller passes a path WITHOUT the `.json` suffix (the artifact
name). For backward compatibility with callers that still include
`.json`, the suffix is stripped before probing.

Raises `FileNotFoundError` if neither form exists.