| """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) |
|
|