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)

Ouverte
#1,068 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
bug documentation
Langage dominant
Python
Étoiles
8.1k
Forks
1.3k
Merge moyen
2 j 31 min
PR mergées (30 j)
1

Description

## 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).

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
aws, python
Domaine
api, backend, cloud
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.