8 Commits

Author SHA1 Message Date
pluto 8a3e7e2b53 feat: cron jobs — daily summary, speaker clustering, clip purge
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 10:49:24 -05:00
pluto 59014f6fe7 feat: API routes — speakers, rooms, search, RAG
Full implementations replacing stubs: speakers CRUD with utterance count,
rooms list + mute/unmute via pipeline, FTS5-based search, RAG /ask and
/summary endpoints. 15 route tests (8 new) all passing; 35 total.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 10:46:24 -05:00
pluto 4def6a526c feat: utterances API routes — list, clip, tag, dismiss
Adds app/api/main.py (create_app factory with health endpoint), utterances
router (GET /api/utterances with date/room/speaker/status filters, GET clip,
POST tag, POST dismiss), stub routers for speakers/rooms/search/rag, and
tests/routes/ with 6 passing TDD tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 10:43:22 -05:00
pluto 8312db1b49 feat: processing pipeline — Whisper + resemblyzer + speaker match + SQLite write
Implements process_utterance() with concurrent STT/embedding via asyncio.gather,
speaker matching with configurable thresholds, utterance DB write, and WAV clip save.
httpx imported lazily to keep the dev environment functional without full install.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 10:37:39 -05:00
pluto b2c82f36d7 feat: VAD ingestion buffer — Silero VAD, per-room accumulation
TDD: 3 tests covering silence passthrough, speech→silence segment emission,
and short-speech discard. Uses _speech_ms tracking (not total buffer length)
for accurate min_speech_ms enforcement. Silero VAD import is try/except'd
so tests run without torch via mocker.patch on vad_prob.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 10:33:36 -05:00
pluto 4bb609049a feat: voice recognition — resemblyzer embed + cosine similarity matching
Implements pack/unpack_embedding, cosine_similarity, find_best_speaker_match
(max-per-speaker grouping, known/ambiguous/unknown thresholds), and embed_audio
with lazy resemblyzer import so tests run without the docker-only dependency.
10 tests passing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 10:30:38 -05:00
pluto 052f019075 feat: add database schema with WAL mode and FTS5 triggers
SQLite database layer with thread-local connections, WAL journal mode,
foreign key enforcement, and FTS5 full-text search on utterances via
content-table triggers. TDD: 5 tests written first, all passing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 10:28:05 -05:00
pluto df53903ceb feat: scaffold project structure
Add pyproject.toml, pytest.ini, .env.example, app package layout (shared/pipeline/api/cron), and test skeleton.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 10:22:03 -05:00