Docker 24/7 deployment, wake word fix, and settings enhancements#2
Open
Omar-Abuzaid-stack wants to merge 2 commits intoethanplusai:mainfrom
Open
Docker 24/7 deployment, wake word fix, and settings enhancements#2Omar-Abuzaid-stack wants to merge 2 commits intoethanplusai:mainfrom
Omar-Abuzaid-stack wants to merge 2 commits intoethanplusai:mainfrom
Conversation
- Add Dockerfile (multi-stage: Node frontend build + Python backend) - Add docker-compose.yml mapping localhost:5180 with restart: unless-stopped - Add macos_bridge.py — native macOS HTTP service for Calendar/Mail/Notes/ Terminal/Chrome so Docker container can reach them via host.docker.internal:8341 - Add start.sh / stop.sh for one-command launch (bridge + Docker) - Add .dockerignore to keep image lean - Fix wake word: strip "Hey Jarvis"/"Jarvis"/"Hey Travis" from transcript start; ignore transcripts that are only a wake word (no LLM call triggered) - Add Antigravity + Terminal rows to settings connection status panel - Add antigravity_accessible + terminal_accessible to /api/settings/status - Fix restart endpoint to re-exec with original sys.argv (works in Docker) - Add /api proxy to vite.config.ts; update dev port to 5180 - Context refresh thread now fetches Calendar/Mail via bridge when in Docker mode Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Import and instantiate QAAgent and SuccessTracker (qa_agent, success_tracker were used in ClaudeTaskManager._run_qa but never defined — NameError at runtime) - Fix _lookup_and_report: async lookup functions were wrapped in run_in_executor(asyncio.run()) which crashes inside a running event loop; replaced with direct await since they are already async - Fix _lookup_and_report: audio bytes sent raw to send_json instead of base64-encoded string — caused JSON serialization error for calendar/mail/screen - Fix fix_self handler: same raw audio bytes bug - Fix api_settings_status: async get_todays_events/get_unread_count/get_recent_notes called without await — silently returned coroutines and always showed green status - Fix context refresh thread: calendar/mail async calls wrapped in asyncio.run() since the thread is outside the event loop (safe to do there) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
j1v37u2k3y
referenced
this pull request
in j1v37u2k3y/jarvis
Apr 19, 2026
Backend speaker-identification scaffolding. Resemblyzer-based 256-dim speaker embeddings, SQLite storage of raw sample embeddings (mean computed on read), 30s per-WebSocket verification cache, and a four-endpoint REST surface for enrollment and scoring. ## New package: voice_id/ - embedding.py — lazy VoiceEncoder (~14MB model, loads on first use) - storage.py — data/voice_profiles.db, WAL mode, multi-profile schema (single profile used in phase 1, schema ready for household later) - verify.py — cosine similarity + VERIFY_THRESHOLD=0.75 + in-memory cache keyed by ws_id with CACHE_TTL_SECONDS=30 - wav.py — accepts WAV (for curl tests) or raw int16 PCM @ 16kHz mono (planned frontend wire format) ## New router: api/voice.py - POST /api/voice/enroll (multipart name + audio) - DELETE /api/voice/enroll (clear profile + cache) - GET /api/voice/status (enrolled / name / sample_count) - POST /api/voice/test (score without gating, for threshold tuning) Pattern matches api/settings.py — build_voice_router(require_auth) factory, mounted in server.py alongside the other routers. ## Tests: 16 added (total 235 → 251) - Enrollment stores samples, rejects too-short audio - Same synthetic "speaker" verifies at >0.75, different speaker <0.75 - Cache hit within TTL, cache expiry after TTL, per-ws_id cache clear - Clear profile also drops cache - REST endpoints via TestClient (enroll, status, test, delete) Fixture sets server._AUTH_TOKEN="" because other tests (TestAuthToken) leak that module attribute — pre-existing issue, my tests defend against it instead of fixing the leak. ## Dependencies Resemblyzer → librosa → numba → llvmlite → torch. On macOS x86_64 + Python 3.12 only specific older versions have prebuilt wheels, so pinned: - resemblyzer==0.1.4 - llvmlite==0.43.0 (latest with cp312-macosx_10_9_x86_64 wheel) - numba==0.60.0 (pairs with llvmlite 0.43) - librosa==0.10.2.post1 - numpy<2 (torch 2.2.2 compiled against numpy 1.x ABI) - setuptools<80 (webrtcvad imports deprecated pkg_resources) - python-multipart (FastAPI UploadFile requirement) ## Live smoke (verified) curl POST /api/voice/enroll with a 2s synthetic WAV → sample_count=1 curl POST /api/voice/test with stranger audio → similarity 0.49, rejected curl POST /api/voice/test with same audio → similarity 1.0, accepted curl DELETE /api/voice/enroll → status back to not-enrolled ## Not in this PR (coming in PR #2) - Frontend MediaRecorder/AudioWorklet capture alongside Web Speech API - Settings panel enrollment wizard UI - server.py voice_handler gate that rejects unknown speakers before apply_speech_corrections() runs Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.