# The official vLLM-Omni image (same serving setup the Voxtral-4B-TTS-2603 model card
# documents) — vllm, vllm-omni, torch, and CUDA builds all matched and tested together
# upstream. v0.22.0 instead of the card's v0.18.0: v0.18.0 has a known orchestrator
# crash under concurrent /v1/audio/speech requests (vllm-omni#2316/#2295, memory
# budgeting fixed by #2341/#3360, both in by 0.22). The eval runs
# `vllm serve <model> --omni` inside this container (see run_eval.sh) and run_eval.py
# talks to its OpenAI-compatible /v1/audio/speech endpoint, exactly like the model
# card's usage example.
FROM vllm/vllm-omni:v0.22.0

# Client-side deps for the eval loop (the serving stack itself is already baked in).
# httpx is the HTTP client the model card's own example uses.
ENV PIP_BREAK_SYSTEM_PACKAGES=1
RUN python3 -m pip install --no-cache-dir datasets tqdm soundfile httpx

WORKDIR /app

# Model weights (~9 GB BF16, ungated) are NOT baked in; the server downloads them on
# first run into the HF cache that run_eval.sh bind-mounts, so they persist across runs.

# Copy the full repository
COPY . /app

# Default entrypoint (the base image's entrypoint targets `vllm`; the eval drives the
# container with explicit bash commands instead).
ENTRYPOINT ["bash"]

# Keep-alive CMD so the Space runtime stays healthy. HF Jobs and `docker run`
# override this with their own command (e.g. run_eval.sh).
EXPOSE 7860
CMD ["-c", "python3 -m http.server 7860"]
