Skip to content

Commit 9a4b2e6

Browse files
committed
fix: correct default value handling in Field extraction
1 parent 787c0dd commit 9a4b2e6

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

src/strands/tools/decorator.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)