> 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.customer_service_tools

## Module Contents

### Classes

| Name                                                                                                         | Description                                                                                             |
| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
| [`CancelSubscriptionTool`](#nemo_voice_agent-evaluation-tools-customer_service_tools-CancelSubscriptionTool) | Cancel an account's subscription: set plan to 'Canceled' and monthly\_rate to '\$0.00'.                 |
| [`ChangePlanTool`](#nemo_voice_agent-evaluation-tools-customer_service_tools-ChangePlanTool)                 | Change an account's subscription plan. Plan-to-rate mapping is injected at construction.                |
| [`CheckOrderStatusTool`](#nemo_voice_agent-evaluation-tools-customer_service_tools-CheckOrderStatusTool)     | Check the status of a customer order. Orders are nested under accounts in shared\_state.                |
| [`LookupAccountTool`](#nemo_voice_agent-evaluation-tools-customer_service_tools-LookupAccountTool)           | Look up a customer account. Account data (including nested orders) lives in shared\_state\["accounts"]. |
| [`ProcessRefundTool`](#nemo_voice_agent-evaluation-tools-customer_service_tools-ProcessRefundTool)           | Issue a refund on a customer account: append a negative charge entry and decrement balance.             |
| [`ResolveTicketTool`](#nemo_voice_agent-evaluation-tools-customer_service_tools-ResolveTicketTool)           | Resolve a customer service ticket. Sends resolution + latest account snapshot to evaluator.             |
| [`StartItemReturnTool`](#nemo_voice_agent-evaluation-tools-customer_service_tools-StartItemReturnTool)       | Initiate a return for a customer order. Sets the order status to 'Return Started'.                      |
| [`UnlockAccountTool`](#nemo_voice_agent-evaluation-tools-customer_service_tools-UnlockAccountTool)           | Unlock a locked account: set account\_status to 'Active' and failed\_login\_attempts to '0'.            |

### Functions

| Name                                                                                       | Description                                                                  |
| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- |
| [`_format_money`](#nemo_voice_agent-evaluation-tools-customer_service_tools-_format_money) | Format a float as a money string, preserving sign: '$1,234.56' or '-$49.99'. |
| [`_parse_money`](#nemo_voice_agent-evaluation-tools-customer_service_tools-_parse_money)   | Parse a money string like '$1,234.56' or '-$49.99' into a float.             |

### Data

[`DEFAULT_RESOLUTION_TYPES`](#nemo_voice_agent-evaluation-tools-customer_service_tools-DEFAULT_RESOLUTION_TYPES)

### API

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

**Bases:** [StandardSchemaTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/utils/tool_calling/base#nemo_voice_agent-utils-tool_calling-base-StandardSchemaTool)

Cancel an account's subscription: set plan to 'Canceled' and monthly\_rate to '\$0.00'.

**`properties`**

---

**`required_properties`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.CancelSubscriptionTool._execute(
    account_id: typing.Optional[str] = None,
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Set the plan to 'Canceled' with a \$0.00 monthly rate, and return the updated account.

```python
class nemo_voice_agent.evaluation.tools.customer_service_tools.ChangePlanTool(
    shared_state: typing.Optional[dict] = None,
    plans: str = '{}',
    description: typing.Optional[str] = None
)
```

**Bases:** [StandardSchemaTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/utils/tool_calling/base#nemo_voice_agent-utils-tool_calling-base-StandardSchemaTool)

Change an account's subscription plan. Plan-to-rate mapping is injected at construction.

**`plans`**

---

**`properties`**

---

**`required_properties`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.ChangePlanTool._execute(
    account_id: typing.Optional[str] = None,
    new_plan: typing.Optional[str] = None,
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Update the account's plan name and monthly rate, and return the updated account.

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

**Bases:** [StandardSchemaTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/utils/tool_calling/base#nemo_voice_agent-utils-tool_calling-base-StandardSchemaTool)

Check the status of a customer order. Orders are nested under accounts in shared\_state.

**`properties`**

---

**`required_properties`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.CheckOrderStatusTool._execute(
    account_id: typing.Optional[str] = None,
    order_id: typing.Optional[str] = None,
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Return the order record for `account_id`/`order_id`, or an error dict if unknown.

```python
class nemo_voice_agent.evaluation.tools.customer_service_tools.LookupAccountTool(
    shared_state: typing.Optional[dict] = None,
    accounts: str = '{}',
    description: typing.Optional[str] = None
)
```

**Bases:** [StandardSchemaTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/utils/tool_calling/base#nemo_voice_agent-utils-tool_calling-base-StandardSchemaTool)

Look up a customer account. Account data (including nested orders) lives in shared\_state\["accounts"].

**`properties`**

---

**`required_properties`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.LookupAccountTool._execute(
    account_id: typing.Optional[str] = None,
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Return the account record for `account_id`, or an error dict if unknown.

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

**Bases:** [StandardSchemaTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/utils/tool_calling/base#nemo_voice_agent-utils-tool_calling-base-StandardSchemaTool)

Issue a refund on a customer account: append a negative charge entry and decrement balance.

**`properties`**

---

**`required_properties`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.ProcessRefundTool._execute(
    account_id: typing.Optional[str] = None,
    amount: typing.Any = None,
    description: typing.Optional[str] = None,
    date: typing.Optional[str] = None,
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Append a negative charge entry, decrement the balance, and return the refund record.

```python
class nemo_voice_agent.evaluation.tools.customer_service_tools.ResolveTicketTool(
    rtvi: typing.Optional[pipecat.processors.frameworks.rtvi.RTVIProcessor] = None,
    shared_state: typing.Optional[dict] = None,
    resolution_types: typing.Optional[typing.List[str]] = None,
    description: typing.Optional[str] = None
)
```

**Bases:** [SendScenarioSummaryTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/evaluation/tools/rtvi_control#nemo_voice_agent-evaluation-tools-rtvi_control-SendScenarioSummaryTool)

Resolve a customer service ticket. Sends resolution + latest account snapshot to evaluator.

**`properties`**

---

**`required_properties`**

---

**`resolution_types`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.ResolveTicketTool._execute(
    account_id: typing.Optional[str] = None,
    issue_summary: typing.Optional[str] = None,
    resolution_type: typing.Optional[str] = None,
    resolution_details: typing.Optional[str] = None,
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Emit the resolution + account snapshot as a scenario summary, then return the ack.

The RTVI summary is pushed from here rather than from `_after_result`
because it has always been emitted *before* the tool result is
delivered; `_after_result` would flip that ordering. (Contrast
`SendExitMessageTool`, whose `&lt;exit&gt;` must trail result delivery.)

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

**Bases:** [StandardSchemaTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/utils/tool_calling/base#nemo_voice_agent-utils-tool_calling-base-StandardSchemaTool)

Initiate a return for a customer order. Sets the order status to 'Return Started'.

**`properties`**

---

**`required_properties`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.StartItemReturnTool._execute(
    account_id: typing.Optional[str] = None,
    order_id: typing.Optional[str] = None,
    reason: typing.Optional[str] = None,
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Set the order status to 'Return Started', record the reason, and return the order.

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

**Bases:** [StandardSchemaTool](/nemo/labs-voice-agent/nemo-voice-agent/nemo_voice_agent/utils/tool_calling/base#nemo_voice_agent-utils-tool_calling-base-StandardSchemaTool)

Unlock a locked account: set account\_status to 'Active' and failed\_login\_attempts to '0'.

**`properties`**

---

**`required_properties`**

---

**`state`**

---

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.UnlockAccountTool._execute(
    account_id: typing.Optional[str] = None,
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Reset the account to 'Active' with zero failed logins, and return the updated account.

```python
nemo_voice_agent.evaluation.tools.customer_service_tools._format_money(
    value: float
) -> str
```

Format a float as a money string, preserving sign: '$1,234.56' or '-$49.99'.

```python
nemo_voice_agent.evaluation.tools.customer_service_tools._parse_money(
    value: str
) -> float
```

Parse a money string like '$1,234.56' or '-$49.99' into a float.

```python
nemo_voice_agent.evaluation.tools.customer_service_tools.DEFAULT_RESOLUTION_TYPES: List[str] = ['refund', 'replacement', 'information', 'escalation', 'account_change']
```