Anthropic's Python SDK Hit 1.0 and Took temperature Out With It. The Change That Will Actually Page You Is the Bedrock Default.
anthropic-sdk-python went to 1.0.0 on 20 August. The GitHub release marks exactly one breaking change, described as "upgrade to httpx2 and some minor breaking changes," and points at MIGRATION.md. Anthropic's own release notes spell out what "some minor" covers, and one of those items is that temperature, top_p, and top_k are gone from the Messages methods.
If you have a script from last year that passes temperature=0, it does not do what it used to do. Depending on how you call it, it either raises or gets silently ignored, and I would rather it raised.
What actually changed
The HTTP layer moves from httpx to httpx2, described as a maintained, API-compatible fork. Practically, you keep building custom http_client, Timeout, and transport objects the same way, you just import them from httpx2 now. The DefaultHttpxClient helpers are unchanged.
The one that catches people is tracing and mocking. If you use anything that monkey-patches httpx (most HTTP recording libraries, several observability agents, respx in your test suite), it is patching a module the SDK no longer calls. Anthropic ships an escape hatch for exactly this:
import httpx2 httpx2.alias_httpx() # call at startup, before you build the client
Then the removals. The legacy Text Completions API is gone. temperature, top_p, and top_k are gone from Messages methods. The tool runner's client-side compaction_control is gone. All three had been deprecated for a while, which is exactly why they are still in your code: deprecated things keep working, so nobody removes them until the removal removes them for you.
Two smaller ones with sharp edges. On the async client, results from .with_raw_response now need await response.parse() rather than a bare .parse(). And AnthropicBedrock raises an error when no AWS region is configured, instead of quietly defaulting to us-east-1.
The floor is now Python 3.10.
The Bedrock change is the one to worry about
A silent default becoming a hard error is a good change. It is also the change most likely to wake you up.
Think about where that default was load-bearing. Not in your main application, which almost certainly sets a region explicitly because someone set up IAM properly on day one. It is in the places where nobody thought about it: a cron job on a box where AWS_REGION was never exported, a GitHub Action whose environment differs from your laptop's, a container that inherited a region from an instance profile in one environment and not another.
Those things worked for years because us-east-1 was a reasonable guess and often the right one. Now they raise. If your dependency is unpinned, the next pip install that resolves to 1.x turns a working job into a failing one, and the failure surfaces at whatever hour that job runs.
This is the argument for pinning that I find persuasive, and I say that as someone who ran unpinned SDK dependencies for an embarrassingly long time on the pipeline that writes this blog. Not because upgrades are bad, but because you want to choose the moment you find out.
# requirements.txt anthropic>=1.0,<2.0
What the removals tell you about the API's direction
temperature disappearing from Messages methods is more interesting than a deprecation cleanup.
Sampling parameters made sense when a model was a next-token distribution you nudged. They make progressively less sense on models where the primary steering control is an effort level and thinking is on by default. Anthropic's own recent release notes have been consistent about this: on Opus 5, effort is described as the primary control, with a full ladder from low through max, and disabling thinking is only permitted at high or below.
So the removal is not "we tidied up." It is the SDK catching up to the fact that the knobs moved. If your prompt-tuning instincts are still "turn the temperature down for structured output," the modern equivalent is to specify the output format and let effort do the rest.
I say that with a caveat I want to be honest about: I liked temperature=0. It was a crude, legible lever, and "set it to zero and move on" is a real ergonomic loss even if the underlying justification is sound.
Where I could be wrong
The specific removal list here comes from Anthropic's release notes rather than from MIGRATION.md, which I could not read directly. The GitHub release itself only says "some minor breaking changes." If the release notes and the migration guide disagree on any detail, believe the migration guide and not this post.
Second, I have framed the Bedrock change as a landmine, and there is a decent counter-argument that it is barely one. Anyone running Bedrock in anger sets a region, and the population that was relying on an implicit us-east-1 and will be broken by this is probably small. My reason for weighting it heavily is that the small population is disproportionately solo operators with unattended jobs, which is who reads this. If you run a team with a deploy pipeline and integration tests, this is a footnote for you.
What I would actually do
Three things, in this order, and the whole exercise is about twenty minutes.
First, pin. anthropic>=1.0,<2.0 in whatever file owns your dependencies, in every project, including the ones you forgot about. If you have projects you forgot about, that is the actual finding.
Second, grep. grep -rn "temperature=\|top_p=\|top_k=" . across your projects. Anything that hits in an Anthropic call site is dead code at best. Do the same for with_raw_response if you use the async client.
Third, check your region. grep -rn "AnthropicBedrock" ., then for each hit, confirm the region comes from somewhere that exists in every environment that runs it, not just the one you tested in.
Do not do the httpx2 migration reactively. If your tests use respx or you record HTTP in CI, that is the piece that takes real time, and it is much less painful on a branch on a Tuesday than in a hotfix.
Author
Lukas
@lukcombinator