From b2c8f2de4cb6987ce6e2424a9d6e6f83a661bf81 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:13:57 -0400 Subject: [PATCH] core[patch]: fix ChatPromptValueConcrete typing (#26106) Thank you for contributing to LangChain! - [ ] **PR title**: "package: description" - Where "package" is whichever of langchain, community, core, experimental, etc. is being modified. Use "docs: ..." for purely docs changes, "templates: ..." for template changes, "infra: ..." for CI changes. - Example: "community: add foobar LLM" - [ ] **PR message**: ***Delete this entire checklist*** and replace with - **Description:** a description of the change - **Issue:** the issue # it fixes, if applicable - **Dependencies:** any dependencies required for this change - **Twitter handle:** if your PR gets announced, and you'd like a mention, we'll gladly shout you out! - [ ] **Add tests and docs**: If you're adding a new integration, please include 1. a test for the integration, preferably unit tests that do not rely on network access, 2. an example notebook showing its use. It lives in `docs/docs/integrations` directory. - [ ] **Lint and test**: Run `make format`, `make lint` and `make test` from the root of the package(s) you've modified. See contribution guidelines for more: https://python.langchain.com/docs/contributing/ Additional guidelines: - Make sure optional dependencies are imported within a function. - Please do not add dependencies to pyproject.toml files (even optional ones) unless they are required for unit tests. - Most PRs should not touch more than one package. - Changes should be backwards compatible. - If you are adding something to community, do not re-import it in langchain. If no one reviews your PR within a few days, please @-mention one of baskaryan, efriis, eyurtsev, ccurme, vbarda, hwchase17. --- libs/core/langchain_core/messages/utils.py | 33 +- .../prompts/__snapshots__/test_chat.ambr | 38 +- .../runnables/__snapshots__/test_graph.ambr | 89 +++-- .../__snapshots__/test_runnable.ambr | 334 +++++++++++++----- .../tests/unit_tests/test_prompt_values.py | 3 - .../langchain/tests/unit_tests/test_schema.py | 6 + 6 files changed, 371 insertions(+), 132 deletions(-) diff --git a/libs/core/langchain_core/messages/utils.py b/libs/core/langchain_core/messages/utils.py index 9e9c5228cb2..f78d877e595 100644 --- a/libs/core/langchain_core/messages/utils.py +++ b/libs/core/langchain_core/messages/utils.py @@ -29,6 +29,9 @@ from typing import ( overload, ) +from pydantic import Discriminator, Field +from typing_extensions import Annotated + from langchain_core.messages.ai import AIMessage, AIMessageChunk from langchain_core.messages.base import BaseMessage, BaseMessageChunk from langchain_core.messages.chat import ChatMessage, ChatMessageChunk @@ -45,19 +48,23 @@ if TYPE_CHECKING: from langchain_core.prompt_values import PromptValue from langchain_core.runnables.base import Runnable -AnyMessage = Union[ - AIMessage, - HumanMessage, - ChatMessage, - SystemMessage, - FunctionMessage, - ToolMessage, - AIMessageChunk, - HumanMessageChunk, - ChatMessageChunk, - SystemMessageChunk, - FunctionMessageChunk, - ToolMessageChunk, + +AnyMessage = Annotated[ + Union[ + AIMessage, + HumanMessage, + ChatMessage, + SystemMessage, + FunctionMessage, + ToolMessage, + AIMessageChunk, + HumanMessageChunk, + ChatMessageChunk, + SystemMessageChunk, + FunctionMessageChunk, + ToolMessageChunk, + ], + Field(discriminator=Discriminator("type")), ] diff --git a/libs/core/tests/unit_tests/prompts/__snapshots__/test_chat.ambr b/libs/core/tests/unit_tests/prompts/__snapshots__/test_chat.ambr index 29ab354d126..7c3c2ffb456 100644 --- a/libs/core/tests/unit_tests/prompts/__snapshots__/test_chat.ambr +++ b/libs/core/tests/unit_tests/prompts/__snapshots__/test_chat.ambr @@ -1349,7 +1349,24 @@ 'history': dict({ 'default': None, 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/$defs/AIMessageChunk', + 'ChatMessageChunk': '#/$defs/ChatMessageChunk', + 'FunctionMessageChunk': '#/$defs/FunctionMessageChunk', + 'HumanMessageChunk': '#/$defs/HumanMessageChunk', + 'SystemMessageChunk': '#/$defs/SystemMessageChunk', + 'ToolMessageChunk': '#/$defs/ToolMessageChunk', + 'ai': '#/$defs/AIMessage', + 'chat': '#/$defs/ChatMessage', + 'function': '#/$defs/FunctionMessage', + 'human': '#/$defs/HumanMessage', + 'system': '#/$defs/SystemMessage', + 'tool': '#/$defs/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/$defs/AIMessage', }), @@ -2752,7 +2769,24 @@ 'properties': dict({ 'history': dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/$defs/AIMessageChunk', + 'ChatMessageChunk': '#/$defs/ChatMessageChunk', + 'FunctionMessageChunk': '#/$defs/FunctionMessageChunk', + 'HumanMessageChunk': '#/$defs/HumanMessageChunk', + 'SystemMessageChunk': '#/$defs/SystemMessageChunk', + 'ToolMessageChunk': '#/$defs/ToolMessageChunk', + 'ai': '#/$defs/AIMessage', + 'chat': '#/$defs/ChatMessage', + 'function': '#/$defs/FunctionMessage', + 'human': '#/$defs/HumanMessage', + 'system': '#/$defs/SystemMessage', + 'tool': '#/$defs/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/$defs/AIMessage', }), diff --git a/libs/core/tests/unit_tests/runnables/__snapshots__/test_graph.ambr b/libs/core/tests/unit_tests/runnables/__snapshots__/test_graph.ambr index 2a6ff6ad79c..34929ad3abd 100644 --- a/libs/core/tests/unit_tests/runnables/__snapshots__/test_graph.ambr +++ b/libs/core/tests/unit_tests/runnables/__snapshots__/test_graph.ambr @@ -1710,40 +1710,61 @@ 'type': 'string', }), dict({ - '$ref': '#/$defs/AIMessage', - }), - dict({ - '$ref': '#/$defs/HumanMessage', - }), - dict({ - '$ref': '#/$defs/ChatMessage', - }), - dict({ - '$ref': '#/$defs/SystemMessage', - }), - dict({ - '$ref': '#/$defs/FunctionMessage', - }), - dict({ - '$ref': '#/$defs/ToolMessage', - }), - dict({ - '$ref': '#/$defs/AIMessageChunk', - }), - dict({ - '$ref': '#/$defs/HumanMessageChunk', - }), - dict({ - '$ref': '#/$defs/ChatMessageChunk', - }), - dict({ - '$ref': '#/$defs/SystemMessageChunk', - }), - dict({ - '$ref': '#/$defs/FunctionMessageChunk', - }), - dict({ - '$ref': '#/$defs/ToolMessageChunk', + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/$defs/AIMessageChunk', + 'ChatMessageChunk': '#/$defs/ChatMessageChunk', + 'FunctionMessageChunk': '#/$defs/FunctionMessageChunk', + 'HumanMessageChunk': '#/$defs/HumanMessageChunk', + 'SystemMessageChunk': '#/$defs/SystemMessageChunk', + 'ToolMessageChunk': '#/$defs/ToolMessageChunk', + 'ai': '#/$defs/AIMessage', + 'chat': '#/$defs/ChatMessage', + 'function': '#/$defs/FunctionMessage', + 'human': '#/$defs/HumanMessage', + 'system': '#/$defs/SystemMessage', + 'tool': '#/$defs/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ + dict({ + '$ref': '#/$defs/AIMessage', + }), + dict({ + '$ref': '#/$defs/HumanMessage', + }), + dict({ + '$ref': '#/$defs/ChatMessage', + }), + dict({ + '$ref': '#/$defs/SystemMessage', + }), + dict({ + '$ref': '#/$defs/FunctionMessage', + }), + dict({ + '$ref': '#/$defs/ToolMessage', + }), + dict({ + '$ref': '#/$defs/AIMessageChunk', + }), + dict({ + '$ref': '#/$defs/HumanMessageChunk', + }), + dict({ + '$ref': '#/$defs/ChatMessageChunk', + }), + dict({ + '$ref': '#/$defs/SystemMessageChunk', + }), + dict({ + '$ref': '#/$defs/FunctionMessageChunk', + }), + dict({ + '$ref': '#/$defs/ToolMessageChunk', + }), + ]), }), ]), 'title': 'RunnableParallelInput', diff --git a/libs/core/tests/unit_tests/runnables/__snapshots__/test_runnable.ambr b/libs/core/tests/unit_tests/runnables/__snapshots__/test_runnable.ambr index b9d75f3c74d..07be8ecbd5d 100644 --- a/libs/core/tests/unit_tests/runnables/__snapshots__/test_runnable.ambr +++ b/libs/core/tests/unit_tests/runnables/__snapshots__/test_runnable.ambr @@ -6525,7 +6525,24 @@ 'properties': dict({ 'history': dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/$defs/AIMessageChunk', + 'ChatMessageChunk': '#/$defs/ChatMessageChunk', + 'FunctionMessageChunk': '#/$defs/FunctionMessageChunk', + 'HumanMessageChunk': '#/$defs/HumanMessageChunk', + 'SystemMessageChunk': '#/$defs/SystemMessageChunk', + 'ToolMessageChunk': '#/$defs/ToolMessageChunk', + 'ai': '#/$defs/AIMessage', + 'chat': '#/$defs/ChatMessage', + 'function': '#/$defs/FunctionMessage', + 'human': '#/$defs/HumanMessage', + 'system': '#/$defs/SystemMessage', + 'tool': '#/$defs/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/$defs/AIMessage', }), @@ -6973,7 +6990,24 @@ 'properties': dict({ 'messages': dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/$defs/AIMessageChunk', + 'ChatMessageChunk': '#/$defs/ChatMessageChunk', + 'FunctionMessageChunk': '#/$defs/FunctionMessageChunk', + 'HumanMessageChunk': '#/$defs/HumanMessageChunk', + 'SystemMessageChunk': '#/$defs/SystemMessageChunk', + 'ToolMessageChunk': '#/$defs/ToolMessageChunk', + 'ai': '#/$defs/AIMessage', + 'chat': '#/$defs/ChatMessage', + 'function': '#/$defs/FunctionMessage', + 'human': '#/$defs/HumanMessage', + 'system': '#/$defs/SystemMessage', + 'tool': '#/$defs/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/$defs/AIMessage', }), @@ -8035,7 +8069,24 @@ }), dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/definitions/AIMessageChunk', + 'ChatMessageChunk': '#/definitions/ChatMessageChunk', + 'FunctionMessageChunk': '#/definitions/FunctionMessageChunk', + 'HumanMessageChunk': '#/definitions/HumanMessageChunk', + 'SystemMessageChunk': '#/definitions/SystemMessageChunk', + 'ToolMessageChunk': '#/definitions/ToolMessageChunk', + 'ai': '#/definitions/AIMessage', + 'chat': '#/definitions/ChatMessage', + 'function': '#/definitions/FunctionMessage', + 'human': '#/definitions/HumanMessage', + 'system': '#/definitions/SystemMessage', + 'tool': '#/definitions/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/definitions/AIMessage', }), @@ -8473,7 +8524,24 @@ 'properties': dict({ 'messages': dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/definitions/AIMessageChunk', + 'ChatMessageChunk': '#/definitions/ChatMessageChunk', + 'FunctionMessageChunk': '#/definitions/FunctionMessageChunk', + 'HumanMessageChunk': '#/definitions/HumanMessageChunk', + 'SystemMessageChunk': '#/definitions/SystemMessageChunk', + 'ToolMessageChunk': '#/definitions/ToolMessageChunk', + 'ai': '#/definitions/AIMessage', + 'chat': '#/definitions/ChatMessage', + 'function': '#/definitions/FunctionMessage', + 'human': '#/definitions/HumanMessage', + 'system': '#/definitions/SystemMessage', + 'tool': '#/definitions/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/definitions/AIMessage', }), @@ -9513,44 +9581,6 @@ # --- # name: test_schemas[fake_chat_output_schema] dict({ - 'anyOf': list([ - dict({ - '$ref': '#/definitions/AIMessage', - }), - dict({ - '$ref': '#/definitions/HumanMessage', - }), - dict({ - '$ref': '#/definitions/ChatMessage', - }), - dict({ - '$ref': '#/definitions/SystemMessage', - }), - dict({ - '$ref': '#/definitions/FunctionMessage', - }), - dict({ - '$ref': '#/definitions/ToolMessage', - }), - dict({ - '$ref': '#/definitions/AIMessageChunk', - }), - dict({ - '$ref': '#/definitions/HumanMessageChunk', - }), - dict({ - '$ref': '#/definitions/ChatMessageChunk', - }), - dict({ - '$ref': '#/definitions/SystemMessageChunk', - }), - dict({ - '$ref': '#/definitions/FunctionMessageChunk', - }), - dict({ - '$ref': '#/definitions/ToolMessageChunk', - }), - ]), 'definitions': dict({ 'AIMessage': dict({ 'additionalProperties': True, @@ -10893,6 +10923,61 @@ 'type': 'object', }), }), + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/definitions/AIMessageChunk', + 'ChatMessageChunk': '#/definitions/ChatMessageChunk', + 'FunctionMessageChunk': '#/definitions/FunctionMessageChunk', + 'HumanMessageChunk': '#/definitions/HumanMessageChunk', + 'SystemMessageChunk': '#/definitions/SystemMessageChunk', + 'ToolMessageChunk': '#/definitions/ToolMessageChunk', + 'ai': '#/definitions/AIMessage', + 'chat': '#/definitions/ChatMessage', + 'function': '#/definitions/FunctionMessage', + 'human': '#/definitions/HumanMessage', + 'system': '#/definitions/SystemMessage', + 'tool': '#/definitions/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ + dict({ + '$ref': '#/definitions/AIMessage', + }), + dict({ + '$ref': '#/definitions/HumanMessage', + }), + dict({ + '$ref': '#/definitions/ChatMessage', + }), + dict({ + '$ref': '#/definitions/SystemMessage', + }), + dict({ + '$ref': '#/definitions/FunctionMessage', + }), + dict({ + '$ref': '#/definitions/ToolMessage', + }), + dict({ + '$ref': '#/definitions/AIMessageChunk', + }), + dict({ + '$ref': '#/definitions/HumanMessageChunk', + }), + dict({ + '$ref': '#/definitions/ChatMessageChunk', + }), + dict({ + '$ref': '#/definitions/SystemMessageChunk', + }), + dict({ + '$ref': '#/definitions/FunctionMessageChunk', + }), + dict({ + '$ref': '#/definitions/ToolMessageChunk', + }), + ]), 'title': 'FakeListChatModelOutput', }) # --- @@ -10910,7 +10995,24 @@ }), dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/definitions/AIMessageChunk', + 'ChatMessageChunk': '#/definitions/ChatMessageChunk', + 'FunctionMessageChunk': '#/definitions/FunctionMessageChunk', + 'HumanMessageChunk': '#/definitions/HumanMessageChunk', + 'SystemMessageChunk': '#/definitions/SystemMessageChunk', + 'ToolMessageChunk': '#/definitions/ToolMessageChunk', + 'ai': '#/definitions/AIMessage', + 'chat': '#/definitions/ChatMessage', + 'function': '#/definitions/FunctionMessage', + 'human': '#/definitions/HumanMessage', + 'system': '#/definitions/SystemMessage', + 'tool': '#/definitions/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/definitions/AIMessage', }), @@ -11348,7 +11450,24 @@ 'properties': dict({ 'messages': dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/definitions/AIMessageChunk', + 'ChatMessageChunk': '#/definitions/ChatMessageChunk', + 'FunctionMessageChunk': '#/definitions/FunctionMessageChunk', + 'HumanMessageChunk': '#/definitions/HumanMessageChunk', + 'SystemMessageChunk': '#/definitions/SystemMessageChunk', + 'ToolMessageChunk': '#/definitions/ToolMessageChunk', + 'ai': '#/definitions/AIMessage', + 'chat': '#/definitions/ChatMessage', + 'function': '#/definitions/FunctionMessage', + 'human': '#/definitions/HumanMessage', + 'system': '#/definitions/SystemMessage', + 'tool': '#/definitions/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/definitions/AIMessage', }), @@ -12393,40 +12512,61 @@ 'type': 'string', }), dict({ - '$ref': '#/definitions/AIMessage', - }), - dict({ - '$ref': '#/definitions/HumanMessage', - }), - dict({ - '$ref': '#/definitions/ChatMessage', - }), - dict({ - '$ref': '#/definitions/SystemMessage', - }), - dict({ - '$ref': '#/definitions/FunctionMessage', - }), - dict({ - '$ref': '#/definitions/ToolMessage', - }), - dict({ - '$ref': '#/definitions/AIMessageChunk', - }), - dict({ - '$ref': '#/definitions/HumanMessageChunk', - }), - dict({ - '$ref': '#/definitions/ChatMessageChunk', - }), - dict({ - '$ref': '#/definitions/SystemMessageChunk', - }), - dict({ - '$ref': '#/definitions/FunctionMessageChunk', - }), - dict({ - '$ref': '#/definitions/ToolMessageChunk', + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/definitions/AIMessageChunk', + 'ChatMessageChunk': '#/definitions/ChatMessageChunk', + 'FunctionMessageChunk': '#/definitions/FunctionMessageChunk', + 'HumanMessageChunk': '#/definitions/HumanMessageChunk', + 'SystemMessageChunk': '#/definitions/SystemMessageChunk', + 'ToolMessageChunk': '#/definitions/ToolMessageChunk', + 'ai': '#/definitions/AIMessage', + 'chat': '#/definitions/ChatMessage', + 'function': '#/definitions/FunctionMessage', + 'human': '#/definitions/HumanMessage', + 'system': '#/definitions/SystemMessage', + 'tool': '#/definitions/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ + dict({ + '$ref': '#/definitions/AIMessage', + }), + dict({ + '$ref': '#/definitions/HumanMessage', + }), + dict({ + '$ref': '#/definitions/ChatMessage', + }), + dict({ + '$ref': '#/definitions/SystemMessage', + }), + dict({ + '$ref': '#/definitions/FunctionMessage', + }), + dict({ + '$ref': '#/definitions/ToolMessage', + }), + dict({ + '$ref': '#/definitions/AIMessageChunk', + }), + dict({ + '$ref': '#/definitions/HumanMessageChunk', + }), + dict({ + '$ref': '#/definitions/ChatMessageChunk', + }), + dict({ + '$ref': '#/definitions/SystemMessageChunk', + }), + dict({ + '$ref': '#/definitions/FunctionMessageChunk', + }), + dict({ + '$ref': '#/definitions/ToolMessageChunk', + }), + ]), }), ]), 'definitions': dict({ @@ -14172,7 +14312,24 @@ 'properties': dict({ 'messages': dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/definitions/AIMessageChunk', + 'ChatMessageChunk': '#/definitions/ChatMessageChunk', + 'FunctionMessageChunk': '#/definitions/FunctionMessageChunk', + 'HumanMessageChunk': '#/definitions/HumanMessageChunk', + 'SystemMessageChunk': '#/definitions/SystemMessageChunk', + 'ToolMessageChunk': '#/definitions/ToolMessageChunk', + 'ai': '#/definitions/AIMessage', + 'chat': '#/definitions/ChatMessage', + 'function': '#/definitions/FunctionMessage', + 'human': '#/definitions/HumanMessage', + 'system': '#/definitions/SystemMessage', + 'tool': '#/definitions/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/definitions/AIMessage', }), @@ -15631,7 +15788,24 @@ 'properties': dict({ 'messages': dict({ 'items': dict({ - 'anyOf': list([ + 'discriminator': dict({ + 'mapping': dict({ + 'AIMessageChunk': '#/definitions/AIMessageChunk', + 'ChatMessageChunk': '#/definitions/ChatMessageChunk', + 'FunctionMessageChunk': '#/definitions/FunctionMessageChunk', + 'HumanMessageChunk': '#/definitions/HumanMessageChunk', + 'SystemMessageChunk': '#/definitions/SystemMessageChunk', + 'ToolMessageChunk': '#/definitions/ToolMessageChunk', + 'ai': '#/definitions/AIMessage', + 'chat': '#/definitions/ChatMessage', + 'function': '#/definitions/FunctionMessage', + 'human': '#/definitions/HumanMessage', + 'system': '#/definitions/SystemMessage', + 'tool': '#/definitions/ToolMessage', + }), + 'propertyName': 'type', + }), + 'oneOf': list([ dict({ '$ref': '#/definitions/AIMessage', }), diff --git a/libs/core/tests/unit_tests/test_prompt_values.py b/libs/core/tests/unit_tests/test_prompt_values.py index 625cd51202b..6a08a4270ac 100644 --- a/libs/core/tests/unit_tests/test_prompt_values.py +++ b/libs/core/tests/unit_tests/test_prompt_values.py @@ -1,5 +1,3 @@ -import pytest - from langchain_core.messages import ( AIMessage, AIMessageChunk, @@ -13,7 +11,6 @@ from langchain_core.messages import ( from langchain_core.prompt_values import ChatPromptValueConcrete -@pytest.mark.xfail(reason="Broken union type.") def test_chat_prompt_value_concrete() -> None: messages: list = [ AIMessage("foo"), diff --git a/libs/langchain/tests/unit_tests/test_schema.py b/libs/langchain/tests/unit_tests/test_schema.py index 1c4136a60e9..aa0cc26dd9a 100644 --- a/libs/langchain/tests/unit_tests/test_schema.py +++ b/libs/langchain/tests/unit_tests/test_schema.py @@ -16,6 +16,7 @@ from langchain_core.messages import ( HumanMessageChunk, SystemMessage, SystemMessageChunk, + ToolMessage, ) from langchain_core.outputs import ChatGeneration, ChatGenerationChunk, Generation from langchain_core.prompt_values import ChatPromptValueConcrete, StringPromptValue @@ -73,7 +74,12 @@ def test_serialization_of_wellknown_objects() -> None: content="human", ), StringPromptValue(text="hello"), + ChatPromptValueConcrete(messages=[AIMessage(content="foo")]), ChatPromptValueConcrete(messages=[HumanMessage(content="human")]), + ChatPromptValueConcrete( + messages=[ToolMessage(content="foo", tool_call_id="bar")] + ), + ChatPromptValueConcrete(messages=[SystemMessage(content="foo")]), Document(page_content="hello"), AgentFinish(return_values={}, log=""), AgentAction(tool="tool", tool_input="input", log=""),