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

# nemo_gym.responses_converter

Shared Responses API ↔ Chat Completions converter.

This module contains the translation logic between OpenAI's Responses API format
and the Chat Completions API format. It is used by model servers that need to
convert between the two formats (e.g. vllm\_model, inference\_provider).

## Module Contents

### Classes

| Name                                                                               | Description                                                             |
| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [`ResponsesConverter`](#nemo_gym-responses_converter-ResponsesConverter)           | Converts between OpenAI Responses API and Chat Completions API formats. |
| [`ResponsesConverterState`](#nemo_gym-responses_converter-ResponsesConverterState) | -                                                                       |

### Functions

| Name                                                                                                     | Description |
| -------------------------------------------------------------------------------------------------------- | ----------- |
| [`split_responses_input_output_items`](#nemo_gym-responses_converter-split_responses_input_output_items) | -           |

### Data

[`VLLMConverter`](#nemo_gym-responses_converter-VLLMConverter)

[`VLLMConverterResponsesToChatCompletionsState`](#nemo_gym-responses_converter-VLLMConverterResponsesToChatCompletionsState)

### API

```python
class nemo_gym.responses_converter.ResponsesConverter()
```

**Bases:** `BaseModel`

Converts between OpenAI Responses API and Chat Completions API formats.

```python
nemo_gym.responses_converter.ResponsesConverter._extract_reasoning_from_content(
    content: str
) -> typing.Tuple[typing.List[str], str]
```

```python
nemo_gym.responses_converter.ResponsesConverter._format_function_call(
    m: dict,
    state: nemo_gym.responses_converter.ResponsesConverterState
) -> None
```

```python
nemo_gym.responses_converter.ResponsesConverter._format_function_call_output(
    m: dict,
    state: nemo_gym.responses_converter.ResponsesConverterState
) -> None
```

```python
nemo_gym.responses_converter.ResponsesConverter._format_message(
    m: dict,
    state: nemo_gym.responses_converter.ResponsesConverterState
) -> None
```

```python
nemo_gym.responses_converter.ResponsesConverter._format_reasoning(
    m: dict,
    state: nemo_gym.responses_converter.ResponsesConverterState
) -> None
```

Collects text from 'reasoning' messages in responses api and appends it to a buffer.

This is done to group together one (or multiple) reasoning message(s) into a single,
cohesive block, later prepending it to a subsequent assistant message.
See: [https://github.com/NVIDIA-NeMo/Gym/blob/main/docs/how-to-faq.md#faq-openai-responses-vs-chat-completions-api](https://github.com/NVIDIA-NeMo/Gym/blob/main/docs/how-to-faq.md#faq-openai-responses-vs-chat-completions-api) for an example of reasoning in responses api.

```python
nemo_gym.responses_converter.ResponsesConverter._parse_think_tags(
    content: str
) -> typing.Tuple[typing.List[str], str]
```

classmethod

```python
nemo_gym.responses_converter.ResponsesConverter._wrap_reasoning_in_think_tags(
    texts: typing.List[str]
) -> str
```

staticmethod

```python
nemo_gym.responses_converter.ResponsesConverter.chat_completions_messages_to_responses_items(
    messages: typing.List[typing.Dict[str, typing.Any]]
) -> typing.List[nemo_gym.openai_utils.NeMoGymResponseOutputItem]
```

```python
nemo_gym.responses_converter.ResponsesConverter.postprocess_assistant_message_dict(
    message_dict: typing.Dict[str, typing.Any]
) -> typing.List[nemo_gym.openai_utils.NeMoGymResponseOutputItem]
```

```python
nemo_gym.responses_converter.ResponsesConverter.postprocess_chat_response(
    choice: nemo_gym.openai_utils.NeMoGymChoice
) -> typing.List[nemo_gym.openai_utils.NeMoGymResponseOutputItem]
```

```python
nemo_gym.responses_converter.ResponsesConverter.responses_to_chat_completion_create_params(
    responses_create_params: nemo_gym.openai_utils.NeMoGymResponseCreateParamsNonStreaming
) -> nemo_gym.openai_utils.NeMoGymChatCompletionCreateParamsNonStreaming
```

```python
class nemo_gym.responses_converter.ResponsesConverterState()
```

**Bases:** `BaseModel`

```python
nemo_gym.responses_converter.ResponsesConverterState.flush_assistant() -> None
```

```python
nemo_gym.responses_converter.split_responses_input_output_items(
    items: typing.List[nemo_gym.openai_utils.NeMoGymResponseOutputItem]
) -> typing.Tuple[typing.List[nemo_gym.openai_utils.NeMoGymResponseOutputItem], typing.List[nemo_gym.openai_utils.NeMoGymResponseOutputItem]]
```

```python
nemo_gym.responses_converter.VLLMConverter = ResponsesConverter
```

```python
nemo_gym.responses_converter.VLLMConverterResponsesToChatCompletionsState = ResponsesConverterState
```