from enum import Enum


class LLMRole(Enum):
    """
    Role of the LLMMessage. i.e: who generated the message.

    Attributes:
        USER: User generated the message.
        AGENT: Agent (an LLM) generated the message.
        SYSTEM: Message generated by the framework to direct the conversation.
        TOOL: Message generated by a tool that was called by the agent. i.e: a tool call result.
        AWAITING_HUMAN_ACTION: A tool requires user confirmation
        HUMAN_CONFIRMATION: The user has provided input on wether a tool should be run or not.
        INFO: An informational message, not part of the conversation, used for integrating tools or debugging.
        DEBUG: An informational message, not part of the conversation, used for debugging.
        MEMORY: A message containing important information for the AI to be able to continue the conversation.
    """

    USER = "USER"
    """User generated the message."""
    AGENT = "AGENT"
    """Agent (an LLM) generated the message."""
    SYSTEM = "SYSTEM"
    """Message generated by the framework to direct the conversation."""
    TOOL = "TOOL"
    """Message generated by a tool that was called by the agent. i.e: a tool call result."""
    AWAITING_HUMAN_ACTION = "AWAITING_HUMAN_ACTION"
    """A tool requires user confirmation to be executed (human-in-the-loop)."""
    HUMAN_CONFIRMATION = "HUMAN_CONFIRMATION"
    """The user has provided input on wether a tool should be run or not (human-in-the-loop)."""
    INFO = "INFO"
    """An informational message, not part of the conversation, used for integrating tools or user actions."""
    DEBUG = "DEBUG"
    """An informational message, not part of the conversation, used for debugging."""
    MEMORY = "MEMORY"
    """A message containing important information for the AI to be able to continue the conversation."""


__all__ = ["LLMRole"]
