Skip to content

[Bug]: Xiaomi/MiMo models output to reasoning_content instead of content field #60261

@Uitatsu

Description

@Uitatsu

Bug type

Crash (process/app exits or hangs)

Beta release blocker

No

Summary

Problem

When using Xiaomi MiMo models (mimo-v2-pro, mimo-v2-omni) via the Token Plan API, the model outputs text to the reasoning_content field instead of the standard content field in both streaming and non-streaming responses.

Environment

Expected behavior

The model should output generated text to the content field in Chat Completions response format, consistent with standard OpenAI-compatible APIs.

Actual behavior

  • Non-streaming: content field is empty, reasoning_content contains the actual response
  • Streaming: delta.content is null, delta.reasoning_content contains streamed tokens

Example non-streaming response:

{
  "choices": [{
    "message": {
      "content": "",
      "reasoning_content": "The actual response text is here"
    }
  }]
}

### Steps to reproduce

1. Configure xiaomi provider with baseUrl: https://token-plan-cn.xiaomimimo.com/v1
2. Set model to mimo-v2-omni or mimo-v2-pro
3. Send any chat message
4. Observe: response content is empty, actual text appears in reasoning_content field

### Expected behavior

## Problem
When using Xiaomi MiMo models (mimo-v2-pro, mimo-v2-omni) via the Token Plan API, the model outputs text to the `reasoning_content` field instead of the standard `content` field in both streaming and non-streaming responses.
## Environment
- OpenClaw version: 2026.3.28
- Provider: xiaomi (baseUrl: https://token-plan-cn.xiaomimimo.com/v1)
- Models: mimo-v2-pro, mimo-v2-omni
## Expected behavior
The model should output generated text to the `content` field in Chat Completions response format, consistent with standard OpenAI-compatible APIs.
## Actual behavior
- Non-streaming: `content` field is empty, `reasoning_content` contains the actual response
- Streaming: `delta.content` is null, `delta.reasoning_content` contains streamed tokens
## Example non-streaming response:
```json
{
  "choices": [{
    "message": {
      "content": "",
      "reasoning_content": "The actual response text is here"
    }
  }]
}


### Actual behavior

data: {"delta":{"content":null,"reasoning_content":"The"}}
data: {"delta":{"content":null,"reasoning_content":" actual"}}
data: {"delta":{"content":null,"reasoning_content":" response"}}

OpenClaw reads the content field, so users see empty responses when using these models.
Suggested fix
Update the provider to also read reasoning_content as a fallback
Add special handling for this provider to concatenate reasoning_content into the response
Document a workaround for this provider

### OpenClaw version

03.28

### Operating system

macos

### Install method

npm

### Model

mimo

### Provider / routing chain

openclaw- tui

### Additional provider/model setup details

_No response_

### Logs, screenshots, and evidence

```shell
Impact
OpenClaw reads the content field, so users see empty responses when using these models.
Suggested fix
Update the provider to also read reasoning_content as a fallback
Add special handling for this provider to concatenate reasoning_content into the response
Document a workaround for this provider
Test command
curl -X POST https://token-plan-cn.xiaomimimo.com/v1/chat/completions \
  -H "Authorization: Bearer <API_KEY>" \
  -d '{"model":"mimo-v2-omni","messages":[{"role":"user","content":"say hi"}],"max_tokens":10}'

Impact and severity

No response

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingbug:crashProcess/app exits unexpectedly or hangs

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions