55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
|
|
from pydantic import BaseModel, create_model, Field
|
||
|
|
from instructor import openai_schema
|
||
|
|
|
||
|
|
|
||
|
|
def test_dynamic_model_creation_with_field_description():
|
||
|
|
"""
|
||
|
|
Test that dynamic model creation with Field(description) works correctly.
|
||
|
|
This verifies the example in the documentation at docs/concepts/models.md.
|
||
|
|
"""
|
||
|
|
types = {
|
||
|
|
"string": str,
|
||
|
|
"integer": int,
|
||
|
|
"email": str,
|
||
|
|
}
|
||
|
|
|
||
|
|
mock_cursor = [
|
||
|
|
("name", "string", "The name of the user."),
|
||
|
|
("age", "integer", "The age of the user."),
|
||
|
|
("email", "email", "The email of the user."),
|
||
|
|
]
|
||
|
|
|
||
|
|
DynamicModel = create_model(
|
||
|
|
"User",
|
||
|
|
**{
|
||
|
|
property_name: (types[property_type], Field(description=description))
|
||
|
|
for property_name, property_type, description in mock_cursor
|
||
|
|
},
|
||
|
|
__base__=BaseModel,
|
||
|
|
)
|
||
|
|
|
||
|
|
schema = DynamicModel.model_json_schema()
|
||
|
|
|
||
|
|
assert schema["properties"]["name"]["description"] == "The name of the user."
|
||
|
|
assert schema["properties"]["age"]["description"] == "The age of the user."
|
||
|
|
assert schema["properties"]["email"]["description"] == "The email of the user."
|
||
|
|
|
||
|
|
assert "default" not in schema["properties"]["name"]
|
||
|
|
assert "default" not in schema["properties"]["age"]
|
||
|
|
assert "default" not in schema["properties"]["email"]
|
||
|
|
|
||
|
|
OpenAISchemaModel = openai_schema(DynamicModel)
|
||
|
|
openai_schema_json = OpenAISchemaModel.model_json_schema()
|
||
|
|
|
||
|
|
assert (
|
||
|
|
openai_schema_json["properties"]["name"]["description"]
|
||
|
|
== "The name of the user."
|
||
|
|
)
|
||
|
|
assert (
|
||
|
|
openai_schema_json["properties"]["age"]["description"] == "The age of the user."
|
||
|
|
)
|
||
|
|
assert (
|
||
|
|
openai_schema_json["properties"]["email"]["description"]
|
||
|
|
== "The email of the user."
|
||
|
|
)
|