v6 Phase A: Dashboard & Toolbar
- 'Dein Stack' zeigt echtes Modell (Dateiname) hinter coder/scout/vision. - Top-News-Karte auf der Uebersicht (neben Stack). - Toolbar-Update-Badges: /api/updates (OS via apt-Cache + Modell-Upgrades), klickbar -> Server bzw. News. compute_upgrades aus cookbook wiederverwendet. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+8
-5
@@ -185,10 +185,8 @@ def _pick_gguf(repo: str, quant: str = "Q4_K_M") -> str | None:
|
||||
return (pref or nosplit or ggufs)[0]
|
||||
|
||||
|
||||
@router.get("/upgrades")
|
||||
def upgrades():
|
||||
"""Schlägt für installierte 'alte' Modelle ein aktuelleres vor (UPGRADES-Map)."""
|
||||
ram_gb = psutil.virtual_memory().total / (1024 ** 3)
|
||||
def compute_upgrades(ram_gb):
|
||||
"""Liste relevanter Modell-Upgrades für die installierten Modelle (UPGRADES-Map)."""
|
||||
installed = (read_config().get("models") or {})
|
||||
out, seen = [], set()
|
||||
for up in UPGRADES:
|
||||
@@ -210,7 +208,12 @@ def upgrades():
|
||||
"fit": evaluate_fit(up["params_b"], up["quant"], 8192, ram_gb),
|
||||
"optimal_ctx": max_ctx_for(up["params_b"], up["quant"], ram_gb),
|
||||
})
|
||||
return {"upgrades": out}
|
||||
return out
|
||||
|
||||
|
||||
@router.get("/upgrades")
|
||||
def upgrades():
|
||||
return {"upgrades": compute_upgrades(psutil.virtual_memory().total / (1024 ** 3))}
|
||||
|
||||
|
||||
@router.post("/install-model")
|
||||
|
||||
@@ -72,6 +72,25 @@ def reboot(req: PwdReq):
|
||||
pass
|
||||
return {"ok": True, "note": "Reboot getriggert."}
|
||||
|
||||
@router.get("/updates")
|
||||
def updates():
|
||||
"""Ausstehende Updates für die Toolbar: OS-Pakete (apt-Cache) + Modell-Upgrades."""
|
||||
import psutil
|
||||
from routers.cookbook import compute_upgrades
|
||||
os_count = 0
|
||||
try:
|
||||
out = subprocess.run(
|
||||
["bash", "-c", "apt list --upgradable 2>/dev/null | grep -c upgradable || true"],
|
||||
capture_output=True, text=True, timeout=10)
|
||||
os_count = int((out.stdout or "0").strip() or 0)
|
||||
except Exception: # noqa: BLE001
|
||||
os_count = 0
|
||||
try:
|
||||
models = len(compute_upgrades(psutil.virtual_memory().total / (1024 ** 3)))
|
||||
except Exception: # noqa: BLE001
|
||||
models = 0
|
||||
return {"os": os_count, "models": models}
|
||||
|
||||
@router.websocket("/logs/{service}")
|
||||
async def stream_logs(websocket: WebSocket, service: str):
|
||||
await websocket.accept()
|
||||
|
||||
Reference in New Issue
Block a user