Files
compose/ai/Dockerfile
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

55 lines
2.0 KiB
Docker

# 1. On récupère la version la plus récente d'UV
FROM ghcr.io/astral-sh/uv:latest AS uv_source
# 2. Image officielle Hermes Agent de NousResearch
# Contient déjà: Python, Node.js, npm, Playwright/Chromium, venv, tts_tool.py, etc.
FROM nousresearch/hermes-agent:latest
# ---------- System dependencies ----------
# Piper a besoin de libportaudio2, et HuggingFace a besoin de ca-certificates
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libportaudio2 \
ca-certificates && \
rm -rf /var/lib/apt/lists/*
# ---------- UV (hyperfast pip alternative) ----------
COPY --chmod=0755 --from=uv_source /uv /usr/local/bin/
WORKDIR /opt/hermes
# ---------- Hermes venv ----------
USER hermes
# ---------- Python virtualenv avec Piper TTS ----------
RUN uv venv && \
uv pip install --no-cache-dir piper-tts sounddevice numpy
# ---------- Télécharger la voix Piper Ryan (high quality) ----------
RUN mkdir -p /opt/hermes/.venv/share/piper/voices && \
/opt/hermes/.venv/bin/python3 /dev/stdin << 'PYEOF'
import urllib.request
base = '/opt/hermes/.venv/share/piper/voices'
url = 'https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/ryan/high/en_US-ryan-high.onnx'
urllib.request.urlretrieve(url, base + '/en_US-ryan-high.onnx')
urllib.request.urlretrieve(url + '.json', base + '/en_US-ryan-high.onnx.json')
PYEOF
# ---------- Patch tts_tool.py: remplacer Edge TTS par Piper ----------
# Edge TTS appelle les serveurs Microsoft — on ne veut jamais ça.
# Piper roule localement sur CPU, aucun cloud, aucune donnée qui sort.
COPY patch_tts_tool.py /tmp/patch_tts_tool.py
RUN /opt/hermes/.venv/bin/python3 /tmp/patch_tts_tool.py && rm /tmp/patch_tts_tool.py
# ---------- Runtime ----------
ENV HERMES_HOME=/opt/data
ENV PATH="/opt/data/.local/bin:${PATH}"
VOLUME [ "/opt/data" ]
# Script de réparation des permissions + patch TTS au démarrage
COPY --chmod=0755 fix-permissions.sh /opt/hermes/fix-permissions.sh
ENTRYPOINT [ "/usr/bin/tini", "-g", "--", "/opt/hermes/fix-permissions.sh" ]