Commit Graph

76 Commits

Author SHA1 Message Date
45a224eb7f fix: add missing command: gateway run to hermes service
Without this,  is empty and entrypoint.sh runs bare 'hermes'
which defaults to interactive chat mode. With a non-TTY stdin
this exits immediately with prompt_toolkit's 'Input is not a
terminal' warning, causing a container restart loop.

The profile gateways (run-multi-gateways.sh) were unaffected
because the script passes 'gateway run' explicitly.
2026-05-22 13:22:58 -04:00
bce336c4fd feat: bake Matrix bridge deps into Docker image instead of volume mount
- Add libolm-dev system dep (required by mautrix[encryption])
- Add mautrix[encryption] + openai pip packages to build
- These were previously installed inline at container startup and
  persisted via the fragile venv volume mount (now removed)
2026-05-22 13:04:43 -04:00
e4117cd3d5 fix: remove venv volume mount conflicting with entrypoint.sh
The volume mount at /mnt/HoardingCow_docker_data/Hermes/venv overrides the
container's built .venv with an empty or stale host directory, causing
entrypoint.sh line 62 to fail on 'source .venv/bin/activate' (set -e).

The Docker image already builds a complete venv — no need to persist it.
2026-05-22 13:04:08 -04:00
1c8efb1090 Merge remote-tracking branch 'origin/master' into fix/hermes-build
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
# Conflicts:
#	ai/compose.yml
2026-05-22 12:34:39 -04:00
7725830e6c feat: wire up HERMES_PROFILES to multi-gateway launcher script
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
- Add run-multi-gateways.sh to /opt/data/hermes-tools/ that reads
  HERMES_PROFILES env var and spawns one gateway per profile
- Update entrypoint to call the script before the main entrypoint
- Set HERMES_PROFILES=ashley,claire,finn,matt,paul (was default)

