Commit Graph

327 Commits

Author SHA1 Message Date
Hermes Agent service account
b3b925ff77 hindsight: cap LLM concurrency to 1 + raise client/ingress timeout to 600s (fix 502s on serial astro-orbiter)
t_d7f8cd65 — astro-orbiter is a single serial llama-swap process; Hindsight's
default LLM_MAX_CONCURRENT=32 burst N parallel retains -> node rejects/times
out extras -> 502. Cap global + retain concurrency to 1 (native semaphore
config, no code change). Raise client timeout 120->600s and ingress
proxy-read/send 300->600s so a single long retain (~90s under load) survives.
2026-08-29 16:56:52 -05:00
Hermes Agent service account
3d8eb1bf1c hindsight: restore LLM to local astro-orbiter Qwen3.8-27B (Nous retain broken) (t_e0e6f7ca) 2026-08-29 12:44:01 -05:00
Hermes Agent service account
7f8ba8b859 hindsight: swap LLM stepfun/step-3.7-flash:free -> upstage/solar-pro4:free (t_8516dba2)
stepfun rejects Hindsight tagged fact-extraction (400 'missing tags');
solar-pro4:free is the previously-verified-good Nous model for retain/recall
(t_e3375410 / t_d0dffc3d). base_url + provider unchanged.
2026-08-28 23:35:54 -05:00
Hermes Agent service account
aee61d4511 hindsight: interim swap LLM to Nous stepfun/step-3.7-flash:free (astro-orbiter down) 2026-08-28 23:12:48 -05:00
Hermes Agent service account
9bc29508d7 hindsight: move LLM to local astro-orbiter Qwen3.8-27B (off Nous free tier) 2026-08-28 21:00:47 -05:00
Hermes Agent service account
9bfc9384e4 hindsight: re-promote upstage/solar-pro4:free as primary LLM (ingress timeout fixed)
Ingress proxy timeout now 300s (commit 152230c), so a slow agentic reflect
(~132s) completes before nginx cuts the connection. solar-pro4:free passed
tool-calling + grounded-output probes (t_d0dffc3d). BASE_URL/PROVIDER
unchanged; fallback comment -> stepfun/step-3.7-flash:free.

Refs t_e3375410.
2026-08-25 12:05:54 -05:00
Hermes Agent service account
152230c100 hindsight: raise nginx ingress proxy read/send timeout to 300s (fixes reflect 504)
Scoped to the hindsight ingress (cosmic-rewind.local.mk-labs.cloud) only.
A slow agentic reflect (~132s on solar-pro4) exceeded the 60s default
proxy-read-timeout, causing nginx to return 504 before the app delivered 200.
Raising read+send to 300s lets the response land. No global configmap change.

Refs t_e3375410.
2026-08-25 12:04:49 -05:00
Hermes Agent service account
13df80ab43 Revert "hindsight: promote solar-pro4:free (tool-calling) to primary LLM — fixes reflect 500 (t_d0dffc3d)"
This reverts commit a2123819b3.
2026-08-25 11:42:06 -05:00
peter-parker
a2123819b3 hindsight: promote solar-pro4:free (tool-calling) to primary LLM — fixes reflect 500 (t_d0dffc3d) 2026-08-25 11:34:14 -05:00
Hermes Agent service account
173d00504c hindsight: swap LLM astro-orbiter Qwen3.8-27B -> Nous free-tier stepfun/step-3.7-flash:free (t_90261bb1)
- values.yaml: HINDSIGHT_API_LLM_BASE_URL -> https://inference-api.nousresearch.com/v1, MODEL -> stepfun/step-3.7-flash:free (fallback solar-pro4:free documented, not deployed)
- externalsecret.yaml: HINDSIGHT_API_LLM_API_KEY remoteRef -> 1Password nous/api-key (replaces local-placeholder)
- PROVIDER stays openai; API key via envFrom, never plaintext per decision 4
2026-08-25 10:50:52 -05:00
Hermes Agent service account
7cdcc984a5 hindsight: Phase C manifests (multi-source app wave 8, external pgvector PG, ES from 1Password, chart-native ingress)
- application.yaml: single multi-source Application (openviking pattern),
  wave 8, chart v0.9.1 via path: + $values/values.yaml
- values.yaml: postgresql.enabled=false (external), existingSecret,
  LLM env (astro-orbiter:8001, Qwen3.8-27B-Q4_K_M), native ingress
  cosmic-rewind.local.mk-labs.cloud (api /health /v1 /mcp /ext, cp /)
