diff --git a/python/packages/core/agent_framework/_types.py b/python/packages/core/agent_framework/_types.py index 171db56c46..f4662352a0 100644 --- a/python/packages/core/agent_framework/_types.py +++ b/python/packages/core/agent_framework/_types.py @@ -2125,20 +2125,31 @@ def text(self) -> str: return " ".join(content.text for content in self.contents if isinstance(content, TextContent)) -def prepare_messages(messages: str | ChatMessage | list[str] | list[ChatMessage]) -> list[ChatMessage]: +def prepare_messages( + messages: str | ChatMessage | list[str] | list[ChatMessage], system_instructions: str | list[str] | None = None +) -> list[ChatMessage]: """Convert various message input formats into a list of ChatMessage objects. Args: messages: The input messages in various supported formats. + system_instructions: The system instructions. They will be inserted to the start of the messages list. Returns: A list of ChatMessage objects. """ + if system_instructions is not None: + if isinstance(system_instructions, str): + system_instructions = [system_instructions] + system_instruction_messages = [ChatMessage(role="system", text=instr) for instr in system_instructions] + else: + system_instruction_messages = [] + if isinstance(messages, str): - return [ChatMessage(role="user", text=messages)] + return [*system_instruction_messages, ChatMessage(role="user", text=messages)] if isinstance(messages, ChatMessage): - return [messages] - return_messages: list[ChatMessage] = [] + return [*system_instruction_messages, messages] + + return_messages: list[ChatMessage] = system_instruction_messages for msg in messages: if isinstance(msg, str): msg = ChatMessage(role="user", text=msg) diff --git a/python/packages/core/agent_framework/observability.py b/python/packages/core/agent_framework/observability.py index 7ec778b8d2..b86ee3eb4a 100644 --- a/python/packages/core/agent_framework/observability.py +++ b/python/packages/core/agent_framework/observability.py @@ -1422,7 +1422,7 @@ def _capture_messages( """Log messages with extra information.""" from ._types import prepare_messages - prepped = prepare_messages(messages) + prepped = prepare_messages(messages, system_instructions=system_instructions) otel_messages: list[dict[str, Any]] = [] for index, message in enumerate(prepped): otel_messages.append(_to_otel_message(message))