PAI Infrastructure Design — Hardware Optimization & Resilience

Version: 1.0
Date: 2026-04-14
Audited by: PNC (PAI Nova Claude)


1. Hardware Inventory & Capability Weighting

1.1 Node Registry

NodeLAN IPTailscaleCPURAMGPUStorageStatus
pai-primary192.168.50.20100.71.20.100i7-11800H (8C)32GBRTX 3060 Mobile 6GB VRAM292GB SSD✅ Online
pai-dashboard / QNAP NAS192.168.50.6100.123.24.31ARM/QNAP~4GBNoneMulti-TB HDD✅ Online
M710q (Authentik)192.168.50.10/.28100.124.247.23i5-7400T (4C) est.16-32GB est.NoneSSD est.⚠️ UFW-Firewalled
prox (Proxmox)192.168.50.5100.127.249.19UnknownUnknownNoneWD Black 1TB✅ Online
Windows WS 1192.168.50.5100.71.235.13UnknownUnknownUnknownUnknown⚠️ No services
Windows WS 2100.77.80.47UnknownUnknownUnknownUnknown⚠️ No services
Legion Y530100.99.240.58i7-8750H est.16GB est.GTX 1060 6GBSSD⚠️ Unknown
ThinkPad T470100.101.117.108i5-7300U (2C)8-16GBNoneSSD⚠️ Unknown

1.2 Capability Weights (Scoring: 1–10 per capability)

NodeLLM InferenceAPI ServicesStorage/NFSIAM/SecurityWorkflowBackup TargetNotes
pai-primary1093582Primary; RTX 3060 for GPU inference
QNAP NAS02101110Tailscale Funnel; NFS authority
M710q4731053Authentik host; needs UFW opened
prox586496VM isolation; currently offline
Legion Y530741131GTX 1060 secondary inference
ThinkPad T470151342Lightweight microservices

2. Current Service Inventory

2.1 All Services on pai-primary (Single Point of Failure)

ServicePortProcessRAM Est.CriticalityNotes
Ollama11434Go binary2-4GB (models)CriticalGPU inference; 7 models loaded
CommandCenter8766Bun~200MBCriticalDashboard; API hub; JWT auth
FunctionsAPI8890Bun~200MBCriticalCredential gateway; 27+ endpoints
Voice Server8888Bun~50MBHighElevenLabs TTS proxy; phase announcements
Memory MCP SSE8891Bun~100MBHighICM / Infinite Context Memory
Ollama A2A Bridge8892Bun~50MBHighAgent-to-Ollama routing
Mastra4111Bun~300MBMediumWorkflow runtime; harvest-distill pipeline
Inbox WatchdogBun~30MBHighAgent inbox fs.watch; event trigger
Switchboard BridgePython~50MBHighInter-agent messaging (SwitchboardBridge.py)
Redis6379redis-server~30MBMediumCache/queue
LitestreamGo binary~20MBHighmemory.db → QNAP NFS replication
Hyperledger IdentusJava 21~490MBMediumSovereign DID cloud agent
Atala PRISM NodeJava 11~490MBMediumDID ledger node (PRISM protocol)

Total RAM consumption estimate: ~8-11GB active against 32GB physical + 8GB swap (5.8GB in use).
⚠️ The two Java processes (Identus + PRISM Node) account for ~1GB RAM combined and represent the biggest inefficiency on pai-primary.

2.2 Utilization Assessment

ResourceCurrentCapacityHeadroomRisk
RAM~10GB used + 5.8GB swap32GB~16GB free RAM🟡 Swap in use; Java bloat
CPULow (idle ~3%)8CHigh🟢
GPU VRAM~4-6GB Ollama6GB~0-2GB🟡 Models compete for VRAM
SSD103GB used292GB189GB🟢
NFS (QNAP)backup onlyMulti-TBAbundant🟢

3.1 Placement Philosophy

  1. pai-primary: GPU inference + latency-critical APIs. Keep lean.
  2. M710q: Security perimeter (Authentik), heavyweight JVM services, secondary compute.
  3. QNAP NAS: Persistent state, backups, public-facing endpoints via Tailscale Funnel.
  4. Proxmox (when online): VM-isolated redundancy for Tier 1 services.
  5. Legion Y530: Secondary Ollama inference (failover + parallel).