- externalsecret.yaml: hindsight-credentials from 1Password mk-labs/hindsight
- namespace.yaml, postgres-pvc.yaml (10Gi nfs-emporium),
  deployment-postgres.yaml (ankane/pgvector pinned by digest),
  service-postgres.yaml (hindsight-postgres:5432)
2026-08-24 19:03:07 -05:00
Maria Hill
e301770adc openviking: repoint embedding+vlm api_base :8002->:8001
astro-orbiter llama-server-router retired :8002 on 2026-08-18
(llama-swap now serves the OpenAI-compatible API on :8001).
OpenViking still pointed at the dead :8002, so every search/find
call failed: dense embedding -> Connection error -> 500 INTERNAL
server error on /api/v1/search/search and /api/v1/search/find.

Verified from the pod: :8002 = connection refused,
:8001/v1/embeddings (nomic-embed-text-v1.5) = 200 with vectors.
Repoints embedding.dense.api_base and vlm.api_base to :8001.

t_abc05db5
2026-08-20 13:46:41 -05:00
Hermes Agent service account
24735f7e5c fix: correct metric names in llama-swap monitoring (llamacpp_* -> llamaswap_*), update alerts + dashboard + scrape config 2026-08-18 23:18:22 -05:00
Hermes Agent service account
7867be688a monitoring: llama-swap GPU/LLM stack (v250) — PrometheusRule, Grafana dashboard, scrape config, VRAM exporter 2026-08-18 22:22:53 -05:00
Hermes Agent service account
efaff340a4 openviking: fix VLM model alias and lower max_input_tokens to 1024
- vlm.model was 'llama3.1-8b' which doesn't exist on astro-orbiter's
  /v1/models, causing every summarization call to 400 and endless
  circuit-breaker retries. Correct id: Meta-Llama-3.1-8B-Instruct-Q4_K_M.
- embedding.max_input_tokens=1536 still let chunks through that actually
  tokenized to 2000-2860 real tokens (estimator undercounts vs llama.cpp's
  tokenizer by 1.35x-1.86x on this corpus). Lowered to 1024 for real margin
  under the 2048 n_ctx ceiling.
2026-08-15 00:12:40 -05:00
Hermes Agent service account
48536f2615 fix(openviking): cap embedding max_input_tokens at 1536 to stay under llama.cpp nomic-bert 2048 ctx limit
astro-orbiter's llama.cpp router hard-caps nomic-embed-text-v1.5 effective
context at 2048 tokens regardless of ctx-size (known nomic-bert/RoPE limitation
in llama.cpp, not fixable server-side). OpenViking chunks observed at
2000-3400 tokens were tripping 400 exceed_context_size_error and endless
circuit-breaker re-enqueue for viking://temp/default/08140552_5f1c9e/homelab.tar/*.

Set embedding.max_input_tokens: 1536 (well under 2048) since OpenViking's
chunk-time token estimator uses a different tokenizer than llama.cpp's context
counter, so token counts won't match 1:1 - 1536 leaves ~25% headroom.

Approved by Ryan as lowest-risk mitigation (does not touch astro-orbiter/
llama.cpp serving config, which is War Machine's domain and already fixed
separately for the ubatch-size issue).
2026-08-14 23:22:12 -05:00
Hermes Agent service account
170a31d090 feat(openviking): deploy maelstrom-ui Web Studio frontend
- Build/push image: the-seas.local.mk-labs.cloud/library/maelstrom-ui:v0.3.17-1
  (upstream volcengine/openviking web-studio/, pinned to commit 3cd1d4e9)
- Deployment + Service serving the static SPA via nginx (reverse-proxies
  /api, /health, /ready to openviking backend; /bot deliberately NOT proxied)
- Ingress at maelstrom.local.mk-labs.cloud (TLS via letsencrypt-internal)
- ExternalSecret wiring scoped maelstrom-ui-key from
  op://mk-labs/openviking/maelstrom-ui-key into the pod env (MAELSTROM_UI_KEY)

Per approved plan: inbox/ryan/2026-08-14-maelstrom-ui-deployment-plan.md
Key mint + approval: system/inbox/agents/nick-fury/2026-08-14-maelstrom-ui-key-mint-complete.md
Ryan approval: inbox/ryan/2026-08-14-maelstrom-key-approval.md
2026-08-14 12:49:36 -05:00
Peter Parker
aa2730efd5 fix: OpenViking ingress TLS issuer from letsencrypt-internal to letsencrypt-prod
The letsencrypt-internal ClusterIssuer does not exist on the cluster.
Only letsencrypt-prod and letsencrypt-staging are available.
Both use DNS-01 via Cloudflare for the mk-labs.cloud zone,
so they work for internal-only hosts with no public HTTP reachability.

