Skip to content

Commit ed2a8ad

Browse files
authored
Enhance require_parameter_descriptions=True Flexibility in @agent.tool and @agent.tool_plain (#1750)
1 parent 475e6c1 commit ed2a8ad

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

pydantic_ai_slim/pydantic_ai/_pydantic.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,15 @@ def function_schema( # noqa: C901
7676
description, field_descriptions = doc_descriptions(function, sig, docstring_format=docstring_format)
7777

7878
if require_parameter_descriptions:
79-
if len(field_descriptions) != len(sig.parameters):
79+
if takes_ctx:
80+
parameters_without_ctx = set(
81+
name for name in sig.parameters if not _is_call_ctx(sig.parameters[name].annotation)
82+
)
83+
missing_params = parameters_without_ctx - set(field_descriptions)
84+
else:
8085
missing_params = set(sig.parameters) - set(field_descriptions)
86+
87+
if missing_params:
8188
errors.append(f'Missing parameter descriptions for {", ".join(missing_params)}')
8289

8390
for index, (name, p) in enumerate(sig.parameters.items()):

tests/test_tools.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,20 @@ def test_enforce_parameter_descriptions() -> None:
831831
assert all(err_part in error_reason for err_part in error_parts)
832832

833833

834+
def test_enforce_parameter_descriptions_noraise() -> None:
835+
async def complete_parameter_descriptions_docstring(ctx: RunContext, foo: int) -> str: # pragma: no cover
836+
"""Describes function ops, but missing ctx description and contains non-existent parameter description.
837+
838+
:param foo: The foo thing.
839+
:param bar: The bar thing.
840+
"""
841+
return f'{foo}'
842+
843+
agent = Agent(FunctionModel(get_json_schema))
844+
845+
agent.tool(require_parameter_descriptions=True)(complete_parameter_descriptions_docstring)
846+
847+
834848
def test_json_schema_required_parameters(set_event_loop: None):
835849
agent = Agent(FunctionModel(get_json_schema))
836850

0 commit comments

Comments
 (0)