from typing import Literal from langchain.tools import tool from pydantic import BaseModel, Field class TicketSummaryInput(BaseModel): """Input fields for a support-ticket summary.""" title: str = Field(description="Short title from the support queue") priority: Literal["low", "normal", "high"] = Field( default="normal", description="Escalation priority for the routing summary", ) requester: str = Field(description="Name or team that opened the ticket") @tool( "summarize_ticket", args_schema=TicketSummaryInput, description="Create a routing summary for a support ticket.", ) def summarize_ticket( title: str, requester: str, priority: str = "normal", ) -> str: return f"[{priority}] {title} - requester: {requester}" schema = summarize_ticket.tool_call_schema.model_json_schema() print(f"Tool name: {summarize_ticket.name}") print(f"Required inputs: {', '.join(schema['required'])}") print( "Priority choices: " + ", ".join(schema["properties"]["priority"]["enum"]) ) result = summarize_ticket.invoke( { "title": "Database backup failed", "priority": "high", "requester": "Platform Operations", } ) print(f"Tool result: {result}")