aboutsummaryrefslogtreecommitdiffstats
path: root/deckit
diff options
context:
space:
mode:
Diffstat (limited to 'deckit')
-rw-r--r--deckit/modules/llm.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/deckit/modules/llm.py b/deckit/modules/llm.py
index 310eabf..fb45097 100644
--- a/deckit/modules/llm.py
+++ b/deckit/modules/llm.py
@@ -9,7 +9,7 @@ import urllib.request
from ..module import Module
-ENDPOINTS = ("/api/claude_limits", "/api/claude_session", "/api/summary")
+ENDPOINTS = ("/api/claude_limits", "/api/claude_session", "/api/summary", "/api/last_session")
def _fetch_for(base):
@@ -37,6 +37,22 @@ def _opencode(rows) -> dict:
}
+def _claude_model(session) -> str | None:
+ models = (session or {}).get("models") or []
+ return models[0].get("model") if models else None
+
+
+def _opencode_session(sessions) -> dict:
+ """The latest opencode session's dominant model from /api/last_session."""
+ for block in sessions or []:
+ if not isinstance(block, dict) or block.get("program") != "opencode":
+ continue
+ rows = block.get("rows") or []
+ top = max(rows, key=lambda r: r.get("calls") or 0) if rows else {}
+ return {"model": top.get("model"), "provider": top.get("provider")}
+ return {"model": None, "provider": None}
+
+
def make(cfg: dict) -> Module:
base = cfg.get("llm", {}).get("url", "http://127.0.0.1:8420").rstrip("/")
fetch = cfg.get("fetch") or _fetch_for(base)
@@ -53,6 +69,8 @@ def make(cfg: dict) -> Module:
latest = limits[-1]
else:
latest = {}
+ claude_session = (data.get("/api/claude_session") or {}).get("session")
+ sessions = (data.get("/api/last_session") or {}).get("sessions") or []
return {
"offline": False,
"claude": {
@@ -65,8 +83,10 @@ def make(cfg: dict) -> Module:
"extra_limit": latest.get("extra_monthly_limit"),
"extra_utilization": latest.get("extra_utilization"),
"extra_currency": latest.get("extra_currency"),
+ "model": _claude_model(claude_session),
},
- "opencode": _opencode(data.get("/api/summary") or []),
+ "opencode": {**_opencode(data.get("/api/summary") or []),
+ **_opencode_session(sessions)},
}
return Module(name="llm", title="LLM usage", state=state)