How mihir-lakhani/mihir-portfolio works
This repository combines a personal portfolio site, interactive project demos, and a source-grounded portfolio-question assistant. The main visitor flow runs from the browser through Flask’s RAG routes and assistant service, which uses approved portfolio knowledge to retrieve evidence, generate an answer, and validate citations. Retrieval can use local hybrid search or Gemini File Search; Gemini and Ollama generation are optional integrations. The site also exposes cardiovascular-risk and mobility/handover demos. The README is empty and excerpts are partial, so some subsystem wiring is shown only where supported by the available evidence.
Main entry points: service.py Assistant service · routes.py Assistant routes · app.py Flask application · generator.py Answer generation
Components 26
Portfolio site
- Portfolio pages
templates/index.html - Browser interactions
static/script.js - Flask application
app.py
Portfolio assistant
- Assistant routes
rag/routes.py - Assistant service
rag/service.py - Conversation handling
rag/conversation.py - Session memory
rag/session_memory.py - RAG settings
rag/config.py - Answer generation
rag/generator.py - Gemini generator
rag/gemini.py - Ollama generator
rag/ollama.py
Knowledge and retrieval
- Source registry
rag/sources.py - Approved portfolio sources
knowledge/public - Query taxonomy
knowledge/portfolio_taxonomy.json - Query hints
rag/query_hints.py - Retrieval selection
rag/retriever.py - Hybrid retrieval
rag/local_retriever.py - Local search index
rag/local_index.py - Gemini File Search
rag/retriever.py
ML demonstrations
- Cardiovascular demo
app.py - Cardio model
models/cardio_model.pkl - Mobility handover demo
backend/mobility.py - Mobility model
models/mobility_model_final.pkl
Other components
- Visitor
- Google Gemini
- Ollama service
Connections 26
- Visitor → Portfolio pages: opens
- Portfolio pages → Browser interactions: loads interactions
- Browser interactions → Assistant routes: submits questions
- Assistant routes → Assistant service: handles requests
- Assistant routes → Conversation handling: validates turns
- Assistant routes → Session memory: manages sessions
- Assistant service → RAG settings: uses settings
- Assistant service → Source registry: checks sources
- Source registry → Approved portfolio sources: approves
- Assistant service → Query hints: selects sources
- Query hints → Query taxonomy: reads concepts
- Assistant service → Retrieval selection: requests evidence
- Retrieval selection → Hybrid retrieval: selects local mode
- Hybrid retrieval → Local search index: searches
- Retrieval selection → Gemini File Search: selects hosted mode
- Assistant service → Answer generation: requests answer
- Answer generation → Gemini generator: selects provider
- Answer generation → Ollama generator: selects provider
- Gemini generator → Google Gemini: generates with
- Ollama generator → Ollama service: generates with
- Gemini File Search → Google Gemini: searches store
- Flask application → Assistant routes: registers routes
- Flask application → Cardiovascular demo: serves demo
- Cardiovascular demo → Cardio model: loads model
- Flask application → Mobility handover demo: serves demo
- Mobility handover demo → Mobility model: loads model