()
| 18 | |
| 19 | |
| 20 | async def main(): |
| 21 | agent = Agent( |
| 22 | name="Assistant", |
| 23 | instructions="Reply very concisely.", |
| 24 | ) |
| 25 | |
| 26 | # One client shared across all sessions (production pattern). |
| 27 | client: AsyncMongoClient[Any] = AsyncMongoClient(MONGO_URI) |
| 28 | |
| 29 | try: |
| 30 | await client.admin.command("ping") |
| 31 | except Exception: |
| 32 | print("MongoDB is not available on localhost:27017") |
| 33 | print("Start it with: docker run -d -p 27017:27017 mongo") |
| 34 | return |
| 35 | |
| 36 | session_a = MongoDBSession("conversation_a", client=client, database=DATABASE) |
| 37 | session_b = MongoDBSession("conversation_b", client=client, database=DATABASE) |
| 38 | |
| 39 | # Clean slate for the demo. |
| 40 | await session_a.clear_session() |
| 41 | await session_b.clear_session() |
| 42 | |
| 43 | # --- Session A: multi-turn conversation --- |
| 44 | print("=== Session A ===") |
| 45 | result = await Runner.run(agent, "What city is the Golden Gate Bridge in?", session=session_a) |
| 46 | print(f"Turn 1: {result.final_output}") |
| 47 | |
| 48 | result = await Runner.run(agent, "What state is it in?", session=session_a) |
| 49 | print(f"Turn 2: {result.final_output}") |
| 50 | |
| 51 | result = await Runner.run(agent, "What's the population of that state?", session=session_a) |
| 52 | print(f"Turn 3: {result.final_output}") |
| 53 | |
| 54 | # --- Session B: independent conversation on the same client --- |
| 55 | print("\n=== Session B ===") |
| 56 | result = await Runner.run(agent, "What is the capital of France?", session=session_b) |
| 57 | print(f"Turn 1: {result.final_output}") |
| 58 | |
| 59 | # Show isolation. |
| 60 | a_items = await session_a.get_items() |
| 61 | b_items = await session_b.get_items() |
| 62 | print(f"\nSession A items: {len(a_items)}, Session B items: {len(b_items)}") |
| 63 | |
| 64 | # Cleanup. |
| 65 | await session_a.clear_session() |
| 66 | await session_b.clear_session() |
| 67 | await client.close() |
| 68 | |
| 69 | |
| 70 | if __name__ == "__main__": |
no test coverage detected