Commit Graph

2939 Commits

Author SHA1 Message Date
Claudio Ortolina 2124c982f7 Handle possible non-existent record id in search filter 2026-04-15 15:10:28 +01:00
Claudio Ortolina f6e78022a4 Update project conventions 2026-04-15 15:03:41 +01:00
Claudio Ortolina 9fa94714c8 Update architecture docs 2026-04-15 15:03:21 +01:00
Claudio Ortolina c816f2de4a Add scrobbled tracks search parser
Introduces ListeningStats.SearchParser with NimbleParsec supporting
record:, album_mbid:, artist_mbid:, artist:, album:, track: filters.
Links scrobble count on record page to filtered scrobbled tracks view.
2026-04-15 14:56:38 +01:00
Claudio Ortolina 851cb36858 Fix dl accessibility violations on stats dashboard 2026-04-15 14:16:24 +01:00
Claudio Ortolina 4194fb8b6d Update dependencies
oban_web 2.12.2 => 2.12.3
2026-04-15 13:50:52 +01:00
Claudio Ortolina 405235e2b3 Add picker to create scrobble rules on the fly 2026-04-15 10:53:58 +01:00
Claudio Ortolina b9612a2a26 Fix records on this day for partial release dates
SQLite interprets bare years (e.g. "1970") as Julian day numbers
in strftime, producing wrong month-day matches. Filter to only
full YYYY-MM-DD dates before comparing.
2026-04-15 07:29:58 +01:00
Claudio Ortolina ebd9e5445f Fix how long ago for records with year release dates 2026-04-15 07:20:01 +01:00
Claudio Ortolina d75508531e Generate parse_type/parse_format from module attributes 2026-04-14 16:56:04 +01:00
Claudio Ortolina 2bb755b1c8 Parse matching record fields in Records.Record 2026-04-14 16:51:06 +01:00
Claudio Ortolina 8db324d74a Extract shared badge/dropdown to ScrobbleComponents 2026-04-14 16:50:40 +01:00
Claudio Ortolina 888b5a68e6 Update all callers to use matching_records
Migrate StatsLive.Index, ScrobbledTracksLive.Index, and TopAlbums to
consume matching_records list instead of scalar record IDs. Remove the
derive_legacy_record_ids bridge function. TopAlbums now uses a dropdown
for multi-record badges with play count display.
2026-04-14 16:14:59 +01:00
Claudio Ortolina 9ef918a621 Update record_status_badges with matching_records and dropdown 2026-04-14 16:10:57 +01:00
Claudio Ortolina dd3bb47989 Add tests for mixed collected/wishlisted matching records 2026-04-14 16:07:14 +01:00
Claudio Ortolina 2c6e6e7ca2 Return matching_records list from top_albums_attach_metadata
Apply the same release-group JSON aggregation pattern to top albums
queries. Add JSON parsing in get_top_albums/1 and
get_top_albums_by_days/2.
2026-04-14 16:05:51 +01:00
Claudio Ortolina cfd267627c Return matching_records list from tracks_with_record_info_query
Replace scalar collected_record_id/wishlisted_record_id subqueries with
a single matching_records JSON array grouped by release group
(records.musicbrainz_id). Add parse_matching_records/1 for JSON parsing
and derive_legacy_record_ids/2 as a temporary bridge for existing
templates. Update tests to use shared musicbrainz_id fixtures.
2026-04-14 14:17:02 +01:00
Claudio Ortolina 9f4135661e Replace scalar record IDs with matching_records JSON array in tracks query
Replaces collected_record_id and wishlisted_record_id correlated
subqueries in tracks_with_record_info_query with a single
matching_records json_group_array subquery that returns all records
sharing the same release ID. Adds parse_matching_records/1 for JSON
deserialization. Updates recent_activity/2 and list_tracks/1 to parse
the JSON at the boundary. Derives legacy collected_record_id and
wishlisted_record_id from matching_records so existing LiveViews keep
working. The get_top_albums test is temporarily skipped pending the
top_albums_attach_metadata update.
2026-04-14 14:12:14 +01:00
Claudio Ortolina 4f1e596c5c Update typst from 0.3.3 to 0.3.4 2026-04-14 11:08:24 +01:00
Claudio Ortolina e43bccb9bc Extract shared index logic into LiveHelpers.IndexActions
Closes #150
2026-04-13 23:09:22 +01:00
Claudio Ortolina 4fa13d5422 Reset chat state when navigating between entities
The Chat component kept stale messages and chat references
when patching to a different artist/record because update/2
only refreshed the chat list, not the active chat state.
2026-04-13 18:32:19 +01:00
Claudio Ortolina 6a6410bcaa Have the LLM use square bracketed links for internal references 2026-04-13 14:24:36 +01:00
Claudio Ortolina 96bb0fc403 Try and control ChatGPT's tone and "helpfulness" 2026-04-13 14:09:43 +01:00
Claudio Ortolina e10df1985e Reuse binding in test 2026-04-13 13:34:23 +01:00
Claudio Ortolina b422cccf09 Make format merge assertion order-independent 2026-04-13 13:17:03 +01:00
Claudio Ortolina 726b7d5ef8 Add tests for chat auto-open via query param 2026-04-13 13:16:28 +01:00
Claudio Ortolina f7628267b3 Add @moduledoc to OpenAI.API 2026-04-13 13:15:43 +01:00
Claudio Ortolina a1b775f0ae Fix architecture docs to reflect gpt-5.1 for CollectionChat 2026-04-13 13:15:10 +01:00
Claudio Ortolina bdc1cd3992 Prevent callback return value from halting stream
The delta branch in decode_responses_event now explicitly returns
:ok after invoking the callback, so a callback returning {:error, _}
cannot be mistaken for a stream-level error by decode_events.
2026-04-13 13:14:33 +01:00
Claudio Ortolina 846b92fd4c Add tests for streaming error events in OpenAI.API
Covers error event mid-stream, response.failed events, halt
behavior after errors, and unexpected event type logging.
2026-04-13 13:13:51 +01:00
Claudio Ortolina 6fa640f0f6 Remove unreachable catch clause in do_chat_stream 2026-04-13 13:12:58 +01:00
Claudio Ortolina 9b44b7050f Count unique catalog entries in collection summary
The record_count now reflects the number of grouped catalog lines
the model sees, not raw DB rows. Two copies of the same album on
different formats count as 1 catalog entry.
2026-04-13 13:12:30 +01:00
Claudio Ortolina 76438360d7 Load collection summary asynchronously on mount 2026-04-13 13:11:15 +01:00
Claudio Ortolina 5512ac0837 Hide button text on mobile 2026-04-13 12:53:57 +01:00
Claudio Ortolina 54dab5fbdf Use gpt 5.1 to cater for collection summary context size 2026-04-13 12:43:42 +01:00
Claudio Ortolina f9448cac6f Revert "Use smaller model so that we don't exhaust tokens"
This reverts commit 9c0e11bc84.
2026-04-13 12:34:17 +01:00
Claudio Ortolina 8108645718 Shrink collection summary to fit OpenAI token limit
Deduplicate records by musicbrainz_id (merging formats)
and cap genres to 3 per record, reducing the summary from
~32K to ~24K estimated tokens.
2026-04-13 12:33:15 +01:00
Claudio Ortolina ac1954f9c8 Document ExSlop Credo checks convention 2026-04-13 12:18:17 +01:00
Claudio Ortolina 50407f154e Update architecture docs for Collection Chat 2026-04-13 12:17:27 +01:00
Claudio Ortolina 9c0e11bc84 Use smaller model so that we don't exhaust tokens 2026-04-13 12:06:24 +01:00
Claudio Ortolina f73be3f881 Handle OpenAI api streaming error messages 2026-04-13 11:54:05 +01:00
Claudio Ortolina e0ad83a774 Update gettext translations for collection chat 2026-04-13 10:17:03 +01:00
Claudio Ortolina 3b8415d8c4 Add Collection Chat to universal search 2026-04-13 10:15:43 +01:00
Claudio Ortolina a509248625 Wire up Chat component in CollectionLive.Index 2026-04-13 10:12:49 +01:00
Claudio Ortolina 34f484cc81 Add CollectionChat StreamProvider 2026-04-13 10:09:50 +01:00
Claudio Ortolina 24a3cc9265 Add Collection.collection_summary/0 2026-04-13 10:08:01 +01:00
Claudio Ortolina d845ab93dd Add collection sentinel UUID to Chats context 2026-04-13 10:06:16 +01:00
Claudio Ortolina 55be2a4bab Add :collection to chat entity enum 2026-04-13 10:04:37 +01:00
Claudio Ortolina 399c4e4a2a Remove empty packages from ui-framework usage rules 2026-04-13 08:29:38 +01:00
dependabot[bot] 14d318923c Update usage_rules from 1.2.5 to 1.2.6
Updates [usage_rules](https://github.com/ash-project/usage_rules) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/ash-project/usage_rules/releases)
- [Changelog](https://github.com/ash-project/usage_rules/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ash-project/usage_rules/compare/v1.2.5...v1.2.6)

---
updated-dependencies:
- dependency-name: usage_rules
  dependency-version: 1.2.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 08:28:48 +01:00