Skip to main content

When to use this

You want to persist cached conversation sessions into the knowledge graph so the Q&A history becomes part of the searchable graph. In the current API, the user-facing way to do this is cognee.improve(dataset=..., session_ids=[...]). Use the lower-level Memify pipeline in this guide when you need direct control over only the session persistence step. Before you start:
  • Complete Quickstart to understand basic operations
  • Ensure you have LLM Providers configured
  • Have an existing knowledge graph created with remember()
  • Caching must be enabled and at least one session must exist (created by prior cognee.recall() calls with a session_id)

Code in Action

What Just Happened

  1. Remember — builds a knowledge graph from your text.
  2. Recall with session_id — runs two recalls that accumulate Q&A history in the session cache under "demo_session".
  3. get_default_user() — retrieves the authenticated user. This pipeline requires a User object with write access.
  4. persist_sessions_in_knowledge_graph_pipeline(user, session_ids, dataset) — reads the cached session data and writes it into the knowledge graph.

What Changed in Your Graph

  • New nodes are created from the session Q&A history, grouped under the user_sessions_from_cache node set.
  • The session data is processed internally into graph memory, so entities and relationships from the session content become part of the graph.
  • Persistence is incremental: each run only ingests the Q&A entries added since the last successful persist for that session. Re-running on an unchanged session adds nothing new, so you can safely call it repeatedly as a session grows without re-embedding or duplicating the earlier history.

Additional Information

  • Runnable session persistence demo available on our GitHub
  • user (User, required) — authenticated user with write access. Obtain via await get_default_user().
  • session_ids (Optional[List[str]]) — list of session IDs to persist. If None, no sessions are extracted.
  • dataset (str, default: "main_dataset") — the dataset to write session data into.
  • run_in_background (bool, default: False) — run asynchronously and return immediately.
Two tasks run in sequence, coordinated by a per-(user, session) persist watermark:
  1. extract_user_sessions — reads Q&A data from the SessionManager for the specified session_ids, then consults the persist watermark (the number of Q&A entries already persisted for that session) and yields only the entries added since the last successful run. A session with no new entries yields nothing, so re-running on an unchanged session does no ingestion work.
  2. cognify_session — calls cognee.add and cognee.cognify on the extracted entries, writing the results into the graph under the user_sessions_from_cache node set. Only after both succeed does it advance that session’s watermark. If cognify fails, the watermark is left untouched and the same entries are retried on the next run (add-level content-hash deduplication keeps the retry safe).
The watermark is stored as an internal session-context row via the SessionManager — it reuses the existing session cache and introduces no new backend, configuration, or credentials.
  • No sessions found — caching must be enabled and recall() with a session_id must have been run first. See Sessions and Caching.
  • Error: no graph data found — run cognee.remember(..., dataset_name=...) before calling this pipeline.
  • LLM errors — verify that your LLM provider is configured. See LLM Providers.
  • Permission errors — the user must have write access to the target dataset. See Permissions.

Improve

Bridge sessions with the current improvement workflow

Sessions Guide

Learn how sessions and caching work in Cognee

Recall

Query the enriched graph with v1.0 retrieval