AIREITER

Migration auf Anthropic Python SDK v1.0: Diese Änderungen brechen Code

Zuletzt aktualisiert: 2026-08-22 00:25:20

Die meisten Anwendungen werden den Sprung auf Anthropic Python SDK v1.0 zunächst kaum bemerken. Genau das ist das Risiko: Mit dem Release auf PyPI am 20. August 2026 wechselte die HTTP-Schicht von httpx zu httpx2. Tracing, APM-Agenten und Test-Mocks, die httpx patchen, laufen dadurch womöglich weiter – erfassen aber unbemerkt keine SDK-Anfragen mehr. Bestandene Tests nach dem Upgrade sind also kein ausreichender Beleg dafür, dass alles funktioniert.

Auf drei 0.x-Releases folgt v1.0

Die Release-Historie von anthropic auf PyPI fasst die Entwicklung in fünf Zeilen zusammen: 0.123.0, 0.124.0 und 0.125.0 erschienen alle am 19. August 2026. Einen Tag später folgte 1.0.0 als reguläres Trusted-Publishing-Release.

Laut den offiziellen Release Notes ändert sich Folgendes:

Anthropic Platform release notes showing the August 20, 2026 Python SDK v1.0 entry
  • Die HTTP-Schicht wechselt von httpx zu httpx2, einem gepflegten und API-kompatiblen Fork.
  • Erforderlich ist jetzt Python 3.10 oder neuer; die Classifier führen Python 3.10 bis 3.14 auf.
  • Lange veraltete Teile der API entfallen: die frühere Text-Completions-API, die Parameter temperature, top_p und top_k in Messages-Methoden sowie compaction_control für die clientseitige Tool-Runner-Kompaktierung.
  • AnthropicBedrock wirft nun einen Fehler, wenn keine AWS-Region konfiguriert ist, statt stillschweigend us-east-1 zu verwenden.

Der GitHub-Tag v1.0.0 bezeichnet das Update als „upgrade to httpx2 and some minor breaking changes“. In den Release Notes leicht zu übersehen: Die Beta-Warnung bei den Helfern parse, stream und tool_runner ist verschwunden. Die Versionsnummer 1.0 ohne Beta-Einschränkung deutet darauf hin, dass Anthropic diese API-Oberfläche nun als stabil betrachtet.

Was der Wechsel von httpx zu httpx2 konkret bedeutet

Wer Clients schlicht instanziiert, merkt davon nichts. Wer die HTTP-Schicht selbst anfasst, muss dagegen aktiv werden.

Entscheidend ist, was an den Client übergeben wird. Numerische Werte funktionieren weiter: Anthropic(timeout=30.0) verhält sich unverändert. Bei Objekten sieht es anders aus: Ein gewöhnlicher httpx.Client als http_client= löst nun bereits beim Erzeugen des Clients einen TypeError aus, nicht erst bei der ersten Anfrage. Eigene Clients, Timeouts und Transports müssen daher mit httpx2 erstellt werden. Aus einem httpx.Timeout-Objekt wird anthropic.Timeout oder httpx2.Timeout.

# 0.x
client = Anthropic(http_client=httpx.Client(proxy="http://proxy:8080"))

# 1.0
client = Anthropic(http_client=DefaultHttpxClient(proxy="http://proxy:8080"))

DefaultHttpxClient und DefaultAsyncHttpxClient behalten Namen und Verhalten bei. Sie übernehmen weiterhin die empfohlenen SDK-Standardwerte für Timeouts, Connection Pooling und Redirects – nur jetzt auf Basis von httpx2. Auch der Hinweis von Platform-DevX-Ingenieur @cjav_dev führt zum sinnvollsten Einstiegspunkt: der offiziellen MIGRATION.md mit Vorher-Nachher-Beispielen für sämtliche Änderungen.

Für diesen Wechsel gibt es bereits ein Vorbild. Der httpx2-Migrationsleitfaden des OpenAI Python SDK beschreibt praktisch denselben Weg: derselbe Fork, dasselbe Helferprinzip mit DefaultHttpx2Client und dieselben Warnungen zur respx-Kompatibilität. Teams, die openai bereits migriert haben, können ihren Ablauf nahezu unverändert übernehmen.

Diese APIs und Parameter fallen mit v1.0 weg

In v1.0 entferntStattdessen verwenden
client.completions.create() (Text Completions)client.messages.create()
HUMAN_PROMPT / AI_PROMPT constantsInhalte im Messages-Format mit Content-Blöcken
temperature, top_p, top_k in Methodensignaturenextra_body={"temperature": ...} für ältere Modelle, die diese Parameter weiterhin akzeptieren
messages.parse(stream=True)messages.stream(...)
tool_runner(compaction_control=...)Serverseitige Konfiguration der Kompaktierung
anthropic.Transport, anthropic.ProxiesTypes aliasesTransporttypen aus httpx2
body= bei Low-Level-Request-Methodencontent=
output_format schema dict in Beta-APIsoutput_config={"format": ...} (Structured-Output-Helper akzeptieren weiterhin output_format=MyModel)
isinstance(stream, anthropic.Stream)-PrüfungenDen konkreten Typ MessageStream prüfen

