FROM python:3.10-slim ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 ENV HF_HOME=/data/.cache/huggingface ENV TRANSFORMERS_CACHE=/data/.cache/huggingface ENV TORCH_HOME=/data/.cache/torch ENV HUGGINGFACE_HUB_CACHE=/data/.cache/huggingface RUN apt-get update && apt-get install -y --no-install-recommends \ git \ wget \ curl \ libsndfile1 \ ffmpeg \ gcc \ g++ \ build-essential \ python3-dev \ && apt-get clean && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY yarngpt/ ./yarngpt/ ENV PYTHONPATH="/app:${PYTHONPATH}" COPY app/ ./app/ RUN mkdir -p /app/models && \ python -c "import os; from huggingface_hub import snapshot_download; import time; print(' Downloading models from Remostartdev/TTS_FARMLINGUA-models...'); start = time.time(); snapshot_download(repo_id='Remostartdev/TTS_FARMLINGUA-models', local_dir='/app/models', local_dir_use_symlinks=False, resume_download=True, ignore_patterns=['*.git*', 'README.md']); print(f' Models downloaded in {time.time() - start:.1f}s')" RUN ls -la /app/models/ && \ echo "Model files:" && \ find /app/models -type f -name "*.ckpt" -o -name "*.yaml" | xargs -r ls -lh ENV MODEL_ID=saheedniyi/YarnGPT2b ENV WAV_TOKENIZER_CONFIG=/app/models/wavtokenizer_mediumdata_frame75_3s_nq1_code4096_dim512_kmeans200_attn.yaml ENV WAV_TOKENIZER_CKPT=/app/models/wavtokenizer_large_speech_320_24k.ckpt RUN python -c "from transformers import AutoModelForCausalLM; AutoModelForCausalLM.from_pretrained('saheedniyi/YarnGPT2b')" EXPOSE 7860 # Gunicorn with Uvicorn workers for production CMD ["gunicorn", "app.main:app", "--workers", "4", "--worker-class", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:7860", "--timeout", "120", "--keep-alive", "5", "--max-requests", "10000", "--max-requests-jitter", "1000"]