11from docarray import DocList , BaseDoc
22from docarray .typing import AnyTensor
33from pydantic import create_model
4+ from pydantic .fields import FieldInfo
45from typing import Dict , List , Any , Union , Optional , Type
56from docarray .utils ._internal ._typing import safe_issubclass
67
@@ -36,14 +37,15 @@ class MyDoc(BaseDoc):
3637 """
3738 fields : Dict [str , Any ] = {}
3839 for field_name , field in model .__annotations__ .items ():
40+ field_info = model .__fields__ [field_name ].field_info
3941 try :
4042 if safe_issubclass (field , DocList ):
4143 t : Any = field .doc_type
42- fields [field_name ] = (List [t ], {} )
44+ fields [field_name ] = (List [t ], field_info )
4345 else :
44- fields [field_name ] = (field , {} )
46+ fields [field_name ] = (field , field_info )
4547 except TypeError :
46- fields [field_name ] = (field , {} )
48+ fields [field_name ] = (field , field_info )
4749 return create_model (
4850 model .__name__ , __base__ = model , __validators__ = model .__validators__ , ** fields
4951 )
@@ -222,6 +224,7 @@ class MyDoc(BaseDoc):
222224 if base_doc_name in cached_models :
223225 return cached_models [base_doc_name ]
224226 for field_name , field_schema in schema .get ('properties' , {}).items ():
227+
225228 field_type = _get_field_type_from_schema (
226229 field_schema = field_schema ,
227230 field_name = field_name ,
@@ -230,7 +233,10 @@ class MyDoc(BaseDoc):
230233 is_tensor = False ,
231234 num_recursions = 0 ,
232235 )
233- fields [field_name ] = (field_type , field_schema .get ('description' ))
236+ fields [field_name ] = (
237+ field_type ,
238+ FieldInfo (default = field_schema .pop ('default' , None ), ** field_schema ),
239+ )
234240
235241 model = create_model (base_doc_name , __base__ = BaseDoc , ** fields )
236242 cached_models [base_doc_name ] = model
0 commit comments