Spaces:
Running
Running
| import json | |
| from typing import List, Optional | |
| from sqlalchemy.orm import Session | |
| from src.core.ports.chat_history_port import ChatHistoryPort, ChatMessage | |
| class Message(ChatMessage): | |
| def __init__(self, role: str, content: str): | |
| self.role = role | |
| self.content = content | |
| class PostgresAdapter(ChatHistoryPort): | |
| def __init__(self, db_session: Session): | |
| self.db = db_session | |
| def get_history(self, session_id: str, limit: int = 6) -> List[ChatMessage]: | |
| from src.core.domain.db_models import ChatHistory | |
| past_messages = ( | |
| self.db.query(ChatHistory) | |
| .filter(ChatHistory.session_id == session_id) | |
| .order_by(ChatHistory.timestamp.asc()) | |
| .limit(limit) | |
| .all() | |
| ) | |
| return [Message(role=msg.role, content=msg.content) for msg in past_messages] | |
| def save_interaction(self, session_id: str, user_query: str, ai_response: str, | |
| retrieved_doc_ids: List[str], user_id: Optional[int] = None): | |
| from src.core.domain.db_models import ChatHistory | |
| user_msg = ChatHistory(session_id=session_id, role="user", content=user_query, user_id=user_id) | |
| ai_msg = ChatHistory( | |
| session_id=session_id, | |
| role="assistant", | |
| content=ai_response, | |
| retrieved_doc_ids=json.dumps(retrieved_doc_ids), | |
| user_id=user_id | |
| ) | |
| self.db.add(user_msg) | |
| self.db.add(ai_msg) | |
| self.db.commit() | |