@@ -495,7 +495,9 @@ class NoDefaultSentinel:
495
495
pass
496
496
497
497
498
- def validate_field_default (field_name : str , invocation_type : str , annotation : Any , field_info : FieldInfo ) -> None :
498
+ def validate_field_default (
499
+ cls_name : str , field_name : str , invocation_type : str , annotation : Any , field_info : FieldInfo
500
+ ) -> None :
499
501
"""Validates the default value of a field against its pydantic field definition."""
500
502
501
503
assert isinstance (field_info .json_schema_extra , dict ), "json_schema_extra is not a dict"
@@ -507,13 +509,15 @@ def validate_field_default(field_name: str, invocation_type: str, annotation: An
507
509
if orig_default is NoDefaultSentinel :
508
510
return
509
511
510
- TempDefaultValidator = create_model ("TempDefaultValidator" , field_to_validate = (annotation , field_info ))
512
+ TempDefaultValidator = create_model (cls_name , ** { field_name : (annotation , field_info )} )
511
513
512
514
# Validate the default value against the annotation
513
515
try :
514
- TempDefaultValidator ( field_to_validate = orig_default )
516
+ TempDefaultValidator . model_validate ({ field_name : orig_default } )
515
517
except Exception as e :
516
- raise ValueError (f"Default value for field { field_name } on invocation { invocation_type } is invalid, { e } " ) from e
518
+ raise InvalidFieldError (
519
+ f'Default value for field "{ field_name } " on invocation "{ invocation_type } " is invalid, { e } '
520
+ ) from e
517
521
518
522
519
523
def is_optional (annotation : Any ) -> bool :
@@ -571,7 +575,7 @@ def wrapper(cls: Type[TBaseInvocation]) -> Type[TBaseInvocation]:
571
575
f"{ field_name } on invocation { invocation_type } has a non-dict json_schema_extra, did you forget to use InputField?"
572
576
)
573
577
574
- validate_field_default (field_name , invocation_type , annotation , field_info )
578
+ validate_field_default (cls . __name__ , field_name , invocation_type , annotation , field_info )
575
579
576
580
if field_info .default is None and not is_optional (annotation ):
577
581
annotation = annotation | None
0 commit comments