mirror of
https://github.com/hwchase17/langchain
synced 2024-11-02 09:40:22 +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]:
|
def set_text(cls, values: Dict[str, Any]) -> Dict[str, Any]:
|
||||||
"""Set the text attribute to be the contents of the message."""
|
"""Set the text attribute to be the contents of the message."""
|
||||||
try:
|
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:
|
except (KeyError, AttributeError) as e:
|
||||||
raise ValueError("Error while initializing ChatGeneration") from e
|
raise ValueError("Error while initializing ChatGeneration") from e
|
||||||
return values
|
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