peargent.

Session and User Context

Tag traces with session and user IDs for multi-user applications

When building multi-user applications, you often need to track which user or session triggered each agent execution. Peargent provides context functions that automatically tag all traces with session and user IDs using thread-local storage.

Context API

Use these functions to manage context for the current thread:

from peargent.observability import ( 
    set_session_id, get_session_id,
    set_user_id, get_user_id,
    clear_context
)

# Set context
set_session_id("session_123") 
set_user_id("user_456") 

# Get context
print(f"Session: {get_session_id()}") 
print(f"User: {get_user_id()}") 

# Clear context (important for thread reuse)
clear_context()

Web Application Integration

Flask Middleware

Automatically set context from request headers or session:

@app.before_request
def before_request():
    set_session_id(session.get('session_id'))
    set_user_id(request.headers.get('X-User-ID'))

@app.after_request
def after_request(response):
    clear_context()
    return response

FastAPI Middleware

Use middleware to handle context for async requests:

@app.middleware("http")
async def add_context(request: Request, call_next):
    set_session_id(request.headers.get("X-Session-ID"))
    set_user_id(request.headers.get("X-User-ID"))

    response = await call_next(request)
    
    clear_context()
    return response

Filtering by Context

Once tagged, you can filter traces by session or user:

# Filter by session
session_traces = tracer.list_traces(session_id="session_123") 

# Filter by user
user_traces = tracer.list_traces(user_id="alice") 

What's Next?

Accessing Traces Learn how to retrieve, filter, and analyze your trace data programmatically.