> 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.tools.tau2_retail_tools

Tau2-retail tool ports.

Same architecture as `tau2_airline_tools.py`: dict-form DB in `self.state["db"]`,
`_Tau2InvokeMixin` for sync/async dual-routing, `WriteScenarioTool` subclass
records each mutation into `self.state["actions"]`.

## Module Contents

### Classes

| Name                                                                                                                      | Description                                                            |
| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| [`CalculateTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-CalculateTool)                                     | -                                                                      |
| [`CancelPendingOrderTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-CancelPendingOrderTool)                   | -                                                                      |
| [`ExchangeDeliveredOrderItemsTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-ExchangeDeliveredOrderItemsTool) | -                                                                      |
| [`FindUserIdByEmailTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-FindUserIdByEmailTool)                     | -                                                                      |
| [`FindUserIdByNameZipTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-FindUserIdByNameZipTool)                 | -                                                                      |
| [`GetItemDetailsTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-GetItemDetailsTool)                           | -                                                                      |
| [`GetOrderDetailsTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-GetOrderDetailsTool)                         | -                                                                      |
| [`GetProductDetailsTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-GetProductDetailsTool)                     | -                                                                      |
| [`GetUserDetailsTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-GetUserDetailsTool)                           | -                                                                      |
| [`ListAllProductTypesTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-ListAllProductTypesTool)                 | -                                                                      |
| [`ModifyPendingOrderAddressTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-ModifyPendingOrderAddressTool)     | -                                                                      |
| [`ModifyPendingOrderItemsTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-ModifyPendingOrderItemsTool)         | -                                                                      |
| [`ModifyPendingOrderPaymentTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-ModifyPendingOrderPaymentTool)     | -                                                                      |
| [`ModifyUserAddressTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-ModifyUserAddressTool)                     | -                                                                      |
| [`ReturnDeliveredOrderItemsTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-ReturnDeliveredOrderItemsTool)     | -                                                                      |
| [`TransferToHumanAgentsTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-TransferToHumanAgentsTool)             | -                                                                      |
| [`_Tau2InvokeMixin`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2InvokeMixin)                               | Provides sync `invoke(**kwargs)` + async `_execute(**kwargs)` routing. |
| [`_Tau2ReadTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)                                     | Base for retail read-only tools.                                       |
| [`_Tau2WriteTool`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)                                   | Base for retail write tools (includes generic action-recording tools). |

### Functions

| Name                                                                                                        | Description                                                                     |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| [`_db_not_initialized`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_db_not_initialized)           | -                                                                               |
| [`_get_item_dict`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_get_item_dict)                     | Find a variant by item\_id across all products (mirrors tau2's \_get\_item).    |
| [`_get_order_dict`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_get_order_dict)                   | -                                                                               |
| [`_get_payment_method_dict`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_get_payment_method_dict) | -                                                                               |
| [`_get_product_dict`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_get_product_dict)               | -                                                                               |
| [`_get_user_dict`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_get_user_dict)                     | -                                                                               |
| [`_get_variant_dict`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_get_variant_dict)               | -                                                                               |
| [`_is_pending_order`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_is_pending_order)               | Mirror tau2: any status containing 'pending' counts as pending for some checks. |
| [`_round2`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_round2)                                   | -                                                                               |

### Data

[`TAU2_RETAIL_ACTION_TYPES`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-TAU2_RETAIL_ACTION_TYPES)

[`TAU2_RETAIL_TOOL_CLASSES`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-TAU2_RETAIL_TOOL_CLASSES)

[`TAU2_RETAIL_TOOL_NAME_TO_CLASS`](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-TAU2_RETAIL_TOOL_NAME_TO_CLASS)

### API

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.CalculateTool()
```

**Bases:** [\_Tau2ReadTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.CalculateTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.CalculateParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.CancelPendingOrderTool()
```

**Bases:** [\_Tau2WriteTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.CancelPendingOrderTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.CancelPendingOrderParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.ExchangeDeliveredOrderItemsTool()
```

**Bases:** [\_Tau2WriteTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.ExchangeDeliveredOrderItemsTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.ExchangeDeliveredOrderItemsParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.FindUserIdByEmailTool()
```

**Bases:** [\_Tau2ReadTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.FindUserIdByEmailTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.FindUserIdByEmailParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.FindUserIdByNameZipTool()
```

**Bases:** [\_Tau2ReadTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.FindUserIdByNameZipTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.FindUserIdByNameZipParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.GetItemDetailsTool()
```

**Bases:** [\_Tau2ReadTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.GetItemDetailsTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.GetItemDetailsParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.GetOrderDetailsTool()
```

**Bases:** [\_Tau2ReadTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.GetOrderDetailsTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.GetOrderDetailsParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.GetProductDetailsTool()
```

**Bases:** [\_Tau2ReadTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.GetProductDetailsTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.GetProductDetailsParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.GetUserDetailsTool()
```

**Bases:** [\_Tau2ReadTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.GetUserDetailsTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.GetUserDetailsParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.ListAllProductTypesTool()
```

**Bases:** [\_Tau2ReadTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2ReadTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.ListAllProductTypesTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.ListAllProductTypesParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.ModifyPendingOrderAddressTool()
```

**Bases:** [\_Tau2WriteTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.ModifyPendingOrderAddressTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.ModifyPendingOrderAddressParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.ModifyPendingOrderItemsTool()
```

**Bases:** [\_Tau2WriteTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.ModifyPendingOrderItemsTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.ModifyPendingOrderItemsParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.ModifyPendingOrderPaymentTool()
```

**Bases:** [\_Tau2WriteTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.ModifyPendingOrderPaymentTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.ModifyPendingOrderPaymentParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.ModifyUserAddressTool()
```

**Bases:** [\_Tau2WriteTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.ModifyUserAddressTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.ModifyUserAddressParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.ReturnDeliveredOrderItemsTool()
```

**Bases:** [\_Tau2WriteTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.ReturnDeliveredOrderItemsTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.ReturnDeliveredOrderItemsParams
) -> dict
```

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools.TransferToHumanAgentsTool()
```

**Bases:** [\_Tau2WriteTool](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2WriteTool)

**`DESCRIPTION`**

---

**`properties`**

---

**`required_properties`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.TransferToHumanAgentsTool._after_result(
    params: pipecat.services.llm_service.FunctionCallParams
) -> None
```

async

Emit `&lt;exit&gt;` only after the tool result has been delivered.

Ordering matters: pipecat must commit the tool-call record before the
bridge tears down the session on `&lt;exit&gt;`.

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.TransferToHumanAgentsTool._do_work(
    p: nemo_voice_agent.evaluation.tools.tau2_retail_params.TransferToHumanAgentsParams
) -> dict
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.TransferToHumanAgentsTool._execute(
    kwargs = {}
) -> dict
```

async

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools._Tau2InvokeMixin()
```

Provides sync `invoke(**kwargs)` + async `_execute(**kwargs)` routing.

Subclasses set `PARAMS_MODEL = MyParams` and implement `_do_work(p)`.

**`PARAMS_MODEL`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._Tau2InvokeMixin._do_work(
    p
) -> dict
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._Tau2InvokeMixin._execute(
    kwargs = {}
) -> dict
```

async

Async entry — used by pipecat at live LLM call time.

Pure: returns the result; `StandardSchemaTool.__call__` owns delivery
and applies the empty-result normalization centrally.

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._Tau2InvokeMixin.invoke(
    kwargs = {}
) -> dict
```

Synchronous entry — used by `Tau2BaseScenario._gold_replay`.

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools._Tau2ReadTool(
    shared_state: typing.Optional[dict] = None,
    description: typing.Optional[str] = None
)
```

**Bases:** [\_Tau2InvokeMixin](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2InvokeMixin), [StandardSchemaTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/utils/tool_calling/base#nemo_voice_agent-utils-tool_calling-base-StandardSchemaTool)

Base for retail read-only tools.

**`DESCRIPTION`**

---

**`state`**

---

```python
class nemo_voice_agent.evaluation.tools.tau2_retail_tools._Tau2WriteTool(
    shared_state: typing.Optional[dict] = None,
    description: typing.Optional[str] = None
)
```

**Bases:** [\_Tau2InvokeMixin](#nemo_voice_agent-evaluation-tools-tau2_retail_tools-_Tau2InvokeMixin), [WriteScenarioTool](./_write_tool_base.mdx#nemo_voice_agent-evaluation-tools-_write_tool_base-WriteScenarioTool)

Base for retail write tools (includes generic action-recording tools).

**`DESCRIPTION`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._db_not_initialized() -> dict
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._get_item_dict(
    db: dict,
    item_id: str
) -> typing.Optional[dict]
```

Find a variant by item\_id across all products (mirrors tau2's \_get\_item).

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._get_order_dict(
    db: dict,
    order_id: str
) -> typing.Optional[dict]
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._get_payment_method_dict(
    user: dict,
    payment_method_id: str
) -> typing.Optional[dict]
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._get_product_dict(
    db: dict,
    product_id: str
) -> typing.Optional[dict]
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._get_user_dict(
    db: dict,
    user_id: str
) -> typing.Optional[dict]
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._get_variant_dict(
    db: dict,
    product_id: str,
    variant_id: str
) -> typing.Optional[dict]
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._is_pending_order(
    order: dict
) -> bool
```

Mirror tau2: any status containing 'pending' counts as pending for some checks.

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools._round2(
    value: float
) -> float
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.TAU2_RETAIL_ACTION_TYPES: List[str] = ['cancel_pending_order', 'exchange_delivered_order_items', 'modify_pending_order...
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.TAU2_RETAIL_TOOL_CLASSES: List[Type[StandardSchemaTool]] = [FindUserIdByNameZipTool, FindUserIdByEmailTool, GetOrderDetailsTool, GetProduct...
```

```python
nemo_voice_agent.evaluation.tools.tau2_retail_tools.TAU2_RETAIL_TOOL_NAME_TO_CLASS: Dict[str, Type[StandardSchemaTool]] = {'find_user_id_by_name_zip': FindUserIdByNameZipTool, 'find_user_id_by_email': F...
```