UI update changed

This commit is contained in:
Dobromir Popov
2026-07-08 22:58:11 +03:00
parent 1e44e8e578
commit 4a10eb6013
7 changed files with 541 additions and 158 deletions

View File

@@ -2707,6 +2707,8 @@ class _TrackerHandler(http.server.BaseHTTPRequestHandler):
self._handle_billing_summary()
elif parsed.path == "/v1/billing/settlements":
self._handle_billing_settlements()
elif parsed.path == "/v1/account/usage":
self._handle_account_usage(parsed)
elif parsed.path == "/v1/account":
self._handle_account_me()
elif parsed.path == "/v1/admin/accounts":
@@ -4536,7 +4538,7 @@ class _TrackerHandler(http.server.BaseHTTPRequestHandler):
self._send_json(200, {"ok": True}, headers={"Set-Cookie": _session_cookie_header(None)})
def _handle_account_me(self):
"""Balance, usage, and API keys for the logged-in account."""
"""Balance, usage totals, and API keys for the logged-in account."""
server: _TrackerHTTPServer = self.server # type: ignore[assignment]
if self._require_accounts() is None:
return
@@ -4546,10 +4548,10 @@ class _TrackerHandler(http.server.BaseHTTPRequestHandler):
return
keys = server.accounts.keys_for(account["account_id"]) # type: ignore[union-attr]
balances = {}
usage: dict = {"requests": 0, "total_tokens": 0, "total_cost": 0.0, "recent": [], "records": []}
usage: dict = {"requests": 0, "total_tokens": 0, "total_cost": 0.0}
if server.billing is not None:
balances = {key: server.billing.get_client_balance(key) for key in keys}
usage = server.billing.usage_for(keys)
usage = server.billing.usage_totals_for(keys)
self._send_json(200, {
"account": account,
"api_keys": keys,
@@ -4559,6 +4561,35 @@ class _TrackerHandler(http.server.BaseHTTPRequestHandler):
"topup_amount": server.devnet_topup_amount if server.billing is not None else 0.0,
})
def _handle_account_usage(self, parsed: urllib.parse.ParseResult):
"""Per-request charge history for the logged-in account (billing tab)."""
server: _TrackerHTTPServer = self.server # type: ignore[assignment]
if self._require_accounts() is None:
return
account = self._session_account()
if account is None:
self._send_json(401, {"error": "login required"})
return
keys = server.accounts.keys_for(account["account_id"]) # type: ignore[union-attr]
if server.billing is None:
self._send_json(200, {
"requests": 0,
"total_tokens": 0,
"total_cost": 0.0,
"records": [],
"recent": [],
})
return
limit = None
raw_limit = urllib.parse.parse_qs(parsed.query).get("limit", [None])[0]
if raw_limit is not None:
try:
limit = max(1, int(raw_limit))
except ValueError:
self._send_json(400, {"error": "limit must be an integer"})
return
self._send_json(200, server.billing.usage_for(keys, recent_limit=limit))
def _handle_account_profile(self):
accounts = self._require_accounts()
if accounts is None: