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)
- Lingua principale
- Python
- Stelle
- 8.1k
- Fork
- 1.3k
- Merge medio
- 2g 31m
- PR unite (30g)
- 1
Descrizione
## 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).
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- aws, python
- Ambito
- api, backend, cloud
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 42/100