SPS logo

SPS Dev Tool Guides

Shared AI infrastructure for the Sand Point Studios dev team

SPS fleet — hardware and GPU lane allocation

Generated 2026-08-24 17:05 UTC by Workstation Hub/scripts/fleet_inventory.py. Do not hand-edit — re-run the script. This page exists because hand-written hardware docs go stale silently; every field below was read off the machine.

The allocation principle

The fast card serves what someone is waiting on. The slow card serves what can wait.

Coding is interactive — bots and people block on it — so it owns the 5090. Vision, reranking and embeddings are latency-tolerant, so they live on the slower Arc B70 and on srv3, and cost nothing.

sps-srv1 (vigil-server)

Production AI server — gateway, Mattermost, monitoring, coder + vision + rerank lanes

OS Ubuntu 24.04.4 LTS
Kernel 6.17.0-5-generic
CPU AMD Ryzen 7 3700X 8-Core Processor
Cores 16
Memory 125G total / 96G available
Disk 1.8T total / 273G free
Network enp10s0 192.168.0.21/24
Tailscale 100.98.48.21
Uptime 1 week, 5 days, 22 hours, 49 minutes

GPUs

# Model VRAM total in use free
0 NVIDIA GeForce RTX 5090 32607 MiB 31666 MiB 429 MiB

GPUs (Intel Arc — VRAM not exposed via sysfs)

Serving lanes

Containers (64): agoge-platform, breakglass-vault, case-livekit-livekit-1, case-livekit-livekit-redis-1, case-platform-redis, cloudbeaver, cloudbeaver-demo, code-oliver, coder, coder-raghav-seat, coder-teagan-localtest, coder-teagan-seat, course-mariadb, dash-msu, dash-personal, dl-nginx, family-recipe-box-api-1, firstread, gitea, glitchtip-postgres-1, glitchtip-redis-1, glitchtip-web-1, glitchtip-worker-1, homarr, homepage, immich-ml, immich-postgres, immich-redis, immich-server, kokoro-tts, litellm, lsv-5090, lsv-b70-rerank, lsv-b70-vlm, mattermost, mattermost-postgres, ntfy, nwz-api, nwz-mobile-api, nwz-postgres, shotsmith, sns-books-postgres, str-ops-backend, str-ops-db, str-ops-frontend, ta-review-auth, ta-review-db, ta-review-gateway, ta-review-rest, timekeep-backend, timekeep-postgres, tutorial-engine, uptime-kuma, vigil-alertmanager, vigil-cadvisor, vigil-dcgm-exporter, vigil-grafana, vigil-ledger-api, vigil-node-exporter, vigil-postgres, vigil-prometheus, vigil-qdrant, vigil-redis, wyrdlyre-art

sps-srv2

Inference appliance — serves Llama-3.3-70B, ~88% of gateway traffic

OS Ubuntu 25.04
Kernel 6.14.0-15-generic
CPU AMD Ryzen 5 7600X 6-Core Processor
Cores 12
Memory 29G total / 11G available
Disk 937G total / 781G free
Network wlp15s0 192.168.4.216/22
Tailscale 100.121.113.104
Uptime 17 hours, 30 minutes

GPUs (Intel Arc — VRAM not exposed via sysfs)

Serving lanes

Containers (1): lsv

sps-srv3

Offload tier — fleet embeddings, Agoge backend

OS Ubuntu 24.04.4 LTS
Kernel 6.8.0-137-generic
CPU AMD Ryzen 7 5800X3D 8-Core Processor
Cores 16
Memory 31G total / 29G available
Disk 915G total / 838G free
Network enp7s0 192.168.5.10/22
Tailscale 100.91.14.88
Uptime 1 week, 5 days, 22 hours, 49 minutes

GPUs

# Model VRAM total in use free
0 NVIDIA GeForce RTX 2060 SUPER 8192 MiB 472 MiB 7314 MiB
1 NVIDIA GeForce RTX 2070 SUPER 8192 MiB 1 MiB 7785 MiB

Containers (1): agoge-backend

Ollama resident: nomic-embed-text:latest

mac-mini1

Voice node — Whisper STT + Kokoro TTS; the only macOS in the fleet

OS macOS 26.5.1
Kernel 25.5.0
CPU Apple M4 Pro
Cores 12
Memory 24GB unified memory
Disk 460Gi total / 347Gi free
Uptime 5 days, 20:49

Listening services

What each model is for

Probed values above are live. This table is maintained by hand — a machine can tell you a model is loaded, not why it exists. Consumers were verified against live configs, not assumed.

qwen3.8-27b

Runs on: sps-srv1 · RTX 5090 · lsv-5090:8021

Purpose. The coding lane. Agentic code generation and tool use at 81,920 context — sized to clear the ~66.5K average real session.

Used by: Coder seats (/opt/coder/templates/sps-seat/main.tf), NWZ agents (/etc/nwz/env)

Why there: Interactive: people and bots block on it, so it gets the fast card.

qwen3.8-27b-strict

Runs on: sps-srv1 · RTX 5090 · same backend

Purpose. Same model, deliberately absent from every fallback block. A no-paid-models sandbox that quietly answers from Sonnet is worse than one that fails, so this alias fails loudly or not at all.

