MnemosyneZvex

A MnemosyneGraphBackend backed by Zvex, an in-process vector database, plus a DETS sidecar for typed links and mutable per-node metadata.

Installation

def deps do
  [
    {:mnemosyne_zvex, "~> 0.1.0"} # x-release-please-version
  ]
end

Usage

# Configure Mnemosyne's shared adapters once in your supervisor
children = [
  {Mnemosyne.Supervisor,
    config: %Mnemosyne.Config{
      llm: %{model: "gpt-4o", opts: %{}},
      embedding: %{model: "text-embedding-3-small", opts: %{}}
    },
    llm: MyApp.LLMAdapter,
    embedding: MyApp.EmbeddingAdapter}
]

# Then open a repo backed by MnemosyneZvex
{:ok, _pid} =
  Mnemosyne.open_repo("my-project",
    backend: {MnemosyneZvex.Backend,
      path: "/var/data/mnemosyne/my-project",
      dimension: 1536}
  )

# Use Mnemosyne normally
{:ok, session} = Mnemosyne.start_session("Help user plan a trip", repo: "my-project")
:ok = Mnemosyne.append(session, "User says they want to visit Tokyo", "Asking dates")
:ok = Mnemosyne.close_and_commit(session)

{:ok, memories} = Mnemosyne.recall("my-project", "What does the user want?")

Options

Option Required Default Description
:path yes Directory under which zvex/ and sidecar.dets will live
:dimension yes Embedding dimension (must match your embedding adapter)
:index no :hnsw Vector index type: :hnsw, :ivf, or :flat
:metric no :cosine Distance metric: :cosine, :l2, or :ip
:index_opts no [m: 16, ef_construction: 200] Index-specific parameters
:fetch_multiplier no 3 Over-fetch factor for value function reranking