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()