# llama-swap mit ROCm (LLMs) + whisper-server (Transkription) + sd-server (Bilder)
#
# Das offizielle unified-Image mit whisper-/sd-server gibt es für AMD nur als
# Vulkan-Build, und unter Vulkan ist die Prompt-Verarbeitung von llama.cpp auf
# der RX 6950 XT nur halb so schnell wie unter ROCm (siehe PLAN-multimodal.md).
# Deshalb: ROCm-Image als Basis, die beiden Server aus dem unified-Image dazu.
# Beide Basis-Images sind Ubuntu 24.04 mit identischen Mesa-/Vulkan-Paketen.
ARG LLAMA_SWAP_TAG
ARG UNIFIED_TAG

FROM ghcr.io/mostlygeek/llama-swap:${UNIFIED_TAG} AS unified

FROM ghcr.io/mostlygeek/llama-swap:${LLAMA_SWAP_TAG}

# Vulkan-Treiber (RADV) für sd-server; ffmpeg ist schon enthalten (whisper --convert)
RUN apt-get update \
 && apt-get install -y --no-install-recommends mesa-vulkan-drivers libvulkan1 libgomp1 \
 && rm -rf /var/lib/apt/lists/*

# sd-server ist statisch gegen ggml gelinkt
COPY --from=unified /usr/local/bin/sd-server /usr/local/bin/sd-server

# whisper-server bringt eigene ggml-Bibliotheken mit, die dieselben Namen tragen
# wie die von llama.cpp in /app – daher getrennt ablegen und per Wrapper laden
COPY --from=unified /usr/local/bin/whisper-server /opt/whisper/bin/whisper-server
COPY --from=unified /usr/local/lib/libwhisper.so* /usr/local/lib/libggml*.so* /opt/whisper/lib/
RUN printf '#!/bin/sh\nLD_LIBRARY_PATH=/opt/whisper/lib exec /opt/whisper/bin/whisper-server "$@"\n' \
      > /usr/local/bin/whisper-server \
 && chmod 755 /usr/local/bin/whisper-server