Used by: reesarth/qwen and teagan/qwen Coder workspaces

Why there: Key scoping alone was not trusted to prevent a paid fallback.

Llama-3.3-70B-Instruct → gateway alias llama-3.3-70b

Runs on: sps-srv2 · 2× Arc Pro B60 · pipeline-parallel 2 · util 0.95

Purpose. The general-purpose workhorse — roughly 88% of all gateway traffic. Chat, reasoning, summarisation, triage.

Used by: Mattermost agents (sps-agent-router), company Vigil Q&A (vigil-ask), product personas, NWZ ticket triage, Vigil Steward orchestrator (ORCHESTRATOR_MODEL)

Why there: Needs both B60s; nothing else in the fleet fits a 70B.

qwen2.5-vl-7b

Runs on: sps-srv1 · Arc Pro B70 · lsv-b70-vlm:8023 · util 0.70

Purpose. Vision. Turns image attachments into text before they reach the answering model — Llama-3.3-70B has no vision, and text is what the conversation store can carry forward.

Used by: Mattermost agents (attachments), document ingestion via the local-only doc-ingest-vision key

Why there: Latency-tolerant — nobody waits on an attachment description — and it replaces a metered Claude call with $0.

bge-reranker-v2-m3

Runs on: sps-srv1 · Arc Pro B70 · lsv-b70-rerank:8022 · util 0.18

Purpose. Cross-encoder reranking. Reads question and passage together and reorders retrieved chunks, which embedding similarity cannot do. Retrieval pulls 24 candidates; this picks what reaches the prompt.

Used by: vigil-ask, sps-agent-router (both RAG paths)

Why there: Small, latency-tolerant, and it measurably improves answers.

nomic-embed-text

Runs on: sps-srv3 · RTX 2060 SUPER · Ollama:11434

Purpose. Embeddings — 768-dim vectors for every semantic search in the fleet. One pass per document at ingest, one per question at query.

Used by: vigil_sps_brain (SPS knowledge, vigil-ask + agents), vigil_memory + persona_facebook_photos (Vigil Steward), docs_vault (vault-ingest)

Why there: srv1's 5090 leaves 429 MiB — the model just fits, so it loaded intermittently. srv3's cards are idle and it is 27 ms warm.

llama3.1:8b

Runs on: sps-srv3 · Ollama:11434

Purpose. Utility model. Mechanical small jobs — summarising an advert, tidying a label, classifying a line — where a 70B buys nothing.

Used by: Vigil Steward (UTILITY_MODEL, OLLAMA_UTILITY_BASE_URL)

Why there: Deliberately off the 70B route so a one-line summary cannot be blocked by sps-srv2 being off the network.

Kokoro-82M → gateway alias kokoro-tts

Runs on: sps-srv1 · CPU · kokoro-tts:8007 → LiteLLM

Purpose. Text-to-speech, OpenAI-compatible /v1/audio/speech. Measured 2.91× realtime on CPU (2026-08-24).

Used by: MSU course narration, any TTS through the gateway

Why there: ⚠️ Runs the kokoro-fastapi-cpu image with no GPU attached — it is on srv1's CPU, not the 5090. It costs no VRAM, which is why it can coexist with the coder lane. The Mac mini copy (:8091, 3.8× realtime) is currently DOWN and is the duplicate.

Chatterbox TTS (ResembleAI)

Runs on: mac-mini1 · M4 Pro · :8092 → gateway alias chatterbox-tts

Purpose. The BACKUP TTS, and the voice-cloning option. OpenAI-compatible /v1/audio/speech, model id chatterbox-tts-1.

Used by: Gateway alias chatterbox-tts, wired 2026-08-24. Callers ask for it by name: LiteLLM's fallbacks cover chat completions, not audio, so there is NO automatic failover from kokoro-tts.

Why there: Stood up 2026-08-09 — the same day Kokoro was retired from this box — then left reachable by nothing until 2026-08-24. Slower than Kokoro (~11s vs sub-second through the gateway for the same sentence), so it is the backup rather than the default. voices.json is still empty, so no cloned voice is configured yet. Weights live in ~/.cache/huggingface (3.0 GB), which is why ~/chatterbox/models looks empty and misleads.

Whisper ggml-large-v3-turbo

Runs on: mac-mini1 · M4 Pro · :8090

Purpose. Speech-to-text, ~11× realtime. Feed it 16 kHz mono WAV — there is no --convert.

Used by: Voice capture for Vigil Steward / Iris, MSU transcription

Why there: Apple Silicon is genuinely fast at this and the box is otherwise idle. Only macOS in the fleet.

claude-haiku-4-5 / sonnet-5 / opus-5

Runs on: Anthropic API via LiteLLM :9002 — metered

Purpose. Paid fallback when a local lane is down, plus jobs local models are not good enough for. Haiku is the fallback target everywhere because it always answers and never silently upgrades cost.

Used by: msu-inbox triage, fallback for every local alias, print-gateway image triage

Why there: Deliberate: the fallback keeps the gateway answering during an outage. PaidFallbackFiring alerts so it is visible, not silent.


Sources of truth this page does not replace: ~/dev-context/fleet-capabilities.md (capability → endpoint lookup), Workstation Hub/LINKS.md (URLs), and each project's CLAUDE.md.