from typing import List
from pydantic import BaseModel, Field
from polos import Agent, PolosClient
class Address(BaseModel):
street: str = Field(description="Street address", default="")
city: str = Field(description="City", default="")
country: str = Field(description="Country", default="")
postal_code: Optional[str] = Field(description="Postal code", default=None)
class PhoneNumber(BaseModel):
type: str = Field(description="Type of phone number (can be mobile, work, home)", default="")
number: str = Field(description="Phone number", default="")
class Contact(BaseModel):
name: str
email: str
phones: List[PhoneNumber] = []
address: Optional[Address] = None
notes: str = ""
contact_extractor = Agent(
id="contact-extractor",
provider="anthropic",
model="claude-sonnet-4-5",
system_prompt="Extract contact information from text.",
output_schema=Contact
)
client = PolosClient()
response = await contact_extractor.run(
client,
"""
John Doe
Email: [email protected]
Mobile: +1-555-0123
Work: +1-555-0199
Address: 123 Main St, New York, NY 10001
"""
)
contact = response.result
print(f"Name: {contact.name}")
for phone in contact.phones:
print(f" {phone.type}: {phone.number}")
print(f"Address: {contact.address}")