Multi-user, Multi-session Chat

This example demonstrates how to run a multi-user, multi-session chat.

Code

1"""
2In this example, we have 3 users and 4 sessions.
3
4User 1 has 2 sessions.
5User 2 has 1 session.
6User 3 has 1 session.
7"""
8
9import asyncio
10
11from kern.agent import Agent
12from kern.db.postgres import PostgresDb
13from kern.models.openai import OpenAIResponses
14
15db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
16
17db = PostgresDb(db_url=db_url)
18
19user_1_id = "user_1@example.com"
20user_2_id = "user_2@example.com"
21user_3_id = "user_3@example.com"
22
23user_1_session_1_id = "user_1_session_1"
24user_1_session_2_id = "user_1_session_2"
25user_2_session_1_id = "user_2_session_1"
26user_3_session_1_id = "user_3_session_1"
27
28chat_agent = Agent(
29 model=OpenAIResponses(id="gpt-5.2"),
30 db=db,
31 update_memory_on_run=True,
32)
33
34
35async def run_chat_agent():
36 await chat_agent.aprint_response(
37 "My name is Mark Gonzales and I like anime and video games.",
38 user_id=user_1_id,
39 session_id=user_1_session_1_id,
40 )
41 await chat_agent.aprint_response(
42 "I also enjoy reading manga and playing video games.",
43 user_id=user_1_id,
44 session_id=user_1_session_1_id,
45 )
46
47 # Chat with user 1 - Session 2
48 await chat_agent.aprint_response(
49 "I'm going to the movies tonight.",
50 user_id=user_1_id,
51 session_id=user_1_session_2_id,
52 )
53
54 # Chat with user 2
55 await chat_agent.aprint_response(
56 "Hi my name is John Doe.", user_id=user_2_id, session_id=user_2_session_1_id
57 )
58 await chat_agent.aprint_response(
59 "I'm planning to hike this weekend.",
60 user_id=user_2_id,
61 session_id=user_2_session_1_id,
62 )
63
64 # Chat with user 3
65 await chat_agent.aprint_response(
66 "Hi my name is Jane Smith.", user_id=user_3_id, session_id=user_3_session_1_id
67 )
68 await chat_agent.aprint_response(
69 "I'm going to the gym tomorrow.",
70 user_id=user_3_id,
71 session_id=user_3_session_1_id,
72 )
73
74 # Continue the conversation with user 1
75 # The agent should take into account all memories of user 1.
76 await chat_agent.aprint_response(
77 "What do you suggest I do this weekend?",
78 user_id=user_1_id,
79 session_id=user_1_session_1_id,
80 )
81
82
83if __name__ == "__main__":
84 # Chat with user 1 - Session 1
85 asyncio.run(run_chat_agent())
86
87 user_1_memories = chat_agent.get_user_memories(user_id=user_1_id)
88 print("User 1's memories:")
89 assert user_1_memories is not None
90 for i, m in enumerate(user_1_memories):
91 print(f"{i}: {m.memory}")
92
93 user_2_memories = chat_agent.get_user_memories(user_id=user_2_id)
94 print("User 2's memories:")
95 assert user_2_memories is not None
96 for i, m in enumerate(user_2_memories):
97 print(f"{i}: {m.memory}")
98
99 user_3_memories = chat_agent.get_user_memories(user_id=user_3_id)
100 print("User 3's memories:")
101 assert user_3_memories is not None
102 for i, m in enumerate(user_3_memories):
103 print(f"{i}: {m.memory}")

Usage

Set up your virtual environment

1uv venv --python 3.12
2source .venv/bin/activate
1uv venv --python 3.12
2.venv\Scripts\activate

Set your API key

1export OPENAI_API_KEY=xxx

Install dependencies

1uv pip install -U kern-ai openai

Run Example

1python multi_user_multi_session_chat.py