Fixes: https://github.com/volcengine/openviking/issues/...
Closes: kanban task t_1c2cc2db
2026-08-14 00:16:06 -05:00
Hermes Agent service account
0dbb77b023 Fix OpenViking: 1Password item mismatch + invalid embedding config fields
Bug 1: ExternalSecret referenced three separate 1Password items
(openviking-root-api-key, openviking-embedding-api-key, openviking-vlm-api-key)
but Ryan created ONE item 'openviking' with three fields inside.
Changed all remoteRef.key values to 'openviking' and corrected field property names.

Bug 2: values.yaml had two invalid embedding config fields:
- encoding_format: 'float' (not in upstream schema, removed)
- max_concurrent under embedding.dense (wrong nesting, moved to embedding level)

Verified against upstream chart schema at github.com/volcengine/openviking
2026-08-13 23:49:19 -05:00
Hermes Agent service account
fee9965d0a fix: OpenViking sync-wave deadlock - move ExternalSecret ordering inside Application
Remove resource-level sync-wave annotations that caused ArgoCD deadlock.
The wave 8 annotation was meant for platform-level ordering (apps-of-apps)
but was incorrectly applied to individual resources within the Application.

This caused ArgoCD to apply Deployment (wave 0) before ExternalSecret (wave 8),
resulting in CreateContainerConfigError since the pod needed the secret first.

Changes:
- namespace.yaml: Remove sync-wave annotation, add clarifying comment
- externalsecret.yaml: Change sync-wave from 8 to -1 (must sync before Deployment at wave 0)
- application.yaml: Remove sync-wave annotation, document as platform-level only in comments

This ensures:
1. ExternalSecret syncs first (wave -1)
2. Deployment uses it immediately (implicit wave 0)
3. No deadlock

Task: t_3906c41a
2026-08-13 23:42:45 -05:00
Hermes Agent service account
d0f3ddba0d OpenViking application.yaml: fix invalid Helm chart source (chart -> path)
- Changed source 1 from 'chart: deploy/helm/openviking' to 'path: deploy/helm/openviking'
- ArgoCD multi-source now correctly resolves the Helm chart from the git repo
- targetRevision: main now correctly refers to a git branch, not a chart version
- Fixes: invalid revision 'main': improper constraint error
2026-08-13 23:36:50 -05:00
Hermes Agent service account
d9e41118f8 feat(openviking): pilot deployment to fastpass (wave 8)
Platform Knowledge Infrastructure pilot - context database for large
file trees, shared skills, and long-term logs to reduce agent token
consumption. Pilot scope: two corpora (hermes/ skills library,
personal/homelab/), two consumer profiles (Wong, Shuri) for before/after
token comparison.

- namespace.yaml: openviking namespace, sync-wave 8 (after Harbor wave 7)
- externalsecret.yaml: credentials from 1Password via onepassword-connect
  ClusterSecretStore (Wong, t_32766900)
- values.yaml: Helm overrides - px-fa-direct-access storage (30Gi),
  embedding (nomic-embed-text-v1.5) + VLM (Llama-3.1-8B) via astro-orbiter
  router (:8002), internal-only ingress
- application.yaml: multi-source ArgoCD Application, Harbor pattern
  (Peter Parker, t_eefdcc17 + reconciled in t_3e54efa8)

Prerequisites verified complete before this commit:
- nomic-embed-text-v1.5-Q4_K_M live on astro-orbiter router (War Machine,
  t_34b96e83, commit ad70b34)
- All 3 1Password items provisioned (root/embedding/vlm api keys)
- Storage class corrected to px-fa-direct-access after live PV audit
  showed pure-block/pure-file have zero provisioned volumes (t_77b3ff79)
- Dry-run validated against live cluster prior to commit

Constraint: vault (~/friday) remains canonical source of truth; OpenViking
index is a derived cache, rebuilt from vault source files.

