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)

未关闭
#1,068 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug documentation
主要语言
Python
星标
8.1k
派生
1.3k
平均合并
2 天 31 分钟
30 天内合并 PR
1

描述

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

贡献指南

这个仓库没有索引到贡献指南

调研方向

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.

由索引模型根据 Issue 内容生成。

评估

技术栈
aws, python
领域
api, backend, cloud
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。