Files
mesh-configs/skills/devops/openrouter-cost-budgeting/references/cost-brake-ops.md
T

76 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
```bash
# 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)
```python
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:
```bash
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.