Anbinden · Weg C
Python-SDK
Das SDK setzt die Kopfzeilen für Sie, klammert Läufe und wirft bei einem Stopp eine benannte Ausnahme. Es überträgt nichts, was Ihr Anbieter-Client nicht ohnehin schickt.
Installation
# Das SDK liegt im Tokenwacht-Repository unter sdk/python (Python ≥ 3.9, nur httpx als Abhängigkeit). pip install ./sdk/python # Veröffentlichung auf PyPI als „tokenwacht-sdk" ist vorbereitet; bis dahin aus dem Repository installieren.
Anthropic-Client mit Lauf-Klammer
import os
from anthropic import Anthropic
from tokenwacht_sdk import Wacht, BudgetUeberschritten
wacht = Wacht(schluessel=os.environ["TOKENWACHT_KEY"], agent="nils-icp-research", kunde="kunde-4711")
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"], base_url=wacht.anthropic_url(), http_client=wacht.http_client())
with wacht.lauf("RL-0815", budget_eur=2.5) as lauf:
try:
client.messages.create(model="claude-sonnet-5", max_tokens=800, messages=[…])
lauf.schritt("leadliste_erzeugen") # X-TW-Step und X-TW-Funktion ab hier
client.messages.create(…)
except BudgetUeberschritten as b:
print("Tokenwacht hat den Lauf gestoppt:", b.hinweis, b.cockpit_url)
OpenAI-Client
from openai import OpenAI client = OpenAI(api_key=os.environ["OPENAI_API_KEY"], base_url=wacht.openai_url(), http_client=wacht.http_client())
Was das SDK tut
wacht.http_client()liefert einen httpx-Client mit Ereignis-Hooks: vor jeder Anfrage setzt erX-TW-Key,X-TW-Agent,X-TW-Kunde, innerhalb einer Lauf-KlammerX-TW-Run,X-TW-Step,X-TW-Funktion.- Antwortet der Proxy mit 402 und einem Tokenwacht-Fehler, wirft es
BudgetUeberschrittenmitregel,grenze,verbraucht_eur,lauf_id,hinweis,cockpit_url. wacht.lauf(id, budget_eur=…)ist ein Kontextmanager; verschachtelte Aufrufe in Threads oder Tasks erben den Lauf über eine Kontextvariable.wacht.melden([...])schickt eigene Zählwerte an die Ingest-Schnittstelle, z. B. aus einem Framework-Callback.
Frameworks
LangChain: Geben Sie dem ChatAnthropic- bzw. ChatOpenAI-Modell base_url und default_headers mit, oder übergeben Sie den httpx-Client des SDK. LlamaIndex, Haystack, pydantic-ai: dasselbe Muster, jedes dieser Frameworks erlaubt Basis-URL und Kopfzeilen am Modell-Client.
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-sonnet-5", base_url=wacht.anthropic_url(),
default_headers=wacht.kopf()) # Kopfzeilen des aktuellen Kontexts
Prüfen:
curl https://tokenwacht.de/v1/anbindung/pruefen -H "Authorization: Bearer $TOKENWACHT_KEY" — das letzte Ereignis muss Ihren Agentennamen tragen.