Spaces:
Sleeping
Sleeping
| from typing import Any, Dict, List, Optional, Union | |
| from pydantic import BaseModel, ValidationError | |
| class OrderLookupResult(BaseModel): | |
| order_id: str | |
| customer_name: Optional[str] = None | |
| item: Optional[str] = None | |
| status: Optional[str] = None | |
| amount: Optional[float] = None | |
| delivery_date: Optional[str] = None | |
| notes: Optional[str] = None | |
| error: Optional[str] = None | |
| class RefundResult(BaseModel): | |
| order_id: str | |
| status: str | |
| message: str | |
| refund_timeline: Optional[str] = None | |
| amount: Optional[float] = None | |
| reason: Optional[str] = None | |
| item: Optional[str] = None | |
| error: Optional[str] = None | |
| class TicketResult(BaseModel): | |
| ticket_id: str | |
| issue: str | |
| priority: str | |
| status: str | |
| eta: str | |
| message: str | |
| error: Optional[str] = None | |
| class FAQResult(BaseModel): | |
| query: str | |
| results: List[str] | |
| source: Optional[str] = None | |
| error: Optional[str] = None | |
| _VALIDATORS = { | |
| "order_lookup": OrderLookupResult, | |
| "refund_trigger": RefundResult, | |
| "ticket_create": TicketResult, | |
| "faq_retriever": FAQResult, | |
| } | |
| def validate_tool_output( | |
| tool_name: str, raw_output: Dict[str, Any] | |
| ) -> Union[OrderLookupResult, RefundResult, TicketResult, FAQResult, Dict]: | |
| model = _VALIDATORS.get(tool_name) | |
| if model is None: | |
| return raw_output | |
| try: | |
| return model(**raw_output) | |
| except ValidationError: | |
| return raw_output | |