CerebeCerebe Docs

Search Memories

Search and retrieve memories using semantic similarity, hybrid retrieval, and graph context.

Search Memories

Search across stored memories using semantic similarity. Cerebe fuses results from vector search (Qdrant), graph traversal (Neo4j/Graphiti), and BM25 keyword matching to return the most relevant memories.

Endpoint

POST /api/v1/memory/search

Request Body

ParameterTypeRequiredDescription
querystringYesNatural language search query
session_idstringYesSession identifier
limitintegerNoMaximum results (1-100, default: 5)
typesstring[]NoFilter by types: semantic, episodic, procedural, sequential
min_importancefloatNoMinimum importance threshold (0.0-1.0)
entity_idstringNoPrimary entity ID for cross-session retrieval
linked_entity_idsstring[]NoSecondary entity IDs to include in search
retrieval_modestringNovector (default) or hybrid (BM25 + vector + graph)
include_graph_contextbooleanNoInclude graph neighbour context in results (default: false)
include_embeddingsbooleanNoInclude embedding vectors in response (default: false)
temporal_scopestringNoISO-8601 date for point-in-time retrieval

Examples

from cerebe import AsyncCerebe

client = AsyncCerebe(api_key="ck_live_...")

results = await client.memory.search(
    query="What kind of explanations does the user prefer?",
    session_id="session_xyz",
    user_id="user_123",
    limit=5,
    types=["semantic", "episodic"],
)

for memory in results.memories:
    print(f"[{memory.memory_type}] {memory.content}")
    print(f"  Score: {memory.similarity_score}")
import Cerebe from '@cerebe/sdk'

const client = new Cerebe({ apiKey: 'ck_live_...' })

const results = await client.memory.search({
  query: 'What kind of explanations does the user prefer?',
  sessionId: 'session_xyz',
  userId: 'user_123',
  limit: 5,
  types: ['semantic', 'episodic'],
})

for (const memory of results.memories) {
  console.log(`[${memory.memoryType}] ${memory.content}`)
  console.log(`  Score: ${memory.similarityScore}`)
}
curl -X POST https://api.cerebe.ai/api/v1/memory/search \
  -H "X-API-Key: ck_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "query": "What kind of explanations does the user prefer?",
    "session_id": "session_xyz",
    "entity_id": "user_123",
    "limit": 5,
    "memory_types": ["semantic", "episodic"]
  }'

Response

{
  "memories": [
    {
      "id": "mem_a1b2c3d4",
      "session_id": "session_abc",
      "content": "User prefers visual explanations over text",
      "memory_type": "semantic",
      "timestamp": "2025-03-07T14:30:00Z",
      "importance": 0.8,
      "access_count": 3,
      "last_accessed": "2025-03-07T16:00:00Z",
      "similarity_score": 0.92,
      "relationships": [],
      "metadata": {"source": "onboarding"}
    }
  ],
  "total": 1,
  "session_id": "session_xyz"
}

Retrieval Modes

ModeDescription
vectorSemantic similarity search only (fastest, default)
hybridCombines BM25 keyword search, vector similarity, and graph traversal for best recall

Hybrid mode is recommended when precision matters more than latency. It fuses results from all three retrieval strategies and re-ranks them.

To search memories across sessions for the same user, pass the entity_id parameter:

results = await client.memory.search(
    query="learning preferences",
    session_id="current_session",
    entity_id="user_123",  # searches across all sessions for this user
)

Error Responses

StatusDescription
401Missing or invalid API key
503Vector store unavailable

Next Steps

On this page