Show similarity in % points
This commit is contained in:
@@ -68,8 +68,13 @@ defmodule MusicLibrary.Records.Similarity do
|
|||||||
where: re.record_id != ^record_id,
|
where: re.record_id != ^record_id,
|
||||||
join: r in Record,
|
join: r in Record,
|
||||||
on: r.id == re.record_id and r.musicbrainz_id != ^record_musicbrainz_id,
|
on: r.id == re.record_id and r.musicbrainz_id != ^record_musicbrainz_id,
|
||||||
order_by: vec_distance_cosine(re.embedding, vec_f32(source_embedding)),
|
order_by: selected_as(:similarity),
|
||||||
select: {r, re.embedding},
|
select: %{
|
||||||
|
record: r,
|
||||||
|
similarity:
|
||||||
|
vec_distance_cosine(re.embedding, vec_f32(source_embedding))
|
||||||
|
|> selected_as(:similarity)
|
||||||
|
},
|
||||||
group_by: r.musicbrainz_id,
|
group_by: r.musicbrainz_id,
|
||||||
limit: ^limit
|
limit: ^limit
|
||||||
|
|
||||||
|
|||||||
@@ -406,7 +406,10 @@ defmodule MusicLibraryWeb.RecordComponents do
|
|||||||
role="list"
|
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"
|
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">
|
<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_cover
|
||||||
record={record}
|
record={record}
|
||||||
@@ -422,6 +425,7 @@ defmodule MusicLibraryWeb.RecordComponents do
|
|||||||
</button>
|
</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">
|
<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>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -162,9 +162,9 @@ defmodule MusicLibrary.Records.SimilarityTest do
|
|||||||
|
|
||||||
assert length(similar) >= 1
|
assert length(similar) >= 1
|
||||||
# record2 should be most similar to record1
|
# 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 first_record.id == record2.id
|
||||||
assert similarity > 0.9
|
assert similarity < 5.0
|
||||||
end
|
end
|
||||||
|
|
||||||
test "respects limit option", %{record1: record1} do
|
test "respects limit option", %{record1: record1} do
|
||||||
|
|||||||
Reference in New Issue
Block a user