FishMem

Move graph memory without flattening its evidence.

Inventory episodes, facts, entities, edges, temporal fields, and assembled context before choosing a FishMem target. The migration keeps source exports and tests downstream recall instead of copying one rendered context string.

  1. 01InventoryCapture the deployed SDK, ownership scopes, episodes, facts, graph reads, and context contract.
  2. 02MapChoose memory, document, scope, entity, association, and temporal targets deliberately.
  3. 03ProveReplay redacted traces and grade current, historical, correction, and deletion behavior.
  • 01source export retained
  • 02temporal facts tested
  • 03prompt assembly explicit
  • 04rollback preserved

A graph-memory migration succeeds when scoped facts, time, provenance, deletion, and the application’s real decisions survive—not when two response envelopes look alike.

Do not turn every episode into a memory.

Conversation episodes are evidence. Extracted facts, entity relationships, and a final context block have different authority and lifecycles. FishMem keeps durable memories, long-form sources, and application prompt context separate.

  • Keep the original export and record its creation time.
  • Use project plus user, agent, and run scopes only when ownership meaning matches.
  • Write already-extracted facts verbatim instead of invoking a second inference pass.

Test what is true now and what was true then.

Graph memory often carries event time, fact validity, and supersession. Map those fields deliberately and test current recall, historical questions, late-arriving facts, corrections, and contradictions as separate cases.

  • Keep source identifiers in non-secret migration metadata.
  • Do not invent validity intervals that the source export did not establish.
  • Treat derived entities and associations as rebuildable when raw evidence exists.

Compare downstream decisions, not context strings.

FishMem returns records and evidence while your application owns prompt assembly. Use the real question set, token budget, and answer rubric, then move one cohort only after stored state, retrieval, deletion, latency, and error handling pass.

  • Use deterministic import identities and inspect rejects or duplicates.
  • Keep the prior read path during a bounded observation window.
  • Retain a recoverable export until restore and account-erasure paths pass.

Start with one concrete request.

await fishmem.memories.add(
  {
    content: "Alex moved to Berlin in July 2026.",
    user_id: "alex",
    infer: false,
    event_date: "2026-07-01T00:00:00.000Z",
    metadata: {
      migrated_from: "graph-memory",
      migration_batch: "zep-cutover-01"
    }
  },
  { idempotencyKey: "zep-cutover-01:alex-location" }
);

What this surface includes

  • A concept map for users, sessions, episodes, facts, entities, edges, temporal state, and context.
  • An evidence-preserving import shape plus production-shaped recall validation.
  • A cohort cutover, observation, rollback, deletion, and recovery checklist.

Explicit boundary

  • FishMem is not affiliated with Zep or Graphiti and does not implement their SDKs or response envelopes.
  • Graph models and retrieval strategies differ, so source edges cannot be copied without semantic review.
  • A preassembled context block is a comparison artifact, not a portable database export.