#32357 [Bug] /v1/messages adapter mis-encodes reasoning models: thinking_delta streamed inside a text block (+ duplicate message_start) → empty content in Anthropic SDK / Claude Code
### What happened
When a LiteLLM proxy fronts an **OpenAI-compatible backend that returns `reasoning_content`** in streaming chunks (e.g. a GLM / DeepSeek-R1 style reasoning model served by vLLM/SGLang) and a client calls the **Anthropic `/v1/messages`** endpoint with `stream: true`, the experimental Anthropic adapter produces a **spec-violating SSE stream**:
1. **`message_start` is emitted twice** (byte-identical, same message `id`). 2. The reasoning is streamed as **`thinking_delta` events into a content block that was opened as `type: "text"`** — the block is never re-typed to `thinking` and no `signature_delta` is sent.
The official **Anthropic SDK** (and therefore **Claude Code**, which is built on it) only appends `text_delta` to a `text` block; a `thinking_delta` arriving in a `text` block is **silently dropped**. The assembled assistant message therefore ends up with **empty content**. In multi-turn / tool-use sessions where a turn produces only reasoning before `end_turn`, Claude Code sees `last_content_type=none` and aborts the turn with `error_during_execution` ("Your previous response had no visible output"). OpenAI-style clients hitting `/chat/completions` are unaff…