The Problem
Without sessions, each request might hit a different worker:- Request 1 → Worker A (loads user context)
- Request 2 → Worker B (no context, starts fresh)
- Request 1 → Worker A (loads user context)
- Request 2 → Worker A (context already loaded)
Enable Sessions
Add a session ID to your requests: CLI:Example: Conversational Agent
Test Session Affinity
Session + Workspace
For durable state (survives worker restarts), combine sessions with workspace:How It Works
- Request arrives with
session_id - Orpheus checks if a worker handled this session before
- If yes → route to that worker
- If no → pick any available worker, remember the mapping
Limitations
- Best-effort: If preferred worker is busy, request goes to another
- Worker death: If worker dies, next request gets new worker
- Single machine: Session mappings are local (not distributed)
When to Use Sessions
| Use Case | Session Needed? |
|---|---|
| Conversational agent | Yes |
| Multi-step workflow | Yes |
| Stateless API calls | No |
| One-off tasks | No |
Next: Workspace Persistence
Make state survive worker restarts →

