FROM python:3.12-slim WORKDIR /app RUN apt-get update \ && apt-get install -y --no-install-recommends gcc \ && rm -rf /var/lib/apt/lists/* COPY apps/ai-service/ ./ # config.py's `entities_path` default assumes a full monorepo checkout # (parents[2] from apps/ai-service/config.py = repo root); this image only # has apps/ai-service flattened into /app, so the file is baked in here and # ENTITIES_PATH in .env.prod points at it instead. COPY ingestion/data/verified/drug_entities.json ./ingestion_data/drug_entities.json # Flat module layout (rag/, adapters/, routers/...), not an installable # package — setuptools' auto-discovery rejects "multiple top-level packages" # for `pip install .`, so the runtime deps are listed directly instead, # mirroring pyproject.toml's [project.dependencies] + the metrics/generation # extras + boto3 (used for Bedrock, not declared in pyproject.toml). RUN pip install --no-cache-dir \ "fastapi>=0.115,<1" \ "httpx>=0.27,<1" \ "psycopg[binary]>=3.2,<4" \ "pydantic-settings>=2.6,<3" \ "qdrant-client>=1.7,<2" \ "uvicorn[standard]>=0.30,<1" \ "prometheus-client>=0.20,<1" \ "anthropic>=0.112,<1" \ "boto3" EXPOSE 8000 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]