@@ -2125,20 +2125,31 @@ def text(self) -> str:
21252125 return " " .join (content .text for content in self .contents if isinstance (content , TextContent ))
21262126
21272127
2128- def prepare_messages (messages : str | ChatMessage | list [str ] | list [ChatMessage ]) -> list [ChatMessage ]:
2128+ def prepare_messages (
2129+ messages : str | ChatMessage | list [str ] | list [ChatMessage ], system_instructions : str | list [str ] | None = None
2130+ ) -> list [ChatMessage ]:
21292131 """Convert various message input formats into a list of ChatMessage objects.
21302132
21312133 Args:
21322134 messages: The input messages in various supported formats.
2135+ system_instructions: The system instructions. They will be inserted to the start of the messages list.
21332136
21342137 Returns:
21352138 A list of ChatMessage objects.
21362139 """
2140+ if system_instructions is not None :
2141+ if isinstance (system_instructions , str ):
2142+ system_instructions = [system_instructions ]
2143+ system_instruction_messages = [ChatMessage (role = "system" , text = instr ) for instr in system_instructions ]
2144+ else :
2145+ system_instruction_messages = []
2146+
21372147 if isinstance (messages , str ):
2138- return [ChatMessage (role = "user" , text = messages )]
2148+ return [* system_instruction_messages , ChatMessage (role = "user" , text = messages )]
21392149 if isinstance (messages , ChatMessage ):
2140- return [messages ]
2141- return_messages : list [ChatMessage ] = []
2150+ return [* system_instruction_messages , messages ]
2151+
2152+ return_messages : list [ChatMessage ] = system_instruction_messages
21422153 for msg in messages :
21432154 if isinstance (msg , str ):
21442155 msg = ChatMessage (role = "user" , text = msg )
0 commit comments