audio streaming app plyr.fm

docs: fix stale file paths from package split, add missing index entries (#937)

mood-search.md and genre-classification.md still referenced pre-split
paths (_internal/background_tasks.py, _internal/*_client.py) that moved
to _internal/tasks/ and _internal/clients/ in PR #886.

Also adds playlist-recommendations.md, liked-tracks.md, and
atproto-identity.md to the docs/README.md index.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

authored by zzstoatzz.io

Claude Opus 4.6 and committed by
GitHub
b8156ecf e8ab9054

+10 -7
+3
docs/README.md
··· 17 17 - **[transcoder.md](./backend/transcoder.md)** - rust audio conversion service (lossless support) 18 18 - **[mood-search.md](./backend/mood-search.md)** - semantic search with CLAP embeddings (Modal + turbopuffer) 19 19 - **[genre-classification.md](./backend/genre-classification.md)** - ML genre tagging via effnet-discogs (Replicate) 20 + - **[playlist-recommendations.md](./backend/playlist-recommendations.md)** - inline track suggestions via CLAP embeddings 21 + - **[liked-tracks.md](./backend/liked-tracks.md)** - like system and liked tracks endpoint 22 + - **[atproto-identity.md](./backend/atproto-identity.md)** - ATProto identity resolution and handle management 20 23 21 24 ### frontend 22 25 - **[state-management.md](./frontend/state-management.md)** - svelte 5 runes patterns
+3 -3
docs/backend/genre-classification.md
··· 67 67 68 68 auto-tags are additive with manual tags — if the user also typed tags, both appear on the track. 69 69 70 - **key files**: `backend/src/backend/api/tracks/uploads.py` (form param + UploadContext), `backend/src/backend/_internal/background_tasks.py` (apply logic in `classify_genres`) 70 + **key files**: `backend/src/backend/api/tracks/uploads.py` (form param + UploadContext), `backend/src/backend/_internal/tasks/ml.py` (apply logic in `classify_genres`) 71 71 72 72 ## auditing 73 73 ··· 148 148 149 149 ## key files 150 150 151 - - `backend/src/backend/_internal/replicate_client.py` — Replicate HTTP client 152 - - `backend/src/backend/_internal/background_tasks.py` — `classify_genres` task (+ auto-tag logic) 151 + - `backend/src/backend/_internal/clients/replicate.py` — Replicate HTTP client 152 + - `backend/src/backend/_internal/tasks/ml.py` — `classify_genres` task (+ auto-tag logic) 153 153 - `backend/src/backend/api/tracks/uploads.py` — `auto_tag` form param and `UploadContext` 154 154 - `backend/src/backend/api/tracks/tags.py` — `recommended-tags` endpoint 155 155 - `backend/src/backend/config.py` — `ReplicateSettings`
+4 -4
docs/backend/mood-search.md
··· 101 101 102 102 ### automatic (new uploads) 103 103 104 - when a track is uploaded and both Modal + turbopuffer are enabled, embedding generation is automatically scheduled as a docket background task. see `backend/src/backend/_internal/background_tasks.py` → `generate_embedding`. 104 + when a track is uploaded and both Modal + turbopuffer are enabled, embedding generation is automatically scheduled as a docket background task. see `backend/src/backend/_internal/tasks/ml.py` → `generate_embedding`. 105 105 106 106 ### backfill (existing tracks) 107 107 ··· 202 202 ## key files 203 203 204 204 - `services/clap/app.py` — Modal CLAP service 205 - - `backend/src/backend/_internal/clap_client.py` — Modal HTTP client 206 - - `backend/src/backend/_internal/tpuf_client.py` — turbopuffer client 205 + - `backend/src/backend/_internal/clients/clap.py` — Modal HTTP client 206 + - `backend/src/backend/_internal/clients/tpuf.py` — turbopuffer client 207 207 - `backend/src/backend/api/search.py` — `/search/semantic` endpoint 208 - - `backend/src/backend/_internal/background_tasks.py` — `generate_embedding` task 208 + - `backend/src/backend/_internal/tasks/ml.py` — `generate_embedding` task 209 209 - `scripts/backfill_embeddings.py` — batch indexing script 210 210 - `frontend/src/lib/components/SearchModal.svelte` — search UI (mood badge, progressive results) 211 211 - `frontend/src/lib/search.svelte.ts` — parallel keyword + semantic dispatch