1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| from typing import Any, Dict, Optional, Callable from pydantic import BaseModel, Field, ValidationError, field_validator from jsonschema import validate as js_validate, Draft202012Validator
class ToolSchema(BaseModel): name: str version: str = "v1" input_schema: Dict[str, Any] output_schema: Dict[str, Any]
class CreateOrderArgs(BaseModel): user_id: str sku: str amount: int = Field(ge=1, le=100) currency: str = Field(pattern=r"^(CNY|USD|EUR)$") idempotency_key: Optional[str]
@field_validator("amount", mode="before") @classmethod def coerce_amount(cls, v): if isinstance(v, str): digits = ''.join(ch for ch in v if ch.isdigit()) if digits: return int(digits) return v
create_order_schema = ToolSchema( name="create_order", input_schema=CreateOrderArgs.model_json_schema(), output_schema={ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "required": ["order_id"], "properties": {"order_id": {"type": "string"}}, "additionalProperties": False, }, )
|