Spaces:
Running
Running
| FROM python:3.12-slim | |
| WORKDIR /app | |
| # ── System deps ─────────────────────────────────────────────────────────────── | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| build-essential curl supervisor netcat-openbsd gnupg \ | |
| openjdk-21-jre-headless && \ | |
| rm -rf /var/lib/apt/lists/* | |
| # ── Neo4j 5.x Community + cypher-shell (official Debian repo) ──────────────── | |
| RUN curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key \ | |
| | gpg --dearmor -o /usr/share/keyrings/neo4j.gpg && \ | |
| echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 5" \ | |
| > /etc/apt/sources.list.d/neo4j.list && \ | |
| apt-get update && apt-get install -y neo4j cypher-shell && \ | |
| rm -rf /var/lib/apt/lists/* | |
| # ── Python deps (CPU-only torch keeps image lean) ──────────────────────────── | |
| COPY requirements.backend.txt requirements.frontend.txt ./ | |
| RUN pip install --no-cache-dir \ | |
| "torch>=2.1.0" --index-url https://download.pytorch.org/whl/cpu | |
| RUN pip install --no-cache-dir -r requirements.backend.txt | |
| RUN pip install --no-cache-dir -r requirements.frontend.txt | |
| # Pre-download embedding model into image (avoids cold-start network hit) | |
| RUN python -c "\ | |
| from sentence_transformers import SentenceTransformer; \ | |
| SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')" | |
| # ── Application code ────────────────────────────────────────────────────────── | |
| COPY backend/ ./backend/ | |
| COPY frontend/ ./frontend/ | |
| COPY pipeline/knowledge_sources/ ./pipeline/knowledge_sources/ | |
| COPY pipeline/embed_nodes.py ./pipeline/embed_nodes.py | |
| COPY pipeline/__init__.py ./pipeline/__init__.py | |
| # ── Graph seed (full enriched export: 44 domains, 1416 caps, training data) ── | |
| COPY neo4j_backup/seed_graph.cypher ./neo4j_backup/seed_graph.cypher | |
| RUN mkdir -p backend/drl/checkpoints | |
| # ── Neo4j memory tuning (fits HF free tier 16 GB RAM comfortably) ───────────── | |
| RUN { \ | |
| echo 'server.memory.heap.initial_size=256m'; \ | |
| echo 'server.memory.heap.max_size=512m'; \ | |
| echo 'server.memory.pagecache.size=128m'; \ | |
| echo 'server.bolt.listen_address=0.0.0.0:7687'; \ | |
| echo 'server.http.listen_address=0.0.0.0:7474'; \ | |
| echo 'dbms.security.procedures.unrestricted=apoc.*'; \ | |
| } >> /etc/neo4j/neo4j.conf | |
| # ── Supervisor + entrypoint ─────────────────────────────────────────────────── | |
| COPY supervisord.conf /etc/supervisor/conf.d/app.conf | |
| COPY entrypoint.sh /app/entrypoint.sh | |
| RUN chmod +x /app/entrypoint.sh && \ | |
| mkdir -p /var/log/supervisor /var/log/neo4j | |
| ENV PYTHONPATH=/app | |
| ENV PYTHONUNBUFFERED=1 | |
| ENV BACKEND_URL=http://localhost:8080 | |
| EXPOSE 7860 | |
| CMD ["/app/entrypoint.sh"] | |