Show similarity in % points

This commit is contained in:
Claudio Ortolina
2025-10-12 20:46:01 +02:00
parent e17a445574
commit d38089d82d
3 changed files with 14 additions and 5 deletions
+7 -2
View File
@@ -68,8 +68,13 @@ defmodule MusicLibrary.Records.Similarity do
where: re.record_id != ^record_id,
join: r in Record,
on: r.id == re.record_id and r.musicbrainz_id != ^record_musicbrainz_id,
order_by: vec_distance_cosine(re.embedding, vec_f32(source_embedding)),
select: {r, re.embedding},
order_by: selected_as(:similarity),
select: %{
record: r,
similarity:
vec_distance_cosine(re.embedding, vec_f32(source_embedding))
|> selected_as(:similarity)
},
group_by: r.musicbrainz_id,
limit: ^limit
@@ -406,7 +406,10 @@ defmodule MusicLibraryWeb.RecordComponents do
role="list"
class="mt-4 grid grid-cols-2 gap-x-4 gap-y-6 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 sm:gap-x-6"
>
<li :for={{record, similarity} <- @similar_records} class="relative group">
<li
:for={%{record: record, similarity: similarity} <- @similar_records}
class="relative group"
>
<div class="overflow-hidden rounded-lg bg-zinc-100 focus-within:ring-2 focus-within:ring-zinc-500 focus-within:ring-offset-2 focus-within:ring-offset-zinc-100">
<.record_cover
record={record}
@@ -422,6 +425,7 @@ defmodule MusicLibraryWeb.RecordComponents do
</button>
<span class="absolute top-2 right-2 rounded-full px-2 py-0.5 text-xs font-medium bg-zinc-900/75 text-white backdrop-blur-sm">
{Float.round(100 - similarity * 100, 0)}%
</span>
</div>
@@ -162,9 +162,9 @@ defmodule MusicLibrary.Records.SimilarityTest do
assert length(similar) >= 1
# record2 should be most similar to record1
{first_record, similarity} = List.first(similar)
%{record: first_record, similarity: similarity} = List.first(similar)
assert first_record.id == record2.id
assert similarity > 0.9
assert similarity < 5.0
end
test "respects limit option", %{record1: record1} do