From 496e46076c0bc849fd84153db861dd394279a84f Mon Sep 17 00:00:00 2001 From: Roger Oriol Date: Thu, 23 Jul 2026 23:57:41 +0200 Subject: [PATCH] set platform engineer url to platform-engineer.rogi.casa --- litellm/litellm.yaml | 8 ++++---- llamacpp/README.md | 6 +++--- ...b-a3b.yaml => deployment-qwen36-35b-a3b.yaml} | 16 ++++++++-------- platform-engineer/README.md | 10 +++++----- platform-engineer/configmap.yaml | 4 ++-- platform-engineer/cron-seed.yaml | 6 ++++++ platform-engineer/ingress.yaml | 6 +++--- 7 files changed, 31 insertions(+), 25 deletions(-) rename llamacpp/{deployment-qwen36-36b-a3b.yaml => deployment-qwen36-35b-a3b.yaml} (95%) diff --git a/litellm/litellm.yaml b/litellm/litellm.yaml index c0e735c..6d69615 100644 --- a/litellm/litellm.yaml +++ b/litellm/litellm.yaml @@ -50,11 +50,11 @@ data: api_key: "sk-no-auth" # Faster "flash" variant: Qwen3.6-35B-A3B is a MoE (3B active params), so # inference is much faster than the dense 27B despite more total weights. - # See llamacpp/deployment-qwen36-36b-a3b.yaml. - - model_name: qwen3.6-36b-a3b + # See llamacpp/deployment-qwen36-35b-a3b.yaml. + - model_name: qwen3.6-35b-a3b litellm_params: - model: openai/qwen3.6-36b-a3b - api_base: http://llamacpp-qwen36-36b-a3b.llamacpp/v1 + model: openai/qwen3.6-35b-a3b + api_base: http://llamacpp-qwen36-35b-a3b.llamacpp/v1 api_key: "sk-no-auth" litellm_settings: #set_verbose: True # Uncomment this if you want to see verbose logs; not recommended in production diff --git a/llamacpp/README.md b/llamacpp/README.md index 4b4cdac..fcffee2 100644 --- a/llamacpp/README.md +++ b/llamacpp/README.md @@ -16,7 +16,7 @@ to the NUCBox (`nodeSelector: {kubernetes.io/arch: amd64, hardware: high-memory} | Alias | Model | GGUF | Service | |-------------------|----------------------------|-------------------------------------------------------|-------------------------------------------| | `qwen3.6-27b` | Qwen3.6-27B (dense) | unsloth/Qwen3.6-27B-MTP-GGUF (Q4_K_XL, ~16 GiB) | `llamacpp-qwen36-27b.llamacpp:80` | -| `qwen3.6-36b-a3b` | Qwen3.6-35B-A3B (MoE/flash)| unsloth/Qwen3.6-35B-A3B-MTP-GGUF (Q4_K_XL, ~20 GiB) | `llamacpp-qwen36-36b-a3b.llamacpp:80` | +| `qwen3.6-35b-a3b` | Qwen3.6-35B-A3B (MoE/flash)| unsloth/Qwen3.6-35B-A3B-MTP-GGUF (Q4_K_XL, ~20 GiB) | `llamacpp-qwen36-35b-a3b.llamacpp:80` | The 35B-A3B is a Mixture-of-Experts model (3B active params per token), so inference is significantly faster than the dense 27B despite more total weights — @@ -42,7 +42,7 @@ group GID) if desired. ```bash kubectl logs -n llamacpp deploy/llamacpp-qwen36-27b | grep -iE 'vulkan|gpu|offload|device' -kubectl logs -n llamacpp deploy/llamacpp-qwen36-36b-a3b | grep -iE 'vulkan|gpu|offload|device' +kubectl logs -n llamacpp deploy/llamacpp-qwen36-35b-a3b | grep -iE 'vulkan|gpu|offload|device' ``` If only a CPU device shows up, the container can't see the GPU — check that @@ -55,7 +55,7 @@ Both models run simultaneously on the same 96 GiB VRAM pool. Approximate usage: | Model | Weights | KV cache (32k×4) | Subtotal | |-------------------|----------|-------------------|----------| | qwen3.6-27b | ~16 GiB | ~34 GiB | ~50 GiB | -| qwen3.6-36b-a3b | ~20 GiB | ~10 GiB | ~30 GiB | +| qwen3.6-35b-a3b | ~20 GiB | ~10 GiB | ~30 GiB | | **Total** | | | **~80 GiB** | ~16 GiB headroom — comfortable but not infinite. If VRAM is exhausted ( Vulkan diff --git a/llamacpp/deployment-qwen36-36b-a3b.yaml b/llamacpp/deployment-qwen36-35b-a3b.yaml similarity index 95% rename from llamacpp/deployment-qwen36-36b-a3b.yaml rename to llamacpp/deployment-qwen36-35b-a3b.yaml index 4973801..28af4d8 100644 --- a/llamacpp/deployment-qwen36-36b-a3b.yaml +++ b/llamacpp/deployment-qwen36-35b-a3b.yaml @@ -18,11 +18,11 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: llamacpp-qwen36-36b-a3b + name: llamacpp-qwen36-35b-a3b namespace: llamacpp labels: app: llamacpp - model: qwen3.6-36b-a3b + model: qwen3.6-35b-a3b spec: replicas: 1 strategy: @@ -30,12 +30,12 @@ spec: selector: matchLabels: app: llamacpp - model: qwen3.6-36b-a3b + model: qwen3.6-35b-a3b template: metadata: labels: app: llamacpp - model: qwen3.6-36b-a3b + model: qwen3.6-35b-a3b spec: nodeSelector: kubernetes.io/arch: amd64 @@ -76,7 +76,7 @@ spec: - -m # model file - /models/Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf - --alias # /v1/models reports this name; matches the litellm alias - - qwen3.6-36b-a3b + - qwen3.6-35b-a3b - --host - 0.0.0.0 - --port @@ -142,16 +142,16 @@ spec: apiVersion: v1 kind: Service metadata: - name: llamacpp-qwen36-36b-a3b + name: llamacpp-qwen36-35b-a3b namespace: llamacpp labels: app: llamacpp - model: qwen3.6-36b-a3b + model: qwen3.6-35b-a3b spec: type: ClusterIP selector: app: llamacpp - model: qwen3.6-36b-a3b + model: qwen3.6-35b-a3b ports: - name: http port: 80 diff --git a/platform-engineer/README.md b/platform-engineer/README.md index 34207e8..459aea9 100644 --- a/platform-engineer/README.md +++ b/platform-engineer/README.md @@ -44,7 +44,7 @@ platform-engineer/ ├── pvc.yaml # persistent /opt/data (HERMES_HOME) ├── dockerfile # derived image: hermes-agent + kubectl + helm ├── deployment.yaml # Deployment, schedules on amd64, mounts kube SA token -├── ingress.yaml # hermes.rogi.casa → dashboard (optional) +├── ingress.yaml # platform-engineer.rogi.casa → dashboard (optional) └── README.md # this file ``` @@ -196,7 +196,7 @@ HERMES_DASHBOARD_BASIC_AUTH_PASSWORD= 2–4 GiB; 1 GiB is fine without browser tools, which we keep off). - Volume: PVC mounted at `/opt/data` (HERMES_HOME), RWX not needed (single pod). - Ports: 8642 (gateway API, internal only) and 9119 (dashboard) → exposed via - Ingress `hermes.rogi.casa` with TLS + basic-auth (already enforced by the + Ingress `platform-engineer.rogi.casa` with TLS + basic-auth (already enforced by the `HERMES_DASHBOARD_BASIC_AUTH_*` env vars). - `imagePullSecrets: gitea-registry`. - env from Secret; `HERMES_DASHBOARD=1`. @@ -283,7 +283,7 @@ Design rules baked into SOUL.md: 1. **Notifications:** dedicated `platform-engineer` Discord bot → its own token in `secret.yaml` (`DISCORD_BOT_TOKEN`, `DISCORD_HOME_CHANNEL`). -2. **Dashboard:** public at `hermes.rogi.casa` (Traefik TLS + cert-manager + the +2. **Dashboard:** public at `platform-engineer.rogi.casa` (Traefik TLS + cert-manager + the bundled Hermes basic-auth provider). Reach the dashboard on port 9119; the gateway API on 8642 is ClusterIP-only. 3. **Image:** derived image pushed to `git.rogi.casa/roger/hermes-agent`, pulled @@ -322,7 +322,7 @@ Design rules baked into SOUL.md: set the LiteLLM master key as `OPENAI_API_KEY` and a strong dashboard password + a 32-byte session secret. 5. **Commit & push** the whole change. ArgoCD will create the namespace - resources, deploy the pod, and bring up the ingress at `hermes.rogi.casa`. + resources, deploy the pod, and bring up the ingress at `platform-engineer.rogi.casa`. 6. **Seed the cron jobs:** `kubectl apply -f platform-engineer/cron-seed.yaml` (one-shot Job) — it waits for the hermes pod, then runs `hermes cron create ...` for each watchdog. @@ -357,7 +357,7 @@ Design rules baked into SOUL.md: | `dockerfile` | derived image: hermes-agent + kubectl + helm (linux/amd64) | | `build-and-push.sh` | builds & pushes the image to the Gitea registry | | `deployment.yaml` | Deployment (1 replica, Recreate, pinned to amd64 NUC) + Service | -| `ingress.yaml` | `hermes.rogi.casa` → dashboard (TLS + basic auth) | +| `ingress.yaml` | `platform-engineer.rogi.casa` → dashboard (TLS + basic auth) | | `cron-seed.yaml` | one-shot Job that creates the Hermes cron schedule | Also changed outside this directory: diff --git a/platform-engineer/configmap.yaml b/platform-engineer/configmap.yaml index 9d91f8c..96a558f 100644 --- a/platform-engineer/configmap.yaml +++ b/platform-engineer/configmap.yaml @@ -16,11 +16,11 @@ data: auxiliary: compression: provider: openai-api - model: qwen3.6-27b + model: qwen3.6-35b-a3b # flash model for speed-sensitive auxiliary tasks base_url: "http://litellm-service.litellm:80/v1" title_generation: provider: openai-api - model: qwen3.6-27b + model: qwen3.6-35b-a3b # flash model for speed-sensitive auxiliary tasks base_url: "http://litellm-service.litellm:80/v1" terminal: diff --git a/platform-engineer/cron-seed.yaml b/platform-engineer/cron-seed.yaml index 799379e..cd7b8ae 100644 --- a/platform-engineer/cron-seed.yaml +++ b/platform-engineer/cron-seed.yaml @@ -54,6 +54,12 @@ spec: exists() { kubectl -n platform-engineer exec "$POD" -- hermes cron list 2>/dev/null | grep -qi " $1 "; } + # NOTE: `hermes cron create` has no --model flag. New jobs inherit the + # global default model from config.yaml at creation time. To pin a + # specific model per-job (e.g. the flash model qwen3.6-35b-a3b for all + # cron tasks), edit /opt/data/cron/jobs.json directly after seeding: + # kubectl exec deploy/hermes -- python3 -c "...set model field..." + # See llamacpp/README.md and the deployment notes for details. create() { name="$1"; schedule="$2"; deliver="$3"; prompt="$4" if exists "$name"; then diff --git a/platform-engineer/ingress.yaml b/platform-engineer/ingress.yaml index ff447fe..3f09930 100644 --- a/platform-engineer/ingress.yaml +++ b/platform-engineer/ingress.yaml @@ -9,10 +9,10 @@ spec: ingressClassName: traefik tls: - hosts: - - hermes.rogi.casa - secretName: hermes-tls + - platform-engineer.rogi.casa + secretName: platform-engineer-tls rules: - - host: hermes.rogi.casa + - host: platform-engineer.rogi.casa http: paths: - path: /