feat(bot): API-Kosten Tool — OpenRouter Guthaben/Verbrauch per Chat abfragen

This commit is contained in:
Cursor 2026-03-21 12:13:58 +01:00
parent 36d708bee1
commit 785aa36a35

View file

@ -0,0 +1,84 @@
"""API-Kosten Tool — OpenRouter Guthaben und Verbrauch abfragen."""
import requests
from core import config
TOOLS = [
{
"type": "function",
"function": {
"name": "get_api_costs",
"description": "OpenRouter API-Kosten und Guthaben abfragen. Zeigt Verbrauch (heute/Woche/Monat), Restguthaben und Hochrechnung.",
"parameters": {
"type": "object",
"properties": {},
},
},
},
]
def _get_key():
cfg = config.parse_config()
return cfg.api_keys.get("openrouter_key", "")
def handle_get_api_costs(**kw):
key = _get_key()
if not key:
return "OpenRouter API Key fehlt in homelab.conf"
headers = {"Authorization": f"Bearer {key}"}
try:
r_key = requests.get("https://openrouter.ai/api/v1/auth/key",
headers=headers, timeout=10)
r_key.raise_for_status()
key_data = r_key.json().get("data", {})
except Exception as e:
return f"API-Abfrage fehlgeschlagen: {e}"
try:
r_credits = requests.get("https://openrouter.ai/api/v1/credits",
headers=headers, timeout=10)
r_credits.raise_for_status()
credit_data = r_credits.json().get("data", {})
except Exception:
credit_data = {}
usage_daily = key_data.get("usage_daily", 0)
usage_weekly = key_data.get("usage_weekly", 0)
usage_monthly = key_data.get("usage_monthly", 0)
total_credits = credit_data.get("total_credits", 0)
total_usage = credit_data.get("total_usage", 0)
remaining = total_credits - total_usage if total_credits else None
monthly_forecast = usage_daily * 30 if usage_daily > 0 else 0
lines = [
"OpenRouter API-Kosten",
"",
f"Heute: ${usage_daily:.4f}",
f"Woche: ${usage_weekly:.4f}",
f"Monat: ${usage_monthly:.4f}",
]
if monthly_forecast > 0:
lines.append(f"Prognose (30d): ${monthly_forecast:.2f}")
lines.append("")
if remaining is not None:
lines.append(f"Guthaben: ${total_credits:.2f}")
lines.append(f"Verbraucht: ${total_usage:.2f}")
lines.append(f"Restguthaben: ${remaining:.2f}")
if usage_daily > 0 and remaining > 0:
days_left = remaining / usage_daily
lines.append(f"Reicht noch: ~{days_left:.0f} Tage (bei aktuellem Verbrauch)")
else:
lines.append("Guthaben: unbegrenzt (kein Limit gesetzt)")
return "\n".join(lines)
HANDLERS = {"get_api_costs": handle_get_api_costs}