Skip to content

Commit 7a5df31

Browse files
committed
add test that tool calls aren't stripped from msg placehodlers
1 parent acd0e0d commit 7a5df31

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

tests/test_prompt_compilation.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,3 +850,85 @@ def test_get_langchain_prompt_with_unresolved_placeholders(self):
850850

851851
# Third message should be the user message
852852
assert langchain_messages[2] == ("user", "Help me with coding")
853+
854+
855+
def test_tool_calls_preservation_in_message_placeholder():
856+
"""Test that tool calls are preserved when compiling message placeholders."""
857+
from langfuse.api.resources.prompts import Prompt_Chat
858+
859+
chat_messages = [
860+
{"role": "system", "content": "You are a helpful assistant."},
861+
{"type": "placeholder", "name": "message_history"},
862+
{"role": "user", "content": "Help me with {{task}}"},
863+
]
864+
865+
prompt_client = ChatPromptClient(
866+
Prompt_Chat(
867+
type="chat",
868+
name="tool_calls_test",
869+
version=1,
870+
config={},
871+
tags=[],
872+
labels=[],
873+
prompt=chat_messages,
874+
)
875+
)
876+
877+
# Message history with tool calls - exactly like the bug report describes
878+
message_history_with_tool_calls = [
879+
{"role": "user", "content": "What's the weather like?"},
880+
{
881+
"role": "assistant",
882+
"content": "",
883+
"tool_calls": [
884+
{
885+
"id": "call_123",
886+
"type": "function",
887+
"function": {
888+
"name": "get_weather",
889+
"arguments": '{"location": "San Francisco"}',
890+
},
891+
}
892+
],
893+
},
894+
{
895+
"role": "tool",
896+
"content": "It's sunny, 72°F",
897+
"tool_call_id": "call_123",
898+
"name": "get_weather",
899+
},
900+
]
901+
902+
# Compile with message history and variables
903+
compiled_messages = prompt_client.compile(
904+
task="weather inquiry", message_history=message_history_with_tool_calls
905+
)
906+
907+
# Should have 5 messages: system + 3 from history + user
908+
assert len(compiled_messages) == 5
909+
910+
# System message
911+
assert compiled_messages[0]["role"] == "system"
912+
assert compiled_messages[0]["content"] == "You are a helpful assistant."
913+
914+
# User message from history
915+
assert compiled_messages[1]["role"] == "user"
916+
assert compiled_messages[1]["content"] == "What's the weather like?"
917+
918+
# Assistant message with TOOL CALLS
919+
assert compiled_messages[2]["role"] == "assistant"
920+
assert compiled_messages[2]["content"] == ""
921+
assert "tool_calls" in compiled_messages[2]
922+
assert len(compiled_messages[2]["tool_calls"]) == 1
923+
assert compiled_messages[2]["tool_calls"][0]["id"] == "call_123"
924+
assert compiled_messages[2]["tool_calls"][0]["function"]["name"] == "get_weather"
925+
926+
# TOOL CALL results message
927+
assert compiled_messages[3]["role"] == "tool"
928+
assert compiled_messages[3]["content"] == "It's sunny, 72°F"
929+
assert compiled_messages[3]["tool_call_id"] == "call_123"
930+
assert compiled_messages[3]["name"] == "get_weather"
931+
932+
# Final user message with compiled variable
933+
assert compiled_messages[4]["role"] == "user"
934+
assert compiled_messages[4]["content"] == "Help me with weather inquiry"

0 commit comments

Comments
 (0)