"""Shared request models — use these instead of defining inline BaseModels.""" from __future__ import annotations from typing import Optional from pydantic import BaseModel, Field class ScanRequest(BaseModel): """Token or wallet security scan request.""" address: str = Field(..., description="Token or wallet address") chain: str = Field(default="solana", description="Blockchain (solana, ethereum, bsc, etc.)") class WalletRequest(BaseModel): """Wallet analysis request.""" address: str = Field(..., description="Wallet address") chain: str = Field(default="solana") include_history: bool = Field(default=False) include_labels: bool = Field(default=True) class AddressRequest(BaseModel): """Generic address lookup request.""" address: str = Field(..., description="Blockchain address") chain: Optional[str] = Field(default=None) class TokenRequest(BaseModel): """Token info request.""" address: str = Field(..., description="Token contract address") chain: str = Field(default="solana") class SearchRequest(BaseModel): """RAG or general search request.""" query: str = Field(..., description="Search query") top_k: int = Field(default=5, ge=1, le=50) collection: Optional[str] = Field(default=None) min_similarity: float = Field(default=0.0, ge=0.0, le=1.0) class PaginationParams(BaseModel): """Standard pagination parameters.""" page: int = Field(default=1, ge=1) limit: int = Field(default=20, ge=1, le=100) offset: Optional[int] = Field(default=None)