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,80 @@
|
||||
# Generated from uv.lock — DO NOT EDIT BY HAND.
|
||||
# uv lock # after changing pyproject.toml
|
||||
# uv export --no-dev --no-hashes > requirements.txt
|
||||
# uv users do not need this file: 'uv sync' installs straight from uv.lock.
|
||||
# It exists so a host without uv can still: pip install -r requirements.txt
|
||||
|
||||
# This file was autogenerated by uv via the following command:
|
||||
# uv export --no-dev --no-hashes
|
||||
annotated-doc==0.0.5
|
||||
# via fastapi
|
||||
annotated-types==0.8.0
|
||||
# via pydantic
|
||||
anyio==4.15.1
|
||||
# via
|
||||
# httpx
|
||||
# starlette
|
||||
# watchfiles
|
||||
certifi==2026.7.22
|
||||
# via
|
||||
# httpcore
|
||||
# httpx
|
||||
click==8.5.0
|
||||
# via uvicorn
|
||||
exceptiongroup==1.3.1 ; python_full_version < '3.11'
|
||||
# via anyio
|
||||
fastapi==0.143.2
|
||||
# via llm-monitor
|
||||
h11==0.16.0
|
||||
# via
|
||||
# httpcore
|
||||
# uvicorn
|
||||
httpcore==1.0.9
|
||||
# via httpx
|
||||
httptools==0.9.0
|
||||
# via uvicorn
|
||||
httpx==0.28.1
|
||||
# via llm-monitor
|
||||
idna==3.20
|
||||
# via
|
||||
# anyio
|
||||
# httpx
|
||||
opentelemetry-api==1.45.1
|
||||
# via fastapi
|
||||
pydantic==2.14.1
|
||||
# via fastapi
|
||||
pydantic-core==2.50.1
|
||||
# via pydantic
|
||||
python-dotenv==1.2.4
|
||||
# via uvicorn
|
||||
pyyaml==6.0.3
|
||||
# via uvicorn
|
||||
starlette==1.7.0 ; python_full_version < '3.11'
|
||||
# via fastapi
|
||||
starlette==1.8.0 ; python_full_version >= '3.11'
|
||||
# via fastapi
|
||||
typing-extensions==4.16.0
|
||||
# via
|
||||
# anyio
|
||||
# exceptiongroup
|
||||
# fastapi
|
||||
# opentelemetry-api
|
||||
# pydantic
|
||||
# pydantic-core
|
||||
# starlette
|
||||
# typing-inspection
|
||||
# uvicorn
|
||||
typing-inspection==0.4.4
|
||||
# via
|
||||
# fastapi
|
||||
# pydantic
|
||||
uvicorn==0.54.0
|
||||
# via llm-monitor
|
||||
uvloop==0.23.0 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'
|
||||
# via uvicorn
|
||||
watchfiles==1.3.0
|
||||
# via uvicorn
|
||||
websockets==16.1.1 ; python_full_version < '3.11'
|
||||
# via uvicorn
|
||||
websockets==17.2 ; python_full_version >= '3.11'
|
||||
# via uvicorn
|
||||
Reference in New Issue
Block a user