Spaces:
Sleeping
Sleeping
| from app.core.pipeline import rag_pipeline | |
| from app.core.memory import conversation_memory | |
| from app.utils.logger import logger | |
| from typing import AsyncIterator, Optional | |
| class ChatService: | |
| def __init__(self): | |
| self.pipeline = rag_pipeline | |
| self.memory = conversation_memory | |
| async def generate_response( | |
| self, | |
| message: str, | |
| session_id: Optional[str] = None, | |
| use_rag: bool = True, | |
| use_history: bool = True | |
| ) -> str: | |
| try: | |
| response = await self.pipeline.generate( | |
| query=message, | |
| session_id=session_id if use_history else None, | |
| use_context=use_rag | |
| ) | |
| logger.info(f"Generated response for session: {session_id}") | |
| return response | |
| except Exception as e: | |
| logger.error(f"Chat service error: {str(e)}") | |
| raise | |
| async def stream_response( | |
| self, | |
| message: str, | |
| session_id: Optional[str] = None, | |
| use_rag: bool = True, | |
| use_history: bool = True | |
| ) -> AsyncIterator[str]: | |
| try: | |
| async for chunk in self.pipeline.stream( | |
| query=message, | |
| session_id=session_id if use_history else None, | |
| use_context=use_rag | |
| ): | |
| yield chunk | |
| except Exception as e: | |
| logger.error(f"Chat stream error: {str(e)}") | |
| raise | |
| def get_chat_history(self, session_id: str) -> list: | |
| try: | |
| return self.memory.get_messages(session_id) | |
| except Exception as e: | |
| logger.error(f"Get history error: {str(e)}") | |
| return [] | |
| def clear_chat_history(self, session_id: str) -> bool: | |
| try: | |
| self.memory.clear(session_id) | |
| logger.info(f"Cleared history for session: {session_id}") | |
| return True | |
| except Exception as e: | |
| logger.error(f"Clear history error: {str(e)}") | |
| return False | |
| chat_service = ChatService() | |