@@ -139,33 +139,28 @@ def _extract_annotated_metadata(
139139 description = meta
140140
141141 # Determine Final Description
142- # Priority: 1. Annotated string, 2. FieldInfo description, 3. Docstring
142+ # Priority: 1. Annotated string, 2. FieldInfo description, 3. Docstring, 4. Fallback
143143 final_description = description
144144
145- # An empty string is a valid description; only fall back if no description was found in the annotation.
146145 if final_description is None :
147146 if field_info and field_info .description :
148147 final_description = field_info .description
149148 else :
150149 final_description = self .param_descriptions .get (param_name )
151150
152- # Final fallback if no description was found anywhere
153151 if final_description is None :
154152 final_description = f"Parameter { param_name } "
155153
156- # Create Final FieldInfo
154+ # Create Final FieldInfo with proper default handling
157155 if field_info :
158- # If a Field was in Annotated, use it as the base
159156 final_field = copy (field_info )
160- else :
161- # Otherwise, create a new default Field
162- final_field = Field ()
163-
164- final_field .description = final_description
157+ final_field .description = final_description
165158
166- # Override default from function signature if present
167- if param_default is not ...:
168- final_field .default = param_default
159+ # Function signature default takes priority
160+ if param_default is not ...:
161+ final_field .default = param_default
162+ else :
163+ final_field = Field (default = param_default , description = final_description )
169164
170165 return actual_type , final_field
171166
0 commit comments