FROM ghcr.io/astral-sh/uv:python3.11-bookworm

RUN --mount=type=cache,target=/var/cache/apt \
    --mount=type=cache,target=/var/lib/apt \
    apt update \
    && apt install -y libgl1 libglib2.0-0 vim libmagic1 libreoffice dos2unix swig poppler-utils tesseract-ocr

RUN mkdir -p /home/models \
    && wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-LCNet_x1_0_doc_ori_infer.tar \
    && tar -xf PP-LCNet_x1_0_doc_ori_infer.tar -C /home/models \
    && rm -f PP_*.tar

COPY runtime/python-executor /opt/runtime
COPY runtime/ops /opt/runtime/deepdata/ops
COPY runtime/ops/user /opt/runtime/user
COPY scripts/images/runtime/start.sh /opt/runtime/start.sh
COPY scripts/images/common/log-rotate-copytruncate.sh /usr/local/bin/log-rotate-copytruncate.sh
# 🟢 离线安装：spacy 中文模型（复用 runtime-ray 已 vendor 的 wheel）+ nltk 数据包
COPY scripts/images/runtime-ray/zh_core_web_sm-3.8.0-py3-none-any.whl /tmp/
COPY scripts/images/common/nltk-data/ /tmp/nltk-data/

ENV PYTHONPATH=/opt/runtime/deepdata/
ENV UV_EXTRA_INDEX_URL="https://download.pytorch.org/whl/cpu"
ENV UV_INDEX_STRATEGY=unsafe-best-match

WORKDIR /opt/runtime

RUN --mount=type=cache,target=/root/.cache/uv \
    uv pip install -e . --system \
    && uv pip install -r /opt/runtime/deepdata/ops/pyproject.toml --system \
    && uv pip install /tmp/zh_core_web_sm-3.8.0-py3-none-any.whl --system \
    && python -c "import zipfile, os; os.makedirs('/usr/local/nltk_data/packages/tokenizers', exist_ok=True); os.makedirs('/usr/local/nltk_data/packages/taggers', exist_ok=True); zipfile.ZipFile('/tmp/nltk-data/punkt_tab.zip').extractall('/usr/local/nltk_data/packages/tokenizers'); zipfile.ZipFile('/tmp/nltk-data/averaged_perceptron_tagger_eng.zip').extractall('/usr/local/nltk_data/packages/taggers')" \
    && echo "/usr/local/lib/ops/site-packages" > /usr/local/lib/python3.11/site-packages/ops.pth

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && chmod +x /opt/runtime/start.sh \
    && chmod +x /usr/local/bin/log-rotate-copytruncate.sh \
    && dos2unix /opt/runtime/start.sh

EXPOSE 8081

ENTRYPOINT ["/opt/runtime/start.sh"]