ServiceCurrent HostRecommended HostReason
Ollama (primary)pai-primarypai-primary ✅RTX 3060 Mobile; GPU inference
Ollama (secondary/failover)NoneLegion Y530GTX 1060 6GB; failover + parallel
CommandCenterpai-primarypai-primary ✅Latency-critical; Tailscale-accessible
FunctionsAPIpai-primarypai-primary ✅Core credential gateway
Voice Serverpai-primarypai-primary ✅Low overhead; keep local
Memory MCP SSEpai-primarypai-primary ✅db co-located with litestream source
Ollama A2A Bridgepai-primarypai-primary ✅Must be co-located with Ollama
Mastrapai-primaryM710q or proxNot latency-critical; frees pai-primary RAM
Inbox Watchdogpai-primarypai-primary ✅Watches local filesystem
Switchboard Bridgepai-primarypai-primary ✅Requires MEMORY/STATE access
Redispai-primaryM710qShared cache; offload RAM
Litestreampai-primarypai-primary ✅Source DB must stay co-located
Hyperledger Identuspai-primaryM710q~490MB Java; not latency critical
Atala PRISM Nodepai-primaryM710q~490MB Java; identity infra
AuthentikM710qM710q ✅ (fix UFW)Already correct host; just needs firewall fix
Dashboard/MonitoringQNAPQNAP ✅Already on Tailscale Funnel

Net effect of migrations: Remove ~1GB+ Java RAM from pai-primary, improve VRAM headroom for larger models.


4. Resilience Architecture

4.1 Failure Modes & Mitigations

FailureImpactCurrent StateMitigation
pai-primary goes downALL PAI services offlineNo redundancyWarm standby on Proxmox VM
Ollama OOM / GPU crashAll LLM inference stopsNo fallbackSecondary Ollama on Legion Y530
memory.db corruptionICM memory lostLitestream → QNAPAdd S3 off-site replica
QNAP NFS mount failsLitestream can’t writeNo alertWatchdog + alert on mount failure
Authentik (M710q) goes downIAM stops issuing tokensEffectively already down (UFW)Fix UFW + health monitor
Network partition (Tailscale)Remote agent access lostNo fallbackLAN-only mode; QNAP subnet router
Redis goes downCache/queue disruptionNo persistenceRedis AOF + replication to M710q

4.2 Tier Classification (by recovery priority)

Tier 1 — Recover within 60 seconds

  • FunctionsAPI (8890) — credential gateway; blocks all agent operations
  • CommandCenter (8766) — human control plane
  • Ollama (11434) — primary inference

Tier 2 — Recover within 5 minutes

  • Memory MCP SSE (8891) — ICM; agents degrade gracefully without it
  • Voice Server (8888) — optional; algorithm phases go silent but continue
  • Inbox Watchdog — agents retry inbox polling
  • Switchboard Bridge — degrades to polling

Tier 3 — Recover within 30 minutes

  • Mastra (4111) — workflows queue up
  • A2A Bridge (8892) — routed through FunctionsAPI /v1/pai-pi instead
  • Redis — rebuild cache from source

Tier 4 — Recover within 24 hours

  • Hyperledger Identus / Atala PRISM Node — DID infra; infrequently used
  • Authentik — IAM; agents use API keys as fallback

4.3 Near-Term Resilience Wins (Ordered by Impact/Effort)

PriorityActionEffortImpact
🔴 P1Fix M710q UFW — open ports 80/443/9000/9300 to 192.168.50.0/24LowIAM comes online; Identus/PRISM can migrate
🔴 P1Add QNAP backup scope — replicate MEMORY/STATE/ and PRD work dirs to NASLowProtects all in-progress work
🟡 P2Migrate Java processes to M710q — Identus + PRISM NodeMediumFrees ~1GB RAM on pai-primary; reduces swap
🟡 P2Deploy secondary Ollama on Legion Y530 — configure FunctionsAPI failoverMediumOllama redundancy; load balancing
🟡 P2Add litestream S3 target — Cloudflare R2 or Backblaze B2LowOff-site DB backup
🟠 P3Bring Proxmox online — diagnose SSH failureMediumVM isolation for services
🟠 P3Proxmox VM: warm standby — replicate FunctionsAPI + CommandCenter configHighService-level redundancy
🟠 P3Mastra → M710q or prox VMMediumFrees pai-primary RAM/CPU
🟢 P4Redis persistence + M710q replicaLowCache durability
🟢 P4QNAP as secondary NFS for STATE backupsLowBroader backup coverage

