Skip to content

User Isolation Example

Demonstrates complete separation between different users’ context spaces.

from syntha import ContextMesh

# Create separate context meshes for different users
alice_ctx = ContextMesh(user_id="user_alice")
bob_ctx = ContextMesh(user_id="user_bob")

# Add context for Alice
alice_ctx.push("customer_data", {
    "name": "Alice Johnson",
    "email": "alice@example.com",
    "preferences": {"theme": "dark", "notifications": True},
})
alice_ctx.push("project_status", "Phase 2 Complete")
alice_ctx.push("budget", 25000)

# Add context for Bob
bob_ctx.push("customer_data", {
    "name": "Bob Smith",
    "email": "bob@example.com",
    "preferences": {"theme": "light", "notifications": False},
})
bob_ctx.push("project_status", "Planning Phase")
bob_ctx.push("budget", 15000)

# Verify isolation – each user only sees their own data
alice_view = alice_ctx.get_all_for_agent("AssistantAgent")
bob_view = bob_ctx.get_all_for_agent("AssistantAgent")
print(list(alice_view.keys()))
print(list(bob_view.keys()))

# Topic routing remains isolated per user
alice_ctx.register_agent_topics("SalesAgent", ["sales"]) 
bob_ctx.register_agent_topics("SalesAgent", ["sales"]) 

alice_ctx.push("sales_lead", "Alice's Premium Lead", topics=["sales"]) 
bob_ctx.push("sales_lead", "Bob's Standard Lead", topics=["sales"]) 

print(alice_ctx.get("sales_lead", "SalesAgent"))
print(bob_ctx.get("sales_lead", "SalesAgent"))

See the runnable file at examples/context-mesh/user_isolation.py.