langchain-ai/langchain · error · ValueError
Invalid annotation for field {arg}. Third argument to Annota
Error message
Invalid annotation for field {arg}. Third argument to Annotated must be a string description, received value of type {type(field_desc)}. What it means
Error "Invalid annotation for field {arg}. Third argument to Annotated must be a string description, received value of type {type(field_desc)}." thrown in langchain-ai/langchain.
Source
Thrown at libs/core/langchain_core/utils/function_calling.py:298
fields: dict[str, Any] = {}
for arg, arg_type in annotations_.items():
if get_origin(arg_type) in {Annotated, typing_extensions.Annotated}:
annotated_args = get_args(arg_type)
new_arg_type = _convert_any_typed_dicts_to_pydantic(
annotated_args[0], depth=depth + 1, visited=visited
)
field_kwargs = dict(
zip(("default", "description"), annotated_args[1:], strict=False)
)
if (field_desc := field_kwargs.get("description")) and not isinstance(
field_desc, str
):
msg = (
f"Invalid annotation for field {arg}. Third argument to "
f"Annotated must be a string description, received value of "
f"type {type(field_desc)}."
)
raise ValueError(msg)
if arg_desc := arg_descriptions.get(arg):
field_kwargs["description"] = arg_desc
fields[arg] = (new_arg_type, Field_v1(**field_kwargs))
else:
new_arg_type = _convert_any_typed_dicts_to_pydantic(
arg_type, depth=depth + 1, visited=visited
)
field_kwargs = {"default": ...}
if arg_desc := arg_descriptions.get(arg):
field_kwargs["description"] = arg_desc
fields[arg] = (new_arg_type, Field_v1(**field_kwargs))
model = cast(
"type[BaseModelV1]", create_model_v1(typed_dict.__name__, **fields)
)
model.__doc__ = description
visited[typed_dict] = model
return model
if (origin := get_origin(type_)) and (type_args := get_args(type_)):View on GitHub (pinned to e32fa9a52e)
Solutions
- Use Annotated with a string as the third element: Annotated[T, FieldInfo, "description"].
- If you need structured metadata, use pydantic Field(description=...) instead of passing a non-string in Annotated.
Example fix
def f(arg: Annotated[str, Field(...), "the query"]) -> None: ...
When it happens
Trigger: Raised when an Annotated[..., X] argument annotation is used in a tool function where X (the third element) is not a string description, e.g. a number or another type object.
Common situations: See trigger scenarios.
AI-assisted analysis of langchain-ai/langchain@e32fa9a52e (2026-08-14).
Data as JSON: /api/errors/845591b26a559308.
Report an issue: GitHub.