Spaces:
Sleeping
Sleeping
| import asyncio | |
| import random | |
| from functools import partial | |
| from app.memory.qdrant_memory import add_memory | |
| async def _store_memory(user_id, user_query, full_response): | |
| try: | |
| loop = asyncio.get_event_loop() | |
| await loop.run_in_executor( | |
| None, # uses default ThreadPoolExecutor | |
| partial(add_memory, user_id, user_query, full_response) | |
| ) | |
| except Exception as e: | |
| print(f"[MEMORY STORE ERROR]: {e}") | |
| async def stream_response(response, user_id, user_query): | |
| full_response = "" | |
| try: | |
| async for chunk in response: | |
| delta = chunk.choices[0].delta | |
| if delta and delta.content: | |
| token = delta.content | |
| for char in token: | |
| full_response += char | |
| yield char | |
| await asyncio.sleep(random.uniform(0.01, 0.02)) | |
| except Exception as e: | |
| yield f"\n[ERROR]: {str(e)}" | |
| finally: | |
| if full_response: | |
| asyncio.create_task( | |
| _store_memory(user_id, user_query, full_response) | |
| ) |