# rkllm-toolkit 1.3.0 auf CUDA — konvertiert Qwen3.5-4B nach .rkllm fuer den RK3588.
# Version 1.3.0 ist Pflicht: sie muss zur Runtime auf dem Board passen
# (RKLLM SDK 1.3.0, build 82bf4aa8e 2026-06-16) und bringt erst die Qwen3.5-Unterstuetzung.
FROM nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
        python3.10 python3-pip python3.10-dev git ca-certificates \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /work
COPY requirements.txt /work/requirements.txt
COPY rkllm_toolkit-1.3.0-cp310-cp310-linux_x86_64.whl /work/

# torch zuerst und explizit als CUDA-Build; danach die uebrigen Requirements OHNE
# torch/torchvision, sonst zieht pip die CPU-Raeder nach und die Quantisierung
# laeuft auf der CPU (Stunden statt Minuten).
RUN pip3 install --no-cache-dir torch==2.6.0 torchvision==0.21.0 \
        --index-url https://download.pytorch.org/whl/cu124
RUN grep -viE '^(torch|torchvision)==' /work/requirements.txt > /work/req-rest.txt \
    && pip3 install --no-cache-dir -r /work/req-rest.txt
# auto_gptq kompiliert gegen CUDA und ist fuer unseren w8a8-Pfad nicht noetig:
# Fehlschlag darf den Build nicht killen.
RUN pip3 install --no-cache-dir auto_gptq==0.7.1 || echo "auto_gptq uebersprungen (fuer w8a8 nicht noetig)"
RUN pip3 install --no-cache-dir /work/rkllm_toolkit-1.3.0-cp310-cp310-linux_x86_64.whl

# HF-Cache und Ausgabe liegen im gemounteten /data, damit ein Neustart des
# Containers den 8-GB-Download nicht wiederholt.
ENV HF_HOME=/data/hf
ENV PYTHONUNBUFFERED=1
COPY convert_qwen35.py /work/convert_qwen35.py
CMD ["python3", "/work/convert_qwen35.py"]
