-
Notifications
You must be signed in to change notification settings - Fork 156
Description
Python -VV
Python 3.13.11 (main, Dec 5 2025, 21:16:49) [Clang 21.1.4 ]Pip freeze
annotated-types==0.7.0
anyio==4.12.0
certifi==2025.11.12
charset-normalizer==3.4.4
eval-type-backport==0.3.1
googleapis-common-protos==1.72.0
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
idna==3.11
importlib-metadata==8.7.1
invoke==2.2.1
mistralai==1.10.0
opentelemetry-api==1.38.0
opentelemetry-exporter-otlp-proto-common==1.38.0
opentelemetry-exporter-otlp-proto-http==1.38.0
opentelemetry-proto==1.38.0
opentelemetry-sdk==1.38.0
opentelemetry-semantic-conventions==0.59b0
protobuf==6.33.2
pydantic==2.12.5
pydantic-core==2.41.5
python-dateutil==2.9.0.post0
pyyaml==6.0.3
requests==2.32.5
six==1.17.0
typing-extensions==4.15.0
typing-inspection==0.4.2
urllib3==2.6.2
zipp==3.23.0
Reproduction Steps
1 This works
from mistralai.extra import response_format_from_pydantic_model
from pydantic import BaseModel, Field
class MyModel(BaseModel):
some_list: list[int] = Field(
default_factory=list,
description="A list of strings",
# min_length=1
)
print(response_format_from_pydantic_model(MyModel))output
type='json_schema' json_schema=JSONSchema(name='MyModel', schema_definition={'properties': {'some_list': {'description': 'A list of strings', 'items': {'type': 'integer'}, 'title': 'Some List', 'type': 'array'}}, 'title': 'MyModel', 'type': 'object', 'additionalProperties': False}, description=Unset(), strict=True)- This does not
from mistralai.extra import response_format_from_pydantic_model
from pydantic import BaseModel, Field
class MyModel(BaseModel):
some_list: list[int] = Field(
default_factory=list,
description="A list of strings",
min_length=1
)
print(response_format_from_pydantic_model(MyModel))exiting with error
Traceback (most recent call last):
File ".../try.py", line 11, in <module>
print(response_format_from_pydantic_model(MyModel))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File ".../.venv/lib/python3.13/site-packages/mistralai/extra/utils/response_format.py", line 13, in response_format_from_pydantic_model
model_schema = rec_strict_json_schema(model.model_json_schema())
File ".../.venv/lib/python3.13/site-packages/mistralai/extra/utils/_pydantic_helper.py", line 15, in rec_strict_json_schema
schema_node[key] = rec_strict_json_schema(value)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "...venv/lib/python3.13/site-packages/mistralai/extra/utils/_pydantic_helper.py", line 15, in rec_strict_json_schema
schema_node[key] = rec_strict_json_schema(value)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "....venv/lib/python3.13/site-packages/mistralai/extra/utils/_pydantic_helper.py", line 15, in rec_strict_json_schema
schema_node[key] = rec_strict_json_schema(value)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File ".../.venv/lib/python3.13/site-packages/mistralai/extra/utils/_pydantic_helper.py", line 20, in rec_strict_json_schema
raise ValueError(f"Unexpected type: {schema_node}")
ValueError: Unexpected type: 1Expected Behavior
output
type='json_schema' json_schema=JSONSchema(name='MyModel', schema_definition={'properties': {'some_list': {'description': 'A list of strings', 'items': {'type': 'integer'}, 'minItems': 1, 'title': 'Some List', 'type': 'array'}}, 'title': 'MyModel', 'type': 'object', 'additionalProperties': False}, description=Unset(), strict=True)
Additional Context
No response
Suggested Solutions
The problems is in ./mistralai/extra/utils/_pydantic_helper.py in rec_strict_json_schema, which recursively sets additionalProperties to false.
my suggested fix in line 9
- if isinstance(schema_node, (str, bool)) or schema_node is None:
+ if isinstance(schema_node, (str, bool, int)) or schema_node is None:
This works for me. You may also considering adding other immutables here like float, Unicode, although I haven't tested it.
Metadata
Metadata
Assignees
Labels
No labels