33import re
44from abc import ABC , abstractmethod
55from typing import Any , Dict , List , Literal , Optional , Sequence , Tuple , TypedDict , Union
6- from langfuse .logger import langfuse_logger
76
87from langfuse .api .resources .commons .types .dataset import (
98 Dataset , # noqa: F401
3837 CreateDatasetRequest ,
3938)
4039from langfuse .api .resources .prompts import Prompt , Prompt_Chat , Prompt_Text
40+ from langfuse .logger import langfuse_logger
4141
4242
4343class ModelUsage (TypedDict ):
@@ -337,21 +337,23 @@ def compile(
337337 Returns:
338338 List of compiled chat messages as plain dictionaries, with unresolved placeholders kept as-is.
339339 """
340- compiled_messages : List [Dict [str , Any ]] = []
340+ compiled_messages : List [
341+ Union [ChatMessageDict , ChatMessageWithPlaceholdersDict_Placeholder ]
342+ ] = []
341343 unresolved_placeholders : List [ChatMessageWithPlaceholdersDict_Placeholder ] = []
342344
343345 for chat_message in self .prompt :
344346 if chat_message ["type" ] == "message" :
345347 # For regular messages, compile variables and add to output
346- message_obj = chat_message # type: ChatMessageWithPlaceholdersDict_Message
348+ message_obj = chat_message # type: ignore
347349 compiled_messages .append (
348- {
349- " role" : message_obj ["role" ],
350- " content" : TemplateParser .compile_template (
351- message_obj ["content" ],
350+ ChatMessageDict (
351+ role = message_obj ["role" ], # type: ignore
352+ content = TemplateParser .compile_template (
353+ message_obj ["content" ], # type: ignore
352354 kwargs ,
353355 ),
354- } ,
356+ ) ,
355357 )
356358 elif chat_message ["type" ] == "placeholder" :
357359 placeholder_name = chat_message ["name" ]
@@ -365,36 +367,36 @@ def compile(
365367 and "content" in msg
366368 ):
367369 compiled_messages .append (
368- {
369- " role" : msg ["role" ], # type: ignore
370- " content" : TemplateParser .compile_template (
370+ ChatMessageDict (
371+ role = msg ["role" ], # type: ignore
372+ content = TemplateParser .compile_template (
371373 msg ["content" ], # type: ignore
372374 kwargs ,
373375 ),
374- } ,
376+ ) ,
375377 )
376378 else :
377379 compiled_messages .append (
378- {
379- " role" : "system " ,
380- " content" : str (placeholder_value ),
381- }
380+ ChatMessageDict (
381+ role = "NOT_GIVEN " ,
382+ content = str (placeholder_value ),
383+ )
382384 )
383385 no_role_content_in_placeholder = f"Placeholder '{ placeholder_name } ' should contain a list of chat messages with 'role' and 'content' fields. Appended as string."
384386 langfuse_logger .warning (no_role_content_in_placeholder )
385387 else :
386388 compiled_messages .append (
387- {
388- " role" : "system " ,
389- " content" : str (placeholder_value ),
390- }
389+ ChatMessageDict (
390+ role = "NOT_GIVEN " ,
391+ content = str (placeholder_value ),
392+ ),
391393 )
392394 placeholder_not_a_list = f"Placeholder '{ placeholder_name } ' must contain a list of chat messages, got { type (placeholder_value )} "
393395 langfuse_logger .warning (placeholder_not_a_list )
394396 else :
395397 # Keep unresolved placeholder in the compiled messages
396- compiled_messages .append (dict ( chat_message ) )
397- unresolved_placeholders .append (chat_message )
398+ compiled_messages .append (chat_message )
399+ unresolved_placeholders .append (chat_message [ "name" ]) # type: ignore
398400
399401 if unresolved_placeholders :
400402 unresolved_placeholders_message = f"Placeholders { unresolved_placeholders } have not been resolved. Pass them as keyword arguments to compile()."
0 commit comments