Gerencia o ciclo de vida dos embeddings LightGCN no Store.ETS por instância.
A lib não persiste embeddings em disco — recebe um binary (produzido por
MeliGraph.LightGCN.Trainer.train/3 e persistido pela aplicação caller),
desserializa, e mantém o payload em memória com TTL :infinity para que
fique disponível à inferência até ser substituído por um novo treino.
Formato do payload
%{
version: 1,
embeddings: Nx.Tensor.t(), # shape {node_count, embedding_dim}
user_index: %{internal_id => row_index},
item_index: %{internal_id => row_index},
user_count: non_neg_integer(),
item_count: non_neg_integer(),
trained_at: unix_timestamp
}Chave ETS
Os embeddings ficam em :lightgcn_embeddings no Store.ETS da instância.
O namespace é isolado por config (MeliGraph.Config).
Summary
Functions
Recupera o payload completo (embeddings + índices) carregado, ou :miss
se nenhum embedding foi carregado ainda.
Desserializa binary (gerado por Trainer.train/3) e armazena o payload
no Store.ETS com TTL :infinity. Substitui qualquer embedding anterior.
Retorna true se há embeddings carregados na instância.
Types
@type payload() :: %{ :version => pos_integer(), :embeddings => Nx.Tensor.t(), :user_index => %{required(non_neg_integer()) => non_neg_integer()}, :item_index => %{required(non_neg_integer()) => non_neg_integer()}, :user_count => non_neg_integer(), :item_count => non_neg_integer(), :trained_at => integer(), optional(atom()) => term() }
Functions
@spec get(MeliGraph.Config.t()) :: {:ok, payload()} | :miss
Recupera o payload completo (embeddings + índices) carregado, ou :miss
se nenhum embedding foi carregado ainda.
@spec load(MeliGraph.Config.t(), binary()) :: :ok | {:error, :invalid_binary}
Desserializa binary (gerado por Trainer.train/3) e armazena o payload
no Store.ETS com TTL :infinity. Substitui qualquer embedding anterior.
Retorna {:error, :invalid_binary} se o binário não for um payload válido.
@spec ready?(MeliGraph.Config.t()) :: boolean()
Retorna true se há embeddings carregados na instância.