# ========================================== # Etapa 1: Compilación de llama.cpp # ========================================== FROM ubuntu:22.04 AS builder RUN apt-get update && apt-get install -y \ build-essential \ git \ cmake \ curl \ && rm -rf /var/lib/apt/lists/* WORKDIR /build # Clonar y compilar llama.cpp optimizado para CPU genérica vCPU (Hugging Face) RUN git clone https://github.com/ggerganov/llama.cpp.git && \ cd llama.cpp && \ cmake -B build -DGGML_NATIVE=OFF -DCMAKE_BUILD_TYPE=Release && \ cmake --build build --config Release -j $(nproc) # ========================================== # Etapa 2: Entorno de Ejecución Ligero # ========================================== FROM ubuntu:22.04 AS runtime RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* # Requisito estricto de HF Spaces: Crear un usuario no-root con UID 1000 RUN useradd -m -u 1000 user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH WORKDIR /home/user/app # Copiar exclusivamente el binario del servidor desde la etapa de compilación COPY --chown=user:user --from=builder /build/llama.cpp/build/bin/llama-server ./llama-server # Descargar el modelo optimizado en formato GGUF durante el Build Time # Nota: Usamos Qwen2.5-1.5B-Instruct (o 0.5B) por su brutal capacidad multilingüe y velocidad instantánea en CPU. # Puedes sustituir esta URL por cualquier modelo .gguf compatible (como las conversiones de Liquid LFM si están mapeadas). RUN curl -L -o model.gguf "https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF/resolve/main/qwen2.5-1.5b-instruct-q4_k_m.gguf" # Requisito estricto de HF Spaces: Exponer obligatoriamente el puerto 7860 EXPOSE 7860 # Configuración del motor de inferencia # --host 0.0.0.0: Escuchar en todas las interfaces de red del contenedor # --port 7860: Puerto requerido por Hugging Face # -c 2048: Tamaño de contexto optimizado (ahorra memoria y acelera el procesamiento del prompt) CMD ["./llama-server", "--host", "0.0.0.0", "--port", "7860", "-m", "model.gguf", "-c", "2048"]