fix(llm): gate MiniMax reasoning_split by model capability (#826)

MinimaxChatOpenAI unconditionally set reasoning_split=True, but the
kwarg is only valid on M2.x reasoning models. The openai SDK's strict
kwarg validation raised TypeError for Coding Plan and any other non-
reasoning MiniMax model.

Adds requires_reasoning_split to ModelCapabilities, gates the payload
injection on it, and only sets True for _MINIMAX_THINKING (M2.x exact
IDs and the ^MiniMax-M\d forward-compat pattern). Same shape as the
existing supports_tool_choice gate.

Regression tests cover both halves: M2.x models still receive the flag,
non-reasoning MiniMax models do not.
This commit is contained in:
Yijia-Xiao
2026-05-17 07:49:42 +00:00
parent 3e5e99b368
commit e848b5e812
4 changed files with 42 additions and 1 deletions

View File

@@ -42,6 +42,18 @@ class TestMinimaxReasoningSplit:
# the caller passed. setdefault leaves an existing value alone.
assert payload.get("reasoning_split") in (False, True)
def test_non_reasoning_minimax_does_not_inject_reasoning_split(self):
"""Coding Plan / MiniMax-Text-01 / any non-M2-prefixed model must NOT
receive reasoning_split — the openai SDK rejects unknown kwargs with
TypeError (#826)."""
for model in ("minimax-text-01", "MiniMax-Coding-Plan"):
payload = _client(model)._get_request_payload(
[HumanMessage(content="hi")]
)
assert "reasoning_split" not in payload, (
f"{model!r} payload unexpectedly contains reasoning_split"
)
@pytest.mark.unit
class TestMinimaxStructuredOutputDispatch: