Skip to content

limbic 0.1.0

Latest

Choose a tag to compare

@Redrum624 Redrum624 released this 02 Sep 20:48
· 13 commits to main since this release

limbic v0.1.0

First feature-complete release. Not published to npm — the limbic name is
unclaimed; install from a checkout (see the README's Install section).

What it is

A local-first, emotion-aware, LLM-agnostic memory engine for TypeScript:
importance-weighted scoring, per-category forgetting curves, GIST
diversity-aware retrieval (arXiv:2405.18754) and LLM extraction — zero required
runtime dependencies, Node ≥ 20, dual ESM/CJS.

Highlights

  • createLimbic({ store, embedder, complete, weights, lambda, pool })
    returning remember / extract / retrieve / decayPass / store.
  • Stores: zero-dependency MemStore default; SqliteStore behind the
    optional better-sqlite3 peer, held to the same contract suite.
  • Embedders: OllamaEmbedder (POST /api/embed), plus node-llama-cpp
    and transformers.js adapters loaded through dynamic import() with an
    install hint. No embedder means keyword-only scoring — the cosine channel is
    MISSING, never 0.
  • Diversity conformance: divsel's golden-selection.json22 of 22
    cases pass, none skipped
    , with exact numeric agreement (worst
    tolerance-budget share 0), because the distance kernel reproduces divsel's
    f32 16-accumulator arithmetic via Math.fround.
  • Scoring parity: the origin engine's golden-scoring.json — base score,
    final score and both ranking arrays at the fixture's own absolute 1e-6,
    clock pinned to the fixture's now.
  • Both fixtures are sha256-pinned and re-hashed on every test run; provenance
    in test/fixtures/PROVENANCE.md.

Notes on the port

  • lambda defaults to 0.5 (the origin engine's default); divsel's own
    default is 1.0. The bundled bench shows the crossover between them on a
    clustered corpus — limbic's default is the conservative one.
  • The origin engine's LLM extraction path returns [] today due to a prompt
    formatting bug it swallows; limbic substitutes the placeholder literally
    instead.
  • Unknown extraction types are kept and mapped to general rather than
    dropped.

Full details in
CHANGELOG.md.