4.7 Learning and background-job keys

The learning that needs no configuration — salience, reinforcement (reinforce / confirm), per-query contextual ranking, and conflict surfacing — is always on. The keys below gate only the generative background jobs, which are off by default.

Each background job needs three switches all on: (1) the LLM_* keys above, (2) the job’s *_ENABLED flag here, and (3) the matching line uncommented in src/main/backend/CronTasks/crontab (Consolidate for the maintenance passes, ExtractRelations for the graph). Any one left off keeps the job a cheap no-op. Cost is bounded: each pass makes at most its *_MAX_* small LLM calls per run, and zero when there is nothing to do.

CONSOLIDATION_ENABLED

Default false. Enables the consolidation/dedup pass: merge near-identical memories into one canonical fact and supersede the copies (recoverable soft-delete).

CONSOLIDATION_THRESHOLD

Default 0.95. Cosine cutoff for the clusters the merge pass acts on — high, so only near-identical rows merge unattended.

CONFLICT_RESOLUTION_ENABLED

Default false. Enables the conflict-resolution pass: among same-topic contradictory facts, keep the current one and supersede the stale. A separate switch from consolidation because auto-picking a winner is higher-stakes than merging duplicates.

CONFLICT_RESOLUTION_THRESHOLD

Default 0.80. Tag-gated cosine cutoff for the conflict pass.

CONSOLIDATION_MAX_GROUPS

Default 25. Per-pass cap on clusters processed (bounds LLM cost).

GRAPH_EXTRACTION_ENABLED

Default false. Enables the relation-extraction pass that populates the graph query_relations traverses.

GRAPH_EXTRACTION_MAX_MEMORIES

Default 25. Memories processed per run (one LLM call each); each memory is extracted at most once.

GRAPH_MAX_HOPS

Default 2 (hard cap 5). Default/cap for query_relations.

GRAPH_MAX_RELATIONS

Default 200. Cap on relations returned by one query_relations call.