This commit is contained in:
Shengbo Ma 2025-04-22 15:27:01 -07:00
parent 0c752c6b81
commit 360daf74e9
2 changed files with 56 additions and 1 deletions

View File

@ -788,7 +788,7 @@ def _recursive_set_additional_properties_false(
schema["additionalProperties"] = False
# Recursively check 'properties' and 'items' if they exist
if 'anyOf' in schema:
if "anyOf" in schema:
for sub_schema in schema["anyOf"]:
_recursive_set_additional_properties_false(sub_schema)
if "properties" in schema:

View File

@ -497,6 +497,61 @@ def test_convert_to_openai_function_nested_strict() -> None:
assert actual == expected
def test_convert_to_openai_function_strict_union_type() -> None:
class NestedA(BaseModel):
foo: str
class NestedB(BaseModel):
bar: int
class NestedC(BaseModel):
baz: bool
def my_function(my_arg: Union[NestedA, NestedB, NestedC]) -> None:
"""Dummy function."""
expected = {
"name": "my_function",
"description": "Dummy function.",
"parameters": {
"properties": {
"my_arg": {
"anyOf": [
{
"properties": {"foo": {"title": "Foo", "type": "string"}},
"required": ["foo"],
"title": "NestedA",
"type": "object",
"additionalProperties": False,
},
{
"properties": {"bar": {"title": "Bar", "type": "integer"}},
"required": ["bar"],
"title": "NestedB",
"type": "object",
"additionalProperties": False,
},
{
"properties": {"baz": {"title": "Baz", "type": "boolean"}},
"required": ["baz"],
"title": "NestedC",
"type": "object",
"additionalProperties": False,
},
]
}
},
"required": ["my_arg"],
"type": "object",
"additionalProperties": False,
},
"strict": True,
}
actual = convert_to_openai_function(my_function, strict=True)
assert actual == expected, str(actual)
json_schema_no_description_no_params = {
"title": "dummy_function",
}