mirror of
https://github.com/hwchase17/langchain.git
synced 2025-08-06 11:37:12 +00:00
core: fix get_buffer_string
output for structured message content (#31600)
This commit is contained in:
parent
cf5a442e4c
commit
6105a5841b
@ -129,7 +129,7 @@ def get_buffer_string(
|
||||
else:
|
||||
msg = f"Got unsupported message type: {m}"
|
||||
raise ValueError(msg) # noqa: TRY004
|
||||
message = f"{role}: {m.content}"
|
||||
message = f"{role}: {m.text()}"
|
||||
if isinstance(m, AIMessage) and "function_call" in m.additional_kwargs:
|
||||
message += f"{m.additional_kwargs['function_call']}"
|
||||
string_messages.append(message)
|
||||
|
@ -21,6 +21,7 @@ from langchain_core.messages.utils import (
|
||||
convert_to_openai_messages,
|
||||
count_tokens_approximately,
|
||||
filter_messages,
|
||||
get_buffer_string,
|
||||
merge_message_runs,
|
||||
trim_messages,
|
||||
)
|
||||
@ -1395,3 +1396,64 @@ def test_count_tokens_approximately_mixed_content_types() -> None:
|
||||
|
||||
# Ensure that count is consistent if we do one message at a time
|
||||
assert sum(count_tokens_approximately([m]) for m in messages) == token_count
|
||||
|
||||
|
||||
def test_get_buffer_string_with_structured_content() -> None:
|
||||
"""Test get_buffer_string with structured content in messages."""
|
||||
messages = [
|
||||
HumanMessage(content=[{"type": "text", "text": "Hello, world!"}]),
|
||||
AIMessage(content=[{"type": "text", "text": "Hi there!"}]),
|
||||
SystemMessage(content=[{"type": "text", "text": "System message"}]),
|
||||
]
|
||||
expected = "Human: Hello, world!\nAI: Hi there!\nSystem: System message"
|
||||
actual = get_buffer_string(messages)
|
||||
assert actual == expected
|
||||
|
||||
|
||||
def test_get_buffer_string_with_mixed_content() -> None:
|
||||
"""Test get_buffer_string with mixed content types in messages."""
|
||||
messages = [
|
||||
HumanMessage(content="Simple text"),
|
||||
AIMessage(content=[{"type": "text", "text": "Structured text"}]),
|
||||
SystemMessage(content=[{"type": "text", "text": "Another structured text"}]),
|
||||
]
|
||||
expected = (
|
||||
"Human: Simple text\nAI: Structured text\nSystem: Another structured text"
|
||||
)
|
||||
actual = get_buffer_string(messages)
|
||||
assert actual == expected
|
||||
|
||||
|
||||
def test_get_buffer_string_with_function_call() -> None:
|
||||
"""Test get_buffer_string with function call in additional_kwargs."""
|
||||
messages = [
|
||||
HumanMessage(content="Hello"),
|
||||
AIMessage(
|
||||
content="Hi",
|
||||
additional_kwargs={
|
||||
"function_call": {
|
||||
"name": "test_function",
|
||||
"arguments": '{"arg": "value"}',
|
||||
}
|
||||
},
|
||||
),
|
||||
]
|
||||
# TODO: consider changing this
|
||||
expected = (
|
||||
"Human: Hello\n"
|
||||
"AI: Hi{'name': 'test_function', 'arguments': '{\"arg\": \"value\"}'}"
|
||||
)
|
||||
actual = get_buffer_string(messages)
|
||||
assert actual == expected
|
||||
|
||||
|
||||
def test_get_buffer_string_with_empty_content() -> None:
|
||||
"""Test get_buffer_string with empty content in messages."""
|
||||
messages = [
|
||||
HumanMessage(content=[]),
|
||||
AIMessage(content=""),
|
||||
SystemMessage(content=[]),
|
||||
]
|
||||
expected = "Human: \nAI: \nSystem: "
|
||||
actual = get_buffer_string(messages)
|
||||
assert actual == expected
|
||||
|
Loading…
Reference in New Issue
Block a user