Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,21 @@ jobs:
run: node smoke/ui-primitives.mjs
- name: app shell and view model
run: node smoke/shell.mjs
- name: collector boots and serves (headless)
run: |
set -euo pipefail
python3 collector/speculum.py --port 18792 &
pid=$!
trap 'kill "$pid" 2>/dev/null || true' EXIT
for i in $(seq 1 20); do
curl -sf http://127.0.0.1:18792/api/snapshot >/dev/null && break
sleep 0.5
done
curl -sf http://127.0.0.1:18792/api/snapshot | python3 -m json.tool
tmp=$(mktemp)
timeout 2 curl -sN http://127.0.0.1:18792/api/stream > "$tmp" || true
head -n 2 "$tmp"
rm -f "$tmp"

windows:
runs-on: windows-latest
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ The deck holds twelve panels:

| Panel | Shows |
|---|---|
| **KPI** | ten metrics in four groups: Throughput (decode rate — which names the model it tracks, requests/min), Latency (first token, time per token, p95), Cache (hit rate, re-ingest tax, MTP acceptance), Capacity (VRAM, queue depth). Each carries a 60-min sparkline and a delta against 15 min ago. |
| **KPI** | ten metrics in four groups: Throughput (decode rate, which names the model it tracks, and requests/min), Latency (first token, time per token, p95), Cache (hit rate, re-ingest tax, MTP acceptance), Capacity (VRAM, queue depth). Each carries a 60-min sparkline and a delta against 15 min ago. |
| **Throughput** | rolling decode tok/s, one trace per engine, 15 min to 30 d. Ranges past 1 h read from the history database. |
| **GPU & host** | meters for temperature, utilisation, power draw and VRAM, with warn/crit ticks from the real power limit and VRAM total. Device readouts (SM and memory clock, fan, PCIe) plus host CPU, RAM, load and top processes. |
| **Context** | one bar per live session: prompt tokens against the model window, ticks at 75 % and 90 %. |
Expand Down Expand Up @@ -154,7 +154,7 @@ port = 9091 # default http://127.0.0.1:9090
url = "http://127.0.0.1:8090" # default http://127.0.0.1:8080
```

NInfer has no port of its own: it rides the proxy llama-swap reports in `/running`, so fixing `[llama_swap]` is enough. Ports configured here are skipped by discovery, so they are never mistaken for a separate engine.
NInfer has no port of its own: it uses the proxy that llama-swap reports in `/running`, so fixing `[llama_swap]` is enough. Ports configured here are skipped by discovery, so they are never mistaken for a separate engine.

## Demo mode

Expand Down Expand Up @@ -226,7 +226,7 @@ node smoke/shell.mjs # real app.js shell,
python3 -m http.server 8792 # → http://localhost:8792/?demo
```

The UI files are ES modules, so `node --check` does not apply to them. The smoke scripts import and run them, which serves as the parse-and-run check.
The UI files are ES modules, so `node --check` does not apply to them. The smoke scripts import and run them, which is the parse-and-run check.

The two `test_hostinfo.py` skips are platform gates: the `/proc` backend runs on Linux and the Win32 ctypes backend runs only on Windows. On a Linux box the Windows path is read, not executed, so its numbers stay unverified until you run the suite on Windows.

Expand Down
Loading