vicrodh
54315c2e4e
fix(suggestions): fix deadlock in build_vector
...
The build_vector function was calling build_from_musicbrainz and
build_from_qobuz while holding the store lock. These functions also
try to acquire the store lock, causing a deadlock.
Fixed by saving the vectors from the first call and reusing them
for storage, instead of calling the functions again.
2026-01-27 14:42:10 -06:00
vicrodh
7e76fd6925
debug: add info-level logging to build_from_musicbrainz
2026-01-27 14:22:40 -06:00
vicrodh
d90edc4feb
debug(suggestions): add more logging to find deadlock
2026-01-27 13:40:17 -06:00
vicrodh
5f13617ae7
debug(suggestions): add logging to vector building
...
Added info-level logs to track:
- ensure_vector start/success/failure
- build_from_musicbrainz cache hit/API fetch
2026-01-27 13:35:18 -06:00
vicrodh
ff9e11db5c
perf(suggestions): add skip_vector_build option for faster initial load
...
- Add skip_vector_build config option to SuggestionConfig
- When true, skips ensure_vector calls (which can be very slow)
- Uses only cached/existing vectors for similarity search
- Frontend now uses skip_vector_build=true for initial load
- Add timestamped logging helper in frontend component
2026-01-27 12:23:05 -06:00
vicrodh
541c93f06d
fix(suggestions): fix config deserialization and effect loop
...
- Add #[serde(default)] to SuggestionConfig to allow partial config
from frontend (fixes "missing field max_artists" error)
- Fix effect loop in PlaylistSuggestions.svelte:
- Add loadingInitiated flag to prevent re-triggering
- Add cleanup effect when playlistId changes
- Prevent concurrent loading attempts
2026-01-27 12:07:08 -06:00
vicrodh
1560cd4e3d
debug(suggestions): add detailed timing logs for debugging
...
Frontend logging:
- Log when effect triggers with artist count
- Log when backend call starts/finishes with timing
- Log result details (tracks, artists counts)
Backend logging (playlist_suggestions.rs):
- Log MBID resolution with cache hits/misses/failures
- Log config values
- Log engine call timing
Engine logging (suggestions.rs):
- Step 1: ensure_vector timing per artist
- Step 2: playlist vector computation
- Step 3: find_nearest timing
- Step 4: track search timing per artist
- Early exit when pool size reached
2026-01-27 12:02:31 -06:00
vicrodh
cadb346e32
feat(suggestions): add vector-based playlist suggestions engine
...
- Add suggestions.rs with SuggestionsEngine for generating suggestions
- Add SuggestionConfig with configurable parameters
- Add SuggestedTrack and SuggestionResult types
- Integrate with MusicBrainz relationships and Qobuz track search
- Add Tauri commands: get_playlist_suggestions_v2, get_vector_store_stats
- Add cleanup_vector_store command for maintenance
- Add Serialize to StoreStats for IPC
- Register ArtistVectorStoreState in app initialization
- 23 tests passing
2026-01-27 11:38:56 -06:00
vicrodh
f3dcb6ebf2
feat(vectors): add vector builder with MB and Qobuz sources
...
- Add weights.rs with configurable RelationshipWeights
- Add builder.rs with ArtistVectorBuilder for constructing vectors
- Integrate MusicBrainz relationships (members, groups, collaborators)
- Integrate Qobuz similar artists API
- Add ensure_vector() with TTL for lazy building
- Add resolve_qobuz_to_mbid() for ID resolution via name search
- 21 tests passing (sparse_vector, store, weights, builder)
2026-01-27 11:30:06 -06:00
vicrodh
1d2e28c1a8
feat(vectors): add sparse vector foundation for playlist suggestions
...
Phase 1 of playlist-suggestions feature:
- SparseVector: memory-efficient vector with math operations
- set/get with sorted indices for O(log n) access
- add, sub, scale, dot product, magnitude
- normalize, cosine_similarity, top_k_similar
- ArtistVectorStore: SQLite persistence
- artist_index table: MBID to integer index mapping
- vector_entries table: sparse representation (one row per non-zero)
- vector_metadata table: track freshness with TTL
- find_nearest: cosine similarity search with exclusion
- 17 unit tests all passing
2026-01-27 11:19:55 -06:00