83 lines
3.1 KiB
Docker
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" ]
|