MODEL PLAYGROUND
The live tool runs on the machine itself
Browser-side API calls from this documentation page are blocked by browser private-network policy (public site → tailnet IP), so the interactive playground is served from the machine itself over the tailnet HTTPS endpoint — same origin as the API, no CORS, no workarounds:
https://frame-serv-2.tail8056c7.ts.net/playground/
tailnet device required (any device on the dxverm tailnet)
What it does
- Chat-style: type a prompt, hit run — the same prompt goes to each selected model one at a time. Each run appears as a log entry with its status.
- Output links: when a model finishes you get an open output link — full text, first-token latency, total time, token count, t/s, and the complete transcript. Compare outputs side by side at your own pace.
- Tool-use mode: optional second round — the request carries a
get_weathertool; structured tool calls get executed (simulated weather) and fed back, so you see the full two-step agent loop. - Saved locally: run history lives in your browser's localStorage — past runs re-appear with their output links on every visit.
Timing note: the first token includes the model swap (llama-swap unloads the previous model and loads the next — 67–113 GB swaps take minutes). The t/s on the output page reflects generation rate after that first token.
Setup (once per browser)
- Paste the endpoint API key into the key field (stored in that browser's
localStorage only — never published here; get it from the operator or
/srv/llm/secrets/api-keyon the machine). - Click Load models — the list populates from
/v1/models. - Optionally enable tool-use test, set max_tokens, then Run sequential benchmark.
Expected run profile
| Model | Load (first token) | Sustained decode |
|---|---|---|
| qwen38-27b | ~seconds (MTP, often resident) | ~19 t/s |
| flashnext-iq1s / fp4 | ~30–60 s load | 29–31 t/s |
| glm53-flash | ~45 s load | ~14 t/s |
| dsv4-flash | ~45 s load | ~21 t/s |
| llama-3.3-70b | ~25 s load | ~5 t/s |
Full benchmark methodology: Benchmarks.
How it's built
Served by the box itself: static page at /srv/llm/playground/ mounted via
tailscale serve at /playground/, same origin as the API — no
cross-origin requests, no public exposure. Source is a single HTML file; tweak it
in place and refresh.