|
|
|
|
|
FROM langchain/langgraph-api:3.12 |
|
|
|
|
|
|
|
|
ENV PYTHONUNBUFFERED=1 \ |
|
|
PYTHONDONTWRITEBYTECODE=1 \ |
|
|
PORT=7860 \ |
|
|
LANGGRAPH_PORT=7860 |
|
|
|
|
|
|
|
|
RUN useradd -m -u 1000 hf_user |
|
|
|
|
|
ENV LANGSERVE_GRAPHS='{"job_app_graph": "/deps/job_writer/src/job_writing_agent/graph/agent_workflow_graph.py:job_app_graph", "research_workflow": "/deps/job_writer/src/job_writing_agent/nodes/research_workflow.py:research_workflow", "data_loading_workflow": "/deps/job_writer/src/job_writing_agent/nodes/data_loading_workflow.py:data_loading_workflow"}' |
|
|
|
|
|
|
|
|
COPY --chown=hf_user:hf_user pyproject.toml langgraph.json README.md /deps/job_writer/ |
|
|
|
|
|
|
|
|
RUN mkdir -p /deps/job_writer/src |
|
|
|
|
|
|
|
|
COPY --chown=hf_user:hf_user src/ /deps/job_writer/src/ |
|
|
|
|
|
|
|
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/uv \ |
|
|
for dep in /deps/*; do \ |
|
|
if [ -d "$dep" ]; then \ |
|
|
echo "Installing $dep"; \ |
|
|
(cd "$dep" && uv pip install --system --no-cache-dir -c /api/constraints.txt -e .); \ |
|
|
fi; \ |
|
|
done |
|
|
|
|
|
|
|
|
RUN playwright install-deps chromium |
|
|
|
|
|
|
|
|
|
|
|
RUN mkdir -p /home/hf_user/.cache/ms-playwright && \ |
|
|
chown -R hf_user:hf_user /home/hf_user/.cache |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/ms-playwright \ |
|
|
PLAYWRIGHT_BROWSERS_PATH=/home/hf_user/.cache/ms-playwright \ |
|
|
playwright install chromium && \ |
|
|
|
|
|
chown -R hf_user:hf_user /home/hf_user/.cache/ms-playwright |
|
|
|
|
|
|
|
|
RUN mkdir -p /api/langgraph_api /api/langgraph_runtime /api/langgraph_license && \ |
|
|
touch /api/langgraph_api/__init__.py /api/langgraph_runtime/__init__.py /api/langgraph_license/__init__.py && \ |
|
|
uv pip install --system --no-cache-dir --no-deps -e /api |
|
|
|
|
|
|
|
|
|
|
|
RUN mkdir -p /usr/local/lib/python3.12/site-packages/litellm/litellm_core_utils/tokenizers && \ |
|
|
chown -R hf_user:hf_user /usr/local/lib/python3.12/site-packages/litellm/litellm_core_utils/tokenizers && \ |
|
|
chmod -R u+w /usr/local/lib/python3.12/site-packages/litellm/litellm_core_utils/tokenizers |
|
|
|
|
|
|
|
|
|
|
|
RUN mkdir -p /home/hf_user/.cache/tiktoken \ |
|
|
/home/hf_user/.cache/litellm \ |
|
|
/home/hf_user/.cache/huggingface \ |
|
|
/home/hf_user/.cache/torch \ |
|
|
/home/hf_user/.local/share && \ |
|
|
chown -R hf_user:hf_user /home/hf_user/.cache /home/hf_user/.local |
|
|
|
|
|
|
|
|
USER hf_user |
|
|
|
|
|
|
|
|
|
|
|
ENV HOME=/home/hf_user \ |
|
|
PATH="/home/hf_user/.local/bin:$PATH" \ |
|
|
XDG_CACHE_HOME=/home/hf_user/.cache \ |
|
|
XDG_DATA_HOME=/home/hf_user/.local/share \ |
|
|
XDG_CONFIG_HOME=/home/hf_user/.config \ |
|
|
|
|
|
TIKTOKEN_CACHE_DIR=/home/hf_user/.cache/tiktoken \ |
|
|
HF_HOME=/home/hf_user/.cache/huggingface \ |
|
|
TORCH_HOME=/home/hf_user/.cache/torch \ |
|
|
|
|
|
PLAYWRIGHT_BROWSERS_PATH=/home/hf_user/.cache/ms-playwright |
|
|
|
|
|
|
|
|
WORKDIR /deps/job_writer |
|
|
|
|
|
|
|
|
EXPOSE 7860 |
|
|
|
|
|
|
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ |
|
|
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/ok')" || exit 1 |