initial import: read-only gufo + vLLM dashboard
Build and Push Container / build-and-push (push) Successful in 38s
Build and Push Container / build-and-push (push) Successful in 38s
Single-file FastAPI proxy plus a no-CDN vanilla-JS page for watching a gufo
server and a vLLM server side by side: one Prometheus parser (class Prom) with
per-engine field maps, measured Δcounter/Δt rates for engines that export no
rate gauge, and strict read-only GET-only routing. Engines are opt-in via
*_BASE_URL — unset means no panel, no poll, and a 404 {"configured": false}
without dialling.
Includes the container image and CI so the dashboard can be deployed as an
image rather than a checkout:
- Containerfile: uv-locked two-stage build on python:3.14-slim, non-root
(uid 10001), binds 8090 (8000 is vLLM's port in this fleet), healthcheck on
/api/config so a dead engine never marks the dashboard unhealthy. No frontend
build stage — static/index.html is bundler-free by design and is copied as-is.
- .gitea/workflows/build-and-push.yml: publishes
gitea.reeseapps.com/Experimental/llm-monitor on main + release tags.
114 tests, no network and no real engines required.
LLM-Generated: true
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
[project]
|
||||
name = "llm-monitor"
|
||||
version = "1.0.0"
|
||||
description = "Read-only real-time dashboard for a gufo server and a vLLM server (sessions, queueing, cache pressure, throughput, latency)"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.10"
|
||||
# Deliberately tiny: the Prometheus exposition is parsed in-process (class Prom in
|
||||
# app.py) rather than pulled in as prometheus_client, and the frontend has zero
|
||||
# runtime deps (vanilla JS + inline SVG, no CDN).
|
||||
dependencies = [
|
||||
"fastapi>=0.111",
|
||||
"httpx>=0.27",
|
||||
"uvicorn[standard]>=0.30",
|
||||
]
|
||||
|
||||
# uv dev group: installed by plain `uv sync` (skip with `uv sync --no-dev`).
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"pytest>=8",
|
||||
"pytest-cov>=5",
|
||||
]
|
||||
|
||||
# Not a distributable package — a single-file app run as `uv run uvicorn app:app`.
|
||||
# package=false means no build backend, nothing to install, `uv run` just syncs deps.
|
||||
[tool.uv]
|
||||
package = false
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
testpaths = ["tests"]
|
||||
addopts = "-q --strict-markers"
|
||||
|
||||
[tool.coverage.run]
|
||||
source = ["app"]
|
||||
omit = ["tests/*"]
|
||||
|
||||
[tool.coverage.report]
|
||||
show_missing = true
|
||||
skip_covered = false
|
||||
Reference in New Issue
Block a user