Compare commits

...

30 Commits

Author SHA1 Message Date
f4dd57fa60 fix: add start-hermes.sh baked into image, replace broken ENTRYPOINT
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
- New start-hermes.sh: multi-profile launcher that works with s6-overlay's
  main-program model (replaces bash->tini->entrypoint.sh chain)
- Dockerfile: COPY start-hermes.sh into /usr/local/bin/ alongside
  run-multi-gateways.sh (which is now unused but kept for reference)
- compose.yml: remove entrypoint override, CMD now points at
  /usr/local/bin/start-hermes.sh via the image default ENTRYPOINT

Fixes the SIGTERM crash loop caused by S6_CMD_ARG0 being unset when the
deprecated entrypoint.sh shim bypassed s6-overlay's /init.
2026-07-07 21:58:41 -04:00
a6b25ee84d fix: replace broken ENTRYPOINT override with s6-overlay compatible CMD
The custom ENTRYPOINT chained bash -> tini -g -> deprecated entrypoint.sh,
bypassing s6-overlay's /init entirely. This left S6_CMD_ARG0 unset and the
orphan -g flag crashed rc.init with '-g: not found' -> SIGTERM -> restart loop.

Fix:
- Remove the ENTRYPOINT override so the image default is used:
  ENTRYPOINT ['/init', '/opt/hermes/docker/main-wrapper.sh']
