@@ -165,7 +165,13 @@ def compile(
165165 self , ** kwargs : Union [str , Any ]
166166 ) -> Union [
167167 str ,
168- Sequence [Union [ChatMessageDict , ChatMessageWithPlaceholdersDict_Placeholder ]],
168+ Sequence [
169+ Union [
170+ Dict [str , Any ],
171+ ChatMessageDict ,
172+ ChatMessageWithPlaceholdersDict_Placeholder ,
173+ ]
174+ ],
169175 ]:
170176 pass
171177
@@ -327,7 +333,11 @@ def __init__(self, prompt: Prompt_Chat, is_fallback: bool = False):
327333 def compile (
328334 self ,
329335 ** kwargs : Union [str , Any ],
330- ) -> Sequence [Union [ChatMessageDict , ChatMessageWithPlaceholdersDict_Placeholder ]]:
336+ ) -> Sequence [
337+ Union [
338+ Dict [str , Any ], ChatMessageDict , ChatMessageWithPlaceholdersDict_Placeholder
339+ ]
340+ ]:
331341 """Compile the prompt with placeholders and variables.
332342
333343 Args:
@@ -338,7 +348,11 @@ def compile(
338348 List of compiled chat messages as plain dictionaries, with unresolved placeholders kept as-is.
339349 """
340350 compiled_messages : List [
341- Union [ChatMessageDict , ChatMessageWithPlaceholdersDict_Placeholder ]
351+ Union [
352+ Dict [str , Any ],
353+ ChatMessageDict ,
354+ ChatMessageWithPlaceholdersDict_Placeholder ,
355+ ]
342356 ] = []
343357 unresolved_placeholders : List [ChatMessageWithPlaceholdersDict_Placeholder ] = []
344358
@@ -361,20 +375,16 @@ def compile(
361375 placeholder_value = kwargs [placeholder_name ]
362376 if isinstance (placeholder_value , list ):
363377 for msg in placeholder_value :
364- if (
365- isinstance (msg , dict )
366- and "role" in msg
367- and "content" in msg
368- ):
369- compiled_messages .append (
370- ChatMessageDict (
371- role = msg ["role" ], # type: ignore
372- content = TemplateParser .compile_template (
373- msg ["content" ], # type: ignore
374- kwargs ,
375- ),
376- ),
378+ if isinstance (msg , dict ):
379+ # Preserve all fields from the original message, such as tool calls
380+ compiled_msg = dict (msg ) # type: ignore
381+ # Ensure role and content are always present
382+ compiled_msg ["role" ] = msg .get ("role" , "NOT_GIVEN" )
383+ compiled_msg ["content" ] = TemplateParser .compile_template (
384+ msg .get ("content" , "" ), # type: ignore
385+ kwargs ,
377386 )
387+ compiled_messages .append (compiled_msg )
378388 else :
379389 compiled_messages .append (
380390 ChatMessageDict (
0 commit comments