A fully offline, voice-first rural health companion powered by the RunAnywhere SDK. LumiraAI provides basic medical guidance, first-aid instructions, and health education entirely on-device, ensuring privacy and accessibility even without internet connectivity.
This is a comprehensive healthcare assistant that demonstrates:
- Voice-First Interface: Speak your health questions in Hindi or English
- Offline Health Guidance: Access verified medical information without internet
- Smart Symptom Assessment: Match symptoms to conditions with first-aid steps
- Cultural Sensitivity: Designed for Indian rural healthcare contexts
- Complete Privacy: All data stays on your device
- Offline Speech Recognition using Android's built-in capabilities
- Multi-language Text-to-Speech (Hindi, English, Tamil, Telugu, Marathi)
- Real-time Audio Feedback with animated voice indicators
- Medical Disclaimers automatically added to health advice
- Offline Medical Database with 10+ verified health conditions
- First-Aid Instructions for common rural health scenarios
- Symptom-to-Condition Matching with smart keyword extraction
- Severity Assessment with color-coded indicators
- Emergency Contact Information for India (108, 104, 100)
- Wellness Color Palette: Soft sky-blue, white, and green accents
- Large Touch Targets optimized for rural users
- Smooth Animations including mic pulsing and typing indicators
- Material Design 3 with rounded corners and wellness aesthetics
- 100% Offline Operation - No data leaves the device
- Local Health Database - All medical information stored locally
- Encrypted Conversations - Secure health data storage
- No Analytics - No tracking or data collection
# Clone the repository
git clone https://github.com/LumiraAI/Lumira.git
cd lumiraai
# Build the app
./gradlew assembleDebug
# OR open in Android Studio and click Run- Grant Permissions: Allow microphone access when prompted
- Download Health Model:
- Tap "Models" in the header
- Choose "Qwen 2.5 0.5B Health Assistant" (374 MB)
- Tap "Download" and wait for completion
- Load Model: Tap "Load" once download finishes
- Ready to Use: See "लुमिरा तैयार है! Lumira is ready to help!"
- Tap the Microphone (large blue floating button)
- Speak Your Question: "मुझे बुखार है, क्या करूं?" (I have fever, what should I do?)
- Listen to Response: Lumira responds with both text and voice
- Follow Guidance: Get step-by-step health advice
- Language: Kotlin with Jetpack Compose
- UI Framework: Material Design 3 with custom wellness theme
- Architecture: MVVM with StateFlow reactive programming
- Speech: Android Speech Recognition & Text-to-Speech APIs
- AI: RunAnywhere SDK for on-device inference
Voice Input → Speech-to-Text → Health Query Processing →
Local Knowledge Search → AI Response Generation → Text-to-Speech
HealthCondition {
symptoms: List<String>
firstAidSteps: List<String>
whenToSeekHelp: List<String>
prevention: List<String>
severity: Severity (Mild/Moderate/Severe/Emergency)
category: HealthCategory
}- Fever: Temperature management, when to seek help
- Cough & Cold: Respiratory symptoms, home remedies
- Diarrhea: Dehydration prevention, BRAT diet
- Minor Injuries: Wound care, bleeding control
- Maternal Health: Pregnancy care, nutrition guidance
- Child Health: Pediatric symptoms, age-specific advice
- Nutrition: Local foods (Tulsi, Ginger) with health benefits
- Emergency Numbers: 108 (Ambulance), 104 (Health), 100 (Police)
- Severity Indicators: Color-coded urgency levels
- When to Seek Help: Clear guidelines for medical attention
- Hindi: मुख्य भाषा (Primary interface)
- English: Secondary interface language
- Tamil: தமிழ் - Health keyword recognition
- Telugu: తెలుగు - Local terms and phrases
- Marathi: मराठी - Cultural context awareness
- Indian Accent Optimization for speech recognition
- Code-mixing Support (Hindi-English conversations)
- Medical Term Pronunciation with proper text-to-speech
- लुमिरा Chat - Main health conversation interface
- Tips - Daily health tips and wellness advice
- Models - AI model management and downloads
- Emergency - Emergency contacts and urgent care info
- User taps microphone → Animated listening state
- Speech converted to text → Health keyword extraction
- Local database searched → Matched conditions found
- AI generates response → Spoken aloud with disclaimer
- Visual severity indicators → Color-coded advice level
| Model | Size | Best For | Speed |
|---|---|---|---|
| Qwen 2.5 0.5B Health Assistant | 374 MB | General health queries | Medium |
| HealthChat Small Q4 | ~120 MB | Quick responses | Fast |
| MedAssist Tiny Q8_0 | ~50 MB | Basic advice | Very Fast |
- Android: 7.0 (API 24) or higher
- Storage: 500 MB free space (with model)
- RAM: 3 GB recommended for smooth performance
- Microphone: Required for voice input
app/src/main/java/com/runanywhere/lumiraai/
├── LumiraApplication.kt # SDK initialization with health models
├── MainActivity.kt # Main UI with voice interface & navigation
├── data/
│ ├── HealthKnowledge.kt # Medical database structures
│ └── HealthMessage.kt # Message data classes
├── viewmodel/
│ └── LumiraHealthViewModel.kt # Business logic & health processing
├── speech/
│ └── SpeechManager.kt # Voice I/O management
└── ui/theme/ # RuralCare Light theme
├── Color.kt # Wellness color palette
├── Theme.kt # Material 3 theme implementation
└── Type.kt # Typography definitions
app/src/main/assets/
└── health_knowledge.json # Offline medical database (10 MB)
User: "मुझे बुखार है" (I have fever)
Lumira: "⚠️ यह चिकित्सा सलाह नहीं है...
बुखार के लिए:
1. ठंडी जगह आराम करें
2. भरपूर पानी पिएं..."
User: "बच्चे को दस्त है" (Child has diarrhea)
Lumira: "बच्चों में दस्त के लिए:
1. ORS घोल दें
2. BRAT आहार..."
- Immediate access to emergency numbers
- Severity-based advice escalation
- Clear "when to seek help" guidelines
- Cause: SDK initialization pending
- Solution: Wait 10-15 seconds, check "Models" section
- Debug: Look for "LumiraAI: Health AI SDK initialized" in logs
- Cause: Missing microphone permission
- Solution: Grant RECORD_AUDIO permission in app settings
- Alternative: Use text input as fallback
- Expected: On-device inference takes 5-15 seconds
- Optimization: Use smaller models for faster responses
- Device: Close other apps to free memory
- Cause: Text-to-Speech not initialized
- Solution: Check device TTS settings, restart app
- Fallback: Read text responses manually
- Edit
LumiraHealthDatabase.kt - Add new
HealthConditionentries with symptoms, treatments - Include Hindi translations for all content
- Test with voice input scenarios
- Update
SpeechManager.supportedLanguages - Add language mappings in health database
- Update voice prompts and TTS settings
- Create culturally appropriate responses
- Register models in
LumiraApplication.registerHealthModels() - Focus on small, quantized models for mobile devices
- Test inference speed and memory usage
- Optimize for health-specific conversations
✅ Fully Offline Operation - No internet required after setup
✅ Voice-First Interface - Primary interaction through speech
✅ Health-Focused Content - Verified medical information
✅ Cultural Sensitivity - Indian rural healthcare contexts
✅ Privacy-Focused - All data stays on device
✅ Multi-language Support - Hindi, English, regional languages
✅ Beautiful UI - RuralCare Light wellness theme
✅ Emergency Ready - Quick access to emergency services
लुमिरा - आपका डिजिटल स्वास्थ्य साथी
Lumira - Your Digital Health Companion
Made with ❤️ for rural India 🇮🇳
- Technical Issues: Create GitHub issue with logs
- Medical Content: Verified by healthcare professionals
- Community: Join rural health tech discussions
Version: 1.0
License: RunAnywhere SDK License
Last Updated: January 2025