Use this file to discover all available pages before exploring further.
Tool validation ensures data integrity by enforcing schemas before tools execute. Pydantic validators catch invalid input from LLMs, preventing errors and hallucinations from reaching your tool logic.
from pydantic import field_validatorfrom agency_swarm import BaseToolclass User(BaseTool): """Create a user account.""" username: str age: int @field_validator('username') @classmethod def validate_username(cls, value): if ' ' in value: raise ValueError('Username must not contain spaces.') if len(value) < 3: raise ValueError('Username must be at least 3 characters.') return value @field_validator('age') @classmethod def validate_age(cls, value): if value < 0 or value > 120: raise ValueError('Age must be between 0 and 120.') return value def run(self): return f"Created user: {self.username}, age {self.age}"
Model validators validate the entire model, enabling checks across multiple fields. Use @model_validator when field validation depends on other fields.
from pydantic import model_validatorfrom agency_swarm import BaseToolclass CreateAccount(BaseTool): """Create a new account with password.""" username: str password: str confirm_password: str @model_validator(mode='after') def check_passwords_match(self): if self.password != self.confirm_password: raise ValueError('Passwords do not match.') if len(self.password) < 8: raise ValueError('Password must be at least 8 characters.') return self def run(self): return f"Account created: {self.username}"
from datetime import datefrom pydantic import model_validatorfrom agency_swarm import BaseToolclass BookAppointment(BaseTool): """Book an appointment within a date range.""" start_date: date end_date: date reason: str @model_validator(mode='after') def validate_date_range(self): if self.start_date >= self.end_date: raise ValueError('Start date must be before end date.') if self.start_date < date.today(): raise ValueError('Cannot book appointments in the past.') return self def run(self): return f"Appointment booked: {self.start_date} to {self.end_date}"