--- title: KnowYourRepo sdk: docker app_port: 7860 --- Document Search System ====================== React + FastAPI demo app for indexing document sources, searching them semantically, opening the original source file, and chatting with the retrieved document context. Supported demo sources: - Public GitHub repository URLs, such as `https://github.com/owner/repo` - Public Google Drive file and folder links - Manual uploads through the web UI - Local demo files in `data/raw` Current Google Drive note: public folder ingestion uses `gdown`, which is good for demos. Private folders or per-user permissions should use the Google Drive API with OAuth. Setup ----- Install dependencies: ```powershell pip install -r requirements.txt ``` Run Ollama and pull the models you want to use: ```powershell ollama pull bge-m3 ollama pull llama3.2:3b ``` Optional environment overrides: ```env EMBEDDING_PROVIDER=ollama EMBEDDING_MODEL=bge-m3:567m EMBEDDING_DIMENSION=1024 CHAT_MODEL=llama3.2:3b VECTOR_DB_BACKEND=chroma ``` For Zilliz Cloud, put this in `.env`: ```env VECTOR_DB_BACKEND=zilliz ZILLIZ_URI=your-zilliz-endpoint ZILLIZ_TOKEN=your-zilliz-token COLLECTION_NAME=vectorEMBD SUPABASE_URL=your-supabase-project-url SUPABASE_ANON_KEY=your-supabase-anon-key ANONYMOUS_REPO_LIMIT_MB=100 EMBEDDING_PROVIDER=huggingface EMBEDDING_MODEL=BAAI/bge-small-en-v1.5 EMBEDDING_DIMENSION=384 CHAT_PROVIDER=groq CHAT_MODEL=llama-3.1-8b-instant GROQ_API_KEY=your-groq-api-key ``` `.env` is ignored by git because it contains secrets. Start the app: ```powershell uvicorn app.api.main:app --reload --host 127.0.0.1 --port 8010 ``` Run the React frontend during local development: ```powershell cd frontend npm install npm run dev ``` Build React for FastAPI to serve: ```powershell cd frontend npm run build ``` Scheduled Vector Cleanup ------------------------ Expired vectors are ignored during search, and the deployed cleanup endpoint physically deletes expired rows: ```text POST /api/cleanup-expired-vectors ``` GitHub Actions calls the Hugging Face Space cleanup endpoint every 15 minutes from: ```text .github/workflows/cleanup-expired-vectors.yml ``` For protected cleanup, set the same secret in both places: - Hugging Face Space secret: `CLEANUP_SECRET` - GitHub repository secret: `CLEANUP_SECRET` Verify Vector Storage --------------------- Check which vector store is active and how many chunks are stored: ```powershell python scripts/check_vector_store.py ``` Run a quick search against the active vector store: ```powershell python scripts/check_vector_store.py --query "machine learning" ``` How It Works ------------ 1. A user provides a source link or uploads files. 2. The app extracts supported documents. 3. Text is chunked and embedded with Ollama. 4. Chunks and metadata are stored in ChromaDB. 5. Search returns relevant chunks grouped by original document. 6. The UI shows excerpts and an `Open source` or `Download file` action. 7. The chat panel answers follow-up questions using the most recent retrieved chunks. User Isolation -------------- Supabase Auth is used for sign in/sign up. Every ingested chunk is tagged with: ```text user_id source_id document_id ``` Search filters by `user_id`, so each signed-in user only retrieves their own indexed chunks. Anonymous users can index GitHub repositories up to `ANONYMOUS_REPO_LIMIT_MB`. Larger repositories require sign-in. Anonymous indexing uses a temporary browser-session user ID, so it is intended for short-lived exploration rather than persistent workspaces. Migration --------- This project is being moved toward a deployable source-connected demo. See `MIGRATION.md` for the current architecture, cloud backend plan, and the next vector database migration step.