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)

Aperta
#1,068 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
bug documentation
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.