Real-time medical transcription system that captures clinical conversations, performs speaker diarization and automatic speech recognition, and infers DOCTOR/PATIENT roles -- delivering labeled transcripts to the browser in real time. After Stop, a second ASR pass corrects the transcript and an off-GPU agent drafts a citation-linked SOAP note for clinician review.
medical_lexicon.txt corrects known ASR variants before they reach the live transcript.spk_0 and spk_1.DOCTOR or PATIENT.+-----------+ GET /scribe + helper proxies +--------------+
| | ------------------------------> | Symfony App |
| | | (PHP 8.3+) |
| | +------+-------+
| | | proxied HTTP
| Browser | WebSocket (16 kHz PCM audio) +------v-------------------+
| | ------------------------------> | FastAPI NeMo agent |
| | | - Diarization (GPU) |
| | | - ASR Parakeet (GPU) |
| | | - Post-stop 2nd-pass ASR|
| | | - Role inference |
| | | DOCTOR / PATIENT |
| | | (Strands, off-GPU) |
| | | - SOAP summary (off-GPU)|
| | +------+-------------------+
| | | publish raw/roles/summary
| | Mercure SSE (transcript events) +-----v--------+
| | <------------------------------- | Mercure Hub |
+-----------+ +--------------+
cp .env.example .env
docker compose up --build
The application will be available at http://localhost:48082.
The copied .env selects AWS Bedrock for role inference and summaries
(ROLE_AGENT_MODEL_PROVIDER=bedrock), so Bedrock credentials must be present.
For a fully local CPU stack, set ROLE_AGENT_MODEL_PROVIDER=ollama and start
with the ollama Compose profile. ./scripts/start-dev.sh is the guided
local-dev entry point: it enables the profile automatically and runs health
checks.
| Layer | Technology / model |
|---|---|
| ASR + Diarization | NVIDIA NeMo Multitalker Parakeet 0.6B (nvidia/multitalker-parakeet-streaming-0.6b-v1) + streaming Sortformer v2.1 (nvidia/diar_streaming_sortformer_4spk-v2.1) on GPU |
| Post-visit ASR | NVIDIA NeMo Parakeet Unified English 0.6B (nvidia/parakeet-unified-en-0.6b), second pass after Stop on GPU |
| Role Inference | Strands SDK + Claude Haiku 4.5 (au.anthropic.claude-haiku-4-5-20251001-v1:0) on AWS Bedrock, or Qwen 3.5 9B (qwen3.5:9b) on CPU-only Ollama |
| SOAP Summary | Strands SDK + Claude Haiku 4.5 (au.anthropic.claude-haiku-4-5-20251001-v1:0) on AWS Bedrock, or Qwen 3.5 9B (qwen3.5:9b) on CPU-only Ollama |
| Backend | PHP 8.3+, Symfony 6.4 |
| Audio Pipeline | WebSocket (browser -> Python) |
| Transcript Delivery | Mercure Hub (SSE) |
| Frontend | Twig, Tailwind CSS, vanilla JS modules |
| Infrastructure | Docker Compose, NVIDIA Container Toolkit |
composer test # PHPUnit
composer analyse # PHPStan level 10
composer cs:check # PHP-CS-Fixer dry-run
composer preflight # All quality checks in sequence
strands_agents/.venv/bin/pytest tests/python/ -q # Python agent tests
Built by Matthew Hansen.
190 commits
Python
64.1%
Shell
18.3%
JavaScript
10.4%
PHP
3.7%
HCL
2.0%
Twig
1.4%
Real-time medical transcription system that captures clinical conversations, performs speaker diarization and automatic speech recognition, and infers DOCTOR/PATIENT roles -- delivering labeled transcripts to the browser in real time. After Stop, a second ASR pass corrects the transcript and an off-GPU agent drafts a citation-linked SOAP note for clinician review.
medical_lexicon.txt corrects known ASR variants before they reach the live transcript.spk_0 and spk_1.DOCTOR or PATIENT.+-----------+ GET /scribe + helper proxies +--------------+
| | ------------------------------> | Symfony App |
| | | (PHP 8.3+) |
| | +------+-------+
| | | proxied HTTP
| Browser | WebSocket (16 kHz PCM audio) +------v-------------------+
| | ------------------------------> | FastAPI NeMo agent |
| | | - Diarization (GPU) |
| | | - ASR Parakeet (GPU) |
| | | - Post-stop 2nd-pass ASR|
| | | - Role inference |
| | | DOCTOR / PATIENT |
| | | (Strands, off-GPU) |
| | | - SOAP summary (off-GPU)|
| | +------+-------------------+
| | | publish raw/roles/summary
| | Mercure SSE (transcript events) +-----v--------+
| | <------------------------------- | Mercure Hub |
+-----------+ +--------------+
cp .env.example .env
docker compose up --build
The application will be available at http://localhost:48082.
The copied .env selects AWS Bedrock for role inference and summaries
(ROLE_AGENT_MODEL_PROVIDER=bedrock), so Bedrock credentials must be present.
For a fully local CPU stack, set ROLE_AGENT_MODEL_PROVIDER=ollama and start
with the ollama Compose profile. ./scripts/start-dev.sh is the guided
local-dev entry point: it enables the profile automatically and runs health
checks.
| Layer | Technology / model |
|---|---|
| ASR + Diarization | NVIDIA NeMo Multitalker Parakeet 0.6B (nvidia/multitalker-parakeet-streaming-0.6b-v1) + streaming Sortformer v2.1 (nvidia/diar_streaming_sortformer_4spk-v2.1) on GPU |
| Post-visit ASR | NVIDIA NeMo Parakeet Unified English 0.6B (nvidia/parakeet-unified-en-0.6b), second pass after Stop on GPU |
| Role Inference | Strands SDK + Claude Haiku 4.5 (au.anthropic.claude-haiku-4-5-20251001-v1:0) on AWS Bedrock, or Qwen 3.5 9B (qwen3.5:9b) on CPU-only Ollama |
| SOAP Summary | Strands SDK + Claude Haiku 4.5 (au.anthropic.claude-haiku-4-5-20251001-v1:0) on AWS Bedrock, or Qwen 3.5 9B (qwen3.5:9b) on CPU-only Ollama |
| Backend | PHP 8.3+, Symfony 6.4 |
| Audio Pipeline | WebSocket (browser -> Python) |
| Transcript Delivery | Mercure Hub (SSE) |
| Frontend | Twig, Tailwind CSS, vanilla JS modules |
| Infrastructure | Docker Compose, NVIDIA Container Toolkit |
composer test # PHPUnit
composer analyse # PHPStan level 10
composer cs:check # PHP-CS-Fixer dry-run
composer preflight # All quality checks in sequence
strands_agents/.venv/bin/pytest tests/python/ -q # Python agent tests
Built by Matthew Hansen.
190 commits
Python
64.1%
Shell
18.3%
JavaScript
10.4%
PHP
3.7%
HCL
2.0%
Twig
1.4%