From 7a985a14d440acdda93dc7a43ee7c6bdecc2bf44 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 9 Nov 2026 19:28:18 +0100 Subject: feat: LLM card shows current session models with section headers --- deckit/modules/llm.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'deckit/modules') 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) -- cgit v1.2.3