Spaces:
Sleeping
Sleeping
| import asyncio | |
| import os | |
| from agents import Agent, Runner | |
| from agents.extensions.memory import RedisSession | |
| import dotenv | |
| import redis.asyncio as aioredis | |
| dotenv.load_dotenv() | |
| Redis_url = os.getenv("REDIS_URL") | |
| #===============transformers================ | |
| from transformers import pipeline | |
| import re | |
| from datetime import datetime | |
| import json | |
| import requests | |
| # ---------- Utility Functions ---------- | |
| async def get_sessions(user_login_id: str): | |
| """ | |
| Get all session IDs for a given user (based on key prefix). | |
| """ | |
| redis = await aioredis.from_url(Redis_url) | |
| pattern = f"{user_login_id}:*" | |
| keys = await redis.keys(pattern) | |
| sessions = [key.decode().replace(f"{user_login_id}:", "") for key in keys] | |
| await redis.close() | |
| return sessions | |
| async def get_session_history(user_login_id: str, session_id: str): | |
| """ | |
| Retrieve chat history for a given user's session. | |
| """ | |
| try: | |
| session = RedisSession.from_url( | |
| session_id, | |
| url=Redis_url, | |
| key_prefix=f"{user_login_id}:", | |
| ) | |
| if not await session.ping(): | |
| raise Exception("Redis connection failed") | |
| items = await session.get_items() | |
| history = [ | |
| {"role": msg.get("role", "unknown"), "content": msg.get("content", "")} | |
| for msg in items | |
| ] | |
| await session.close() | |
| return history | |
| except Exception as e: | |
| return {"error": str(e)} | |
| async def delete_session(user_login_id: str, session_id: str): | |
| """ | |
| Delete a specific session for a given user. | |
| """ | |
| try: | |
| session = RedisSession.from_url( | |
| session_id, | |
| url=Redis_url, | |
| key_prefix=f"{user_login_id}:", | |
| ) | |
| if not await session.ping(): | |
| raise Exception("Redis connection failed") | |
| await session.clear_session() | |
| await session.close() | |
| return {"status": "success", "message": f"Session {session_id} deleted"} | |
| except Exception as e: | |
| return {"status": "error", "message": str(e)} | |
| # ---------- Example Usage ---------- | |
| async def main_demo(): | |
| user_id = "vatsav_user2" | |
| session_id = ":uuid_12345" | |
| print("Creating session...") | |
| session = RedisSession.from_url( | |
| session_id, | |
| url=Redis_url, | |
| key_prefix=f"{user_id}:", | |
| ) | |
| agent = Agent(name="Assistant", instructions="Be concise.") | |
| await Runner.run(agent, "Hello!", session=session) | |
| await Runner.run(agent, "How are you?", session=session) | |
| await session.close() | |
| print("\n--- All Sessions ---") | |
| print(await get_sessions(user_id)) | |
| print("lenth of the sessions: ", len(await get_sessions(user_id)) or 0) | |
| print("\n--- Session History ---") | |
| history = await get_session_history(user_id, session_id) | |
| print("lenght of the history: ", len(history) or 0) | |
| print(history) | |
| print("\nHistoryends=======================:") | |
| for msg in history: | |
| print(f"{msg['role']}: {msg['content']}") | |
| print("\n--- Delete Session ---") | |
| print(await delete_session(user_id, session_id)) | |
| if __name__ == "__main__": | |
| asyncio.run(main_demo()) | |