MeliGraph.LightGCN.EmbeddingStore (MeliGraph v0.3.0)

Copy Markdown View Source

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

payload()

@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

get(conf)

@spec get(MeliGraph.Config.t()) :: {:ok, payload()} | :miss

Recupera o payload completo (embeddings + índices) carregado, ou :miss se nenhum embedding foi carregado ainda.

load(conf, binary)

@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.

ready?(conf)

@spec ready?(MeliGraph.Config.t()) :: boolean()

Retorna true se há embeddings carregados na instância.