- Change CMD to point at /opt/data/start-hermes.sh, a new launcher
  that starts per-profile gateways in background then the default
  gateway in foreground (via s6-overlay's main-program model).

The old /usr/local/bin/run-multi-gateways.sh is no longer called.
2026-07-07 21:56:33 -04:00
54e0661396 fix: add missing USER hermes at end of Dockerfile
The Dockerfile was switching to USER root for the final chown but never
switched back to USER hermes. This caused ALL container processes to run
as root (uid 0) instead of the hermes user (uid 10000).

The entrypoint's gosu privilege drop only caught the main exec chain,
leaving backgrounded subprocesses (dashboard PTY sessions, workers with
start_new_session=True) running as root — creating files owned by root
in ExoKortex and breaking Syncthing sync.

Adding USER hermes at the end ensures the container runs unprivileged
and ALL child processes inherit uid 10000 from the start.
2026-07-07 14:58:44 -04:00
2571930efa Local change dump 2026-07-07 14:11:31 -04:00
e525145057 Merge pull request 'feat: add Honcho memory provider with Traefik + Authelia' (#48) from feat/honcho-only into master
Some checks failed
Build Hermes agent / build (push) Has been cancelled
Build ollama (gfx906) / build (push) Has been cancelled
Reviewed-on: #48
2026-06-15 17:08:20 +00:00
e5f1d98bd9 Merge remote-tracking branch 'origin/feat/honcho-only' into feat/honcho-only
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-06-15 13:06:22 -04:00
82e3005d1f Added opencode api key 2026-06-15 13:05:10 -04:00
d88db00f3f deleted tmp files... fucking llm... 2026-06-15 13:04:18 -04:00
cf1e316af1 No more pre-created network, all bridge 2026-06-11 15:37:17 -04:00
0bff81bfa0 Fixed the honcho path 2026-06-11 15:30:59 -04:00
b185d43d67 switch-openconcho-to-fork
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-28 17:15:36 -04:00
efaf3550b9 remove_temp_scratch_files
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 16:52:13 -04:00
1460085718 Merge remote-tracking branch 'refs/remotes/origin/feat/honcho-only' into feat/honcho-only
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 16:39:52 -04:00
6069ebd6a4 Removed version in compose 2026-05-25 16:37:25 -04:00
5dd6e9a442 fix_embedding_dims_to_1024_match_db
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 16:34:00 -04:00
54e3868f94 fix_honcho_cmd_use_bash_instead_of_sh
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 16:21:18 -04:00
68009f05c1 fix_honcho_dockerfile_ssh_client_and_keyscan
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 16:10:57 -04:00
87e546beae merge commit
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 16:08:19 -04:00
b4a0e4449d Fixed the honcho name 2026-05-25 16:04:19 -04:00
9635ed8e7e fix_honcho_build_ssh
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 16:03:12 -04:00
2e8e0b4561 fix_honcho_traefik_network_label
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 15:09:18 -04:00
945d4e43a5 fix_compose_env_vars
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 15:02:22 -04:00
14eba26b6b fix: add dream model_configs with api_key_env for HONCHO_OPENAI_API_KEY
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 14:51:49 -04:00
6774af7c13 fix: use HONCHO_OPENAI_API_KEY variable (user's existing secret)
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 14:34:30 -04:00
c9a3386138 fix: add HONCHO_OPENAI_API_KEY env to fix deriver/dream LLM calls
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 14:11:54 -04:00
51018024e9 fix: enable Honcho dream (ENABLED = true) 2026-05-25 13:18:12 -04:00
c9b9f63a34 fix: disable kanban auto-dispatch for default gateway
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-25 13:13:02 -04:00
6641071d8f fix: update Honcho config path to HoardingCow, point fork to Hermes/honcho
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
- Update Dockerfile to clone from code.lazyworkhorse.net/Hermes/honcho.git
  (uses build arg HONCHO_REPO, can be overridden at build time)
- Add config.toml volume mount from HoardingCow persistent path
- Use named volume honcho_data instead of host bind mount
- Declare honcho_data as external volume in top-level volumes section
2026-05-25 13:10:03 -04:00
63b6cd3461 fix: honcho embedding config - fix base_url nesting, switch to bge-m3, add deriver to CMD
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-23 18:54:35 -04:00
08778db685 fix: use HONCHO_OPENAI_API_KEY, fix dimensions to 1024, restore defaults
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
2026-05-23 16:51:13 -04:00
17 changed files with 240 additions and 177 deletions

View File

@@ -1,47 +1,24 @@
version: "3.8"
services:
# webui:
# image: ghcr.io/open-webui/open-webui:main
# volumes:
# - /mnt/HoardingCow_docker_data/Ollama/open-webui:/app/backend/data
# restart: always
# environment:
# - OLLAMA_API_BASE_URL=http://ollama:11434/api
# networks:
# - ai_net
# - ai_backend
# labels:
# - "traefik.enable=true"
# # Router for HTTP + redirection to HTTPS
# - "traefik.http.routers.webui-http.rule=Host(`ai.lazyworkhorse.net`)"
# - "traefik.http.routers.webui-http.entrypoints=web"
# - "traefik.http.routers.webui-http.middlewares=redirect-to-https"
# # Router for HTTPS with TLS
# - "traefik.http.routers.webui-https.rule=Host(`ai.lazyworkhorse.net`)"
# - "traefik.http.routers.webui-https.entrypoints=websecure"
# - "traefik.http.routers.webui-https.tls=true"
# - "traefik.http.routers.webui-https.tls.certresolver=njalla"
hermes:
build:
context: ./hermes
ssh:
- default
container_name: hermes
entrypoint: ["/bin/bash", "-c",
"bash /opt/data/hermes-tools/install.sh && bash /usr/local/bin/run-multi-gateways.sh && exec /usr/bin/tini -g -- /opt/hermes/docker/entrypoint.sh \"$@\"",
"hermes-entrypoint"]
restart: always
# Gateway run enables the internal API server on port 8642
command: gateway run
# Use the image default ENTRYPOINT ["/init", "/opt/hermes/docker/main-wrapper.sh"]
# for proper s6-overlay supervision. The CMD runs our multi-profile launcher
# which spawns per-profile gateways in background, then the default gateway
# in foreground (keeps the container alive).
command: ["/usr/local/bin/start-hermes.sh"]
environment:
- HERMES_UID=10000
- HERMES_GID=10000
- OLLAMA_HOST=http://ollama:11434
- HERMES_DASHBOARD=1
# Multi-profile: comma-separated list of profiles to run as gateways.
# The entrypoint reads this and starts one gateway per profile.
# start-hermes.sh reads this and starts one gateway per profile.
# Add profiles here when they exist on disk (e.g. default,researcher,writer)
- HERMES_PROFILES=ashley,claire,finn,matt,paul
- API_SERVER_ENABLED=true
@@ -50,6 +27,7 @@ services:
- API_SERVER_KEY=hermes_local_key
- GATEWAY_ALLOW_ALL_USERS=true
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
- OPENCODE_API_KEY=${OPENCODE_API_KEY}
# ROCm for GPU-accelerated faster-whisper STT
- HSA_OVERRIDE_GFX_VERSION=9.0.6
- HCC_AMDGPU_TARGET=gfx906
@@ -59,10 +37,7 @@ services:
- TZ=America/Montreal
volumes:
- /mnt/HoardingCow_docker_data/Hermes/data:/opt/data
# Syncthing-shared org files — read-only view of user's agenda
- /mnt/HoardingCow_docker_data/Syncthing/telos-ro:/opt/data/telos-ro:ro
# Syncthing-shared inbox — write tasks here, they sync to user's laptop
- /mnt/HoardingCow_docker_data/Syncthing/telos-rw:/opt/data/telos-rw:rw
- /mnt/HoardingCow_docker_data/Hermes/Syncthing/ExoKortex:/opt/data/ExoKortex
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
@@ -109,24 +84,29 @@ services:
- "21027:21027/udp"
environment:
- TZ=America/Montreal
- PUID=10000
- PGID=10000
volumes:
- /mnt/HoardingCow_docker_data/Syncthing/config:/var/syncthing/config
- /mnt/HoardingCow_docker_data/Syncthing/telos-ro:/telos-ro
- /mnt/HoardingCow_docker_data/Syncthing/telos-rw:/telos-rw
- /mnt/HoardingCow_docker_data/Hermes/Syncthing/config:/var/syncthing/config
- /mnt/HoardingCow_docker_data/Hermes/Syncthing/ExoKortex:/ExoKortex
networks:
- ai_backend
- ai_net
labels:
- "traefik.enable=true"
- "traefik.docker.network=ai_net"
- "traefik.http.routers.syncthing-http.rule=Host(`syncthing.lazyworkhorse.net`)"
- "traefik.http.routers.syncthing-http.entrypoints=web"
- "traefik.http.routers.syncthing-http.middlewares=redirect-to-https"
- "traefik.http.routers.syncthing-https.rule=Host(`syncthing.lazyworkhorse.net`)"
- "traefik.http.routers.syncthing-https.entrypoints=websecure"
- "traefik.http.routers.syncthing-https.tls=true"
- "traefik.http.routers.syncthing-https.tls.certresolver=njalla"
- "traefik.http.services.syncthing.loadbalancer.server.port=8384"
- "traefik.http.routers.syncthing-https.middlewares=hermes-auth"
- "traefik.http.services.syncthing.loadbalancer.server.port=8384"
ollama:
build:
@@ -162,25 +142,31 @@ services:
- "26"
# --- Honcho + OpenConcho combiné: API + Web UI nginx/FastAPI ---
honcho-ui:
build: ./honcho
honcho:
build:
context: ./honcho
ssh:
- default
container_name: honcho
restart: unless-stopped
environment:
- DB_CONNECTION_URI=postgresql+psycopg://honcho:honcho_pass@honcho-db:5432/honcho
- CACHE_URL=redis://honcho-redis:6379/0
- CACHE_ENABLED=true
- EMBEDDING_VECTOR_DIMENSIONS=1536
- EMBEDDING_VECTOR_DIMENSIONS=1024
- AUTH_USE_AUTH=true
- AUTH_JWT_SECRET=${AUTH_JWT_SECRET}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- AUTH_JWT_SECRET=${HONCHO_AUTH_JWT_SECRET}
# Needed by deriver/dream to make LLM calls (api_key_env = "HONCHO_OPENAI_API_KEY" in config.toml)
- HONCHO_OPENAI_API_KEY=${HONCHO_OPENAI_API_KEY}
volumes:
- /mnt/HoardingCow_docker_data/Honcho/data:/app/data
- /mnt/HoardingCow_docker_data/Honcho/config.toml:/app/config.toml:ro
networks:
- ai_backend
- ai_net
labels:
- "traefik.enable=true"
- "traefik.docker.network=ai_net"
# Router for HTTP + redirect to HTTPS
- "traefik.http.routers.honcho-http.rule=Host(`honcho.lazyworkhorse.net`)"
@@ -197,10 +183,8 @@ services:
# Service Loadbalancer (nginx port)
- "traefik.http.services.honcho.loadbalancer.server.port=80"
depends_on:
honcho-db:
condition: service_healthy
honcho-redis:
condition: service_healthy
- honcho-db
- honcho-redis
honcho-db:
image: pgvector/pgvector:pg15
@@ -219,11 +203,6 @@ services:
- ./honcho/init-db.sql:/docker-entrypoint-initdb.d/init.sql:ro
networks:
- ai_backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U honcho -d honcho"]
interval: 5s
timeout: 5s
retries: 5
honcho-redis:
image: redis:8
@@ -235,19 +214,19 @@ services:
- /mnt/HoardingCow_docker_data/Honcho/redis:/data
networks:
- ai_backend
healthcheck:
test: ["CMD-SHELL", "redis-cli ping"]
interval: 5s
timeout: 5s
retries: 5
networks:
ai_net:
external: true
driver: bridge
name: ai_net
ai_backend:
driver: bridge
name: ai_backend
volumes:
honcho_data:
driver: bridge
name: honcho_data
# llama_cpp_devstral:
# image: ghcr.io/ggml-org/llama.cpp:server-rocm
@@ -337,6 +316,30 @@ networks:
# - /mnt/HoardingCow_docker_data/vllm/models:/root/.cache/huggingface
# restart: unless-stopped
# webui:
# image: ghcr.io/open-webui/open-webui:main
# volumes:
# - /mnt/HoardingCow_docker_data/Ollama/open-webui:/app/backend/data
# restart: always
# environment:
# - OLLAMA_API_BASE_URL=http://ollama:11434/api
# networks:
# - ai_net
# - ai_backend
# labels:
# - "traefik.enable=true"
# # Router for HTTP + redirection to HTTPS
# - "traefik.http.routers.webui-http.rule=Host(`ai.lazyworkhorse.net`)"
# - "traefik.http.routers.webui-http.entrypoints=web"
# - "traefik.http.routers.webui-http.middlewares=redirect-to-https"
# # Router for HTTPS with TLS
# - "traefik.http.routers.webui-https.rule=Host(`ai.lazyworkhorse.net`)"
# - "traefik.http.routers.webui-https.entrypoints=websecure"
# - "traefik.http.routers.webui-https.tls=true"
# - "traefik.http.routers.webui-https.tls.certresolver=njalla"
# n8n:
# image: n8nio/n8n:latest
# container_name: n8n

View File

@@ -9,26 +9,6 @@
# ---------- Base: official Hermes image (system deps, npm, uv, Playwright) ----------
FROM nousresearch/hermes-agent:latest
# ---------- Overlay our forked source ----------
# Uses SSH agent forwarding from the build host (no key baked into image).
# --exclude node_modules/.venv keeps the base image's pre-built layers intact.
# Only the Python source, web UI source, and config change.
RUN --mount=type=ssh \
mkdir -p /root/.ssh && \
ssh-keyscan -p 2222 code.lazyworkhorse.net >> /root/.ssh/known_hosts 2>/dev/null && \
cd /tmp && \
GIT_SSH_COMMAND='ssh -p 2222 -o StrictHostKeyChecking=no' \
git clone --depth 1 --branch main \
git@code.lazyworkhorse.net:gortium/hermes-agent.git fork && \
rm -rf fork/node_modules fork/.venv fork/.git && \
cp -a fork/. /opt/hermes/ && \
rm -rf /tmp/fork /root/.ssh/
# ---------- Reinstall Python package (editable) ----------
# Picks up source changes from our fork.
RUN . /opt/hermes/.venv/bin/activate && \
uv pip install --no-cache-dir --no-deps -e /opt/hermes
# ---------- Extra system deps ----------
USER root
RUN apt-get update && \
@@ -43,12 +23,6 @@ RUN apt-get update && \
# ---------- UV ----------
COPY --chmod=0755 --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/
# ---------- Matrix bridge + extra pip deps ----------
# Previously installed inline at container startup and persisted via volume mount.
# Now baked into the image so the fragile venv volume mount can be removed.
RUN . /opt/hermes/.venv/bin/activate && \
uv pip install --no-cache-dir 'mautrix[encryption]' openai
WORKDIR /opt/hermes
# ---------- Matrix bridge + extra pip deps ----------
@@ -88,6 +62,11 @@ PYEOF
# Launches one gateway process per profile (HERMES_PROFILES env var)
COPY --chmod=0755 run-multi-gateways.sh /usr/local/bin/run-multi-gateways.sh
# ---------- Install s6-overlay compatible startup script ----------
# Runs as the CMD via s6-overlay's main-program model.
# Replaces the old bash->tini->entrypoint.sh chain that caused SIGTERM crash loops.
COPY --chmod=0755 start-hermes.sh /usr/local/bin/start-hermes.sh
# ---------- Runtime ----------
USER hermes
ENV HERMES_HOME=/opt/data
@@ -100,4 +79,9 @@ ENV CHROME_EXECUTABLE=/opt/hermes/.playwright/chromium/chrome-linux/chrome
USER root
RUN chown -R hermes:hermes /opt/hermes/tools /opt/hermes/toolsets.py
VOLUME [ "/opt/data" ]
VOLUME [ "/opt/data" ]
# Switch to the hermes user so the container runs unprivileged.
# All child processes inherit this user — no more orphan root processes
# that escape gosu privilege drops in the entrypoint.
USER hermes

38
ai/hermes/start-hermes.sh Normal file
View File

@@ -0,0 +1,38 @@
#!/bin/bash
# Multi-profile + default gateway launcher — runs as the CMD via s6-overlay.
#
# The image's default ENTRYPOINT ["/init", "/opt/hermes/docker/main-wrapper.sh"]
# starts the s6 supervision tree, then exec's main-wrapper.sh with the CMD args.
# main-wrapper.sh sources the venv, drops to the hermes user via s6-setuidgid,
# and exec's this script.
#
# This script:
# 1. Launches per-profile background gateways (HERMES_PROFILES env var)
# 2. Starts the default gateway in foreground (keeps the container alive)
#
# Replaces the old approach of chaining bash -> tini -g -> deprecated entrypoint.sh
# which bypassed s6-overlay and caused the SIGTERM crash loop.
set -e
HERMES_BIN="/opt/hermes/.venv/bin/hermes"
# --- Multi-profile gateways (background) ---
if [ -n "${HERMES_PROFILES:-}" ]; then
echo "[start-hermes] Launching per-profile gateways: ${HERMES_PROFILES}"
IFS=',' read -ra PROFILES <<< "${HERMES_PROFILES}"
for profile in "${PROFILES[@]}"; do
profile="$(echo "${profile}" | xargs)" # trim whitespace
[ -z "${profile}" ] && continue
echo "[start-hermes] -> background gateway for profile '${profile}'"
# No gosu/s6-setuidgid needed — we're already running as the hermes user
# (main-wrapper.sh drops privileges before exec'ing this script).
nohup "${HERMES_BIN}" --profile "${profile}" gateway run \
>> "/opt/data/logs/gateway-${profile}.log" 2>&1 &
done
echo "[start-hermes] All profile gateways launched"
fi
# --- Default gateway (foreground — keeps container alive) ---
echo "[start-hermes] Starting default gateway (foreground)"
exec "${HERMES_BIN}" gateway run

View File

@@ -2,14 +2,15 @@
FROM python:3.13-slim-bookworm AS honcho-builder
RUN apt-get update && \
apt-get install -y --no-install-recommends git && \
apt-get install -y --no-install-recommends git openssh-client && \
rm -rf /var/lib/apt/lists/*
COPY --from=ghcr.io/astral-sh/uv:0.9.24 /uv /bin/uv
ARG HONCHO_REPO=https://github.com/plastic-labs/honcho
ARG HONCHO_REPO=ssh://git@code.lazyworkhorse.net:2222/Hermes/honcho.git
ARG HONCHO_REF=main
RUN git clone --depth 1 --branch ${HONCHO_REF} ${HONCHO_REPO} /app
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan -p 2222 code.lazyworkhorse.net >> ~/.ssh/known_hosts 2>/dev/null
RUN --mount=type=ssh git clone --depth 1 --branch ${HONCHO_REF} ${HONCHO_REPO} /app
WORKDIR /app
@@ -29,8 +30,8 @@ RUN corepack enable && corepack prepare pnpm@latest --activate
WORKDIR /app
RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
ARG OPENCONCHO_SHA=e490d911fcb27ee193558fd9a28856cde2057665
RUN git clone --depth 1 https://github.com/offendingcommit/openconcho.git /app && \
ARG OPENCONCHO_SHA=3b5c3293fc18d768dbe85285264a8d66c896bd81
RUN --mount=type=ssh git clone --depth 1 ssh://git@code.lazyworkhorse.net:2222/gortium/openconcho.git /app && \
git -C /app fetch --depth 1 origin ${OPENCONCHO_SHA} && \
git -C /app checkout ${OPENCONCHO_SHA}
@@ -71,4 +72,4 @@ COPY honcho-nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["sh", "-c", "nginx -g 'daemon off;' & fastapi run --host 127.0.0.1 --port 8000 src/main.py"]
CMD ["bash", "-c", "nginx -g 'daemon off;' & fastapi run --host 127.0.0.1 --port 8000 src/main.py & python3 -m src.deriver & wait -n"]

View File

@@ -29,15 +29,15 @@ URL = "redis://honcho-redis:6379/0"
[llm]
DEFAULT_MAX_TOKENS = 4096
# Embeddings via Ollama
# Embeddings via Ollama — bge-m3 provides 1024-dim
[embedding]
VECTOR_DIMENSIONS = 768
VECTOR_DIMENSIONS = 1024
MAX_INPUT_TOKENS = 8192
[embedding.model_config]
transport = "openai"
model = "nomic-embed-text"
base_url = "http://ollama:11434/v1"
model = "bge-m3"
overrides = {base_url = "http://ollama:11434/v1", api_key = "ollama"}
# --- Deriver ---
[deriver]
@@ -47,10 +47,9 @@ POLLING_SLEEP_INTERVAL_SECONDS = 5.0
FLUSH_ENABLED = true
[deriver.model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
base_url = "https://opencode.ai/zen/go/v1"
api_key_env = "OPENAI_API_KEY"
# --- Dialectic ---
[dialectic]
@@ -61,42 +60,37 @@ SESSION_HISTORY_MAX_TOKENS = 8192
MAX_TOOL_ITERATIONS = 1
MAX_OUTPUT_TOKENS = 512
[dialectic.levels.minimal.model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
base_url = "https://opencode.ai/zen/go/v1"
api_key_env = "OPENAI_API_KEY"
[dialectic.levels.low]
MAX_TOOL_ITERATIONS = 3
[dialectic.levels.low.model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
base_url = "https://opencode.ai/zen/go/v1"
api_key_env = "OPENAI_API_KEY"
[dialectic.levels.medium]
MAX_TOOL_ITERATIONS = 2
[dialectic.levels.medium.model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
base_url = "https://opencode.ai/zen/go/v1"
api_key_env = "OPENAI_API_KEY"
[dialectic.levels.high]
MAX_TOOL_ITERATIONS = 4
[dialectic.levels.high.model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
base_url = "https://opencode.ai/zen/go/v1"
api_key_env = "OPENAI_API_KEY"
[dialectic.levels.max]
MAX_TOOL_ITERATIONS = 10
[dialectic.levels.max.model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
base_url = "https://opencode.ai/zen/go/v1"
api_key_env = "OPENAI_API_KEY"
# --- Summary ---
[summary]
@@ -105,14 +99,28 @@ MESSAGES_PER_SHORT_SUMMARY = 20
MESSAGES_PER_LONG_SUMMARY = 60
[summary.model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
base_url = "https://opencode.ai/zen/go/v1"
api_key_env = "OPENAI_API_KEY"
# --- Dream ---
[dream]
ENABLED = false
ENABLED = true
[dream.model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
[dream.deduction_model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
[dream.induction_model_config]
overrides = {base_url = "https://opencode.ai/zen/go/v1", api_key_env = "HONCHO_OPENAI_API_KEY"}
transport = "openai"
model = "deepseek-v4-flash"
# --- Peer Card ---
[peer_card]
@@ -121,4 +129,4 @@ ENABLED = true
# --- Vector Store ---
[vector_store]
TYPE = "pgvector"
DIMENSIONS = 768
# DIMENSIONS is deprecated — EMBEDDING.VECTOR_DIMENSIONS is authoritative

View File

@@ -32,5 +32,5 @@ services:
networks:
auth_net:
external: true
driver: bridge
name: auth_net

View File

@@ -68,33 +68,33 @@ services:
labels:
- "traefik.enable=false" # Internal only, accessed by restic-browser
restic-browser:
image: embergarage/restic-browser:latest
container_name: restic-browser
restart: always
environment:
- TZ=America/Montreal
- RESTIC_REPOSITORY=http://restic-server:8080
- RESTIC_PASSWORD=${RESTIC_PASSWORD}
networks:
- backup_net
labels:
- "traefik.enable=true"
# 1. HTTP to HTTPS Redirect
- "traefik.http.routers.restic-browser-http.rule=Host(`backup.lazyworkhorse.net`)"
- "traefik.http.routers.restic-browser-http.entrypoints=web"
- "traefik.http.routers.restic-browser-http.middlewares=redirect-to-https@docker"
# 2. HTTPS Configuration
- "traefik.http.routers.restic-browser.rule=Host(`backup.lazyworkhorse.net`)"
- "traefik.http.routers.restic-browser.entrypoints=websecure"
- "traefik.http.routers.restic-browser.tls=true"
- "traefik.http.routers.restic-browser.tls.certresolver=njalla"
# 3. Backend Service Config
- "traefik.http.services.restic-browser.loadbalancer.server.port=8000"
# restic-browser:
# image: mazzolino/restic-browser:latest
# container_name: restic-browser
# restart: always
# environment:
# - TZ=America/Montreal
# - RESTIC_REPOSITORY=http://restic-server:8080
# - RESTIC_PASSWORD=${RESTIC_PASSWORD}
# networks:
# - backup_net
# labels:
# - "traefik.enable=true"
# # 1. HTTP to HTTPS Redirect
# - "traefik.http.routers.restic-browser-http.rule=Host(`backup.lazyworkhorse.net`)"
# - "traefik.http.routers.restic-browser-http.entrypoints=web"
# - "traefik.http.routers.restic-browser-http.middlewares=redirect-to-https@docker"
#
# # 2. HTTPS Configuration
# - "traefik.http.routers.restic-browser.rule=Host(`backup.lazyworkhorse.net`)"
# - "traefik.http.routers.restic-browser.entrypoints=websecure"
# - "traefik.http.routers.restic-browser.tls=true"
# - "traefik.http.routers.restic-browser.tls.certresolver=njalla"
#
# # 3. Backend Service Config
# - "traefik.http.services.restic-browser.loadbalancer.server.port=8000"
networks:
backup_net:
external: true
driver: bridge
name: backup_net

View File

@@ -6,6 +6,7 @@ services:
restart: always
networks:
- cloud_net
- cloud_internal
environment:
- PUID=1000
- PGID=1000
@@ -51,7 +52,7 @@ services:
container_name: nextcloud_cron
restart: always
networks:
- cloud_net
- cloud_internal
entrypoint: /cron.sh
volumes:
- /mnt/HoardingCow_docker_data/NextCloud/data:/var/www/html:rw
@@ -75,7 +76,7 @@ services:
networks:
cloud_net:
external: true
driver: bridge
name: cloud_net
cloud_internal:
driver: bridge

View File

@@ -103,7 +103,7 @@ services:
networks:
coms_net:
external: true
driver: bridge
name: coms_net
coms_backend:
driver: bridge

View File

@@ -37,4 +37,5 @@ services:
networks:
finance_net:
external: true
driver: bridge
name: finance_net

View File

@@ -12,8 +12,8 @@ services:
volumes:
- /mnt/HoardingCow_docker_data/Home_Assistant:/config:rw
networks:
- home_auto_net
- home_auto_backend
- home_net
- home_backend
labels:
- "traefik.enable=true"
@@ -34,7 +34,7 @@ services:
volumes:
- /mnt/HoardingCow_docker_data/Mosquitto:/mosquitto
networks:
- home_auto_backend
- home_backend
# ports:
# - 1883:1883
# - 9001:9001
@@ -43,7 +43,7 @@ services:
image: registry.gitlab.com/hydroqc/hydroqc2mqtt:1.3.0
restart: always
networks:
- home_auto_backend
- home_backend
environment:
MQTT_USERNAME: hass
MQTT_PASSWORD: ${MQTT_PASSWORD}
@@ -88,8 +88,9 @@ services:
# restart: unless-stopped
networks:
home_auto_net:
external: true
home_auto_backend:
home_net:
driver: bridge
name: home_auto_backend
name: home_net
home_backend:
driver: bridge
name: home_backend

View File

@@ -38,4 +38,5 @@ services:
networks:
homepage_net:
external: true
driver: bridge
name: homepage_net

View File

@@ -36,9 +36,9 @@ services:
- cloud_net
- coms_net
- finance_net
- home_auto_net
- home_net
- homepage_net
- passman_net
- pass_net
- tak_net
- vc_net
@@ -82,37 +82,37 @@ networks:
driver: bridge
name: traefik_backend
ai_net:
external: true
driver: bridge
name: ai_net
auth_net:
external: true
driver: bridge
name: auth_net
backup_net:
external: true
driver: bridge
name: backup_net
cloud_net:
external: true
driver: bridge
name: cloud_net
coms_net:
external: true
driver: bridge
name: coms_net
finance_net:
external: true
driver: bridge
name: finance_net
home_auto_net:
external: true
name: home_auto_net
home_net:
driver: bridge
name: home_net
homepage_net:
external: true
driver: bridge
name: homepage_net
passman_net:
external: true
name: passman_net
pass_net:
driver: bridge
name: pass_net
tak_net:
external: true
driver: bridge
name: tak_net
vc_net:
external: true
driver: bridge
name: vc_net
# duckdns:

View File

@@ -13,7 +13,7 @@ services:
volumes:
- /mnt/HoardingCow_docker_data/BitWarden/data:/data:rw
networks:
- passman_net
- pass_net
restart: always
labels:
- "traefik.enable=true"
@@ -32,5 +32,6 @@ services:
# Internal service
- "traefik.http.services.pass.loadbalancer.server.port=80"
networks:
passman_net:
external: true
pass_net:
driver: bridge
name: pass_net

View File

@@ -92,7 +92,8 @@ services:
networks:
tak_net:
external: true
driver: bridge
name: tak_net
tak_backend:
driver: bridge
name: tak_backend

View File

@@ -61,4 +61,5 @@ services:
networks:
vc_net:
external: true
driver: bridge
name: vc_net

View File

@@ -12,7 +12,7 @@ services:
- SYS_MODULE
environment:
- WG_HOST=vpn.lazyworkhorse.net
- PASSWORD=${WG_PASSWORD}
- PASSWORD_HASH=${WG_PASSWORD_HASH}
- WG_PORT=51820
- WG_DEFAULT_ADDRESS=10.8.0.x
- WG_DEFAULT_DNS=1.1.1.1,8.8.8.8
@@ -22,7 +22,6 @@ services:
- UI_CHART_TYPE=0
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
volumes:
- /mnt/HoardingCow_docker_data/WireGuard:/etc/wireguard:rw
sysctls:
@@ -31,8 +30,31 @@ services:
restart: unless-stopped
networks:
- vpn_net
labels:
- "traefik.enable=true"
# HTTP → HTTPS redirect
- "traefik.http.routers.wireguard-http.rule=Host(vpn.lazyworkhorse.net)"
- "traefik.http.routers.wireguard-http.entrypoints=web"
- "traefik.http.routers.wireguard-http.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
# HTTPS router — protégé par Authelia
- "traefik.http.routers.wireguard-https.rule=Host(vpn.lazyworkhorse.net)"
- "traefik.http.routers.wireguard-https.entrypoints=websecure"
- "traefik.http.routers.wireguard-https.tls=true"
- "traefik.http.routers.wireguard-https.tls.certresolver=njalla"
- "traefik.http.routers.wireguard-https.middlewares=wireguard-auth"
# Authelia forwardAuth
- "traefik.http.middlewares.wireguard-auth.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.lazyworkhorse.net/"
- "traefik.http.middlewares.wireguard-auth.forwardauth.trustforwardheader=true"
- "traefik.http.middlewares.wireguard-auth.forwardauth.authresponseheaders=X-Forwarded-User,X-Forwarded-Groups"
# Port interne du web UI wg-easy
- "traefik.http.services.wireguard.loadbalancer.server.port=51821"
networks:
vpn_net:
external: true
driver: bridge
name: vpn_net