Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 178 additions & 0 deletions conformance/reasoning/fixtures/minimax_m3/REASONING.batch.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

family: minimax_m3
model_label: MiniMax M3
mode: batch
refs:
local: &local_ref 'MiniMax M3 <mm:think> reasoning grammar; local taxonomy: lib/parsers/REASONING_CASES.md'
cases:
REASONING.batch.1.a:
description: Empty input
ref: *local_ref
model_text: ''
expected:
dynamo:
reasoning_text: ''
normal_text: ''
vllm: &vllm_unavailable
unavailable: vLLM Python 0.23.0 in this conformance harness does not include the MiniMax M3 reasoning parser yet.
sglang: &sglang_unavailable
unavailable: SGLang 0.5.12.post1 in this conformance harness does not include the MiniMax M3 reasoning parser yet.
REASONING.batch.1.b:
description: Plain text without reasoning markers
ref: *local_ref
model_text: plain answer
expected:
dynamo:
reasoning_text: ''
normal_text: plain answer
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.2.a:
description: Single MiniMax M3 reasoning block
ref: *local_ref
model_text: <mm:think>thinking</mm:think>
expected:
dynamo:
reasoning_text: thinking
normal_text: ''
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.2.b:
description: Normal prefix before a MiniMax M3 reasoning block
ref: *local_ref
model_text: Before <mm:think>thinking</mm:think>
expected:
dynamo:
reasoning_text: thinking
normal_text: Before
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.2.c:
description: MiniMax M3 reasoning followed by normal answer text
ref: *local_ref
model_text: <mm:think>compute it</mm:think>The answer is 42.
expected:
dynamo:
reasoning_text: compute it
normal_text: The answer is 42.
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.2.d:
description: Normal text around a MiniMax M3 reasoning block
ref: *local_ref
model_text: Before <mm:think>thinking</mm:think> after
expected:
dynamo:
reasoning_text: thinking
normal_text: Before after
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.2.e:
description: Empty MiniMax M3 reasoning block
ref: *local_ref
model_text: <mm:think></mm:think>Direct answer.
expected:
dynamo:
reasoning_text: ''
normal_text: Direct answer.
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.2.f:
description: Complex MiniMax M3 reasoning content with newlines and marker-looking text
ref: *local_ref
model_text: |-
<mm:think>Line 1
JSON-ish: {"x": [1, true]}
Marker-like: <mm:thinking>not a close</mm:thinking></mm:think>Done.
expected:
dynamo:
reasoning_text: |-
Line 1
JSON-ish: {"x": [1, true]}
Marker-like: <mm:thinking>not a close</mm:thinking>
normal_text: Done.
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.3.a:
description: Reasoning followed by downstream MiniMax M3 tool-call text
ref: *local_ref
model_text: |-
<mm:think>choose the weather tool</mm:think>]<]minimax[>[<tool_call>
]<]minimax[>[<invoke name="get_weather">
]<]minimax[>[<location>NYC]<]minimax[>[</location>
]<]minimax[>[</invoke>
]<]minimax[>[</tool_call>
expected:
dynamo:
reasoning_text: choose the weather tool
normal_text: |-
]<]minimax[>[<tool_call>
]<]minimax[>[<invoke name="get_weather">
]<]minimax[>[<location>NYC]<]minimax[>[</location>
]<]minimax[>[</invoke>
]<]minimax[>[</tool_call>
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.3.b:
description: Open reasoning interrupted by downstream tool-call text is not configured for MiniMax M3
ref: *local_ref
reason: MiniMax M3 uses explicit <mm:think> spans and has no configured downstream tool-call escape while a reasoning span is still open; missing-end recovery is covered by REASONING.batch.5.
REASONING.batch.3.c:
description: Recipientless Harmony commentary is not applicable to MiniMax M3
ref: *local_ref
reason: MiniMax M3 does not use Harmony commentary channels; visible text and downstream tool handoff use MiniMax-specific think and namespace-token tool-call markers.
REASONING.batch.3.d:
description: Directed Harmony commentary tool calls are not applicable to MiniMax M3
ref: *local_ref
reason: MiniMax M3 does not use Harmony `commentary to=functions.*` envelopes; downstream tool calls use MiniMax namespace-token XML markers.
REASONING.batch.3.e:
description: Directed Harmony analysis tool calls are not applicable to MiniMax M3
ref: *local_ref
reason: MiniMax M3 does not use Harmony `analysis to=functions.*` envelopes; reasoning is represented by <mm:think> tags.
REASONING.batch.3.f:
description: Harmony analysis/commentary/final channel sequencing is not applicable to MiniMax M3
ref: *local_ref
reason: MiniMax M3 has no Harmony channel protocol, so mixed analysis, commentary tool-call, and final-channel sequencing is outside its grammar.
REASONING.batch.4:
description: Dangling end marker without an opening MiniMax M3 think tag
ref: *local_ref
model_text: reason</mm:think>answer
expected:
dynamo:
reasoning_text: reason
normal_text: answer
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.5:
description: Missing end marker keeps the remaining text as reasoning
ref: *local_ref
model_text: <mm:think>partial reasoning
expected:
dynamo:
reasoning_text: partial reasoning
normal_text: ''
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.6.a:
description: Multiple MiniMax M3 reasoning spans are concatenated
ref: *local_ref
model_text: <mm:think>first</mm:think> middle <mm:think>second</mm:think> done
expected:
dynamo:
reasoning_text: firstsecond
normal_text: middle done
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.batch.6.b:
description: Stray MiniMax M3 end marker after a complete reasoning span
ref: *local_ref
model_text: <mm:think>preamble</mm:think>body</mm:think>answer
expected:
dynamo:
reasoning_text: preamble
normal_text: bodyanswer
reason: Parser-owned dangling close syntax is stripped from normal_text after the complete reasoning span.
vllm: *vllm_unavailable
sglang: *sglang_unavailable
132 changes: 132 additions & 0 deletions conformance/reasoning/fixtures/minimax_m3/REASONING.stream.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

family: minimax_m3
model_label: MiniMax M3
mode: stream
refs:
local: &local_ref 'MiniMax M3 <mm:think> reasoning grammar; local taxonomy: lib/parsers/REASONING_CASES.md'
cases:
REASONING.stream.1.a:
description: Empty stream chunk
ref: *local_ref
chunks:
- ''
expected:
dynamo:
reasoning_text: ''
normal_text: ''
vllm: &vllm_unavailable
unavailable: vLLM Python 0.23.0 in this conformance harness does not include the MiniMax M3 reasoning parser yet.
sglang: &sglang_unavailable
unavailable: SGLang 0.5.12.post1 in this conformance harness does not include the MiniMax M3 reasoning parser yet.
REASONING.stream.1.b:
description: Plain text without reasoning markers
ref: *local_ref
chunks:
- plain
- ' answer'
expected:
dynamo:
reasoning_text: ''
normal_text: plain answer
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.stream.2.a:
description: MiniMax M3 reasoning split across chunks
ref: *local_ref
chunks:
- <mm:think>rea
- son</mm:think>answer
expected:
dynamo:
reasoning_text: reason
normal_text: answer
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.stream.2.b:
description: Multiple MiniMax M3 reasoning spans across chunks
ref: *local_ref
chunks:
- <mm:think>first</mm:think>
- ' middle '
- <mm:think>second</mm:think> done
expected:
dynamo:
reasoning_text: firstsecond
normal_text: ' middle done'
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.stream.2.c:
description: Prompt-prefilled close marker after a complete MiniMax M3 span
ref: *local_ref
chunks:
- <mm:think>preamble</mm:think>
- body</mm:think>
- answer
expected:
dynamo:
reasoning_text: preamblebody
normal_text: answer
reason: MiniMax M3 enables dangling-end recovery, so a later unpaired </mm:think> chunk is treated as a prompt-prefilled reasoning close.
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.stream.3.a:
description: MiniMax M3 start marker split across chunks
ref: *local_ref
chunks:
- <mm:thi
- nk>thinking</mm:think>answer
expected:
dynamo:
reasoning_text: thinking
normal_text: answer
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.stream.3.b:
description: MiniMax M3 end marker split across chunks
ref: *local_ref
chunks:
- <mm:think>thinking</mm:
- think>answer
expected:
dynamo:
reasoning_text: thinking
normal_text: answer
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.stream.3.c:
description: Partial MiniMax M3 start-marker prefix later becomes normal text
ref: *local_ref
chunks:
- plain <mm:th
- esis answer
expected:
dynamo:
reasoning_text: ''
normal_text: plain <mm:thesis answer
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.stream.4:
description: Dangling MiniMax M3 end marker split across chunks
ref: *local_ref
chunks:
- reason</mm:
- think>answer
expected:
dynamo:
reasoning_text: reason
normal_text: answer
vllm: *vllm_unavailable
sglang: *sglang_unavailable
REASONING.stream.4.a:
description: Close marker only is stripped as prompt-prefilled reasoning close
ref: *local_ref
chunks:
- </mm:think>I'll check the content of both files.
expected:
dynamo:
reasoning_text: ''
normal_text: I'll check the content of both files.
vllm: *vllm_unavailable
sglang: *sglang_unavailable
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

# Streaming fixture (per-chunk, per-impl). MiniMax M3 is present in the
# stream-v2 matrix, but no pinned peer/local v2 stream parser is available yet.

family: minimax_m3
model_label: 'MiniMax M3'
mode: streamv2
captured_with:
vllm_rust: 'v0.23.0 78743ab5bffd381e88f97e1c8ba20473b0ae6d75'
vllm_python: '0.23.0'
sglang_python: '0.5.12.post1'
cases:
TOOLCALLING.streamv2.1:
description: 'Single tool call (happy path)'
ref: 'derived from TOOLCALLING.batch.1'
tools:
- name: get_weather
parameters:
type: object
properties:
location:
type: string
unavailable:
dynamo_rust: 'Dynamo parser v2 TC streaming not yet implemented for this family; vLLM Python/SGLang per-chunk output is the target to match.'
vllm_rust: 'vLLM Rust v0.23.0 in this conformance harness does not include the MiniMax M3 tool parser yet.'
vllm_python: 'vLLM Python 0.23.0 in this conformance harness does not include the MiniMax M3 tool parser yet.'
sglang_python: 'SGLang 0.5.12.post1 in this conformance harness does not include the MiniMax M3 detector yet.'
chunks:
- delta_text: |-
]<]minimax[>[<tool_call>
]<]minimax[>[<invoke name="get_weather">
]<]minimax[>[<location>NYC]<]minimax[>[</location>
]<]minimax[>[</invoke>
]<]minimax[>[</tool_call>
- delta_text: ''
finish_reason: tool_calls
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

family: minimax_m3
model_label: 'MiniMax M3'
mode: streamv2
captured_with:
vllm_rust: 'v0.23.0 78743ab5bffd381e88f97e1c8ba20473b0ae6d75'
vllm_python: '0.23.0'
sglang_python: '0.5.12.post1'
cases:
TOOLCALLING.streamv2.10:
description: 'Duplicate calls (same name twice)'
ref: 'derived from TOOLCALLING.batch.10'
tools:
- name: get_weather
parameters:
type: object
properties:
location:
type: string
unavailable:
dynamo_rust: 'Dynamo parser v2 TC streaming not yet implemented for this family; vLLM Python/SGLang per-chunk output is the target to match.'
vllm_rust: 'vLLM Rust v0.23.0 in this conformance harness does not include the MiniMax M3 tool parser yet.'
vllm_python: 'vLLM Python 0.23.0 in this conformance harness does not include the MiniMax M3 tool parser yet.'
sglang_python: 'SGLang 0.5.12.post1 in this conformance harness does not include the MiniMax M3 detector yet.'
chunks:
- delta_text: |-
]<]minimax[>[<tool_call>
]<]minimax[>[<invoke name="get_weather">
]<]minimax[>[<location>NYC]<]minimax[>[</location>
]<]minimax[>[</invoke>
]<]minimax[>[<invoke name="get_weather">
]<]minimax[>[<location>LA]<]minimax[>[</location>
]<]minimax[>[</invoke>
]<]minimax[>[</tool_call>
- delta_text: ''
finish_reason: tool_calls
Loading
Loading