from pydantic import BaseModel from typing import Optional, Dict, List, Any from datetime import datetime # Request Models class AnalyzeTextRequest(BaseModel): """Request model for analyzing raw text""" text: str user_id: Optional[str] = None filename: Optional[str] = "untitled.txt" class GetResultRequest(BaseModel): """Request model for getting a specific result""" result_id: int class DeleteResultRequest(BaseModel): """Request model for deleting a result""" result_id: int class UpdateResultRequest(BaseModel): """Request model for updating a result""" result_id: int notes: Optional[str] = None is_flagged: Optional[bool] = None # Response Models class DetectorResultResponse(BaseModel): """Response model for single detector result""" detector_name: str score: float confidence: Optional[str] = None explanation: Optional[str] = None suspicious_spans: List[Dict[str, Any]] = [] metadata: Dict[str, Any] = {} class AnalysisResponse(BaseModel): """Response model for analysis result""" status: str # success, error message: str result_id: Optional[int] = None file_id: Optional[str] = None overall_ai_score: Optional[float] = None overall_ai_score_percentage: Optional[str] = None overall_confidence: Optional[str] = None status_label: Optional[str] = None detector_results: Optional[Dict[str, DetectorResultResponse]] = None enabled_detectors: Optional[List[str]] = None text_stats: Optional[Dict[str, Any]] = None error_details: Optional[str] = None class ResultListResponse(BaseModel): """Response model for list of results""" status: str message: str total_count: int results: List[Dict[str, Any]] = [] page: int = 1 page_size: int = 10 class SummaryResponse(BaseModel): """Response model for summary statistics""" status: str message: str summary: Dict[str, Any] = {} class StatusResponse(BaseModel): """Response model for system status""" status: str message: str detector_status: Dict[str, Any] = {} config_summary: Optional[str] = None