diff --git a/libs/partners/anthropic/langchain_anthropic/chat_models.py b/libs/partners/anthropic/langchain_anthropic/chat_models.py index 5ca29c20bce..f872fe32c18 100644 --- a/libs/partners/anthropic/langchain_anthropic/chat_models.py +++ b/libs/partners/anthropic/langchain_anthropic/chat_models.py @@ -82,8 +82,8 @@ class AnthropicTool(TypedDict): """Anthropic tool definition.""" name: str - description: str input_schema: dict[str, Any] + description: NotRequired[str] cache_control: NotRequired[dict[str, str]] @@ -1675,9 +1675,10 @@ def convert_to_anthropic_tool( oai_formatted = convert_to_openai_tool(tool)["function"] anthropic_formatted = AnthropicTool( name=oai_formatted["name"], - description=oai_formatted["description"], input_schema=oai_formatted["parameters"], ) + if "description" in oai_formatted: + anthropic_formatted["description"] = oai_formatted["description"] return anthropic_formatted diff --git a/libs/partners/anthropic/tests/unit_tests/test_chat_models.py b/libs/partners/anthropic/tests/unit_tests/test_chat_models.py index f9225296096..008b2be1cb6 100644 --- a/libs/partners/anthropic/tests/unit_tests/test_chat_models.py +++ b/libs/partners/anthropic/tests/unit_tests/test_chat_models.py @@ -931,3 +931,12 @@ def test_anthropic_bind_tools_tool_choice() -> None: assert cast(RunnableBinding, chat_model_with_tools).kwargs["tool_choice"] == { "type": "any" } + + +def test_optional_description() -> None: + llm = ChatAnthropic(model="claude-3-5-haiku-latest") + + class SampleModel(BaseModel): + sample_field: str + + _ = llm.with_structured_output(SampleModel.model_json_schema())