5. Ollama Model Optimization

5.1 Current Model Inventory (pai-primary)

ModelSizeUse CaseRecommended Host
llama3.2:3b~2.0GBLocalRunner (fast/classify)pai-primary (fits in VRAM w/ others)
all-minilm:latest~46MBEmbeddingspai-primary
mxbai-embed-large:latest~670MBEmbeddingspai-primary
nemotron-mini:latest~2.7GBFast reasoningpai-primary
deepseek-r1:7b~4.7GBLocalReasonerpai-primary primary / Legion failover
qwen2.5:7b~4.7GBLocalAnalyst (code)pai-primary primary / Legion failover
gemma2:9b~5.4GBLocalSummarizer⚠️ Largest model; may evict others from VRAM

VRAM constraint: RTX 3060 Mobile = 6GB VRAM.

  • gemma2:9b alone exceeds VRAM → falls to RAM → slow inference + swap pressure
  • Optimal: keep 3b/embed models always loaded; load 7b models on-demand; route gemma2:9b to Legion Y530 when available

5.2 VRAM-Aware Routing Recommendation

Priority 1: pai-primary GPU (RTX 3060 6GB)
  → llama3.2:3b, nemotron-mini, all models ≤5GB with headroom

Priority 2: pai-primary CPU RAM (when GPU full)
  → qwen2.5:7b, deepseek-r1:7b (fallback to slow RAM inference)

Priority 3: Legion Y530 (GTX 1060 6GB) — when configured
  → gemma2:9b (preferred), 7b models (parallel inference)

6. Data Resilience

6.1 Current Backup Coverage

DataCurrent BackupGap
memory.db (ICM)Litestream → /mnt/pai/backup/No off-site
MEMORY/STATE/None❌ Agent state lost on failure
MEMORY/WORK/ (PRDs)None❌ In-progress work lost
MEMORY/LEARNING/None❌ Algorithm reflections lost
~/.claude/settings.jsonNone❌ Config lost
MEMORY/db/Litestream✅ (NAS only)
Tier A — Continuous (Litestream):
  memory.db → QNAP NAS (current) + Cloudflare R2 (add)

Tier B — Hourly rsync to QNAP:
  MEMORY/STATE/
  MEMORY/WORK/
  MEMORY/LEARNING/
  PAI/ (config, manifests)

Tier C — Daily git push:
  ~/.claude/ repo → private remote (GitHub/Gitea)
  Already partially done via git history

7. Action Plan

Phase 1 — Quick Wins (This Week)

  1. M710q UFW: ssh acp-admin@192.168.50.10 "sudo ufw allow from 192.168.50.0/24" (then verify Authentik accessible on 9000/9300)
  2. Expand litestream scope: Add MEMORY/STATE/ and MEMORY/WORK/ to litestream.yml with rsync replica to QNAP
  3. Add S3 off-site: Configure litestream R2 or B2 target for memory.db

Phase 2 — Service Migration (Next 2 Weeks)

  1. Migrate Hyperledger Identus + Atala PRISM Node to M710q (once UFW fixed)
  2. Deploy Ollama on Legion Y530 with pai-primary models; wire FunctionsAPI failover
  3. Configure Redis persistence (AOF) + optional M710q replica

Phase 3 — Full Resilience (After Proxmox Online)

  1. Proxmox VM for warm standby: replicate FunctionsAPI + CommandCenter config
  2. Move Mastra workflow runtime to Proxmox VM
  3. Implement health watchdog with auto-failover routing in FunctionsAPI

This document is the infrastructure source of truth. Update after each migration.