Anbinden · Weg C

Node-SDK

Für Node ≥ 18: ein fetch-Ersatz, den Sie dem Anthropic- oder OpenAI-Client geben, eine Lauf-Klammer über AsyncLocalStorage und eine benannte Ausnahme bei einem Stopp.

Installation

# Das SDK liegt im Tokenwacht-Repository unter sdk/node (keine Abhängigkeiten, TypeScript-Typen enthalten).
npm install ./sdk/node
# Veröffentlichung auf npm als „tokenwacht-sdk" ist vorbereitet; bis dahin aus dem Repository installieren.

Anthropic-Client

const Anthropic = require("@anthropic-ai/sdk");
const { Wacht, BudgetUeberschritten } = require("tokenwacht-sdk");

const wacht = new Wacht({ schluessel: process.env.TOKENWACHT_KEY, agent: "liv-connector", kunde: "kunde-0815" });
const client = new Anthropic({ baseURL: wacht.anthropicUrl(), fetch: wacht.fetch });

await wacht.lauf("RL-0815", { budgetEur: 2.5 }, async (lauf) => {
  try {
    await client.messages.create({ model: "claude-sonnet-5", max_tokens: 800, messages: [{ role: "user", content: "…" }] });
    lauf.schritt("leadliste_erzeugen");
  } catch (e) {
    if (e instanceof BudgetUeberschritten) console.log("gestoppt:", e.hinweis, e.cockpitUrl);
    else throw e;
  }
});

OpenAI, Gemini, Bedrock

const openai = new OpenAI({ baseURL: wacht.openaiUrl(), fetch: wacht.fetch });
// Gemini und Bedrock: wacht.geminiUrl(), wacht.bedrockUrl() als Basis-URL, wacht.fetch als fetch

Vercel AI SDK, LangChain.js

import { createAnthropic } from "@ai-sdk/anthropic";
const anthropic = createAnthropic({ baseURL: wacht.anthropicUrl(), fetch: wacht.fetch });
// LangChain.js: new ChatAnthropic({ anthropicApiUrl: wacht.anthropicUrl(), clientOptions: { fetch: wacht.fetch } })

Eigene Zählwerte

await wacht.melden({ anbieter: "anthropic", modell: "claude-sonnet-5", eingabe_token: 1200, ausgabe_token: 57 });
Prüfen: npm test im SDK-Ordner läuft ohne Netz; die echte Anbindung prüfen Sie mit curl https://tokenwacht.de/v1/anbindung/pruefen -H "Authorization: Bearer $TOKENWACHT_KEY".