Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 58 additions & 7 deletions camel/agents/chat_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -491,9 +491,7 @@ def __init__(

# Set up system message and initialize messages
self._original_system_message = (
BaseMessage.make_assistant_message(
role_name="Assistant", content=system_message
)
BaseMessage.make_system_message(system_message)
if isinstance(system_message, str)
else system_message
)
Expand Down Expand Up @@ -1629,10 +1627,7 @@ def _generate_system_message_for_output_language(
content = self._original_system_message.content + language_prompt
return self._original_system_message.create_new_instance(content)
else:
return BaseMessage.make_assistant_message(
role_name="Assistant",
content=language_prompt,
)
return BaseMessage.make_system_message(language_prompt)

def init_messages(self) -> None:
r"""Initializes the stored messages list with the current system
Expand All @@ -1650,6 +1645,62 @@ def init_messages(self) -> None:
)
)

def update_system_message(
self,
system_message: Union[BaseMessage, str],
reset_memory: bool = True,
) -> None:
r"""Update the system message.
It will reset conversation with new system message.

Args:
system_message (Union[BaseMessage, str]): The new system message.
Can be either a BaseMessage object or a string.
If a string is provided, it will be converted
into a BaseMessage object.
reset_memory (bool):
Whether to reinitialize conversation messages after updating
the system message. Defaults to True.
"""
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's add a validation for case that None is passed (like return)

if system_message is None:
raise ValueError("system_message is required and cannot be None. ")
self._original_system_message = (
BaseMessage.make_system_message(system_message)
if isinstance(system_message, str)
else system_message
)
self._system_message = (
self._generate_system_message_for_output_language()
)
if reset_memory:
self.init_messages()

def append_to_system_message(
self, content: str, reset_memory: bool = True
) -> None:
"""Append additional context to existing system message.

Args:
content (str): The additional system message.
reset_memory (bool):
Whether to reinitialize conversation messages after appending
additional context. Defaults to True.
"""
original_content = (
self._original_system_message.content
if self._original_system_message
else ""
)
new_system_message = original_content + '\n' + content
self._original_system_message = BaseMessage.make_system_message(
new_system_message
)
self._system_message = (
self._generate_system_message_for_output_language()
)
if reset_memory:
self.init_messages()

def reset_to_original_system_message(self) -> None:
r"""Reset system message to original, removing any appended context.

Expand Down
26 changes: 26 additions & 0 deletions camel/messages/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,32 @@ def make_assistant_message(
OpenAIVisionDetailType(video_detail).value,
)

@classmethod
def make_system_message(
cls,
content: str,
role_name: str = "System",
meta_dict: Optional[Dict[str, str]] = None,
) -> "BaseMessage":
r"""Create a new system message.

Args:
content (str): The content of the system message.
role_name (str): The name of the system role.
(default: :obj:`"System"`)
meta_dict (Optional[Dict[str, str]]): Additional metadata
dictionary for the message.

Returns:
BaseMessage: The new system message.
"""
return cls(
role_name,
RoleType.SYSTEM,
meta_dict,
content,
)

def create_new_instance(self, content: str) -> "BaseMessage":
r"""Create a new instance of the :obj:`BaseMessage` with updated
content.
Expand Down
1 change: 1 addition & 0 deletions camel/types/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
class RoleType(Enum):
ASSISTANT = "assistant"
USER = "user"
SYSTEM = "system"
CRITIC = "critic"
EMBODIMENT = "embodiment"
DEFAULT = "default"
Expand Down
2 changes: 2 additions & 0 deletions test/toolkits/test_openai_function.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ def test_all_parameters(
'enum': [
'assistant',
'user',
'system',
'critic',
'embodiment',
'default',
Expand All @@ -126,6 +127,7 @@ def test_all_parameters(
'enum': [
'assistant',
'user',
'system',
'critic',
'embodiment',
'default',
Expand Down
Loading