Skip to content

Streaming API returns empty role string in delta chunks, breaking OpenAI-compatible clients #2

@Th0rgal

Description

@Th0rgal

Problem

When using the MiniMax M2.5 streaming chat completion API (https://api.minimax.io/v1/chat/completions with stream: true), some chunks contain "role": "" (empty string) in the delta object. This breaks OpenAI-compatible SDK clients that validate role against the expected value "assistant".

Expected behavior

Per the OpenAI streaming spec, the role field in delta objects should either be "assistant" (typically in the first chunk) or omitted entirely in subsequent chunks. An empty string "" is neither.

Actual behavior

MiniMax returns chunks like:

{
  "choices": [{
    "index": 0,
    "delta": {
      "role": "",
      "reasoning_content": ""
    }
  }],
  "created": 1771279826,
  "object": "chat.completion.chunk",
  "usage": {"total_tokens": 0, "total_characters": 0},
  "input_sensitive": false,
  "output_sensitive": false
}

The "role": "" fails validation in clients that expect "assistant" as the only valid value (e.g., Vercel AI SDK's @ai-sdk/openai-compatible).

Error from client

AI_TypeValidationError: Type validation failed
Invalid input: expected "assistant" at choices[0].delta.role

Suggested fix

Either:

  1. Set role: "assistant" in the first delta chunk and omit it from subsequent chunks (matching OpenAI behavior)
  2. Or omit the role field entirely when it would be empty

Environment

  • API endpoint: https://api.minimax.io/v1/chat/completions
  • Model: MiniMax-M2.5
  • Streaming: enabled
  • Client: @ai-sdk/openai-compatible (Vercel AI SDK) via OpenCode

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions