Files

3.1 KiB
Raw Permalink Blame History

Kosten-Bremse — Betriebsreferenz (Session 2026-08)

Ergebnis einer kompletten Nachbaustufe: Kosten-Überwachung + automatisches Bremsen über OpenRouter in einem Multi-Agent-Mesh (Master + 3 Sub-Agents).

Tatsächliche OpenRouter-Endpoints (verifiziert 08.08)

# Konto-weit, USD, kumulativ über Kontoleben:
GET https://openrouter.ai/api/v1/credits
# -> data.total_credits, data.total_usage   (total_credits - total_usage = verfügbar)

# Pro-Key:
GET https://openrouter.ai/api/v1/auth/key
# -> data.usage  (gleiche kumulierte Größe pro Schlüssel)
  • Zwei Messe: /credits (verbindlich, account-weit) + /auth/key (pro-Agent-Verteilung).
  • Alle Keys desselben Accounts liefern in /credits dieselbe Zahl; /auth/key usage differiert.
  • X-OR-Usage-Cost-USD Response-Header war NICHT vorhanden → stattdessen chat-completions Body usage.cost (USD) liefert exakte Pro-Request-Kosten.

Python-Call für Kosten-Abfrage (Key bleibt lokal)

import json,re,urllib.request
e=open('/root/.hermes/.env').read()
key=re.search(r'OPENROUTER_API_KEY=([A-Za-z0-9_.\-]+)',e).group(1)
h={"Authorization":f"Bearer {key}"}
c=json.load(urllib.request.urlopen(urllib.request.Request(
  "https://openrouter.ai/api/v1/credits",headers=h),timeout=15))["data"]
print(c.get("total_credits"), round(c.get("total_usage",0),2))

Für Sub-Agents per SSH ausführen, Key bleibt auf dem Agenten, nur die Zahl kommt zurück.

Delta-Logik (die Kern-Korrektur aus dem Team-Review)

total_usage ist KONTOLEBEN-kumulativ. Falsch war: total_usage > Cap (pausiert dauerhaft) und letzte-heute − erste-heute (Mitternachts-Lücke, Einzel-Tag=0, Reset negativ).

Korrigiert:

  • Tages-Delta tagübergreifend: letzter-Wert-heute − letzter-Wert-vortag
  • Monats-Basis = letzter Eintrag des VORMONATS (fallback Monatsanfang, fallback row[0])
  • negative Werte → 0
  • 7-Tage-Kumulativ-Summe als Zweit-Check

Kill-Switch-Durchsetzung (Poller-Guard)

In mesh-agent-poller.sh vor der Task-Übernahme:

KILL_CHECK=$($SSH_CMD "python3 -c \"
import json
try: d=json.load(open('/srv/work/costs/kill_switches.json'))
except Exception: d={}
sw=d.get('kill_switches',{}).get('$MEINE_ID',{})
print('PAUSED' if sw and sw.get('status')=='PAUSED' else 'OK')" 2>/dev/null")
if [ "$KILL_CHECK" = "PAUSED" ]; then log "Budget-BREMSE aktiv"; exit 0; fi

Modell-Block (Hermes)

hermes config set model.providers.openrouter.blocked_models '["deepseek/deepseek-v4-pro"]' (Key model. Singular). Danach taucht es nicht mehr in hermes models list auf.

Chronologie der Fehler (saubere Lektionen)

  1. Erst 25$ Monats-Cap → zu aggressiv → Nutzer korrigierte: Wallet-Modell (1$/Tag/Agent, kein Monats-Stopp, solange Guthaben da arbeiten).
  2. total_usage kumulativ mit Cap verglichen → dauerhafter Fehlalarm → Team (Switch) meldete row[0]-Basis-Problem → auf Vormonats-Basis korrigiert.
  3. Unser eigenes Sup-Tool-Test überschrieb costs.jsonl mit Testdaten → Echte-Daten wiederherstellen via frischem cost-track-Lauf (kein Test-Artefakt zurücklassen).
  4. models. vs model. Config-Key → Singular.