mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-05-17 21:11:04 +00:00
Some checks failed
Publish AI SDK / publish (push) Has been cancelled
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
113 lines
2.8 KiB
Python
113 lines
2.8 KiB
Python
import os
|
|
from dotenv import load_dotenv
|
|
from supermemory import Supermemory
|
|
|
|
load_dotenv()
|
|
|
|
client = Supermemory()
|
|
|
|
|
|
def test_search_modes():
|
|
"""Test different search modes"""
|
|
print("=== Search Modes ===")
|
|
|
|
# Hybrid search
|
|
hybrid = client.search.memories(
|
|
q="quarterly goals",
|
|
container_tag="user_123",
|
|
search_mode="hybrid",
|
|
)
|
|
print(f"✓ hybrid search: {len(hybrid.results)} results")
|
|
|
|
# Memories only
|
|
memories = client.search.memories(
|
|
q="user preferences",
|
|
container_tag="user_123",
|
|
search_mode="memories",
|
|
)
|
|
print(f"✓ memories search: {len(memories.results)} results")
|
|
|
|
|
|
def test_filtering():
|
|
"""Test search filtering"""
|
|
print("\n=== Filtering ===")
|
|
|
|
# Basic containerTag filter
|
|
results = client.search.memories(
|
|
q="project updates",
|
|
container_tag="user_123",
|
|
search_mode="hybrid",
|
|
)
|
|
print(f"✓ containerTag filter: {len(results.results)} results")
|
|
|
|
# Metadata filtering
|
|
filtered = client.search.memories(
|
|
q="meeting notes",
|
|
container_tag="user_123",
|
|
filters={
|
|
"AND": [
|
|
{"key": "type", "value": "meeting"},
|
|
{"key": "year", "value": "2024"},
|
|
]
|
|
},
|
|
)
|
|
print(f"✓ metadata filter: {len(filtered.results)} results")
|
|
|
|
|
|
def test_reranking():
|
|
"""Test reranking"""
|
|
print("\n=== Reranking ===")
|
|
|
|
results = client.search.memories(
|
|
q="complex technical question",
|
|
container_tag="user_123",
|
|
rerank=True,
|
|
)
|
|
print(f"✓ reranking: {len(results.results)} results")
|
|
|
|
|
|
def test_threshold():
|
|
"""Test similarity threshold"""
|
|
print("\n=== Threshold ===")
|
|
|
|
broad = client.search.memories(q="test query", threshold=0.3)
|
|
print(f"✓ broad threshold (0.3): {len(broad.results)} results")
|
|
|
|
precise = client.search.memories(q="test query", threshold=0.8)
|
|
print(f"✓ precise threshold (0.8): {len(precise.results)} results")
|
|
|
|
|
|
def test_chatbot_context():
|
|
"""Test chatbot context pattern"""
|
|
print("\n=== Chatbot Context Pattern ===")
|
|
|
|
def get_context(user_id: str, message: str) -> str:
|
|
results = client.search.memories(
|
|
q=message,
|
|
container_tag=user_id,
|
|
search_mode="hybrid",
|
|
threshold=0.6,
|
|
limit=5,
|
|
)
|
|
return "\n\n".join(r.memory or r.chunk or "" for r in results.results)
|
|
|
|
context = get_context("user_123", "What are the project updates?")
|
|
print(f"✓ chatbot context: {len(context)} chars")
|
|
|
|
|
|
def main():
|
|
print("Search Tests")
|
|
print("============\n")
|
|
|
|
test_search_modes()
|
|
test_filtering()
|
|
test_reranking()
|
|
test_threshold()
|
|
test_chatbot_context()
|
|
|
|
print("\n============")
|
|
print("✅ All search tests passed!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|