Zwei wichtige Randnotizen zur Tabelle: Pydantic v1 und v2 werden beide weiterhin unterstützt, Modellklassen sind also nicht betroffen. Außerdem werden Header nun unabhängig von Groß- und Kleinschreibung zusammengeführt. Wer denselben Header bislang mit unterschiedlicher Schreibweise doppelt gesetzt hat, erhält dadurch ein anderes Verhalten – ohne Fehlermeldung.

Async-Fallen bei Raw Responses

Die Änderungen im Async-Bereich sind eng begrenzt, aber unerquicklich für Nutzer von .with_raw_response. Beim asynchronen Client benötigen parse(), read(), text() und json() jetzt ein await. Beim synchronen Client wurden .text und .content von Properties zu Methoden. Beides schlägt nicht schon beim Import fehl: Synchron erscheint deutlich ein Attribute Error, asynchron kann unauffällig eine Coroutine entstehen, die nie ausgeführt wurde.

Auch Request- und Response-Objekte in Exceptions sowie Raw Results sind jetzt Typen aus httpx2. Die meisten Attribute funktionieren weiter wie gewohnt. Prüfungen wie isinstance(x, httpx.Response) und Typannotationen müssen jedoch angepasst werden – genau die Art von Problem, die pyright und mypy zuverlässig finden.

Der Fehler, den Monitoring und Tests übersehen können

Der Changelog behandelt dieses Thema in einem Satz, doch für das Monitoring ist es entscheidend. Laut Anthropics Migrationsleitfaden können Tools, die HTTP-Verkehr durch Patchen von httpx beobachten oder mocken – etwa OpenTelemetry, Sentry, respx, pytest-httpx oder vcrpy – nach dem Upgrade weiterlaufen und dennoch SDK-Requests unbemerkt verpassen. Die Tools lassen sich weiterhin importieren, laufen weiter und liefern Reports. Sie sehen nur keinen Verkehr mehr, der nicht länger durch die von ihnen gepatchte Bibliothek fließt. Tests mit solchen Mocks können damit folgenlos grün werden, sofern sie nicht ausdrücklich prüfen, ob ein Intercept tatsächlich stattgefunden hat: Kein Request erreicht den Mock, also schlägt auch nichts fehl.

Als Ausweg dient httpx2.alias_httpx(). Der Aufruf muss so früh wie möglich beim Start der Anwendung oder der Tests erfolgen – laut Python-SDK-Dokumentation vor jedem httpx-Import. Die Funktion stellt httpx2 unter dem Namen httpx bereit, damit Patch-Werkzeuge weiterhin funktionieren. Der Migrationsleitfaden warnt ausdrücklich davor, sie in Bibliothekscode aufzurufen: Sie gehört ausschließlich an den Einstiegspunkt der Anwendung.

„Ein sauberer Start beweist nicht, dass eure AI-Aufrufe noch getraced oder gemockt werden.“ — @MarMarLabs, Post vom Tag nach dem Release

Der vollständige Beitrag lohnt sich: Er empfiehlt, diesen unsichtbaren Fehler zum ersten Migrationstest zu machen. Nach dem Upgrade sollte gezielt geprüft werden, ob jeweils ein getraceter und ein gemockter Request weiterhin registriert wird. Der Thread nennt zudem die weiteren stillen Risiken: eigene Transports, die manuell auf httpx2 umgestellt werden müssen, sowie die Python-3.10-Untergrenze, an der ältere CI-Images bereits bei der Installation scheitern.

Was ohne Anpassung weiterläuft

Für viele Codebasen lautet die ehrliche Antwort: Es gibt nichts zu tun. Von der HTTP-Migration ist nicht betroffen, wer keine eigenen Clients, Transports oder Timeout-Objekte erstellt. Unverändert bleiben insbesondere:

  • client.messages.create(...)-Aufrufe mit gewöhnlichen Parametern – gleicher Request, gleiche Response-Modelle.
  • Numerische Timeout-Werte und die SDK-Defaults: 2 Retries mit exponentiellem Backoff bei Verbindungsfehlern, 408, 409, 429 und 5xx; standardmäßig 10 Minuten Timeout.
  • Das Routing über base_url. Wer das SDK auf ein Gateway oder einen API-kompatiblen Relay wie den Claude API endpoint von AIReiter richtet, muss in v1.0 auf dieser Ebene nichts ändern – umgezogen ist der Client, nicht die URL.
  • Pydantic-v1- und -v2-Modelle, SSE-Streaming-Helper und Schnittstellen für Datei-Uploads.

