# Features Explained - Pediatric AI Scribe v14 ## 🎙️ **Audio Backups** ### How It Works: Audio backups happen **automatically every time you record**, regardless of transcription success/failure. **Flow:** 1. You press "Stop" on recording 2. Audio is immediately saved **before** transcription starts 3. Server-side backup (PostgreSQL, gzip compressed) attempted first 4. If server fails → fallback to browser IndexedDB 5. After successful transcription → audio backup is deleted 6. If transcription fails → audio backup remains for retry **Location:** - Server: PostgreSQL `audio_backups` table (auto-deleted after 24 hours) - Browser: IndexedDB `PedScribeAudioBackup` database (manual cleanup) **Purpose:** - Retry transcription if it fails - Recover audio if browser crashes - Audit trail (24 hour retention) **Access:** Settings → Audio Backups section shows: - Date/time of recording - Module (encounter, dictation, etc.) - File size - "Retry Transcription" button (if transcription failed) - "Delete" button **Cost:** Server backups are compressed (gzip) to ~1/10 original size. A 2MB recording becomes ~200KB in database. --- ## 🌐 **S3 Document Storage** ### How It Works: Upload documents (PDFs, images, Word docs, text files) to S3-compatible storage. **Supported Providers:** - AWS S3 (default) - Backblaze B2 - MinIO (self-hosted) - Any S3-compatible service **Configuration (.env):** ```bash # AWS S3 (uses Bedrock credentials if available) S3_BUCKET=your-bucket-name S3_REGION=us-east-1 S3_PREFIX=documents/ # Optional: folder prefix # Backblaze B2 S3_BUCKET=your-bucket-name S3_ENDPOINT=https://s3.us-west-004.backblazeb2.com S3_REGION=us-west-004 S3_ACCESS_KEY_ID=your-b2-application-key-id S3_SECRET_ACCESS_KEY=your-b2-application-key # MinIO (self-hosted) S3_BUCKET=your-bucket S3_ENDPOINT=http://minio:9000 S3_REGION=us-east-1 S3_ACCESS_KEY_ID=minio-access-key S3_SECRET_ACCESS_KEY=minio-secret-key S3_FORCE_PATH_STYLE=true # Required for MinIO ``` **Features:** - ✅ 10 MB file size limit - ✅ AES-256 server-side encryption - ✅ Per-user folder organization (`documents/{userId}/{uuid}/filename`) - ✅ Metadata stored in PostgreSQL (filename, mime type, size, description) - ✅ Presigned URLs for secure access (1 hour expiry) **Allowed File Types:** - PDF (`.pdf`) - Images (`.jpg`, `.jpeg`, `.png`, `.gif`) - Word documents (`.doc`, `.docx`) - Text files (`.txt`, `.csv`) **Access:** Settings → Documents section **Status Check:** If S3 is not configured, the Documents section shows empty with message: "S3 not configured" --- ## 📚 **Learning Hub - Default Browse Path** ### What It Is: A user preference that sets the **starting folder** when browsing Nextcloud files for AI content generation. ### When It's Used: Only in the **Learning Hub AI Content Generator** (Admin/Moderator feature). **Scenario:** 1. Admin/Moderator wants to create AI-generated learning content 2. They choose "Upload from Nextcloud" 3. File browser opens 4. Instead of starting at root `/`, it opens at the configured path **Example:** ``` Default path: /Medical-Resources ↓ When you click "Browse Nextcloud", it opens: /Medical-Resources/ ├── Pediatric-Guidelines/ ├── Clinical-Protocols/ └── Research-Papers/ Instead of: / ├── Personal/ ├── Photos/ ├── Medical-Resources/ ← you'd have to navigate here every time └── ... ``` **Configuration:** Settings → Nextcloud Integration → "Learning Hub — Default Browse Path" **Examples:** - `/Medical-Resources` - Opens in Medical Resources folder - `/Shared/Clinical-Content` - Opens in shared clinical content - `/` (empty) - Opens at root (default behavior) **Who Can Use This:** - Any authenticated user (not just moderators) - It's a personal preference per user - Only affects Learning Hub AI file picker **Why This Exists:** If you store learning resources in a specific Nextcloud folder, you don't want to navigate there every single time you generate content. Set it once, it remembers. --- ## 🎤 **Browser Whisper Pre-Download** ### Issue You Reported: "Pre-download models works, stuck at starting download" ### What's Happening: The download **is actually working** but progress updates are slow because: 1. HuggingFace CDN serves large files (39-244 MB) 2. Progress callbacks are not granular (reported per-file, not per-chunk) 3. Initial ONNX runtime download has no progress tracking ### Fixed: - ✅ Added console logging to track progress - ✅ Added 30-second timeout warning (doesn't stop download) - ✅ Better error messages ### How to Test: 1. Open browser DevTools (F12) → Console tab 2. Click "Pre-download model" 3. Watch console for progress logs: ``` [BrowserWhisper] Starting preload... [BrowserWhisper] Progress: onnx-runtime 0% [BrowserWhisper] Progress: model.bin 23% [BrowserWhisper] Progress: model.bin 47% ... [BrowserWhisper] Progress: 100% ``` ### Expected Download Times: - **Tiny** (39 MB): 5-15 seconds (fast connection) - **Base** (74 MB): 10-30 seconds - **Small** (244 MB): 30-90 seconds ### If Still Stuck: **Check these:** 1. Open DevTools → Network tab 2. Filter by "HuggingFace" 3. Look for downloads from `cdn-lfs-us-1.huggingface.co` 4. Check if files are actually downloading **Common issues:** - Slow internet connection (244 MB takes time!) - Corporate firewall blocking HuggingFace CDN - Browser IndexedDB quota exceeded **Workaround:** Just enable it and record audio - the model will download on first use (same as pre-download, but triggered automatically). --- ## 🔊 **TTS Voice Preview** ### Issue You Reported: "Preview button next to TTS seems to do nothing" ### Fixed: - ✅ Added error logging to console - ✅ Better validation (checks for empty selection) - ✅ Clear user feedback messages ### How to Use: 1. Go to Settings → Voice Preferences 2. Select a voice from "Text-to-Speech Voice" dropdown 3. Click "Preview" button 4. Wait 2-3 seconds 5. Audio should play automatically ### If Nothing Happens: **Check browser console for errors:** - Open DevTools (F12) → Console tab - Click Preview - Look for `[VoicePrefs] Preview error:` message **Common issues:** 1. **No voice selected** → Select from dropdown first 2. **TTS not configured** → Check `.env` has `GOOGLE_VERTEX_PROJECT` or `LITELLM_API_BASE` 3. **Network error** → Check server logs for TTS API errors 4. **Browser autoplay policy** → Some browsers block autoplay, click page first ### Testing Checklist: ```bash # 1. Check TTS is configured curl http://localhost:3000/api/health | grep tts # 2. Test TTS endpoint directly curl -X POST http://localhost:3000/api/text-to-speech \ -H "Authorization: Bearer YOUR_JWT" \ -H "Content-Type: application/json" \ -d '{"text":"Test"}' \ --output test.mp3 # 3. Play the audio file mpg123 test.mp3 # or open in browser ``` --- ## 📋 **Summary of User Settings** ### Voice Preferences **Location:** Settings → Voice Preferences (top section) | Setting | Options | Default | Purpose | |---------|---------|---------|---------| | **STT Model** | gemini-2.0-flash-exp, gemini-2.0-flash, gemini-1.5-flash, gemini-1.5-pro, whisper-1 | Server default | Controls transcription accuracy | | **TTS Voice** | Journey-F/D, Studio-O/M, Neural2 series, alloy, echo, fable, onyx, nova, shimmer | Server default | Controls read-aloud voice | ### Browser Whisper **Location:** Settings → Browser Transcription (Local Whisper) | Setting | Options | Default | Purpose | |---------|---------|---------|---------| | **Enable** | On/Off | Off | Local transcription (HIPAA-safe) | | **Model** | Tiny, Base, Small | Tiny | Accuracy vs speed tradeoff | ### Nextcloud **Location:** Settings → Nextcloud Integration | Setting | Purpose | |---------|---------| | **Nextcloud URL** | Your Nextcloud instance | | **Username** | Nextcloud username | | **App Password** | Generate in Nextcloud → Security | | **Default Browse Path** | Starting folder for Learning Hub AI picker | ### Documents (S3) **Location:** Settings → Documents Shows list of uploaded documents if S3 is configured. Upload limit: 10 MB per file. ### Audio Backups **Location:** Settings → Audio Backups Shows last 24 hours of recordings. Can retry transcription or delete. --- ## 🔧 **Troubleshooting Guide** ### Pre-Download Stuck 1. ✅ Open browser console (F12) 2. ✅ Look for `[BrowserWhisper] Progress:` logs 3. ✅ Check Network tab for HuggingFace downloads 4. ✅ Wait - 244 MB takes time! 5. ✅ If truly stuck (no network activity): refresh page, try again ### Preview Button Silent 1. ✅ Check voice is selected in dropdown 2. ✅ Open console for error messages 3. ✅ Test TTS endpoint directly (curl command above) 4. ✅ Check server logs for TTS provider errors 5. ✅ Verify `.env` has TTS provider configured ### S3 Not Working 1. ✅ Check `.env` has `S3_BUCKET` set 2. ✅ Verify credentials: `S3_ACCESS_KEY_ID` + `S3_SECRET_ACCESS_KEY` 3. ✅ Test bucket access from server: ```bash aws s3 ls s3://your-bucket/ --region us-east-1 ``` 4. ✅ Check server logs for S3 errors when uploading ### Audio Backups Not Showing 1. ✅ Record audio first (they're created on recording, not transcription) 2. ✅ Check database: `SELECT COUNT(*) FROM audio_backups;` 3. ✅ Verify IndexedDB in browser: DevTools → Application → IndexedDB → `PedScribeAudioBackup` 4. ✅ Backups auto-delete after 24 hours ### Learning Hub Path Not Working 1. ✅ This only affects **AI content generator file picker** 2. ✅ It does NOT affect manual Nextcloud document browsing 3. ✅ Path must exist in your Nextcloud 4. ✅ Path format: `/Folder/Subfolder` (starts with `/`) --- ## 📊 **Feature Status Matrix** | Feature | Status | Config Required | HIPAA-Safe | Notes | |---------|--------|-----------------|------------|-------| | **Audio Backups** | ✅ Working | None (auto) | ✅ Yes | Server + IndexedDB | | **S3 Documents** | ✅ Working | S3_BUCKET | ✅ Yes (AWS) | Optional feature | | **Browser Whisper** | ✅ Working | None (optional) | ✅ Yes | Client-side only | | **Voice Preferences** | ✅ Working | Provider config | Depends | Google/AWS = yes | | **Learning Hub Path** | ✅ Working | Nextcloud config | ✅ Yes | User preference | | **TTS Preview** | ✅ Fixed | TTS provider | Depends | Check logs if fails | | **Embeddings** | ✅ Working | Vertex/LiteLLM | ✅ Yes | Requires pgvector | --- ## 🚀 **Next Steps** 1. **Push v14 to Docker** (in progress via GitHub Actions) 2. **Test features after deployment** 3. **Check browser console for any errors** 4. **Verify TTS preview works with your provider** 5. **Test browser whisper download with different models** --- **Questions? Check the logs:** - Browser: F12 → Console tab - Server: `docker logs pediatric-ai-scribe -f` - Database: `psql -d pedscribe -c "SELECT COUNT(*) FROM audio_backups;"`