Skip to main content
Discover relevant memories using semantic search that understands context and meaning, enabling intelligent information retrieval. Find memories using smart search that understands meaning, not just keywords.
from gravixlayer import GravixLayer

client = GravixLayer()

# Initialize memory
memory = client.memory(
    embedding_model="baai/bge-large-en-v1.5",
    inference_model="mistralai/mistral-nemo-instruct-2407",
    index_name="my_memories",
    cloud_provider="AWS",
    region="us-east-1"
)

# First, add some memories to search
memory.add("I love pizza and Italian food", user_id="alice")
memory.add("User prefers sci-fi movies over horror", user_id="alice")
memory.add("User works as a software engineer", user_id="alice")
memory.add("User likes coffee in the morning", user_id="alice")

print("Added sample memories for searching\n")

# Search finds related memories using semantic understanding
search_queries = ["food preferences", "movie tastes", "work information", "morning routine"]

for query in search_queries:
    results = memory.search(query, user_id="alice", threshold=0.3)
    print(f"Search: '{query}'")
    print(f"Found {len(results['results'])} memories:")
    
    for i, result in enumerate(results['results'], 1):
        print(f"  {i}. {result['memory']}")
        if 'score' in result:
            print(f"     Relevance: {result['score']:.3f}")
    print()

# Search with limit
limited_results = memory.search("food", user_id="alice", limit=2, threshold=0.3)
print(f"Limited search (max 2 results): Found {len(limited_results['results'])} memories")
for result in limited_results['results']:
    print(f"- {result['memory']}")
Expected Output:
Added sample memories for searching

Search: 'food preferences'
Found 2 memories:
  1. I love pizza and Italian food
     Relevance: 0.892
  2. User likes coffee in the morning
     Relevance: 0.654

Search: 'movie tastes'
Found 1 memories:
  1. User prefers sci-fi movies over horror
     Relevance: 0.876

Search: 'work information'
Found 1 memories:
  1. User works as a software engineer
     Relevance: 0.823

Search: 'morning routine'
Found 1 memories:
  1. User likes coffee in the morning
     Relevance: 0.745

Limited search (max 2 results): Found 2 memories
- I love pizza and Italian food
- User prefers sci-fi movies over horror
How Smart Search Works:
  • Search “food” → finds “I love pizza”, “User likes coffee”
  • Search “movies” → finds “User prefers sci-fi films”
  • Search “work” → finds “User is a software engineer”
  • Search understands context and meaning, not just exact keywords

Search in Specific Categories

Organize memories by switching to different indexes for faster, more targeted searches:
from gravixlayer import GravixLayer

client = GravixLayer()

# Initialize memory
memory = client.memory(
    embedding_model="baai/bge-large-en-v1.5",
    inference_model="mistralai/mistral-nemo-instruct-2407",
    index_name="gravixlayer_memories",
    cloud_provider="AWS",
    region="us-east-1"
)

# Add memories to different categories
print("Setting up categorized memories...")

# Add to user preferences index
memory.add("User prefers dark mode", user_id="alice", index_name="user_preferences")
memory.add("User likes notifications disabled", user_id="alice", index_name="user_preferences")
memory.add("User prefers large font size", user_id="alice", index_name="user_preferences")

# Add to work info index
memory.add("User works as a software engineer", user_id="alice", index_name="work_info")
memory.add("User specializes in Python development", user_id="alice", index_name="work_info")
memory.add("User works remotely", user_id="alice", index_name="work_info")

# Add to food preferences index
memory.add("User loves Italian cuisine", user_id="alice", index_name="food_preferences")
memory.add("User is vegetarian", user_id="alice", index_name="food_preferences")
memory.add("User dislikes spicy food", user_id="alice", index_name="food_preferences")

print("Added memories to different categories\n")

# Search in specific categories
categories = [
    ("user_preferences", "interface settings"),
    ("work_info", "programming skills"),
    ("food_preferences", "dietary restrictions")
]

for index_name, search_query in categories:
    results = memory.search(search_query, user_id="alice", index_name=index_name, threshold=0.3)
    
    print(f"Searching '{search_query}' in {index_name}:")
    print(f"Found {len(results['results'])} memories:")
    for result in results['results']:
        print(f"  - {result['memory']}")
    print()

# Compare: search across default index vs specific index
all_results = memory.search("user preferences", user_id="alice", threshold=0.3)
print(f"Search in default index: {len(all_results['results'])} results")

specific_results = memory.search("preferences", user_id="alice", index_name="user_preferences", threshold=0.3)
print(f"Search in user_preferences only: {len(specific_results['results'])} results")
Expected Output:
Setting up categorized memories...
Added memories to different categories

Searching 'interface settings' in user_preferences:
Found 3 memories:
  - User prefers dark mode
  - User likes notifications disabled
  - User prefers large font size

Searching 'programming skills' in work_info:
Found 2 memories:
  - User works as a software engineer
  - User specializes in Python development

Searching 'dietary restrictions' in food_preferences:
Found 2 memories:
  - User is vegetarian
  - User dislikes spicy food

Search in default index: 0 results
Search in user_preferences only: 3 results