Skip to content

Graph structured store: replace single parent branches with multi parent entity nodes #14

Description

@ram0verflow

Problem

A fact currently lives in exactly one place. MemoryStore is a BTreeMap<String, Branch>, each Branch owns a Vec<VersionedValue> of details, and a detail belongs to that branch and to nothing else. That is a single parent tree, and the parent is a topic name chosen by an 8B classifier at write time.

Retrieval into generation does not use that tree at all (see #8): it is the driver's message index, which is lexical, BM25 plus embeddings over raw message text. The consequence is structural, not a tuning problem: a question can only reach a fact whose words overlap the question's words.

When an answer needs two facts and the question shares vocabulary with only one of them, the other is unreachable no matter how good the reranker is.

Why it matters

This is the failure that survived every other fix in the repo, and we now have it measured twice in different clothing (see #13 and 9ece598):

  • Composition, "am I over my monthly API allowance", needs the plan limit and the month's usage. 1 of 7 at scale.
  • Date shift, "when is my dentist appointment", needs "October 14th" and "pushing everything back a week". The second mention shares no token with "dentist", so it usually does not load and the model answers the stale date. 3 of 7 at scale.

Meanwhile the parts that are not retrieval bound are fine: contradiction chains 7 of 7, arithmetic through the calculator 7 of 7. The answer model is not the weak link. Reachability is.

Hypothesis

Replace single parent branches with multi parent entity nodes: a fact attaches to every entity it mentions rather than being filed under one classifier chosen topic. A statement like "took the cat to the vet on the 3rd" becomes reachable from cat, from vet, and from the date, instead of living under whichever single branch won.

Retrieval then becomes: resolve the entities in the question, then traverse edges, rather than match tokens. Composition becomes a walk between two nodes rather than a lexical coincidence.

Related work

  • AriGraph (arXiv 2407.04363), the closest structural precedent: a memory graph integrating semantic memory (facts as KG vertices and edges) with episodic memory (specific experiences as episodic vertices and edges), supporting associative retrieval of interconnected concepts for planning.
  • HeLa-Mem (arXiv 2604.16839): models conversation history as a dynamic Hebbian graph where co-activated memories strengthen their connections, retrieves by base activation then spreading activation, and consolidates hub clusters to prevent graph explosion. Evaluated on LoCoMo, the same benchmark we use, so its numbers are directly comparable to ours.
  • HyMem (arXiv 2602.13933): dual granular storage with a two tier retrieval scheduler, a cheap summary path plus an LLM based deep path activated only for complex queries. Relevant to keeping graph traversal off the hot path, since our retrieval budget is about 50ms against 2 to 3s of generation.

The cold start caveat we have to plan around

HeLa-Mem states the limitation directly: "Hebbian weights require sufficient interaction history to accumulate, meaning the benefits of associative retrieval are less pronounced in early conversation stages." Their proposed remedy, initializing edges from semantic similarity as a prior, is left as future work.

This lands on us specifically. Every discriminate run is a 34 to 54 turn transcript, which is exactly the regime where a graph whose edges are learned has not warmed up. If we adopt an association learned graph and test it on our current harness, we will measure the cold start, not the mechanism. Two implications:

  1. Seed edges deterministically at ingest from entity co-occurrence, which is available on turn one, rather than relying only on learned weights.
  2. Any evaluation of this has to include long transcripts, which is the same blocker as Scale the discriminate harness to dozens of runs per condition #17.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    researchOpen question about the architecture: needs an experiment or a verdict, not just code

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions