mirror of
https://github.com/hwchase17/langchain.git
synced 2025-07-04 12:18:24 +00:00
core[patch]: fix ChatGeneration.text with content blocks (#20294)
This commit is contained in:
parent
03b247cca1
commit
cb25fa0d55
@ -23,7 +23,24 @@ class ChatGeneration(Generation):
|
||||
def set_text(cls, values: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""Set the text attribute to be the contents of the message."""
|
||||
try:
|
||||
values["text"] = values["message"].content
|
||||
text = ""
|
||||
if isinstance(values["message"].content, str):
|
||||
text = values["message"].content
|
||||
# HACK: Assumes text in content blocks in OpenAI format.
|
||||
# Uses first text block.
|
||||
elif isinstance(values["message"].content, list):
|
||||
for block in values["message"].content:
|
||||
if isinstance(block, str):
|
||||
text = block
|
||||
break
|
||||
elif isinstance(block, dict) and "text" in block:
|
||||
text = block["text"]
|
||||
break
|
||||
else:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
values["text"] = text
|
||||
except (KeyError, AttributeError) as e:
|
||||
raise ValueError("Error while initializing ChatGeneration") from e
|
||||
return values
|
||||
|
32
libs/core/tests/unit_tests/outputs/test_chat_generation.py
Normal file
32
libs/core/tests/unit_tests/outputs/test_chat_generation.py
Normal file
@ -0,0 +1,32 @@
|
||||
from typing import Union
|
||||
|
||||
import pytest
|
||||
|
||||
from langchain_core.messages import AIMessage
|
||||
from langchain_core.outputs import ChatGeneration
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"content",
|
||||
[
|
||||
"foo",
|
||||
["foo"],
|
||||
[{"text": "foo", "type": "text"}],
|
||||
[
|
||||
{"tool_use": {}, "type": "tool_use"},
|
||||
{"text": "foo", "type": "text"},
|
||||
"bar",
|
||||
],
|
||||
],
|
||||
)
|
||||
def test_msg_with_text(content: Union[str, list]) -> None:
|
||||
expected = "foo"
|
||||
actual = ChatGeneration(message=AIMessage(content=content)).text
|
||||
assert actual == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize("content", [[], [{"tool_use": {}, "type": "tool_use"}]])
|
||||
def test_msg_no_text(content: Union[str, list]) -> None:
|
||||
expected = ""
|
||||
actual = ChatGeneration(message=AIMessage(content=content)).text
|
||||
assert actual == expected
|
Loading…
Reference in New Issue
Block a user