Skip to content

OpenAI-compatible and Anthropic-compatible chat/tool-calling instability under Sourcebot Ask workflow #109

@leozhengliu-pixel

Description

@leozhengliu-pixel

Summary

We integrated MiniMax through Sourcebot Ask and captured the real upstream traffic with a transparent proxy. We found two classes of failures under the real tool-calling workflow:

  1. Streaming requests sometimes return 200 OK with text/event-stream but never terminate correctly, eventually ending in client-side timeout.
  2. In OpenAI-compatible tool-calling mode, some requests fail because the model / compatibility layer emits invalid function argument JSON.

This is reproducible under a real tool-calling workload, not only with trivial prompts.

Client context

Client stack:

  • Sourcebot Ask
  • Node 24
  • AI SDK-based provider integration
  • tested with both:
    • OpenAI-compatible /v1/chat/completions
    • Anthropic-compatible /anthropic/v1/messages

Failure 1: stream starts, then never ends

Observed behavior

For some requests, the server returns:

  • 200 OK
  • content-type: text/event-stream

Streaming begins, but the response never completes normally. The client later fails with read timeout:

  • read ETIMEDOUT
  • surface symptom in client: terminated

This is not a generic network issue:

  • the same host/container can complete independent long fetch/undici streams successfully
  • the problem appears only under the real Ask/tool-calling workflow

Request characteristics when this happens

Typical requests include:

  • stream=true
  • tool calling enabled
  • accumulated multi-turn messages
  • large tool result payloads
  • in Anthropic-compatible mode, thinking may also be enabled

Example sanitized evidence: https://gist.github.com/leozhengliu-pixel/6252d9b8415ab65dd106d11e2bf59da0

Failure 2: invalid function arguments in OpenAI-compatible mode

Observed behavior

A real OpenAI-compatible request produced this tool call:

{
  "id": "call_function_j32rtdm8f446_1",
  "type": "function",
  "function": {
    "name": "read_file",
    "arguments": "\"{\""
  }
}

This is not valid function argument JSON for the declared tool schema. The client then fails tool execution with:

Invalid input for tool read_file: JSON parsing failed: Text: {.
Error message: Expected property name or '}' in JSON at position 1 (line 1 column 2)

The upstream response for that request is 400 Bad Request.

Important detail

This is not only a small-model quality issue. We are seeing both:

  • malformed tool arguments
  • hanging SSE streams

So the compatibility problem appears broader than prompt quality.

What we need clarified

  1. In your OpenAI-compatible API, what exact guarantees do you provide for:
    • tool_calls[].function.arguments
    • streaming termination semantics
    • chunk / finish events
  2. In your Anthropic-compatible API, are there known limitations with:
    • tool use
    • thinking
    • long-running streamed responses
  3. Are there specific unsupported combinations such as:
    • thinking + tools
    • large multi-turn tool-result context
    • streaming + tool calling under compatibility mode
  4. Do you recommend disabling any of the following for compatibility:
    • streaming
    • thinking
    • automatic tool choice
    • title-generation style side requests

Evidence available

We have captured:

  • exact request payload characteristics
  • exact response status/headers
  • cases where stream starts but never completes
  • cases where tool arguments are malformed and rejected

I can provide more sanitized payloads if needed.

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