Skip to main content
EverMemOS extracts four types of memories from conversations and provides four retrieval methods. This guide helps you understand when to use each.

Memory Types

EverMemOS automatically extracts different memory types from your conversations. Each serves a distinct purpose.
Memory TypeDescriptionExampleScene Support
EpisodeNarrative summaries of conversations”Alice and Bob discussed the Q3 marketing strategy and decided to increase social media budget by 20%“All scenes
ProfilePersistent user attributes and preferences”Alice prefers morning meetings before 10am”All scenes
ForesightTime-valid prospective memories”Remind Alice about the dentist appointment on Friday at 3pm”Assistant only
EventLogAtomic factual records”Alice submitted the expense report on 2024-01-15”Assistant only

Episode Memory

Episodes capture the narrative flow of conversations. They’re automatically generated when EverMemOS detects a topic boundary (subject change, time gap, or explicit closure).
# Episode memories emerge from conversation context
messages = [
    {"content": "Let's plan the product launch"},
    {"content": "I think we should target Q2"},
    {"content": "Good idea, I'll draft the timeline"},
    {"content": "Perfect, let's discuss budget tomorrow"}  # Topic closure
]

# Results in episode memory like:
# "The team discussed product launch planning, targeting Q2 release.
#  They agreed to draft a timeline and discuss budget in a follow-up meeting."

Profile Memory

Profiles capture enduring user characteristics: preferences, habits, relationships, and biographical facts. They’re extracted when conversations reveal personal information.
# Profile memories capture user attributes
messages = [
    {"content": "I always take my coffee black, no sugar"},
    {"content": "I've been a vegetarian for 10 years"},
    {"content": "My timezone is PST, so morning calls work best"}
]

# Results in profile memories like:
# - "User prefers black coffee without sugar"
# - "User is vegetarian (10+ years)"
# - "User is in PST timezone, prefers morning calls"

Foresight Memory

Foresight memories are prospective - they have a validity window defined by start_time and end_time. Use them for reminders, deadlines, and future context.
Foresight memories are only extracted in assistant scene mode. See the Foresight Memory guide for details.
# Foresight memories have time validity
messages = [
    {"content": "Remember to call John next Tuesday at 2pm"},
    {"content": "The project deadline is March 15th"}
]

# Results in foresight memories with time windows:
# - "Call John" (start: next Tuesday 2pm, end: next Tuesday 3pm)
# - "Project deadline" (start: now, end: March 15th)

EventLog Memory

EventLog memories record atomic factual events - timestamped records of specific occurrences.
EventLog memories are only extracted in assistant scene mode.
# EventLog memories record specific events
messages = [
    {"content": "I just submitted the quarterly report"},
    {"content": "Completed the code review for PR #234"}
]

# Results in event log entries:
# - "User submitted quarterly report" (timestamp: now)
# - "User completed code review for PR #234" (timestamp: now)

Retrieval Methods

EverMemOS provides four retrieval methods, each with different latency and accuracy characteristics.
MethodLatencyBest ForHow It Works
keyword<100msExact term matching, known phrasesBM25 lexical search
vector200-500msSemantic similarity, paraphrased queriesEmbedding-based search
hybrid / rrf200-600msGeneral purpose (recommended default)Reciprocal Rank Fusion of keyword + vector
agentic2-5sComplex multi-part queriesLLM-guided query expansion

Keyword (BM25)

Fast lexical search. Use when you know the exact terms.
search_params = {
    "user_id": "user_alice",
    "query": "quarterly report submission",
    "retrieve_method": "keyword",
    "top_k": 10
}

# Good for:
# - "Find messages mentioning 'Project Phoenix'"
# - "Search for 'budget approval'"
# - Known product names, IDs, or specific terms

Vector (Semantic)

Embedding-based semantic search. Finds conceptually similar content even with different wording.
search_params = {
    "user_id": "user_alice",
    "query": "what does alice like to do on weekends",
    "retrieve_method": "vector",
    "top_k": 10
}

# Good for:
# - "What are the user's hobbies?" (finds "I love hiking")
# - Conceptual queries with varied phrasing
# - When exact keywords are unknown
Combines keyword and vector search using Reciprocal Rank Fusion. Best balance of precision and recall.
search_params = {
    "user_id": "user_alice",
    "query": "alice's morning routine and work preferences",
    "retrieve_method": "hybrid",  # or "rrf" - they're equivalent
    "top_k": 10
}

# Good for:
# - General-purpose queries
# - When you want both exact matches and semantic similarity
# - Default choice for most use cases

Agentic (LLM-Guided)

Uses an LLM to understand complex queries, expand them into sub-queries, and aggregate results. Higher latency but handles nuanced questions.
search_params = {
    "user_id": "user_alice",
    "query": "What context would help me prepare for my meeting with Alice about project priorities?",
    "retrieve_method": "agentic",
    "top_k": 10
}

# Good for:
# - Complex, multi-part questions
# - Queries requiring reasoning about what information is needed
# - High-stakes retrieval where accuracy matters more than speed

Choosing the Right Retrieval Method

Use this decision flowchart:
Is latency critical (<100ms required)?
├── Yes → Use "keyword"
└── No → Is the query complex or multi-part?
    ├── Yes → Use "agentic"
    └── No → Use "hybrid" (default)

Quick Reference

ScenarioRecommended Method
Real-time autocompletekeyword
Chatbot memory retrievalhybrid
Searching for specific terms/IDskeyword
”Tell me everything about X”agentic
Semantic similarity searchvector
Default / unsurehybrid

Memory Type Filters

You can filter searches by memory type to get more relevant results:
# Search only profile memories
search_params = {
    "user_id": "user_alice",
    "query": "alice's preferences",
    "retrieve_method": "hybrid",
    "memory_types": ["profile"]
}

# Search profile and episodes
search_params = {
    "user_id": "user_alice",
    "query": "recent discussions and project updates",
    "retrieve_method": "hybrid",
    "memory_types": ["profile", "episodic_memory"]
}

Next Steps