from abc import ABC, abstractmethod
from typing import Literal

class MemoryConvABC(ABC):
    """
    Interfaz abstracta para memorias de conversación multi-turno.
    """

    def __init__(self, k: int = 10):
        """
        :param k: Número máximo de turnos (pares user/assistant) a retornar.
        """
        self.k = k

    @abstractmethod
    def guardar_turno(self, rol: Literal["user", "assistant"], contenido: str) -> None:
        """
        Guarda un mensaje de un turno de conversación.
        Se guarda secuencialmente y se asume que el orden es respetado.
        """
        pass

    @abstractmethod
    def cargar_historial_chat(self) -> list[dict]:
        """
        Devuelve los últimos `k*2` mensajes como lista de dicts tipo chat:
        [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]
        """
        pass

    @abstractmethod
    def limpiar(self) -> None:
        """
        Limpia completamente la memoria.
        """
        pass
