""" Pydantic request/response models for the API. Authentication is not part of the public API. """ from pydantic import BaseModel, Field from typing import List, Optional class AnalyzeRequest(BaseModel): text: str = Field(..., min_length=10, max_length=50000, description="Text to analyze") class BulkAnalyzeRequest(BaseModel): texts: List[str] = Field(..., min_length=1, max_length=20) class SignalScores(BaseModel): p_ai: Optional[float] = Field(None, description="AI-generation probability (ensemble)") s_perp: Optional[float] = Field(None, description="Normalized perplexity score") s_embed_cluster: Optional[float] = Field(None, description="Embedding cluster outlier score") p_ext: Optional[float] = Field(None, description="Extremism/harm probability") s_styl: Optional[float] = Field(None, description="Stylometry anomaly score") p_watermark: Optional[float] = Field(None, description="Watermark detection (negative signal)") class ExplainabilityItem(BaseModel): signal: str value: float weight: float contribution: float description: str class AnalyzeResponse(BaseModel): id: str status: str threat_score: Optional[float] = None signals: Optional[SignalScores] = None explainability: Optional[List[ExplainabilityItem]] = None processing_time_ms: Optional[int] = None class HealthResponse(BaseModel): status: str = "ok" version: str = "1.0.0" class AssistRequest(BaseModel): text: str = Field(..., min_length=10, max_length=50000, description="Text to rewrite/fix") threat_score: Optional[float] = Field(None, ge=0.0, le=1.0, description="Threat score from analysis") class AssistResponse(BaseModel): fixed_text: str request_logs: List[str]