Die einzige harte Voraussetzung lautet Python 3.10+. Alle übrigen Punkte der „sicheren“ Liste gelten erst, wenn diese Hürde erfüllt ist.

Eine Migrationsreihenfolge für saubere Reviews

  1. Zunächst bewusst pinnen: Wenn die Migration noch nicht ansteht, hält anthropic>=0.125,<1 die Version fest, bis Zeit für die Arbeit eingeplant ist.
  2. Die Codebasis nach import httpx und httpx. durchsuchen – jeder Treffer in SDK-nahem Code ist ein Migrationspunkt.
  3. In Claude Code /claude-api upgrade python ausführen. Der Befehl wird in der Release-Ankündigung von @cjav_dev empfohlen und erzeugt einen Diff der Änderungen im Projekt.
  4. Eigene Clients, Transports und Timeouts mit httpx2 oder den Helfern DefaultHttpxClient neu aufbauen.
  5. httpx2.alias_httpx() am Einstiegspunkt der Anwendung ergänzen, falls irgendetwas httpx patcht.
  6. pyright oder mypy ausführen – die httpx2-Typänderungen zeigen sich bei Typannotationen und isinstance-Prüfungen.
  7. In der CI pro Test-Suite einen getraceten und einen gemockten Request verifizieren. Grüne Start-Logs sind kein Nachweis.

FAQ zum Anthropic Python SDK v1.0

Gibt es Anthropic Python SDK v1 bereits, oder ist das Paket noch auf 0.x?

Es gibt sie. anthropic 1.0.0 ging am 20. August 2026 auf PyPI live und wurde auf GitHub als v1.0.0 getaggt, nachdem 0.125.0 am Vortag erschienen war. Die Projektseite auf PyPI verweist Nutzer von 0.x inzwischen auf den Migrationsleitfaden für v1.

Wie übergebe ich temperature, top_p oder top_k nach v1.0?

Sie wurden aus den Methodensignaturen entfernt. Für ältere Modelle, die diese Werte serverseitig noch akzeptieren, lässt sich etwa extra_body={"temperature": 0.7} verwenden. Dabei gilt: Aktuelle Modelle liefern bei nicht standardmäßigen Sampling-Werten einen 400-Fehler – unabhängig vom SDK. Diese Änderung liegt auf Modellebene.

Funktionieren respx-, pytest-httpx- oder vcrpy-Tests weiterhin?

Nicht mit dem Standardclient des SDK, und sie erzeugen dabei keinen Fehler – sie matchen schlicht keine Requests. Entweder wird beim Teststart vor jedem httpx-Import httpx2.alias_httpx() aufgerufen, oder die Mocks werden auf httpx2.MockTransport umgestellt. Eine respx-Version, die nur das alte httpx patcht, kann SDK-Verkehr nicht abfangen.

Was macht /claude-api upgrade python?

Das ist ein Claude-Code-Befehl, der in der Ankündigung von Anthropic-DevX-Ingenieur @cjav_dev empfohlen wird. Er untersucht ein Projekt mit anthropic 0.x und erzeugt einen Migrations-Diff für Imports, Timeout-Objekte und Raw-Response-Aufrufe. Änderungen lassen sich damit prüfen, statt sie erst über Tracebacks zu entdecken.

Bei 0.125 bleiben oder auf 1.0 wechseln?

Eine allgemeingültige Antwort gibt es nicht; entscheidend ist der konkrete Zielkonflikt. Unter 1.0 zu bleiben erhält sämtliche Mocks, Tracer und eigenen Transports unverändert, lässt das Projekt aber auf einem SDK vor der Stabilitätsmarke. Dessen Versionierungspolitik erlaubt inkompatible Änderungen in Minor-Releases, während die verwendete veraltete Oberfläche – Completions und Sampling-Parameter – nun offiziell Altlast ist. Der Wechsel auf 1.0 bringt eine stabile API ohne Beta-Status, verlangt aber jetzt einen vollständigen Audit der HTTP-Schicht statt irgendwann später. Ausschlaggebend ist, wie viel HTTP-Code ein Team selbst besitzt: Ein Service mit einem einfachen Anthropic()-Aufruf ist schnell aktualisiert. Eine Plattform mit eigenen Transports und respx-Test-Suites sollte vor dem Deployment unbedingt die stillen Fehlerfälle prüfen.

Weiterführend: die Skills API, die in derselben Woche die Beta-Phase verlässt, sowie die am 10. August dauerhaft gewordene Preisgestaltung von Sonnet 5 – beide aus derselben Phase der Claude-Platform-Releases.