| |
| 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 |