Show similarity in % points
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user