# Spracherkennung fuer WhatsApp-Sprachnachrichten (Pilot Dominiak, Schritt 17).
# whisper.cpp (feste Version) + Modell small-q5_1 (Pruefsumme) + ffmpeg. Laeuft OHNE Internet,
# ohne Datenbank und ohne Schluessel im abgeschotteten Netz "stt" — nur der Assistent erreicht ihn.
# Schlank Stufe 1 (11.11.2026): Start bei Bedarf. Vorne lauscht `bei-bedarf` auf :8080 und startet
# whisper-server (127.0.0.1:8081, Modell ~235 MB im Speicher) erst bei einer Anfrage; nach 300 s ohne
# Verbindung wird er wieder beendet. Bauen braucht den benannten Zusatz-Kontext `bei-bedarf`:
#   docker build --build-context bei-bedarf=scheeren/bei-bedarf scheeren/stt
# (Compose: build.additional_contexts: {bei-bedarf: ./scheeren/bei-bedarf}; GitHub: images.yml)
FROM golang:1.23-bookworm AS bei-bedarf-bau
WORKDIR /src
COPY --from=bei-bedarf . .
RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /bei-bedarf .

FROM debian:trixie-slim AS build
RUN apt-get update && apt-get install -y --no-install-recommends git ca-certificates cmake g++ make curl && rm -rf /var/lib/apt/lists/*
WORKDIR /src
RUN git clone --depth 1 --branch v1.9.4 https://github.com/ggml-org/whisper.cpp.git . \
 && test "$(git rev-parse HEAD)" = "927cfce34f31707e17f2bff35c349632fb9e2c3a" \
 && cmake -B build -DCMAKE_BUILD_TYPE=Release -DWHISPER_BUILD_TESTS=OFF -DGGML_NATIVE=OFF -DBUILD_SHARED_LIBS=OFF \
 && cmake --build build --config Release -j 2 --target whisper-server
RUN curl -fsSL -o /model.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small-q5_1.bin \
 && echo "ae85e4a935d7a567bd102fe55afc16bb595bdb618e11b2fc7591bc08120411bb  /model.bin" | sha256sum -c -

FROM debian:trixie-slim
# Sicherheitsupdates des Basis-Images (z. B. perl-base, Trivy-Befund 11.10.2026). Docker cached diesen
# Schritt: neu ausgefuehrt wird er erst, wenn sich der Grundbaustein aendert (das woechentliche
# Image-Auto-Update auf dem Server baut dann neu) oder bei --no-cache.
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y \
 && apt-get install -y --no-install-recommends ffmpeg libgomp1 && rm -rf /var/lib/apt/lists/* \
 && useradd -r -u 10001 stt
COPY --from=build /src/build/bin/whisper-server /usr/local/bin/whisper-server
COPY --from=build /model.bin /models/ggml-small-q5_1.bin
COPY --from=bei-bedarf-bau /bei-bedarf /usr/local/bin/bei-bedarf
USER stt
# --convert legt Zwischendateien im Arbeitsverzeichnis ab (tmpfs /tmp, Container read-only)
WORKDIR /tmp
EXPOSE 8080
# Modell laden dauert beim Kaltstart einige Sekunden → Start-Frist grosszuegig (120 s).
CMD ["bei-bedarf", "--lausche", ":8080", "--ziel", "127.0.0.1:8081", "--leerlauf", "300", "--start-frist", "120", "--", \
     "whisper-server", "-m", "/models/ggml-small-q5_1.bin", "--host", "127.0.0.1", "--port", "8081", "--convert", "-l", "de", "-t", "2"]
