anthropics / anthropics/claude-agent-sdk-python

Vertex/Bedrock: empty ThinkingBlock.thinking on Opus 4.8/4.7 — bundled CLI drops thinking.display (post-#831, root cause anthropics/claude-code#71599)

Abierto
#1,068 1 comentario 0 reacciones 0 asignados Ver en GitHub
bug documentation
Lenguaje dominante
Python
Estrellas
8.1k
Forks
1.3k
Merge medio
2 d 31 min
PR fusionados (30 d)
1

Descripción

## Summary

SDK users running on **Vertex** (or **Bedrock**) with `claude-opus-4-8` / `4-7` get `ThinkingBlock.thinking == ""` (empty) and **no `thinking_delta` events**, even with `thinking={"type":"adaptive","display":"summarized"}`.

This is **not the same as the now-fixed #831** (where the SDK didn't forward `display`). The SDK *does* now correctly pass `--thinking-display` (`_internal/transport/subprocess_cli.py` resolves `thinking["display"]` → `--thinking-display`). The remaining failure is **downstream in the bundled CLI**, which strips `thinking.display` from the request body on non-first-party providers.

Full CLI root-cause analysis, request-body captures, and a live Vertex reproduction are in the CLI issue: **anthropics/claude-code#71599**. Filing here for SDK-user visibility and to track an SDK-side mitigation, since `claude-agent-sdk` bundles the affected CLI.

## Why it still affects the SDK after #831

`#831` made the SDK forward the flag. But the bundled CLI (2.1.177 → 2.1.193, latest) gates `thinking.display` behind a first-party-only provider allow-list (`firstParty | anthropicAws | foundry`) that omits `vertex`/`bedrock`. So with `CLAUDE_CODE_USE_VERTEX=1`, the CLI builds `thinking: {"type":"adaptive"}` (no `display`), the server applies the Opus 4.8 default `display:"omitted"`, and the SDK parses back a `ThinkingBlock` with empty `thinking` + a signature. Direct Anthropic (first-party) is unaffected.

Version boundary: bundled CLI **2.1.150 works**; **2.1.177+ (and 2.1.193, latest) broken** on Vertex/Bedrock.

## Reproduction (SDK)

```python
import os
from claude_agent_sdk import ClaudeAgentOptions, query, AssistantMessage, ThinkingBlock

# Vertex env: CLAUDE_CODE_USE_VERTEX=1, CLOUD_ML_REGION=global, ANTHROPIC_VERTEX_PROJECT_ID=
options = ClaudeAgentOptions(
model="claude-opus-4-8[1m]",
thinking={"type": "adaptive", "display": "summarized"}, # forwarded correctly since #831
)

async for msg in query(prompt="Reason step by step, then answer: a bat and ball cost $1.10; the bat is $1.00 more than the ball. How much is the ball?", options=options):
if isinstance(msg, AssistantMessage):
for b in msg.content:
if isinstance(b, ThinkingBlock):
print("thinking len:", len(b.thinking)) # 0 on Vertex; non-empty on direct Anthropic
```

Observed on Vertex: `thinking len: 0` (signature present). On the direct Anthropic API: non-empty.

## Verified workaround (no downgrade)

Set the CLI extra-body env var on the subprocess; it re-injects `display` on the wire (verified against live Vertex — empty → 224-char summarized thinking):

```python
os.environ["CLAUDE_CODE_EXTRA_BODY"] = '{"thinking":{"type":"adaptive","display":"summarized"}}'
```
Must be `type:"adaptive"` — Opus 4.8 rejects `type:"enabled"` with HTTP 400.

## Requests for the SDK

1. **Document** this Vertex/Bedrock limitation (and the `CLAUDE_CODE_EXTRA_BODY` workaround) near the thinking docs, linking anthropics/claude-code#71599.
2. **Optional mitigation:** when `thinking["display"]` is set and a 3P provider is detected (`CLAUDE_CODE_USE_VERTEX` / `CLAUDE_CODE_USE_BEDROCK` in env), have the transport set/merge `CLAUDE_CODE_EXTRA_BODY` with the thinking override so `display` survives the bundled CLI — until the CLI fix lands.
3. **Bump the bundled CLI** to whatever version fixes anthropics/claude-code#71599.

## Related
- #831 (closed) — SDK now forwards `display`; this issue is the remaining CLI-side drop on Vertex/Bedrock.
- #335 (closed) — earlier Vertex/Bedrock thinking-beta issue.
- anthropics/claude-code#71599 — upstream CLI root cause (request-body `thinking.display` stripped on Vertex/Bedrock).

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Start with the Vertex reproduction in the issue and inspect _internal/transport/subprocess_cli.py to confirm how thinking display reaches the bundled CLI. Compare the documented workaround and the three requested paths, then define completion as documenting the limitation and workaround, applying any agreed mitigation, or bumping the CLI once anthropics/claude-code#71599 is fixed.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
aws, python
Área
api, backend, cloud
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
42/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.