From e0b5af22767f96068306f2ab8f55f66633fe5e3c Mon Sep 17 00:00:00 2001 From: Raphael Westphal Date: Wed, 19 Aug 2026 14:53:08 +0200 Subject: [PATCH] =?UTF-8?q?fix(model=20selection):=20bake=20dotfiles=20mod?= =?UTF-8?q?els.json=20(both=20glm=20models,=20env-ref=20key)=20over=20froz?= =?UTF-8?q?en=20worker=20list;=20catalog=20prefers=20baked=20file=20?= =?UTF-8?q?=E2=80=94=20was=20offering=20models=20the=20container=20registr?= =?UTF-8?q?y=20couldn't=20resolve?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- daemon/api.go | 20 +++++++++++++++----- deploy/rsync-pi-agent.sh | 1 - docker/control.Dockerfile | 2 +- docker/worker.Dockerfile | 5 +++-- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/daemon/api.go b/daemon/api.go index a3c4863..21622e0 100644 --- a/daemon/api.go +++ b/daemon/api.go @@ -23,10 +23,11 @@ import ( const ( envToken string = "LVMH_TOKEN" - envSettingsFile string = "LVMH_SETTINGS_FILE" - defaultSettingsFile string = "/app/build/docker/pi-agent/settings.json" - envModelsFile string = "LVMH_MODELS_FILE" - defaultModelsFile string = "/app/build/docker/worker-models.json" + envSettingsFile string = "LVMH_SETTINGS_FILE" + defaultSettingsFile string = "/app/build/docker/pi-agent/settings.json" + defaultBakedModelsFile string = "/app/build/docker/pi-agent/models.json" + envModelsFile string = "LVMH_MODELS_FILE" + defaultModelsFile string = "/app/build/docker/worker-models.json" defaultEventsAfter int64 = 0 defaultEventsLimit int = 1000 @@ -568,7 +569,16 @@ func parseEnabledModels(data []byte) []ModelCatalogItem { } func (s *Server) handleModelCatalog(w http.ResponseWriter, r *http.Request) { - data, err := os.ReadFile(envOr(envModelsFile, defaultModelsFile)) + // Prefer the baked dotfiles models.json (full provider set, synced by + // rsync-pi-agent.sh); fall back to the minimal frozen worker list. + path := envOr(envModelsFile, "") + if path == "" { + path = defaultBakedModelsFile + if _, err := os.Stat(path); err != nil { + path = defaultModelsFile + } + } + data, err := os.ReadFile(path) if err != nil { writeError(w, http.StatusInternalServerError, "model catalog unavailable: "+err.Error()) return diff --git a/deploy/rsync-pi-agent.sh b/deploy/rsync-pi-agent.sh index dd18817..3336317 100755 --- a/deploy/rsync-pi-agent.sh +++ b/deploy/rsync-pi-agent.sh @@ -16,7 +16,6 @@ if [ ! -f "$SRC/settings.json" ]; then fi rsync -a --delete \ --exclude 'auth.json' \ - --exclude 'models.json' \ --exclude 'models-store.json' \ --exclude 'sessions/' \ --exclude 'cache/' \ diff --git a/docker/control.Dockerfile b/docker/control.Dockerfile index 8a748bb..4a27744 100644 --- a/docker/control.Dockerfile +++ b/docker/control.Dockerfile @@ -24,7 +24,7 @@ RUN rm -f /usr/local/bin/npm \ # Same pi config as workers (dotfiles, filtered; git: packages stripped). COPY docker/pi-agent/ /root/.pi/agent/ COPY plugin/lvmh-agent.ts /root/.pi/agent/extensions/lvmh-agent.ts -COPY docker/worker-models.json /root/.pi/agent/models.json +COPY docker/worker-models.json /root/.pi/agent/models.json.fallback # Ops instructions live in the workspace (AGENTS.md is auto-loaded from cwd). COPY docker/ops-context/AGENTS.md /ops-seed/AGENTS.md diff --git a/docker/worker.Dockerfile b/docker/worker.Dockerfile index d1c1561..55609ba 100644 --- a/docker/worker.Dockerfile +++ b/docker/worker.Dockerfile @@ -25,15 +25,16 @@ RUN rm -f /usr/local/bin/npm \ && mv /usr/local/bin/npm-ignore-scripts /usr/local/bin/npm \ && chmod +x /usr/local/bin/npm-real /usr/local/bin/npm +COPY docker/worker-models.json /root/.pi/agent/models.json.fallback # User's pi config from dotfiles (settings, skills, agents, extensions, # APPEND_SYSTEM.md) — synced by deploy.sh from ~/.dotfiles/pi/agent (filtered: # no auth.json/sessions/cache/npm). If docker/pi-agent/ is absent this layer # is skipped (mkdir keeps later COPY targets valid). COPY docker/pi-agent/ /root/.pi/agent/ -# lvmh overlays: dial-home plugin + env-ref models.json win over dotfiles copies. +# lvmh overlays: dial-home plugin; models.json comes from dotfiles (baked +# by rsync-pi-agent.sh; the .fallback above covers a dotfiles-less bake). COPY plugin/lvmh-agent.ts /root/.pi/agent/extensions/lvmh-agent.ts -COPY docker/worker-models.json /root/.pi/agent/models.json COPY docker/bridge /bridge # Per-session pi sessions persist here (volume lvmh-sessions); package cache