generated from amazon-archives/__template_Apache-2.0
-
Notifications
You must be signed in to change notification settings - Fork 478
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Checks
- I have updated to the lastest minor and patch version of Strands
- I have checked the documentation and this is not expected behavior
- I have searched ./issues and there are no duplicates of my issue
Strands Version
0.1.9
Python Version
3.12.10
Operating System
macOS Sequoia 15.5
Installation Method
pip
Steps to Reproduce
Run this python script:
from typing import List, Optional
from pydantic import BaseModel, Field
from strands import Agent
from strands.tools import convert_pydantic_to_tool_spec
class Address(BaseModel):
street: str
city: str
country: str
postal_code: Optional[str] = None
class Contact(BaseModel):
email: Optional[str] = None
phone: Optional[str] = None
class Person(BaseModel):
"""Complete person information."""
name: str = Field(description="Full name of the person")
age: int = Field(description="Age in years")
address: Address = Field(description="Home address")
contacts: Optional[List[Contact]] = Field(description="Contact methods")
skills: List[str] = Field(default_factory=list, description="Professional skills")
if __name__ == '__main__':
print(convert_pydantic_to_tool_spec(Person)) # shows the buggy json
# in the json:
# 'contacts': {'items': {'$ref': '#/$defs/Contact'}
agent = Agent()
result = agent.structured_output(
Person,
"Extract info: Jane Doe, a systems admin, 28, lives at 123 Main St, New York, NY"
) # throws an exception, won't get to the print statements below
print(result.name) # "Jane Doe"
print(result.address.city) # "New York"
if result.contacts is not None and result.contacts[0] is not None:
print(result.contacts[0].email) # "[email protected]"
else:
print("contact is None")
print(result.skills) # ["systems admin"]
The printed json tool spec includes an unresolved $ref, and this causes a ValidationException when calling the ConverseStream operation, saying the JSON schema is invalid
Expected Behavior
convert_pydantic_to_tool_spec() should properly resolve the $ref in a field with type Optional[List[BaseModel]]
Actual Behavior
convert_pydantic_to_tool_spec() currently leaves a $ref field when the field has a type Optional[List[BaseModel]], shown in script to reproduce the bug as Optional[List[Contact]]
Additional Context
No response
Possible Solution
No response
Related Issues
No response
theagenticguy
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working