# `vllm_mlx.reasoning.harmony_parser`

Reasoning parser for GPT-OSS models using Harmony format.

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

## 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.harmony_parser
    options:
      members:
        - _ANALYSIS_PATTERN
        - _FINAL_PATTERN
        - HarmonyReasoningParser
      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.harmony_parser.HarmonyReasoningParser" markdown="1">
<summary><code>vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser</code> · class</summary>

```python
vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser(tokenizer = None)
```

Reasoning parser for GPT-OSS models using Harmony format.

**Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `tokenizer` | `not annotated` | `no` | `None` | Optional positional or keyword input; defaults to `None`. |

**Returns**

- Constructs: `vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser`

**Exceptions and behavior**

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

[View source #L35-L157](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L35-L157).

</details>

<details class="api-contract" id="contract-vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.__init__" markdown="1">
<summary><code>vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.__init__</code> · method</summary>

```python
vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.__init__(tokenizer = None) -> not annotated
```

Method `HarmonyReasoningParser.__init__` updates `self._current_channel`, `self._in_message`; calls `super().__init__`, `super`.

**Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `tokenizer` | `not annotated` | `no` | `None` | Optional positional or keyword input; defaults to `None`. |

**Returns**

- Type: `not annotated`

**Exceptions and behavior**

Method `HarmonyReasoningParser.__init__` updates `self._current_channel`, `self._in_message`; calls `super().__init__`, `super`.
No direct `raise` statement appears in this definition.

[View source #L49-L52](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L49-L52).

</details>

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

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

Extract reasoning from complete Harmony output.

**Parameters**

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

**Returns**

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

**Exceptions and behavior**

Method `HarmonyReasoningParser.extract_reasoning` calls `_ANALYSIS_PATTERN.findall`, `'\n'.join`, `block.strip`, `_FINAL_PATTERN.search`; returns `(reasoning, content)`.
No direct `raise` statement appears in this definition.

[View source #L54-L78](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L54-L78).

</details>

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

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

Extract reasoning from streaming Harmony output.

**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` | The new text in this streaming chunk. |

**Returns**

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

**Exceptions and behavior**

Method `HarmonyReasoningParser.extract_reasoning_streaming` updates `self._current_channel`, `self._in_message`; calls `current_text.rfind`, `len`, `after.startswith`, `any`; has 3 explicit return paths.
No direct `raise` statement appears in this definition.

[View source #L80-L152](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L80-L152).

</details>

<details class="api-contract" id="contract-vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.reset_state" markdown="1">
<summary><code>vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.reset_state</code> · method</summary>

```python
vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.reset_state() -> not annotated
```

Reset streaming state for a new request.

**Parameters**

This callable has no explicit inputs.

**Returns**

- Type: `not annotated`

**Exceptions and behavior**

Method `HarmonyReasoningParser.reset_state` updates `self._current_channel`, `self._in_message`.
No direct `raise` statement appears in this definition.

[View source #L154-L157](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L154-L157).

</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 |
| --- | --- | --- | --- | --- |
| [`HarmonyReasoningParser`](#contract-vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser) | class | `HarmonyReasoningParser(tokenizer = None)` | Reasoning parser for GPT-OSS models using Harmony format. | [#L35-L157](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L35-L157) |
| [`HarmonyReasoningParser.__init__`](#contract-vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.__init__) | method | `HarmonyReasoningParser.__init__(tokenizer = None) -> not annotated` | Method `HarmonyReasoningParser.__init__` updates `self._current_channel`, `self._in_message`; calls `super().__init__`, `super`. | [#L49-L52](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L49-L52) |
| [`HarmonyReasoningParser.extract_reasoning`](#contract-vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.extract_reasoning) | method | `HarmonyReasoningParser.extract_reasoning(model_output: str) -> tuple[str \| None, str \| None]` | Extract reasoning from complete Harmony output. | [#L54-L78](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L54-L78) |
| [`HarmonyReasoningParser.extract_reasoning_streaming`](#contract-vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.extract_reasoning_streaming) | method | `HarmonyReasoningParser.extract_reasoning_streaming(previous_text: str, current_text: str, delta_text: str) -> DeltaMessage \| None` | Extract reasoning from streaming Harmony output. | [#L80-L152](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L80-L152) |
| [`HarmonyReasoningParser.reset_state`](#contract-vllm_mlx.reasoning.harmony_parser.HarmonyReasoningParser.reset_state) | method | `HarmonyReasoningParser.reset_state() -> not annotated` | Reset streaming state for a new request. | [#L154-L157](https://github.com/waybarrios/vllm-mlx/blob/a69d47912bcb21d8fe04d48f75fa896b620ffcfa/vllm_mlx/reasoning/harmony_parser.py#L154-L157) |
