Pular para conteúdo

Messages

Message

Bases: BaseModel

Represents a message in the chat system.

Parameters:

Name Type Description Default
role Role

The role of the sender (assistant, human, or system).

required
content str

The message content.

required

Attributes:

Name Type Description
role Role

The sender's role.

content str

The message content.

Source code in api/chat/messages.py
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
class Message(BaseModel):
    """
    Represents a message in the chat system.

    Args:
        role (Role):
            The role of the sender (assistant, human, or system).
        content (str):
            The message content.

    Attributes:
        role (Role):
            The sender's role.
        content (str):
            The message content.
    """
    role: Role
    content: str

MessageHistory

Maintains a history of messages in a chat.

Attributes:

Name Type Description
message_history list[Message]

A list storing all messages in the chat history.

Methods:

Name Description
add_message

Message) -> None: Adds a message to the history.

add_human_message

str) -> None: Adds a message from a human user.

add_system_message

str) -> None: Adds a system-generated message.

add_assistant_message

str) -> None: Adds a message from the assistant.

Source code in api/chat/messages.py
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
class MessageHistory:
    """
    Maintains a history of messages in a chat.

    Attributes:
        message_history (list[Message]):
            A list storing all messages in the chat history.

    Methods:
        add_message(message: Message) -> None:
            Adds a message to the history.
        add_human_message(content: str) -> None:
            Adds a message from a human user.
        add_system_message(content: str) -> None:
            Adds a system-generated message.
        add_assistant_message(content: str) -> None:
            Adds a message from the assistant.
    """
    def __init__(self):
        """
        Initializes an empty message history.
        """
        self.message_history: list[Message] = []

    def add_message(self, message: Message) -> None:
        """
        Adds a message to the history.

        Args:
            message (Message):
                The message to be added.
        """
        self.message_history.append(message)

    def add_human_message(self, content: str) -> None:
        """
        Adds a message from a human user.

        Args:
            content (str):
                The message content.
        """
        message = Message(role=Role.human, content=content)
        self.message_history.append(message)

    def add_system_message(self, content: str) -> None:
        """
        Adds a system-generated message.

        Args:
            content (str):
                The message content.
        """
        message = Message(role=Role.system, content=content)
        self.message_history.append(message)

    def add_assistant_message(self, content: str) -> None:
        """
        Adds a message from the assistant.

        Args:
            content (str):
                The message content.
        """
        message = Message(role=Role.assistant, content=content)
        self.message_history.append(message)

__init__()

Initializes an empty message history.

Source code in api/chat/messages.py
122
123
124
125
126
def __init__(self):
    """
    Initializes an empty message history.
    """
    self.message_history: list[Message] = []

add_assistant_message(content)

Adds a message from the assistant.

Parameters:

Name Type Description Default
content str

The message content.

required
Source code in api/chat/messages.py
160
161
162
163
164
165
166
167
168
169
def add_assistant_message(self, content: str) -> None:
    """
    Adds a message from the assistant.

    Args:
        content (str):
            The message content.
    """
    message = Message(role=Role.assistant, content=content)
    self.message_history.append(message)

add_human_message(content)

Adds a message from a human user.

Parameters:

Name Type Description Default
content str

The message content.

required
Source code in api/chat/messages.py
138
139
140
141
142
143
144
145
146
147
def add_human_message(self, content: str) -> None:
    """
    Adds a message from a human user.

    Args:
        content (str):
            The message content.
    """
    message = Message(role=Role.human, content=content)
    self.message_history.append(message)

add_message(message)

Adds a message to the history.

Parameters:

Name Type Description Default
message Message

The message to be added.

required
Source code in api/chat/messages.py
128
129
130
131
132
133
134
135
136
def add_message(self, message: Message) -> None:
    """
    Adds a message to the history.

    Args:
        message (Message):
            The message to be added.
    """
    self.message_history.append(message)

add_system_message(content)

Adds a system-generated message.

Parameters:

Name Type Description Default
content str

The message content.

