Skip to content

Commit ce3db7d

Browse files
committed
fix: allow arbitrary values to be inserted as placeholder fill-in
1 parent 7a5df31 commit ce3db7d

1 file changed

Lines changed: 26 additions & 16 deletions

File tree

langfuse/model.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)