Files
compose/ai/hermes/Dockerfile
Hermes 03616e9e3d
Some checks failed
Build Hermes agent / build (pull_request) Failing after 2s
feat: add Himalaya email CLI to Hermes Docker image
2026-05-12 18:05:18 -04:00

83 lines
3.1 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 ----------
# The official hermes-agent image already has: git, curl, ffmpeg, python3,
# gcc, build-essential, openssh-client, procps, tini, ripgrep, docker-cli,
# libportaudio2, ca-certificates, etc.
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends \
poppler-utils \
imagemagick \
texlive-latex-base \
texlive-latex-extra \
texlive-fonts-recommended \
texlive-xetex \
texlive-science && \
rm -rf /var/lib/apt/lists/*
# ---------- UV (hyperfast pip alternative) ----------
COPY --chmod=0755 --from=uv_source /uv /usr/local/bin/
WORKDIR /opt/hermes
# ---------- Extra Python deps ----------
RUN . /opt/hermes/.venv/bin/activate && \
uv pip install --no-cache-dir httpx
# ---------- Piper TTS ----------
RUN . /opt/hermes/.venv/bin/activate && \
uv pip install --no-cache-dir piper-tts sounddevice numpy && \
mkdir -p /opt/hermes/.venv/share/piper/voices
RUN /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')
print('Piper voice downloaded')
PYEOF
# ---------- Install Himalaya email CLI ----------
RUN /opt/hermes/.venv/bin/python3 /dev/stdin << 'PYEOF'
import urllib.request, tarfile, os, shutil
url = 'https://github.com/pimalaya/himalaya/releases/download/v1.2.0/himalaya.x86_64-linux.tgz'
tgz = '/tmp/himalaya.tgz'
urllib.request.urlretrieve(url, tgz)
with tarfile.open(tgz) as t:
t.extractall('/tmp')
shutil.move('/tmp/himalaya', '/usr/local/bin/himalaya')
os.chmod('/usr/local/bin/himalaya', 0o755)
os.remove(tgz)
print('himalaya v1.2.0 installed')
PYEOF
# ---------- Install himalaya-ro wrapper ----------
COPY --chmod=0755 himalaya-ro.sh /usr/local/bin/himalaya-ro
# ---------- 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 ----------
USER hermes
ENV HERMES_HOME=/opt/data
ENV PATH="/opt/data/.local/bin:${PATH}"
# Point browser tool to Playwright's Chromium (already in base image)
ENV CHROME_EXECUTABLE=/opt/hermes/.playwright/chromium/chrome-linux/chrome
VOLUME [ "/opt/data" ]
# Startup permission fix + config generation + TTS patch
COPY --chmod=0755 fix-permissions.sh /opt/hermes/fix-permissions.sh
ENTRYPOINT [ "/usr/bin/tini", "-g", "--", "/opt/hermes/fix-permissions.sh" ]