A multi-domain medical RAG chatbot using Mistral-7B.
- Install dependencies
pip install -r requirements.txt- Build vector index (one-time or whenever PDFs change)
python build_index.py- Run the backend (FastAPI on :8000)
uvicorn app.main:app --reload --port 8000- Run the frontend (Vite dev server)
cd frontend
npm install
npm run devIf you prefer a local LLM runner, start Ollama and pull Mistral:
./scripts/run_ollama.sh
# or manually:
ollama run mistralTo expose your local FastAPI backend at port 8000 to the internet:
./scripts/expose_ngrok.sh
# prints: Public URL: https://<random>.ngrok-free.appThe hackathon evaluator can call the API like:
curl -X POST "https://<random>.ngrok-free.app/query" \
-H "Content-Type: application/json" \
-d '{
"query": "What are symptoms of heart failure?",
"top_k": 5,
"domain": "cardiology"
}'The frontend sends:
await axios.post('http://localhost:8000/query', {
query,
top_k: 5,
domain,
})Response shape:
{
"answer": "... final answer text ...",
"sources": [
"cardiology/CardiologyBook.pdf#12-15",
"cardiology/AnotherSource.pdf#2-3"
]
}scripts/start_backend.sh: Start FastAPI on port 8000scripts/start_frontend.sh: Start Vite dev server on port 5173scripts/expose_ngrok.sh: Start ngrok and print the public URLscripts/run_ollama.sh: Run Ollama withmistral