# QIG Charlie Training Dockerfile for Cloud GPUs
# Supports: Lambda Labs, RunPod, GCP, Azure, AWS
#
# Build:
#   docker build -f deploy/training/Dockerfile -t qig-training .
#
# Run locally:
#   docker run --gpus all -v $(pwd)/checkpoints:/app/checkpoints qig-training
#
# Run with S3 sync:
#   docker run --gpus all \
#     -e AWS_ACCESS_KEY_ID=xxx \
#     -e AWS_SECRET_ACCESS_KEY=xxx \
#     -e S3_BUCKET=qig-checkpoints \
#     qig-training

FROM pytorch/pytorch:2.1.2-cuda12.1-cudnn8-runtime

WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Install AWS CLI for S3 sync (optional)
RUN pip install --no-cache-dir awscli

# Copy requirements first for layer caching
COPY deploy/training/requirements-training.txt ./requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Copy sibling packages (qigkernels, qig-tokenizer)
# These should be mounted or copied at build time
COPY ../qigkernels /app/qigkernels
COPY ../qig-tokenizer /app/qig-tokenizer

# Install sibling packages
RUN pip install -e /app/qigkernels && \
    pip install -e /app/qig-tokenizer

# Copy main package
COPY . /app/qig-consciousness
RUN pip install -e /app/qig-consciousness

# Copy tokenizer checkpoint (required for training)
COPY checkpoints/tokenizer/checkpoint_50000.json /app/checkpoints/tokenizer/

# Copy corpus data
COPY data/curriculum /app/data/curriculum

# Copy training scripts
COPY scripts/train_charlie_headless.py /app/train.py
COPY deploy/training/entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh

# Create checkpoint directory
RUN mkdir -p /app/checkpoints/charlie /app/checkpoints/constellation

# Environment
ENV PYTHONPATH=/app:/app/qig-consciousness:/app/qigkernels:/app/qig-tokenizer
ENV PYTHONUNBUFFERED=1

# Default training args (override with docker run)
ENV TRAINING_STEPS=5000
ENV CHECKPOINT_EVERY=500
ENV DEVICE=cuda

# Entrypoint handles S3 sync
ENTRYPOINT ["/app/entrypoint.sh"]
