from pathlib import Path # ----------------------------- # Dockerfile # ----------------------------- Path("Dockerfile").write_text("""FROM python:3.11-slim RUN useradd -m -u 1000 user ENV HOME=/home/user ENV PATH=/home/user/.local/bin:$PATH ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 WORKDIR $HOME/app RUN apt-get update && apt-get install -y --no-install-recommends build-essential curl git && rm -rf /var/lib/apt/lists/* COPY --chown=user requirements.txt $HOME/app/requirements.txt RUN pip install --no-cache-dir --upgrade pip RUN pip install --no-cache-dir -r requirements.txt COPY --chown=user . $HOME/app USER user ENV PORT=7860 ENV LLM_PROVIDER=huggingface ENV ENABLE_LOCAL_LLM=false ENV HF_INFERENCE_MODEL=google/flan-t5-base ENV HF_TIMEOUT_SECONDS=60 ENV UPLOAD_DIR=data/uploads ENV PROCESSED_DIR=data/processed ENV QDRANT_LOCAL_PATH=data/qdrant ENV EVALUATION_DIR=data/evaluation EXPOSE 7860 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"] """, encoding="utf-8") # ----------------------------- # .dockerignore # ----------------------------- Path(".dockerignore").write_text(""".git .gitignore venv .venv env __pycache__ *.pyc *.pyo *.pyd .env .env.* *.log data/uploads data/processed data/qdrant data/evaluation outputs reports notebooks *.pt *.pth *.bin *.safetensors *.onnx .DS_Store Thumbs.db """, encoding="utf-8") # ----------------------------- # README.md with HF metadata # ----------------------------- Path("README.md").write_text("""--- title: GraphRAG Research Scientist emoji: 🧠 colorFrom: indigo colorTo: blue sdk: docker app_port: 7860 pinned: false --- # GraphRAG Research Scientist A FastAPI-based GraphRAG research assistant for document-grounded question answering. ## Main endpoints - `/` health check - `/demo` simple browser demo - `/docs` Swagger API docs - `/deployment/health` deployment health - `/deployment/config` deployment config - `/upload` upload document - `/documents/{document_id}/index` index document - `/ask` ask question ## Hugging Face Variables LLM_PROVIDER=huggingface ENABLE_LOCAL_LLM=false HF_INFERENCE_MODEL=google/flan-t5-base HF_TIMEOUT_SECONDS=60 ## Hugging Face Secret HF_API_TOKEN should be added in Space Settings as a secret. """, encoding="utf-8") # ----------------------------- # app/deployment/hf_status.py # ----------------------------- Path("app/deployment/hf_status.py").write_text("""import os from typing import Dict, Any from app.core.config import settings def get_deployment_health() -> Dict[str, Any]: return { "status": "healthy", "service": settings.APP_NAME, "version": settings.APP_VERSION, "environment": settings.ENVIRONMENT, "deployment_target": "hugging_face_spaces", "port": os.getenv("PORT", "7860"), "message": "FastAPI app is running and ready for Hugging Face Spaces." } def get_deployment_config() -> Dict[str, Any]: return { "deployment_target": "hugging_face_spaces", "llm_provider": settings.LLM_PROVIDER, "local_llm_enabled": settings.ENABLE_LOCAL_LLM, "hf_model": settings.HF_INFERENCE_MODEL, "hf_token_present": bool(settings.HF_API_TOKEN), "upload_dir": str(settings.UPLOAD_DIR), "processed_dir": str(settings.PROCESSED_DIR), "qdrant_path": str(settings.QDRANT_LOCAL_PATH), "evaluation_dir": str(settings.EVALUATION_DIR), "reranker_enabled": settings.ENABLE_RERANKER, "storage_warning": "Local Space storage can reset after restart unless persistent storage is attached." } def get_demo_html() -> str: return \"\"\"
FastAPI backend is running.