Anthropic Python SDK v1.9.0 Released: Introducing between_tools Thinking and Claude Sonnet 5.5

Anthropic Python SDK v1.9.0 enhances agentic tool-chain reasoning and promotes cache diagnostics to GA.
Anthropic Python SDK v1.9.0 focuses on maturing agentic workflows with three core upgrades: a new `between_tools` thinking type for explicit reasoning between tool calls; optional parallel execution of tool calls alongside streaming replies to reduce latency; and cache diagnostics promoted to GA so developers can read cache hit stats directly from Message objects. The release also adds Claude Sonnet 5.5 support, fixes bugs in unnamed file uploads and streaming diagnostics, and enhances the Workspace rate limit API and Managed Agents' typed event filters.
Anthropic's official Python SDK has received a v1.9.0 update. This release brings several noteworthy improvements in tool calling, model support, and streaming — particularly enhancements targeting agentic workflows and real-time inference. For developers building applications on the Claude API, this update delivers more flexible tool orchestration and finer-grained diagnostic information.

Core New Features
This release focuses primarily on agentic capabilities and model support.
New between_tools Thinking Type
The SDK introduces a between_tools thinking type, which allows the model to reason between consecutive tool calls. In complex multi-step agentic tasks, the model typically needs to invoke multiple tools and decide on the next action based on previous results. between_tools thinking allows the model to explicitly organize its reasoning in the gaps between tool calls, improving decision quality.
Notably, the SDK also adds fallback logic in the helpers: when a fallback occurs, between_tools thinking is downgraded to the disabled state to ensure compatibility and stability.
The between_tools thinking type is part of Claude's Extended Thinking capability. Extended Thinking lets the model generate an internal reasoning "draft" (a thinking block) before producing its final response — this content is visible to users but is not counted as part of the conversational instruction context. between_tools is its concrete form in tool-calling scenarios: after each tool returns a result, the model first outputs a thinking block to analyze the result and plan the next steps, before deciding whether to continue calling tools or respond directly to the user. This is visually similar to the chain-of-thought reasoning in OpenAI's o-series models, but the implementation differs — Claude's thinking blocks are explicit, structured content blocks that can be captured and inspected by the SDK, making it easier for developers to debug reasoning processes. The fallback mechanism that degrades to disabled ensures that when a model version or API parameter doesn't support Extended Thinking, the call won't throw an error but will silently fall back to the normal mode without thinking blocks.
Support for Claude Sonnet 5.5
This version adds support for the claude-sonnet-5-5 model. Developers who want to access the new model immediately can call it directly using this model identifier after upgrading the SDK. Additionally, the SDK now prioritizes known model IDs in the Model type definition, making it easier for developers to quickly select models in their IDE.
Tool Calls Can Now Run in Parallel with Streaming Replies
A practical improvement: tool calls can now optionally run while the reply streams. This is significant for applications requiring low-latency experiences — previously, tool execution and content generation were often serial processes, but now the two can partially overlap, reducing the wait time perceived by users.
The traditional API call lifecycle is strictly serial: the model generates a complete reply → the client initiates tool calls → waits for tool results → the model generates again. In multi-turn tool orchestration, this produces noticeable cumulative latency. The core idea behind parallelization is: when the model determines it needs to call a tool during streaming output, the client can immediately initiate the tool request in the background, without waiting for the current streaming content to finish transmitting. This "stream-and-compute" pattern is most beneficial when tool calls have high latency (e.g., search, database queries), potentially reducing end-to-end latency perceived by users by an order of magnitude. Note that this feature is currently optional — developers need to explicitly enable it in their code and handle the merging of tool results with streamed content carefully to avoid race conditions.
Diagnostics and Streaming Enhancements
Cache Diagnostics Now Generally Available
This update promotes cache diagnostics to GA (Generally Available), with diagnostic information now attachable to Message and MessageCreateParams. This gives developers clearer visibility into cache hit behavior, directly helping with cost and performance optimization.
Correspondingly, the stream() and parse() methods can now accept and parse diagnostics information, ensuring consistency of diagnostic data across different calling patterns.
Claude's API supports a Prompt Caching mechanism: when a request contains prefix content identical to a previous request, the API reuses the cached KV (Key-Value) computation results, reducing token processing costs and shortening time-to-first-token (TTFT). Cached tokens are typically about 90% cheaper than non-cached tokens, providing significant cost advantages in scenarios like long system prompts and large-document Q&A. Cache diagnostics provide per-request cache read/write statistics, including cache_read_input_tokens (the number of tokens read from cache hits) and cache_creation_input_tokens (the number of tokens written to cache in this request), allowing developers to quantify the actual effectiveness of their caching strategy rather than relying on billing data after the fact. Attaching diagnostic information to the Message object means developers don't need to parse response headers or call a separate interface — they can read diagnostic data directly from the message object.
Rate Limits and Managed Agents Improvements
The Workspace rate limit API adds include_inherited and source fields, making quota management more transparent in multi-workspace environments — developers can clearly see whether a given limit is inherited or directly configured. Additionally, Managed Agents' event list filters now include typed event type values, improving API type safety.
Important Bug Fixes
This release also fixes several issues affecting real-world usage:
- Unnamed file uploads: The client no longer sends a placeholder filename when uploading unnamed files, avoiding potential naming conflicts.
- Diagnostics support in streaming and parsing: Fixed an issue where
stream()andparse()could not accept diagnostics. - Beta header behavior adjustment:
parseand the tool runner no longer send beta headers, making the behavior of these paths more consistent with expectations.
Documentation and Engineering Details
Beyond feature changes, the team has also done considerable work on engineering standards. The documentation now clarifies that stream: true returns a raw event stream, and the research-preview note has been restored on the Dream type. On the code style front, the team has added field docstring spacing rules and function body spacing rules to CLAUDE.md, and listed importable type names in api.md. While these changes don't directly affect runtime behavior, they have long-term value for maintaining code quality and developer experience.
The CI configuration has also been updated to select the appropriate CI runner based on the repository.
What This Means for Developers
Overall, the v1.9.0 update clearly points toward the maturation of agentic workflows. between_tools thinking, parallel tool calls with streaming output, and typed events for Managed Agents — these features collectively signal that Anthropic is moving Claude from a pure conversational model toward more complex autonomous task execution.
For teams building agentic applications, it's recommended to upgrade to v1.9.0 and pay attention to the following: evaluate whether between_tools thinking can improve decision quality in existing multi-step tasks; use the cache diagnostics GA to optimize call costs; and explore parallel tool calls with streaming output in latency-sensitive scenarios. For the full changelog, refer to the official Changelog (v1.8.0...v1.9.0).
Related articles

Random Pruning of the DPO Computation Graph: 1.4x Training Speedup and Lower Peak Memory
DPO training too slow and memory-hungry? This paper proposes a random pruning framework for the DPO computation graph, sampling independently across position, sequence, and branch dimensions; branch pruning achieves a 1.426x step-time speedup and cuts training time by about 30%, with in-depth attribution of memory and time gains.

Why Does JEPA Underperform MLM in Longitudinal EHR Representation Learning?
New study compares JEPA and MLM for longitudinal EHR representation learning on MIMIC-IV: three JEPA variants train stably without collapse but underperform MLM; target size, not heterogeneity, drives prediction error.

Transfer Learning + Visible Light Communication: A New Approach to Energy-Efficient Indoor Positioning
A study proposes a transfer learning-based visible light communication indoor positioning method, achieving 47% accuracy improvement on the BOSCH factory dataset, 67.5% model efficiency under high noise, and introducing the ME composite metric for energy-efficient positioning in energy-constrained industrial IoT scenarios.