Inspiration

Healthcare in India isn't broken so much as fragmented, reactive, and disconnected between visits. A father's diabetes, a patient's hypertension, and a sibling's kidney condition sit in separate paper files at separate clinics. A doctor gets about 10 minutes per patient, and roughly the first 5 go to asking when did it start, what are you taking, has this happened before?

We also noticed that every health chatbot we tried forgot us the moment the conversation ended. Without memory there is response, but no insight. That led to one idea: healthcare should remember you, not just react to you. Swasthya (स्वास्थ्य) is Sanskrit for "health."

What it does

Swasthya AI is a multilingual, voice-first health memory platform for diabetes follow-up.

  • Patient app: speak in Hindi, Marathi, or English. Adaptive daily check-ins, medicine reminders, a 3D body heatmap, a family group, and Jan Aushadhi generic savings.
  • Safety that blocks: every new medicine is checked against OpenFDA before it is saved.
  • Doctor dashboard: a QR scan opens a summarised, sourced profile, plus a closed-loop Q&A where questions the system can't answer are queued into the patient's next check-in.
  • Explainable risk: one calibrated cardiovascular model shows the factors behind its score.

It does not diagnose or recommend treatment.

How we built it

  • Health graph: Neo4j AuraDB stores symptoms, family members, medicines, and body zones as connected nodes, so "fever again, third time this month" is a graph query. Supabase holds accounts, medicines, and appointments.
  • Agents: one Orchestrator behind POST /api/v1/agent runs an 8-step lifecycle (Perceive, Understand, Retrieve Memory, Route, Safety and Tools, Execute, Update Memory, Respond) and coordinates 11 single-purpose agents.
  • Deterministic safety: the LLM only extracts and phrases. Escalation, drug conflicts, and risk scores come from Python rules, OpenFDA, and the ML model.
  • Risk model: the Kaggle cardiovascular dataset (about 70,000 records), with Logistic Regression, Random Forest, and XGBoost compared by 5-fold cross-validation. The winner is calibrated and explained with SHAP. We use BMI and pulse pressure as features:

$$\text{BMI} = \frac{\text{weight (kg)}}{\text{height (m)}^2}, \qquad \text{pulse pressure} = \text{ap_hi} - \text{ap_lo}$$

  • Stack: React Native (Expo), React and Vite, FastAPI, Groq-hosted LLaMA, Sarvam AI for voice, and Render Workflows.

Challenges we faced

  • Keeping the LLM out of medical decisions. We solved it by confining the LLM to JSON-only extraction validated with Pydantic, and moving escalation into inspectable rules with rule IDs.
  • Missing health data. Patients rarely know their cholesterol or glucose. We used imputation, missing-indicator flags, mandatory minimum inputs, and a confidence display that separates actual from estimated values.
  • Honest model performance. The labels are noisy, so we expected around 73% accuracy and ROC-AUC near 0.78 to 0.80. A much higher number would have signalled leakage.
  • Voice and multilingual input. Mapping spoken Hindi and Marathi symptoms onto a consistent graph vocabulary required allowed-list matching and patient confirmation before saving.
  • Scope discipline. Resisting the urge to claim diagnosis, so every feature stays as decision support.

What we learned

  • Relationships are the right shape for health data, and a graph makes insights explainable.
  • Splitting one big prompt into single-purpose agents made behaviour traceable and testable.
  • Calibration and missing-data handling matter as much as raw accuracy.
  • Safety is a design choice: rules decide, models estimate, and the LLM explains.

What's next

Local validation on Indian patient data with our clinical partner, real wearable integration beyond the simulator, and more regional languages.

Built With

Share this project:

Updates

Submission history