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
81 lines
1.9 KiB
Plaintext
81 lines
1.9 KiB
Plaintext
# 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
|