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

## Module Contents

### Classes

| Name                                                                                                 | Description                                                          |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| [`SendExitMessageTool`](#nemo_voice_agent-evaluation-tools-rtvi_control-SendExitMessageTool)         | Send an "Exit" message to indicate that the scenario is finished.    |
| [`SendRTVIMessageTool`](#nemo_voice_agent-evaluation-tools-rtvi_control-SendRTVIMessageTool)         | Send a scenario finished message to the evaluator.                   |
| [`SendScenarioSummaryTool`](#nemo_voice_agent-evaluation-tools-rtvi_control-SendScenarioSummaryTool) | Send a "Scnario Summary" message after the user has no more requests |

### Data

[`EXIT_MESSAGE_END_TAG`](#nemo_voice_agent-evaluation-tools-rtvi_control-EXIT_MESSAGE_END_TAG)

[`EXIT_MESSAGE_START_TAG`](#nemo_voice_agent-evaluation-tools-rtvi_control-EXIT_MESSAGE_START_TAG)

[`FINAL_RESPONSE_END_TAG`](#nemo_voice_agent-evaluation-tools-rtvi_control-FINAL_RESPONSE_END_TAG)

[`FINAL_RESPONSE_START_TAG`](#nemo_voice_agent-evaluation-tools-rtvi_control-FINAL_RESPONSE_START_TAG)

### API

```python
class nemo_voice_agent.evaluation.tools.rtvi_control.SendExitMessageTool(
    rtvi: pipecat.processors.frameworks.rtvi.RTVIProcessor,
    description: typing.Optional[str] = None
)
```

**Bases:** [SendRTVIMessageTool](#nemo_voice_agent-evaluation-tools-rtvi_control-SendRTVIMessageTool)

Send an "Exit" message to indicate that the scenario is finished.

**`properties`**

---

**`required_properties`**

---

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

async

Send the "Exit" message once the function-call result is delivered.

Order matters: ack the function call FIRST so pipecat dispatches
`FunctionCallResultFrame` and the assistant aggregator commits
both the assistant message (with tool\_calls) and the tool reply
before the bridge sees `&lt;exit&gt;`. If `send_exit_message` ran
first, the bridge would race the commit cycle, snapshot the
context mid-flight, and the captured llm\_context.json would be
missing the `EndConversationTool` entry. That ordering is why this
lives in the post-delivery hook rather than in `_execute`.

```python
nemo_voice_agent.evaluation.tools.rtvi_control.SendExitMessageTool._execute(
    kwargs: typing.Any = {}
) -> typing.Any
```

async

Acknowledge the exit request. The "Exit" message itself is emitted from
`_after_result`, i.e. *after* the result has been delivered.

**Parameters:**

**`kwargs`**

Any extra LLM-supplied arguments, ignored (this tool takes none).

---

**Returns:** `Any`

The tool result delivered by `StandardSchemaTool.__call__`.

```python
nemo_voice_agent.evaluation.tools.rtvi_control.SendExitMessageTool.send_exit_message(
    message: str = 'The task is finished.'
) -> None
```

async

Send an "Exit" message.

**Parameters:**

**`message`**

The message to be sent.

---

```python
class nemo_voice_agent.evaluation.tools.rtvi_control.SendRTVIMessageTool(
    description: typing.Optional[str] = None,
    rtvi: typing.Optional[pipecat.processors.frameworks.rtvi.RTVIProcessor] = 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)

Send a scenario finished message to the evaluator.

**`DESCRIPTION`**

---

**`properties`**

Return the properties for the tool.

---

**`required_properties`**

Return the required properties for the tool.

---

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

async

Send a message.

**Parameters:**

**`message`**

The message to be sent.

---

**`kwargs`**

Any extra LLM-supplied arguments, ignored.

---

**Returns:** `Any`

The tool result delivered by `StandardSchemaTool.__call__`.

```python
nemo_voice_agent.evaluation.tools.rtvi_control.SendRTVIMessageTool.send_rtvi_message(
    message: str
) -> None
```

async

Send a message.

**Parameters:**

**`message`**

The message to be sent.

---

```python
class nemo_voice_agent.evaluation.tools.rtvi_control.SendScenarioSummaryTool(
    rtvi: typing.Optional[pipecat.processors.frameworks.rtvi.RTVIProcessor] = None,
    description: typing.Optional[str] = None
)
```

**Bases:** [SendRTVIMessageTool](#nemo_voice_agent-evaluation-tools-rtvi_control-SendRTVIMessageTool)

Send a "Scnario Summary" message after the user has no more requests
and the agent has answered all the user's questions The input message should contain all required information
in the required format.

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

async

Send a "Scnario Summary" message to the client, which
should contain all required information for the evaluation.

**Parameters:**

**`message`**

The summary message to be sent.

---

**`kwargs`**

Any extra LLM-supplied arguments, ignored.

---

**Returns:** `Any`

The tool result delivered by `StandardSchemaTool.__call__`.

```python
nemo_voice_agent.evaluation.tools.rtvi_control.SendScenarioSummaryTool.send_scenario_summary(
    message: str
) -> None
```

async

Send a "Scnario Summary" message.

**Parameters:**

**`message`**

The message to be sent.

---

```python
nemo_voice_agent.evaluation.tools.rtvi_control.EXIT_MESSAGE_END_TAG = '</exit>'
```

```python
nemo_voice_agent.evaluation.tools.rtvi_control.EXIT_MESSAGE_START_TAG = '<exit>'
```

```python
nemo_voice_agent.evaluation.tools.rtvi_control.FINAL_RESPONSE_END_TAG = '</final_response>'
```

```python
nemo_voice_agent.evaluation.tools.rtvi_control.FINAL_RESPONSE_START_TAG = '<final_response>'
```