Honcho/lincoln explicitly out of scope for this work.
2026-08-13 23:33:36 -05:00
Hermes Agent service account
a04435ee9b fix(monitoring): drop Qwen3.6 scrape job — causes CUDA OOM on each scrape (t_02c15dae)
/metrics?model=Qwen3.6 forces the router to attempt loading Qwen3.6 every
90s scrape cycle, triggering a CUDA OOM error since VRAM is already consumed
by the resident Llama3+Phi3.5 models. This produces real GPU power spikes
(~110W load-attempt), not a benign counter read like the Llama3/Phi3.5 jobs.

nvidia_gpu_exporter (:9835) already provides GPU power/VRAM/utilization at
zero wake cost. No Grafana dashboard panel references Qwen3.6 model-specific
llama-server metrics. Ryan approved full removal.

Job is commented out (not deleted) for easy revert if Qwen3.6 is ever
re-added as a resident model. Llama3/Phi3.5 scrape jobs untouched.
2026-08-13 18:46:54 -05:00
Hermes Agent service account
a2ddb65425 fix(monitoring): reduce llama-server scrape_interval 15s -> 90s to allow GPU P8 idle
Each /metrics?model=<id> request on the llama.cpp router wakes the GPU
sub-server to P2 (~110W). At 15s with two active jobs (llama3 + phi35),
combined scrape frequency (~7-8s effective) keeps the GPU continuously at
P2 despite zero real inference requests.

At 90s: each scrape wakes GPU for ~5-10s then it drops to P8 (~20W) for
~80s. Verified via iptables block test on 2026-08-13 (t_e7d547ea):
  Before block: 110-115W P2 continuously
  After block:  19-21W P8 consistently
  After unblock: returned to 110W P2 within seconds

qwen3 interval also set to 90s (model not loaded so moot, but consistent).

Ref: t_e7d547ea
2026-08-13 15:43:43 -05:00
Hermes Agent service account
a87da82ebd fix: correct astro-orbiter llama-server scrape target for router cutover
Port 8000 (gemma-2-27b-it-GGUF) is dead after the day2 router cutover on
2026-08-12. Production inference now runs through llama-server-router on
port 8002.

The router exposes per-model Prometheus metrics via /metrics?model=<id>.
Since a single /metrics request without ?model returns HTTP 400, replaced
the single stale job with three per-model jobs — one per model registered
in the router per /v1/models:
  - Qwen3.6-35B-A3B-UD-Q4_K_S  (currently unloaded but registered)
  - Meta-Llama-3.1-8B-Instruct-Q4_K_M  (loaded)
  - Phi-3.5-mini-instruct-Q8_0  (loaded)

Static 'model' label carries the canonical llama.cpp model id (not alias).
Added 'endpoint: astro-orbiter-router' to identify the scrape origin.
Removed dead :8000 target entirely.
2026-08-13 09:08:01 -05:00
Hermes Agent service account
aff792a061 feat(llm-inference): move astro-orbiter monitoring to GitOps (values.yaml + dashboards.yaml)
- Prometheus scrape configs for node/gpu/llama-server exporters on
  astro-orbiter now declared in cluster/applications/monitoring/values.yaml
  (additionalScrapeConfigs), applied via ArgoCD sync instead of an
  imperative kubectl secret patch from the Ansible role.
- Grafana dashboard for astro-orbiter LLM inference added as a ConfigMap
  in cluster/applications/monitoring/dashboards.yaml (grafana_dashboard=1
  sidecar label), replacing the role's ad-hoc kubectl apply of a rendered
  Jinja template.
- ansible/roles/llm-inference/tasks/monitoring.yml: removed the kubectl
  get/patch/apply tasks and orphaned grafana-llm-dashboard.json.j2
  template; role now only stands up node_exporter + nvidia_gpu_exporter
  and verifies they're reachable — cluster-facing config lives in Git.
- host_vars/vars.yml + inventory.yml: finalize astro-orbiter as the
  llama.cpp/RTX 3090 host (jarvis user, ssh key), drop stale Ollama/AMD
  vars and ollama_server inventory group superseded by the ATX rebuild.
2026-08-05 09:43:54 -05:00
Hermes Agent service account
d974c75d7c feat(jmri): headless JMRI server with Leviton layout power monitor and X11 GUI mode
- Stable udev device symlinks (/dev/jmri/nce, /dev/jmri/loconet, /dev/jmri/lcc)
- jmri-monitor: polls Leviton Decora Smart switch to start/stop JMRI automatically
  - Quiet hours 1-10 AM (no polling)
  - 30s off-delay before shutdown
