Skip to content

Commit afff798

Browse files
authored
support X | None = None with Gemini (#540)
1 parent 6e06684 commit afff798

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

pydantic_ai_slim/pydantic_ai/models/gemini.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -701,7 +701,7 @@ def simplify(self) -> dict[str, Any]:
701701

702702
def _simplify(self, schema: dict[str, Any], refs_stack: tuple[str, ...]) -> None:
703703
schema.pop('title', None)
704-
schema.pop('default', None)
704+
default = schema.pop('default', _utils.UNSET)
705705
if ref := schema.pop('$ref', None):
706706
# noinspection PyTypeChecker
707707
key = re.sub(r'^#/\$defs/', '', ref)
@@ -714,8 +714,14 @@ def _simplify(self, schema: dict[str, Any], refs_stack: tuple[str, ...]) -> None
714714
return
715715

716716
if any_of := schema.get('anyOf'):
717-
for schema in any_of:
718-
self._simplify(schema, refs_stack)
717+
for item_schema in any_of:
718+
self._simplify(item_schema, refs_stack)
719+
if len(any_of) == 2 and {'type': 'null'} in any_of and default is None:
720+
for item_schema in any_of:
721+
if item_schema != {'type': 'null'}:
722+
schema.clear()
723+
schema.update(item_schema)
724+
return
719725

720726
type_ = schema.get('type')
721727

tests/models/test_gemini.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -261,14 +261,12 @@ class Locations(BaseModel):
261261
parameters={
262262
'properties': {
263263
'op_location': {
264-
'anyOf': [
265-
{
266-
'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}},
267-
'required': ['lat', 'lng'],
268-
'type': 'object',
269-
},
270-
{'type': 'null'},
271-
]
264+
'properties': {
265+
'lat': {'type': 'number'},
266+
'lng': {'type': 'number'},
267+
},
268+
'required': ['lat', 'lng'],
269+
'type': 'object',
272270
}
273271
},
274272
'type': 'object',

0 commit comments

Comments
 (0)