-
Notifications
You must be signed in to change notification settings - Fork 202
Description
Problem
In the OpenAI-compatible API streaming example, reasoning_details is processed with a diff approach:
reasoning_text = detail["text"]
new_reasoning = reasoning_text[len(reasoning_buffer):]
reasoning_buffer = reasoning_textThis assumes reasoning_details[].text is cumulative (full text so far), requiring a diff against the buffer to extract the new portion.
Actual Behavior
Testing against api.minimaxi.com/v1 with MiniMax-M2.7, reasoning_details[].text returns incremental text, not cumulative:
chunk1: text="The user"
chunk2: text=" is asking how I am, which is a simple greeting."
chunk2 does not contain chunk1's "The user" — it's already just the new part.
Bug
Applying diff logic to incremental text truncates the beginning of each chunk:
chunk1: buf="", text="The user", text[0:] = "The user" ✅ happens to work
chunk2: buf="The user"(len=8), text=" is asking...", text[8:] = "king..." ❌ truncated
Reproduction
from openai import OpenAI
client = OpenAI(
api_key="sk-xxx",
base_url="https://api.minimaxi.com/v1",
)
stream = client.chat.completions.create(
model="MiniMax-M2.7",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hi, how are you?"},
],
extra_body={"reasoning_split": True},
stream=True,
)
for chunk in stream:
if (
hasattr(chunk.choices[0].delta, "reasoning_details")
and chunk.choices[0].delta.reasoning_details
):
for detail in chunk.choices[0].delta.reasoning_details:
if "text" in detail:
text = detail["text"]
print(f"len={len(text)} text={repr(text)}")Suggested Fix
If reasoning_details[].text is incremental, the example should simply concatenate:
for detail in chunk.choices[0].delta.reasoning_details:
if "text" in detail:
text = detail["text"]
print(text, end="", flush=True)
reasoning_buffer += textAlso, if api.minimax.io (international) and api.minimaxi.com (China mainland) behave differently for this field, it would be helpful to note that in the docs.