- LCRR config cloned from Gitea (ssh://gitea.mk-labs.cloud:2221/rblundon/LCRR.git)
- ~/.jmri symlinked to LCRR repo for GitOps config management
- jmri-gui: X11 remote GUI access (PanelPro/DecoderPro) via ssh -X as jmri user
  - Stops daemon, launches GUI, restarts daemon on exit if layout still on
- jmri user gets login shell + SSH key for GUI sessions
- Full JRE installed (openjdk-21-jre) for AWT/X11 support
2026-07-29 00:43:23 -05:00
Hermes Agent service account
a5433dcb5b minecraft: queue AntiSilverFish v0.0.4 — apply on next restart 2026-07-20 00:39:46 -05:00
Hermes Agent service account
e0eb47f5ce minecraft: add sleep-most to PLUGINS url list so it survives pod restarts 2026-07-19 21:18:57 -05:00
Hermes Agent service account
a8822f0778 minecraft: disable whitelist — open server 2026-07-19 21:02:32 -05:00
bedf87b492 change seed 2026-07-19 20:56:03 -05:00
Hermes Agent service account
b6f7791c98 minecraft: add SkinsRestorer v15.12.4 plugin for offline-mode skin support 2026-07-19 20:48:22 -05:00
Hermes Agent service account
1a48e60afd minecraft: fix Grafana dashboard queries for prometheus-exporter v3 mc_ metric names 2026-07-19 18:27:22 -05:00
Hermes Agent service account
c26b19793b minecraft: bind prometheus exporter to 0.0.0.0 — localhost blocks Prometheus scrape 2026-07-19 18:20:11 -05:00
Hermes Agent service account
dfe81a5c20 minecraft: set prometheus exporter to port 9225, manage config via ConfigMap 2026-07-19 18:17:47 -05:00
Hermes Agent service account
4afb05e56b minecraft: wire PLUGINS env var into Deployment — prometheus exporter was never downloaded 2026-07-19 18:15:37 -05:00
Hermes Agent service account
46b49259d2 minecraft: manage sleep-most config via ConfigMap — single player sleep enabled 2026-07-19 18:13:55 -05:00
Hermes Agent service account
3f3ce68e18 minecraft: fix backup script — skip missing nether/end dirs, safe save-on on tar failure 2026-07-19 17:52:54 -05:00
Hermes Agent service account
e44805c9b6 minecraft: fix backup image — itzg/rcon-cli is distroless, use minecraft-server instead 2026-07-19 17:51:15 -05:00
Hermes Agent service account
1aa6b4234a minecraft: add hourly world backup CronJob with 3-day local retention 2026-07-19 17:48:53 -05:00
Hermes Agent service account
4cde540e70 minecraft: enable whitelist with RyansRailroad, Nylarac19, ga_eul_pabo, Ghoulish_Hannah 2026-07-19 17:39:30 -05:00
Hermes Agent service account
69fb5f5641 minecraft: disable online-mode to bypass Zscaler session auth blocking 2026-07-19 17:35:22 -05:00
Hermes Agent service account
430552a0b1 fix(minecraft): set enforce-secure-profile=false to bypass Mojang WAF block on homelab egress IP 2026-07-19 15:01:30 -05:00
Hermes Agent service account
18bb111843 feat(minecraft): add Prometheus metrics + Grafana dashboard
- minecraft-prometheus-exporter v3.1.2 plugin (port 9225)
- ServiceMonitor for Prometheus scraping
- Grafana dashboard ConfigMap (ID 20659, Minecraft server stats)
- metrics port added to Service and Deployment containerPorts
2026-07-19 14:53:36 -05:00
Hermes Agent service account
712425ee17 feat(minecraft): upgrade PaperMC to 26.2 (build 62) 2026-07-19 14:22:06 -05:00
Hermes Agent service account
1d77821e5f feat(minecraft): add Cloudflare ExternalDNS annotations for public DNS record 2026-07-19 14:17:14 -05:00
Hermes Agent service account
7ad40bb509 fix(minecraft): remove SleepMost plugin 2026-07-19 13:52:37 -05:00
Hermes Agent service account
3950a2b069 fix(minecraft): correct SleepMost plugin URL to v5.5.3 (5.6.2 never existed) 2026-07-19 13:50:15 -05:00
Hermes Agent service account
d20fd80798 fix(minecraft): use px-fa-direct-access storage class for world data PVC 2026-07-19 13:47:12 -05:00
Hermes Agent service account
308ee553c3 fix(minecraft): exclude application.yaml from self-sync to resolve SharedResourceWarning 2026-07-19 13:44:30 -05:00