Spaces:
Runtime error
Runtime error
| # Experimental | |
| from typing import Dict, Any, Optional, List | |
| import asyncio | |
| import logging | |
| from uuid import uuid4 | |
| from anyio import ClosedResourceError | |
| from anyio.streams.memory import MemoryObjectSendStream | |
| from llama_index.core.callbacks.base import BaseCallbackHandler, CallbackManager | |
| from llama_index.core.callbacks import CBEventType, EventPayload | |
| from llama_index.core.query_engine.sub_question_query_engine import ( | |
| SubQuestionAnswerPair, | |
| ) | |
| from llama_index.core.chat_engine.types import StreamingAgentChatResponse | |
| from pydantic import BaseModel | |
| from core.chat import schema | |
| from db.db import MessageSubProcessSourceEnum | |
| from core.chat.schema import SubProcessMetadataKeysEnum, SubProcessMetadataMap | |
| from core.chat.engine import Engine | |
| from script.vector_db import IndexManager | |
| from service.dto import UserPromptRequest | |
| logger = logging.getLogger(__name__) | |
| class StreamedMessage(BaseModel): | |
| content: str | |
| async def handle_chat_message( | |
| user_message: str, | |
| send_chan: MemoryObjectSendStream, | |
| ) -> None: | |
| async with send_chan: | |
| engine = Engine() | |
| index_manager = IndexManager() | |
| index = index_manager.load_existing_indexes() | |
| # Retrieve the chat engine with the loaded index | |
| chat_engine = await engine.get_chat_engine(index) | |
| logger.debug("Engine received") | |
| streaming_chat_response: StreamingAgentChatResponse = ( | |
| await chat_engine.astream_chat(user_message) | |
| ) | |
| response_str = "" | |
| async for text in streaming_chat_response.async_response_gen(): | |
| response_str += text | |
| if send_chan._closed: | |
| logger.debug( | |
| "Received streamed token after send channel closed. Ignoring." | |
| ) | |
| return | |
| await send_chan.send(StreamedMessage(content=response_str)) | |
| if response_str.strip() == "": | |
| await send_chan.send( | |
| StreamedMessage( | |
| content="Sorry, I either wasn't able to understand your question or I don't have an answer for it." | |
| ) | |
| ) | |