Session State Multiple Users
This example demonstrates how to maintain state for each user in a multi-user environment.
1"""2Session State Multiple Users3=============================45This example demonstrates how to maintain state for each user in a multi-user environment.6"""78import json910from kern.agent import Agent11from kern.db.sqlite import SqliteDb12from kern.models.openai import OpenAIResponses13from kern.run import RunContext1415# In-memory database to store user shopping lists16# Organized by user ID and session ID17shopping_list = {}181920def add_item(run_context: RunContext, item: str) -> str:21 """Add an item to the current user's shopping list."""2223 current_user_id = run_context.session_state["current_user_id"]24 current_session_id = run_context.session_state["current_session_id"]25 shopping_list.setdefault(current_user_id, {}).setdefault(26 current_session_id, []27 ).append(item)2829 return f"Item {item} added to the shopping list"303132def remove_item(run_context: RunContext, item: str) -> str:33 """Remove an item from the current user's shopping list."""3435 current_user_id = run_context.session_state["current_user_id"]36 current_session_id = run_context.session_state["current_session_id"]3738 if (39 current_user_id not in shopping_list40 or current_session_id not in shopping_list[current_user_id]41 ):42 return f"No shopping list found for user {current_user_id} and session {current_session_id}"4344 if item not in shopping_list[current_user_id][current_session_id]:45 return f"Item '{item}' not found in the shopping list for user {current_user_id} and session {current_session_id}"4647 shopping_list[current_user_id][current_session_id].remove(item)48 return f"Item {item} removed from the shopping list"495051def get_shopping_list(run_context: RunContext) -> str:52 """Get the current user's shopping list."""5354 if run_context.session_state is None:55 run_context.session_state = {}5657 current_user_id = run_context.session_state["current_user_id"]58 current_session_id = run_context.session_state["current_session_id"]59 return f"Shopping list for user {current_user_id} and session {current_session_id}: \n{json.dumps(shopping_list[current_user_id][current_session_id], indent=2)}"606162# Create an Agent that maintains state63# ---------------------------------------------------------------------------64# Create Agent65# ---------------------------------------------------------------------------66agent = Agent(67 model=OpenAIResponses(id="gpt-5-mini"),68 db=SqliteDb(db_file="tmp/data.db"),69 tools=[add_item, remove_item, get_shopping_list],70 # Reference the in-memory database71 instructions=[72 "Current User ID: {current_user_id}",73 "Current Session ID: {current_session_id}",74 ],75 markdown=True,76)7778user_id_1 = "john_doe"79user_id_2 = "mark_smith"80user_id_3 = "carmen_sandiago"8182# ---------------------------------------------------------------------------83# Run Agent84# ---------------------------------------------------------------------------85if __name__ == "__main__":86 # Example usage87 agent.print_response(88 "Add milk, eggs, and bread to the shopping list",89 stream=True,90 user_id=user_id_1,91 session_id="user_1_session_1",92 )93 agent.print_response(94 "Add tacos to the shopping list",95 stream=True,96 user_id=user_id_2,97 session_id="user_2_session_1",98 )99 agent.print_response(100 "Add apples and grapes to the shopping list",101 stream=True,102 user_id=user_id_3,103 session_id="user_3_session_1",104 )105 agent.print_response(106 "Remove milk from the shopping list",107 stream=True,108 user_id=user_id_1,109 session_id="user_1_session_1",110 )111 agent.print_response(112 "Add minced beef to the shopping list",113 stream=True,114 user_id=user_id_2,115 session_id="user_2_session_1",116 )117118 # What is on Mark Smith's shopping list?119 agent.print_response(120 "What is on Mark Smith's shopping list?",121 stream=True,122 user_id=user_id_2,123 session_id="user_2_session_1",124 )125126 # New session, so new shopping list127 agent.print_response(128 "Add chicken and soup to my list.",129 stream=True,130 user_id=user_id_2,131 session_id="user_3_session_2",132 )133134 print(f"Final shopping lists: \n{json.dumps(shopping_list, indent=2)}")Run the Example
1# Clone and setup repo2git clone https://github.com/kern-ai/kern.git3cd kern/cookbook/02_agents/05_state_and_session45# Create and activate virtual environment6./scripts/demo_setup.sh7source .venvs/demo/bin/activate89python session_state_multiple_users.py