72 lines
2.2 KiB
Elixir
72 lines
2.2 KiB
Elixir
defmodule BDS.Embeddings.Backends.NeuralTest do
|
|
use ExUnit.Case, async: false
|
|
|
|
alias BDS.Embeddings.Backends.Neural
|
|
|
|
setup do
|
|
previous = Application.get_env(:bds, :embeddings)
|
|
|
|
on_exit(fn ->
|
|
if previous == nil do
|
|
Application.delete_env(:bds, :embeddings)
|
|
else
|
|
Application.put_env(:bds, :embeddings, previous)
|
|
end
|
|
end)
|
|
|
|
:ok
|
|
end
|
|
|
|
test "reports the configured spec model id and dimensions without loading the model" do
|
|
Application.put_env(:bds, :embeddings,
|
|
backend: Neural,
|
|
model_id: "Xenova/multilingual-e5-small",
|
|
model_repo: "intfloat/multilingual-e5-small",
|
|
dimensions: 384
|
|
)
|
|
|
|
assert %{model_id: "Xenova/multilingual-e5-small", dimensions: 384} = Neural.model_info()
|
|
end
|
|
|
|
test "implements the embeddings backend behaviour" do
|
|
behaviours =
|
|
Neural.module_info(:attributes)
|
|
|> Keyword.get_values(:behaviour)
|
|
|> List.flatten()
|
|
|
|
assert BDS.Embeddings.Backend in behaviours
|
|
end
|
|
|
|
describe "accelerator selection (NativeAcceleratedExecution)" do
|
|
test "auto prefers Apple GPU (EMLX) when available on Apple Silicon" do
|
|
assert Neural.select_accelerator(:auto, true, true) == :emlx
|
|
end
|
|
|
|
test "auto falls back to EXLA-CPU off Apple Silicon" do
|
|
assert Neural.select_accelerator(:auto, true, false) == :exla
|
|
end
|
|
|
|
test "auto falls back to EXLA-CPU when EMLX is unavailable" do
|
|
assert Neural.select_accelerator(:auto, false, true) == :exla
|
|
end
|
|
|
|
test "explicit :exla is honoured even on Apple Silicon with EMLX present" do
|
|
assert Neural.select_accelerator(:exla, true, true) == :exla
|
|
end
|
|
|
|
test "explicit :emlx is honoured when available" do
|
|
assert Neural.select_accelerator(:emlx, true, true) == :emlx
|
|
assert Neural.select_accelerator(:emlx, true, false) == :emlx
|
|
end
|
|
|
|
test "explicit :emlx degrades to EXLA when EMLX is unavailable" do
|
|
assert Neural.select_accelerator(:emlx, false, true) == :exla
|
|
end
|
|
|
|
test "defn options map each accelerator to its native compiler" do
|
|
assert Neural.defn_options(:emlx) == [compiler: EMLX]
|
|
assert Neural.defn_options(:exla) == [compiler: EXLA]
|
|
end
|
|
end
|
|
end
|