required
Source code in api/chat/messages.py
149
150
151
152
153
154
155
156
157
158
def add_system_message(self, content: str) -> None:
    """
    Adds a system-generated message.

    Args:
        content (str):
            The message content.
    """
    message = Message(role=Role.system, content=content)
    self.message_history.append(message)

Role

Bases: Enum

Enum representing different roles in a chat system.

Roles

assistant: Represents an AI assistant. human: Represents a human user. system: Represents a system-generated message.

Methods:

Name Description
get

str) -> Role: Returns the corresponding Role enum based on the provided role string.

Source code in api/chat/messages.py
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class Role(Enum):
    """
    Enum representing different roles in a chat system.

    Roles:
        assistant: Represents an AI assistant.
        human: Represents a human user.
        system: Represents a system-generated message.

    Methods:
        get(role: str) -> Role:
            Returns the corresponding Role enum based on the provided role string.
    """
    assistant = auto()
    human = auto()
    system = auto()

    @staticmethod
    def get(role: str) -> 'Role':
        """
        Maps a string representation of a role to the corresponding Role enum.

        Args:
            role (str):
                The string representation of the role.

        Returns:
            Role:
                The corresponding Role enum.

        Raises:
            RoleNotRecognized:
                If the provided role does not match any known equivalents.
        """
        role = role.lower()
        human_equivalents = ['human', 'user']
        system_equivalents = ['system', 'sys']
        assistant_equivalents = ['assistant', 'ai']

        if role in human_equivalents:
            return Role.human
        if role in assistant_equivalents:
            return Role.assistant
        if role in system_equivalents:
            return Role.system

        raise RoleNotRecognized(
                role_provided=role,
                roles_availables=[human_equivalents,
                                  system_equivalents,
                                  assistant_equivalents])

get(role) staticmethod

Maps a string representation of a role to the corresponding Role enum.

Parameters:

Name Type Description Default
role str

The string representation of the role.

required

Returns:

Name Type Description
Role Role

The corresponding Role enum.

Raises:

Type Description
RoleNotRecognized

If the provided role does not match any known equivalents.

Source code in api/chat/messages.py
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
@staticmethod
def get(role: str) -> 'Role':
    """
    Maps a string representation of a role to the corresponding Role enum.

    Args:
        role (str):
            The string representation of the role.

    Returns:
        Role:
            The corresponding Role enum.

    Raises:
        RoleNotRecognized:
            If the provided role does not match any known equivalents.
    """
    role = role.lower()
    human_equivalents = ['human', 'user']
    system_equivalents = ['system', 'sys']
    assistant_equivalents = ['assistant', 'ai']

    if role in human_equivalents:
        return Role.human
    if role in assistant_equivalents:
        return Role.assistant
    if role in system_equivalents:
        return Role.system

    raise RoleNotRecognized(
            role_provided=role,
            roles_availables=[human_equivalents,
                              system_equivalents,
                              assistant_equivalents])

RoleNotRecognized

Bases: Exception

Exception raised when a provided role is not recognized.

Parameters:

Name Type Description Default
role_provided str

The role that was provided but not recognized.

required
roles_availables list[list[str]]

The available role equivalents categorized.

required

Attributes:

Name Type Description
role_provided str

Stores the unrecognized role.

roles_availables list[list[str]]

Stores the available role mappings.

Methods:

Name Description
__str__

Returns a descriptive error message.

Source code in api/chat/messages.py
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class RoleNotRecognized(Exception):
    """
    Exception raised when a provided role is not recognized.

    Args:
        role_provided (str):
            The role that was provided but not recognized.
        roles_availables (list[list[str]]):
            The available role equivalents categorized.

    Attributes:
        role_provided (str):
            Stores the unrecognized role.
        roles_availables (list[list[str]]):
            Stores the available role mappings.

    Methods:
        __str__():
            Returns a descriptive error message.
    """
    def __init__(self, role_provided: str, roles_availables: list[list[str]]):
        self.role_provided = role_provided
        self.roles_availables = roles_availables

    def __str__(self) -> str:
        return (f"Role provided ({self.role_provided}) not in available roles "
                f"({self.roles_availables}), provide an entity mapper")