- New ttsreader-align Deployment + Service + 5Gi PVC under apps/fc-ttsreader/. Wraps SYSTRAN/faster-whisper in a small FastAPI app exposing POST /align (fc-align contract used by Shared.Speech) AND POST /transcribe (audio-in feature consumed by ttsreader-web Lane G). Source: apps/fc-ttsreader/speech-align/ (Dockerfile + app.py + requirements.txt). Built locally (apt-get RUN steps need BLUEJAY-WS, not noc1) and ctr-imported to all 3 RKE2 nodes. - ttsreader-web env: flip Speech__Alignment__Enabled=true and point BaseUrl at http://ttsreader-align.fc-ttsreader.svc.cluster.local.:9200. Add new TtsReader__Transcription__* env triplet pointing at the same service (same /transcribe endpoint). - Bump ttsreader-web image to v202604251046 (carries the TranscriptionController + MCP tool + Quick.razor InputFile UI).
48 lines
1.7 KiB
Docker
48 lines
1.7 KiB
Docker
# FlowerCore speech-align — wraps SYSTRAN/faster-whisper with /align +
|
|
# /transcribe endpoints used by FlowerCore.TtsReader. CPU-only image; the
|
|
# default int8 compute type runs base.en at ~real-time on a single core.
|
|
#
|
|
# Build: podman build -t localhost/fc-speech-align:<ver> .
|
|
# Run: podman run --rm -p 9200:9200 -v fc-speech-align-models:/models localhost/fc-speech-align:<ver>
|
|
|
|
FROM python:3.12-slim AS base
|
|
|
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
PYTHONUNBUFFERED=1 \
|
|
PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
|
PIP_NO_CACHE_DIR=1 \
|
|
WHISPER_MODEL=Systran/faster-whisper-base.en \
|
|
WHISPER_CACHE_DIR=/models \
|
|
WHISPER_DEVICE=cpu \
|
|
WHISPER_COMPUTE_TYPE=int8 \
|
|
DEFAULT_LANGUAGE=en \
|
|
MAX_AUDIO_BYTES=52428800
|
|
|
|
# faster-whisper depends on libsndfile1 + libgomp1 (OpenMP runtime). ffmpeg is
|
|
# pulled in for non-WAV inputs (transcribe accepts any container).
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
libsndfile1 \
|
|
libgomp1 \
|
|
ffmpeg \
|
|
ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
COPY requirements.txt /app/
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY app.py /app/
|
|
|
|
# Run as a non-root user to satisfy K8s securityContext.runAsNonRoot.
|
|
RUN useradd --create-home --shell /usr/sbin/nologin --uid 1654 align \
|
|
&& mkdir -p /models \
|
|
&& chown -R 1654:1654 /models
|
|
USER 1654
|
|
|
|
EXPOSE 9200
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=120s --retries=3 \
|
|
CMD python -c "import urllib.request,sys; urllib.request.urlopen('http://127.0.0.1:9200/health',timeout=3); sys.exit(0)" || exit 1
|
|
|
|
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "9200", "--workers", "1"]
|