nemo_gym.responses_converter

View as Markdown

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

NameDescription
ResponsesConverterConverts between OpenAI Responses API and Chat Completions API formats.
ResponsesConverterState-

Functions

NameDescription
_message_content_to_textPlain text of a chat message content (a string, or a list of text parts).
_optional_token_countReturn a provider-reported token count without coercing missing/invalid values to zero.
_token_information_from_mappingReturn validated token metadata when the mapping contains it.
_usage_detailRead one canonical nested token detail, then named provider aliases.
split_responses_input_output_items-

Data

VLLMConverter

VLLMConverterResponsesToChatCompletionsState

_RESPONSE_NON_BOUNDARY_TYPES

_RESPONSE_OUTPUT_BOUNDARY_TYPES

API

class nemo_gym.responses_converter.ResponsesConverter()

Bases: BaseModel

Converts between OpenAI Responses API and Chat Completions API formats.

THINK_TAG_PATTERN
ClassVar = re.compile('<think>(.*?)</think>', re.DOTALL)
return_token_id_information
bool
uses_reasoning_parser
bool = True
nemo_gym.responses_converter.ResponsesConverter._chat_completion_to_responses_tools(
chat_completions_tools: typing.Optional[typing.List[nemo_gym.openai_utils.NeMoGymChatCompletionToolParam]]
) -> typing.List[nemo_gym.openai_utils.NeMoGymFunctionToolParam]
nemo_gym.responses_converter.ResponsesConverter._extract_reasoning_from_content(
content: str
) -> typing.Tuple[typing.List[str], str]
nemo_gym.responses_converter.ResponsesConverter._format_function_call(
m: dict,
state: nemo_gym.responses_converter.ResponsesConverterState
) -> None
nemo_gym.responses_converter.ResponsesConverter._format_function_call_output(
m: dict,
state: nemo_gym.responses_converter.ResponsesConverterState
) -> None
nemo_gym.responses_converter.ResponsesConverter._format_message(
m: dict,
state: nemo_gym.responses_converter.ResponsesConverterState
) -> None
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://docs.nvidia.com/nemo/gym/main/infrastructure/engineering-notes/responses-api-evolution for background on reasoning in the Responses API.

nemo_gym.responses_converter.ResponsesConverter._parse_think_tags(
content: str
) -> typing.Tuple[typing.List[str], str]
classmethod
nemo_gym.responses_converter.ResponsesConverter._wrap_reasoning_in_think_tags(
texts: typing.List[str]
) -> str
staticmethod
nemo_gym.responses_converter.ResponsesConverter.chat_completion_to_response(
responses_create_params: nemo_gym.openai_utils.NeMoGymResponseCreateParamsNonStreaming,
chat_completion: nemo_gym.openai_utils.NeMoGymChatCompletion
) -> nemo_gym.openai_utils.NeMoGymResponse
nemo_gym.responses_converter.ResponsesConverter.chat_completion_to_responses_create_params(
chat_completion_create_params: nemo_gym.openai_utils.NeMoGymChatCompletionCreateParamsNonStreaming
) -> nemo_gym.openai_utils.NeMoGymResponseCreateParamsNonStreaming
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]
nemo_gym.responses_converter.ResponsesConverter.postprocess_assistant_message_dict(
message_dict: typing.Dict[str, typing.Any]
) -> typing.List[nemo_gym.openai_utils.NeMoGymResponseOutputItem]
nemo_gym.responses_converter.ResponsesConverter.postprocess_chat_response(
choice: nemo_gym.openai_utils.NeMoGymChoice
) -> typing.List[nemo_gym.openai_utils.NeMoGymResponseOutputItem]
nemo_gym.responses_converter.ResponsesConverter.responses_to_chat_completion_create_params(
responses_create_params: nemo_gym.openai_utils.NeMoGymResponseCreateParamsNonStreaming
) -> nemo_gym.openai_utils.NeMoGymChatCompletionCreateParamsNonStreaming
class nemo_gym.responses_converter.ResponsesConverterState()

Bases: BaseModel

assistant_item_buffered
bool = False
content_buffer
str = ''
messages
List[NeMoGymChatCompletionMessageParam] = Field(default_factory=list)
return_token_id_information
bool
token_information
Optional[TokenIDLogProbMixin] = None
tool_calls_buffer
List[NeMoGymChatCompletionMessageToolCallParam] = Field(default_factory=list)
nemo_gym.responses_converter.ResponsesConverterState.flush_assistant() -> None
nemo_gym.responses_converter._message_content_to_text(
content: typing.Any
) -> str

Plain text of a chat message content (a string, or a list of text parts).

nemo_gym.responses_converter._optional_token_count(
value: typing.Any
) -> typing.Optional[int]

Return a provider-reported token count without coercing missing/invalid values to zero.

nemo_gym.responses_converter._token_information_from_mapping(
value: typing.Dict[str, typing.Any]
) -> typing.Optional[nemo_gym.openai_utils.TokenIDLogProbMixin]

Return validated token metadata when the mapping contains it.

nemo_gym.responses_converter._usage_detail(
usage: typing.Any,
detail_group: str,
detail_name: str,
top_level_aliases: str = ()
) -> typing.Optional[int]

Read one canonical nested token detail, then named provider aliases.

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]]
nemo_gym.responses_converter.VLLMConverter = ResponsesConverter
nemo_gym.responses_converter.VLLMConverterResponsesToChatCompletionsState = ResponsesConverterState
nemo_gym.responses_converter._RESPONSE_NON_BOUNDARY_TYPES: frozenset[str] = frozenset({'computer_call_output', 'custom_tool_call_output', 'function_call_out...
nemo_gym.responses_converter._RESPONSE_OUTPUT_BOUNDARY_TYPES = frozenset({'code_interpreter_call', 'computer_call', 'custom_tool_call', 'file_s...