Skip to content

Commit f931a86

Browse files
committed
Raise error on more invalid function schemas
Towards #345 ## Summary: Using a `dict` or `Mapping` isn't strict-mode compliant. But we were checking for the literal `True` whereas the value can also be an array, for example. Fix that. ## Test Plan: Unit tests
1 parent f99fa5f commit f931a86

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/agents/strict_schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def _ensure_strict_json_schema(
5454
elif (
5555
typ == "object"
5656
and "additionalProperties" in json_schema
57-
and json_schema["additionalProperties"] is True
57+
and json_schema["additionalProperties"]
5858
):
5959
raise UserError(
6060
"additionalProperties should not be set for object types. This could be because "

tests/test_function_schema.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from collections.abc import Mapping
12
from enum import Enum
23
from typing import Any, Literal
34

@@ -428,3 +429,13 @@ def func(**kwargs: dict[str, int]):
428429
assert properties.get("kwargs").get("type") == "object"
429430
# The values in the dict are integers.
430431
assert properties.get("kwargs").get("additionalProperties").get("type") == "integer"
432+
433+
434+
def test_schema_with_mapping_raises_strict_mode_error():
435+
"""A mapping type is not allowed in strict mode. Same for dicts. Ensure we raise a UserError."""
436+
437+
def func_with_mapping(test_one: Mapping[str, int]) -> str:
438+
return "foo"
439+
440+
with pytest.raises(UserError):
441+
function_schema(func_with_mapping)

0 commit comments

Comments
 (0)