# `vllm_mlx.reasoning.gpt_oss_parser`

Reasoning parser for GPT-OSS models using channel-based format.

[View the complete module source at #L1-L214](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L1-L214).

## API details

Each callable below includes its exact signature, type annotations, inputs, defaults, return contract, documented exceptions, implementation source, and parsed docstring sections when the source provides them.

::: vllm_mlx.reasoning.gpt_oss_parser
    options:
      members:
        - _STRUCTURAL_TOKENS
        - _CHANNEL_RE
        - _extract_channel
        - GptOssReasoningParser
      filters: []
      show_if_no_docstring: true

## Complete contract reference

Expand any definition for its exact inputs, annotations, defaults, return contract, directly raised exceptions, source-grounded behavior, and immutable line link. This section includes private and nested definitions that ordinary API generators omit.

<details class="api-contract" id="contract-vllm_mlx.reasoning.gpt_oss_parser._extract_channel" markdown="1">
<summary><code>vllm_mlx.reasoning.gpt_oss_parser._extract_channel</code> · function</summary>

```python
vllm_mlx.reasoning.gpt_oss_parser._extract_channel(text: str, channel_name: str) -> str | None
```

Extract content from a named channel.

**Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `text` | `str` | `yes` | `none` | Full model output text. |
| `channel_name` | `str` | `yes` | `none` | Channel name to extract (e.g., "analysis", "final"). |

**Returns**

- Type: `str | None`
- Direct return expressions: `content if content else None`; `None`

**Exceptions and behavior**

Function `_extract_channel` calls `_CHANNEL_RE.finditer`, `m.group`, `m.end`, `_STRUCTURAL_TOKENS.search`; has 2 explicit return paths.
No direct `raise` statement appears in this definition.

[View source #L33-L55](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L33-L55).

</details>

<details class="api-contract" id="contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser" markdown="1">
<summary><code>vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser</code> · class</summary>

```python
vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser()
```

Reasoning parser for GPT-OSS models.

**Parameters**

This callable has no explicit inputs.

**Returns**

- Constructs: `vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser`

**Exceptions and behavior**

Class `GptOssReasoningParser` derives from `ReasoningParser` and declares 5 direct member(s).
No direct `raise` statement appears in this definition.

[View source #L58-L214](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L58-L214).

</details>

<details class="api-contract" id="contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser.extract_reasoning" markdown="1">
<summary><code>vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser.extract_reasoning</code> · method</summary>

```python
vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser.extract_reasoning(model_output: str) -> tuple[str | None, str | None]
```

Extract reasoning and content from complete model output.

**Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `model_output` | `str` | `yes` | `none` | Complete text output from the model. |

**Returns**

- Type: `tuple[str | None, str | None]`
- Direct return expressions: `(None, model_output if model_output else None)`; `(None, model_output)`; `(reasoning, content)`

**Exceptions and behavior**

Method `GptOssReasoningParser.extract_reasoning` calls `_extract_channel`, `content.replace('<|return|>', '').strip`, `content.replace`, `_STRUCTURAL_TOKENS.sub('', content).strip`; has 3 explicit return paths.
No direct `raise` statement appears in this definition.

[View source #L72-L106](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L72-L106).

</details>

<details class="api-contract" id="contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser.extract_reasoning_streaming" markdown="1">
<summary><code>vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser.extract_reasoning_streaming</code> · method</summary>

```python
vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser.extract_reasoning_streaming(previous_text: str, current_text: str, delta_text: str) -> DeltaMessage | None
```

Extract reasoning from streaming delta.

**Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `previous_text` | `str` | `yes` | `none` | Accumulated text before this delta. |
| `current_text` | `str` | `yes` | `none` | Accumulated text including this delta. |
| `delta_text` | `str` | `yes` | `none` | Just the new text in this streaming chunk. |

**Returns**

- Type: `DeltaMessage | None`
- Direct return expressions: `DeltaMessage(reasoning=after_marker)`; `DeltaMessage(content=after_marker)`; `None`; `DeltaMessage(reasoning=cleaned)`; `DeltaMessage(content=cleaned)`

**Exceptions and behavior**

Method `GptOssReasoningParser.extract_reasoning_streaming` calls `self._detect_phase`, `self._extract_content_after_marker_in_delta`, `self._strip_return`, `DeltaMessage`; has 5 explicit return paths.
No direct `raise` statement appears in this definition.

[View source #L108-L161](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L108-L161).

</details>

<details class="api-contract" id="contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._detect_phase" markdown="1">
<summary><code>vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._detect_phase</code> · method</summary>

```python
vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._detect_phase(text: str) -> str
```

Detect current streaming phase from accumulated text.

**Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `text` | `str` | `yes` | `none` | Required positional or keyword input. |

**Returns**

- Type: `str`
- Direct return expressions: `'init'`; `'final'`; `'transition'`; `'analysis'`

**Exceptions and behavior**

Method `GptOssReasoningParser._detect_phase` calls `list`, `_CHANNEL_RE.finditer`, `last.group`, `last.end`; has 4 explicit return paths.
No direct `raise` statement appears in this definition.

[View source #L164-L187](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L164-L187).

</details>

<details class="api-contract" id="contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._extract_content_after_marker_in_delta" markdown="1">
<summary><code>vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._extract_content_after_marker_in_delta</code> · method</summary>

```python
vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._extract_content_after_marker_in_delta(current_text: str, phase: str) -> str | None
```

When phase changes, extract only the content after the phase marker that falls within the current accumulated text's tail.

**Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `current_text` | `str` | `yes` | `none` | Full accumulated text. |
| `phase` | `str` | `yes` | `none` | Current phase ("analysis" or "final"). |

**Returns**

- Type: `str | None`
- Direct return expressions: `current_text[m.end():]`; `None`

**Exceptions and behavior**

Method `GptOssReasoningParser._extract_content_after_marker_in_delta` calls `list`, `_CHANNEL_RE.finditer`, `reversed`, `m.group`; has 2 explicit return paths.
No direct `raise` statement appears in this definition.

[View source #L190-L209](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L190-L209).

</details>

<details class="api-contract" id="contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._strip_return" markdown="1">
<summary><code>vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._strip_return</code> · method</summary>

```python
vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._strip_return(text: str) -> str
```

Strip <|return|> from text.

**Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `text` | `str` | `yes` | `none` | Required positional or keyword input. |

**Returns**

- Type: `str`
- Direct return expressions: `text.replace('<|return|>', '')`

**Exceptions and behavior**

Method `GptOssReasoningParser._strip_return` calls `text.replace`; returns `text.replace('<|return|>', '')`.
No direct `raise` statement appears in this definition.

[View source #L212-L214](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L212-L214).

</details>

## Complete symbol map

This map also includes private definitions and nested helpers. The signature column exposes every explicit input even when an internal helper has no dedicated parameter prose.

| Symbol | Kind | Signature and inputs | What it does | Source |
| --- | --- | --- | --- | --- |
| [`_extract_channel`](#contract-vllm_mlx.reasoning.gpt_oss_parser._extract_channel) | function | `_extract_channel(text: str, channel_name: str) -> str \| None` | Extract content from a named channel. | [#L33-L55](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L33-L55) |
| [`GptOssReasoningParser`](#contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser) | class | `GptOssReasoningParser()` | Reasoning parser for GPT-OSS models. | [#L58-L214](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L58-L214) |
| [`GptOssReasoningParser.extract_reasoning`](#contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser.extract_reasoning) | method | `GptOssReasoningParser.extract_reasoning(model_output: str) -> tuple[str \| None, str \| None]` | Extract reasoning and content from complete model output. | [#L72-L106](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L72-L106) |
| [`GptOssReasoningParser.extract_reasoning_streaming`](#contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser.extract_reasoning_streaming) | method | `GptOssReasoningParser.extract_reasoning_streaming(previous_text: str, current_text: str, delta_text: str) -> DeltaMessage \| None` | Extract reasoning from streaming delta. | [#L108-L161](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L108-L161) |
| [`GptOssReasoningParser._detect_phase`](#contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._detect_phase) | method | `GptOssReasoningParser._detect_phase(text: str) -> str` | Detect current streaming phase from accumulated text. | [#L164-L187](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L164-L187) |
| [`GptOssReasoningParser._extract_content_after_marker_in_delta`](#contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._extract_content_after_marker_in_delta) | method | `GptOssReasoningParser._extract_content_after_marker_in_delta(current_text: str, phase: str) -> str \| None` | When phase changes, extract only the content after the phase marker that falls within the current accumulated text's tail. | [#L190-L209](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L190-L209) |
| [`GptOssReasoningParser._strip_return`](#contract-vllm_mlx.reasoning.gpt_oss_parser.GptOssReasoningParser._strip_return) | method | `GptOssReasoningParser._strip_return(text: str) -> str` | Strip <\|return\|> from text. | [#L212-L214](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/gpt_oss_parser.py#L212-L214) |
