Voice-based Parkinson's and depression screening from a 60-second ElevenLabs-guided conversation.
| Directory | Owner | Contract |
|---|---|---|
app/extraction/ |
Jishnuu | Contract C → Contract A |
app/calibration/ |
Varshith | Contract A → Contract B |
app/api/ |
Shared | HTTP layer |
app/schemas/ |
Shared | Pydantic API boundary |
app/interpretation/ |
Shared | Claude API wrapper |
contracts.py |
READ-ONLY | Source of truth for all data shapes |
Rule: Neither developer edits the other's directory. contracts.py is never modified.
contracts.pydefines the exact shape of every inter-pipeline message.- Both pipelines import from
contracts.py— do not duplicate contract definitions elsewhere. - When in doubt about a feature name, unit, or field shape, check
contracts.pyfirst.
# ffmpeg is required for browser audio transcoding (webm → wav)
brew install ffmpeg # macOS
# sudo apt install ffmpeg # Ubuntu/Debian# Install dependencies
pip install -r requirements.txt
# Start the server (reload enabled)
python run.py
# Or directly with uvicorn
uvicorn app.main:app --reloadThe API will be available at http://localhost:8000.
Interactive docs: http://localhost:8000/docs
python scripts/smoke_test.pyThis imports both pipelines, runs a mock Contract A through calibration, and prints the result shape. It must pass before either developer writes any real logic.
| Method | Path | Description |
|---|---|---|
| GET | /health |
Health check |
| POST | /assessment |
Full pipeline (add ?mock=true to skip extraction) |
| GET | /longitudinal/{profile} |
Simulated longitudinal data |
| POST | /voice-capsule/clone |
Voice clone stub |
- Varshith: use
?mock=trueon/assessmentto test calibration before Jishnuu's extraction lands. - Jishnuu: implement
app/extraction/pipeline.py::run_extraction_pipelineto replace the mock return. - Integration: remove the mock fallback from
app/api/assessment.pyonce both pipelines are wired.