Closes PR #47 (feat/multi-profile-gateways). Builds on 548e15d's cleaner
env-var-driven approach — compose.yml stays declarative, logic in script.
2026-05-22 12:27:47 -04:00
548e15d6b4 feat(compose): add HERMES_PROFILES env var for multi-gateway mode
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-20 20:02:26 -04:00
dea1429a5d Merge pull request #2: fix: Matrix bridge ModuleNotFoundError - install deps to venv with persistence
# Conflicts:
#	ai/compose.yml
2026-05-20 14:41:06 -04:00
ebad994d60 feat(hermes): enable dashboard (HERMES_DASHBOARD=1) + Authelia auth
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-20 14:06:23 -04:00
5f25c87775 fix: add missing USER root before chown step
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
The chown -R hermes:hermes was running as non-root user 'hermes'
since USER hermes was set earlier. The new upstream base image
(v0.12.0+) has tools/ owned by root, so the chown fails.
Previous base image happened to have tools/ owned by hermes,
making the chown a silent no-op.
2026-05-20 13:32:18 -04:00
4e566b2408 fix: resolve Docker build errors and add Traefik routing for Hermes web UI
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
- Replace rsync with cp -a (rsync unavailable in latest upstream base image)
- Remove npm run build step (fork's package.json has no build script)
- Remove himalaya-ro.sh from build context (deployed via install.sh)
- Add hermes to ai_net network for Traefik access
- Add Traefik labels routing hermes.lazyworkhorse.net to dashboard port 9119
2026-05-20 13:14:10 -04:00
6a44120b1a Fixed syncthing dir path
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-18 20:25:18 -04:00
f9fb28d560 fix: route Syncthing web UI through Traefik with HTTPS
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-14 21:40:00 -04:00
bcc4b6d157 feat: add Syncthing service for Hermes org-file sync
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-14 21:35:31 -04:00
f44f93e35a Merge pull request 'fix: add Himalaya email CLI to Hermes Docker image' (#25) from fix/himalaya-email-cli into master
Some checks failed
Build Hermes agent / build (push) Has been cancelled
Reviewed-on: #25
2026-05-13 15:03:40 +00:00
27571ddb3f feat: add Himalaya email CLI to Hermes Docker image
Some checks failed
Build Hermes agent / build (pull_request) Failing after 2s
2026-05-12 18:09:40 -04:00
e607982b21 refactor: chown tools dir at build time instead of root at runtime
Some checks failed
Build Hermes agent / build (pull_request) Failing after 3s
Build ollama (gfx906) / build (pull_request) Failing after 2s
2026-05-12 14:47:34 -04:00
4627199217 feat: install custom tools at startup, remove deprecated fix-permissions.sh
Some checks failed
Build Hermes agent / build (pull_request) Failing after 41m55s
Build ollama (gfx906) / build (pull_request) Failing after 2s
2026-05-12 13:38:26 -04:00
46241d10c5 feat: update Hermes Dockerfile to build from forked source
- Switch Dockerfile to clone from gortium/hermes-agent (Gitea fork)
- Add SSH agent forwarding for private repo clone at build time
- Set CHROME_EXECUTABLE for Playwright Chromium
- Remove patch_tts_tool.py (Piper patch now in fork source)
- Enable Gitea Actions in versioncontrol compose
2026-05-10 17:55:17 -04:00
6b82a26c25 fix: add ldflags for version, remove privileged, enable flash attention 2026-05-10 10:07:25 -04:00
9cc7edfb39 fix: set CMAKE_INSTALL_PREFIX=/build/dist at configure time for CPU, match preset for HIP 2026-05-10 00:44:56 -04:00
f31ae59717 fix: copy /build/dist/lib/ollama/ (not /build/dist/lib/) to avoid extra nesting 2026-05-10 00:10:39 -04:00
bf2f17c5e2 fix: use cmake -B to override preset binaryDir, cmake --build/--install use explicit path 2026-05-09 23:52:46 -04:00
208bfd4612 fix: pre-set CMAKE_HIP_COMPILER="" for CPU build to prevent HIP detection 2026-05-09 23:50:26 -04:00
32df546550 fix: use ROCm 6 preset with HIP language detection for proper GPU kernel compilation
- Use --preset 'ROCm 6' for HIP build step (enables enable_language(HIP))
- Remove /opt/rocm from PATH for CPU build to prevent check_language(HIP)
- Add CMAKE_PREFIX_PATH=/opt/rocm so find_package(hip) finds hip-config.cmake
- cmake --install --component HIP now works correctly with OLLAMA_RUNNER_DIR=rocm
2026-05-09 23:49:08 -04:00
0f7b22c19b fix: add /usr/local/go/bin to ROCm PATH (was overridden)
ENV PATH for ROCm overwrote the previous PATH that included Go.
Without Go in PATH, 'go build' fails with 'go: not found'.
2026-05-09 23:15:26 -04:00
fc777e2de2 fix: target only gfx906 for HIP compilation
gfx940/gfx1010/gfx1030/gfx1100 cause C++ narrowing errors in ollama's
mma.cuh with hipcc. Since we only have MI50 (gfx906) cards, compile
for gfx906 only. Reduces build time and avoids upstream code bugs.
2026-05-09 23:07:39 -04:00
d52f18b0fa fix: remove gfx1200 target (not supported by ROCm 6.1 clang 17)
ROCm 6.1's AMD clang 17 doesn't recognize gfx1200 architecture
(introduced in ROCm 6.2+). Caused compilation failure on all .cu files.
2026-05-09 22:53:11 -04:00
0d87fb2556 fix: build CPU and HIP backends separately
CPU backends compiled with GCC (fixes AVX intrinsic errors from hipcc).
HIP backend compiled with hipcc (legacy mode skips enable_language(HIP)).
Go binary built with GCC for CGo linking.
This avoids both CMAKE_HIP_COMPILER rejection and CXX=hipcc CPU failures.
2026-05-09 22:51:13 -04:00
f6bc2b07a7 fix: remove nonexistent CC=clang for Go build step
ROCm 6.1 image doesn't have clang/clang++ in PATH (only amdclang++).
GCC is the default and works fine for CGo linking.
2026-05-09 22:41:18 -04:00
aa6bbe87bf fix: correct AMDGPU_TARGETS to include gfx940/gfx1010/gfx1200
Targets were corrupted during previous patch iterations, contained
gfx908/gfx90a from the CMake preset instead of gfx940/gfx1010/gfx1200.
2026-05-09 22:40:40 -04:00
0c612d9731 fix: remove unsupported AMDGPU_TARGETS (gfx1200) for ROCm 6.1
ROCm 6.1's AMD clang 17 doesn't support gfx1200 (RDNA4).
Use only targets supported by ROCm 6.1: gfx906, gfx908, gfx90a, gfx1030, gfx1100.
2026-05-09 22:30:21 -04:00
5b210fe624 fix: use ROCm amdclang++ as HIP compiler, keep GCC for CPU code
Setting CXX=hipcc caused compilation failures on CPU backends (AVX
intrinsics). Now using GCC for CPU, ROCm's amdclang++ for HIP only.
2026-05-09 22:29:10 -04:00
d8b77c97c3 fix: use CXX=hipcc legacy mode for HIP CMake build
CMake 3.31 refuses CMAKE_HIP_COMPILER=hipcc with 'not supported'.
Using CXX=hipcc triggers the legacy HIP detection path which works.
2026-05-09 22:20:44 -04:00
a3d0fa0072 fix: set CMAKE_HIP_COMPILER explicitly for ROCm 6.1 HIP detection 2026-05-09 22:19:50 -04:00
956d76f14d fix: add unzip dependency for ninja installation 2026-05-09 22:14:53 -04:00
c6d2f5918f fix: use ollama v0.23.2 native CMake build system for ROCm 6 + gfx906
The old Dockerfile used the deprecated llama.cpp/ subdirectory approach
which doesn't exist in ollama v0.23.2. Now using the official CMake
presets (ROCm 6 preset) with AMDGPU_TARGETS including gfx906:xnack-.
2026-05-09 22:13:47 -04:00
f023dc1ee4 fix: update ollama Dockerfile to v0.23.2 with proper ROCm 6.1 + gfx906 build
- Update OLLAMA_VERSION from v0.13.5 to v0.23.2
- Fix package: golang -> golang-go
- Add ENV HCC_AMDGPU_TARGET=gfx906 and HSA_ENABLE_SDMA=0
- Set proper ENTRYPOINT + CMD
2026-05-09 21:56:14 -04:00
d34a4d3647 refactor: move hermes files into ai/hermes/ subdirectory
- ai/Dockerfile -> ai/hermes/Dockerfile
- ai/fix-permissions.sh -> ai/hermes/fix-permissions.sh
- ai/patch_tts_tool.py -> ai/hermes/patch_tts_tool.py
- ai/compose.yml: update hermes build context to ./hermes
- ollama stays at ai/ollama/Dockerfile
2026-05-09 21:50:04 -04:00
ef58155897 feat: add custom ollama image with ROCm 6.1 + gfx906 support
- Add ollama/Dockerfile that builds ollama from source with AMDGPU_TARGETS=gfx906
- Uses ROCm 6.1 (rocm/dev-ubuntu-22.04:6.1.2-complete) for MI50 support
- Builds llama.cpp runner with HIPBLAS for gfx906 architecture
- Updates compose.yml to build from this Dockerfile instead of pulling ollama/ollama:latest
2026-05-09 21:18:37 -04:00
93c01fa314 fix: add TZ=America/Montreal for correct cron scheduling 2026-05-09 19:49:54 +00:00
Thierry Pouplier
b89be7b8f4 chore: restore system packages lost in base image migration
The migration from debian:stable-slim to nousresearch/hermes-agent:latest
dropped several packages that were previously installed. This restores:

- poppler-utils, imagemagick (PDF/image processing)
- texlive-latex-base, latex-extra, fonts-recommended, xetex, science
- qemu-user-static, binfmt-support (cross-compilation)
- emacs-nox (text editing)

These were added in PRs 3/5, 4/5, 5/5 and earlier commits of the
compose repo. The official image already has git, curl, ffmpeg,
python3, gcc, openssh, ripgrep, tini, docker-cli, etc.
2026-05-09 19:18:16 +00:00
Thierry Pouplier
748b5037b9 fix: update TTS patch for latest hermes-agent tts_tool.py
- Patch now matches the current tts_tool.py (newer version ships in
  nousresearch/hermes-agent:latest with different Edge fallback text)
- Adds dedicated elif provider == 'piper' block before else:
- Replaces else: fallback to use Piper instead of Edge
- Patches ALL copies (venv site-packages + /opt/hermes/tools/)
- Removes Edge TTS entirely as default/provider
2026-05-09 19:03:10 +00:00
Thierry Pouplier
3f80744ebd fix: install piper-tts as root (venv is root-owned in base image)
The nousresearch/hermes-agent:latest image creates its venv
as root. Running 'uv pip install' as USER hermes fails with
Permission denied on the site-packages directory.

Fix: keep USER root while modifying the venv, then switch
back to USER hermes for runtime.
2026-05-09 17:47:30 +00:00
Thierry Pouplier
6f17743667 fix: install into existing venv instead of recreating it
The nousresearch/hermes-agent:latest base image already has a
venv with hermes-agent installed at /opt/hermes/.venv/.
Running 'uv venv' on top of it either fails or wipes the
existing install.

Fix: activate the existing venv first, then pip install into it.
2026-05-09 17:44:55 +00:00
Thierry Pouplier
98216d2872 refactor: use official Hermes Agent image as base, not debian:stable-slim
Starting from debian:stable-slim required re-installing everything
(Hermes source, Node.js, Playwright, etc.) which was redundant
and fragile. The official nousresearch/hermes-agent image already
has all that.

Now the Dockerfile:
- FROM nousresearch/hermes-agent:latest (has tts_tool.py, Playwright, etc.)
- Install Piper + voice model on top
- Patch tts_tool.py at build time (Edge fallback -> Piper)
- Runtime fallback in fix-permissions.sh for volume resilience

Cleaner, smaller Dockerfile, and the build-time patch can find
tts_tool.py because it's in the base image's venv.
2026-05-09 17:39:23 +00:00
Thierry Pouplier
a40e347dfa fix: install hermes-agent from pip so build-time TTS patch works
The Dockerfile starts from debian:stable-slim, not from the official
Hermes image. Without installing hermes-agent from pip, there is no
tools/tts_tool.py in the image at build time, so the patch script
crashes with FileNotFoundError.

Adding hermes-agent to uv pip install gives us tts_tool.py in the
venv site-packages, so the COPY+RUN patch step works cleanly.

Also keep the runtime fallback in fix-permissions.sh for cases where
the volume's site-packages differ from the image.
2026-05-09 17:37:32 +00:00
Thierry Pouplier
cfa2a898c3 fix: move TTS patch from build-time to runtime
The build-time COPY+RUN of patch_tts_tool.py failed because
the Dockerfile starts from debian:stable-slim and only copies
the ai/ build context — there's no tools/tts_tool.py in the
image at build time (Hermes is on the mounted data volume).

Move patching to fix-permissions.sh which runs at container
startup when the data volume is mounted, so tts_tool.py is
available via the venv site-packages.

Also make patch_tts_tool.py robust: searches multiple paths
for tts_tool.py, accepts path as argument, exits 0 instead
of 1 when file/pattern not found (build must not fail).
2026-05-09 17:36:26 +00:00
Thierry Pouplier
0609720b33 fix: reinstate tts_tool.py patch step in Dockerfile
Commit 8e9a75f removed the COPY+RUN of patch_tts_tool.py
because the build context was thought to be insufficient.
The build context is ai/ which contains both the Dockerfile
and patch_tts_tool.py, so COPY works fine.

Without this step the tts_tool.py silently falls through
to Edge TTS as its default provider even when
config.yaml says provider: piper, because 'piper' is not
a recognized provider in the unpatched code. This caused
the female Edge TTS voice (AriaNeural) instead of the
configured Ryan High male voice.
2026-05-09 17:13:01 +00:00
Thierry Pouplier
d97f1cb1e5 fix: add startup permission fix for data volume (chown critical dirs on boot) 2026-05-09 16:04:32 +00:00
Thierry Pouplier
1a1cfec80a fix: add atomic write permission fix (preserves file mode on os.replace) 2026-05-09 15:50:29 +00:00