deepshield-api / backend /db /models.py
vanshpatil16's picture
DeepShield API — 7-detector image deepfake detection
6be0044
Raw
History Blame Contribute Delete
1.8 kB
"""MongoDB document models."""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field
from backend.core.schema import EnsembleResult, DetectionResult, Verdict
class AnalysisHistoryDocument(BaseModel):
"""Document for storing analysis history in MongoDB."""
id: Optional[str] = Field(default=None, alias="_id")
filename: str
verdict: Verdict
p_fake: float
confidence: float
primary_evidence: str
supporting_evidence: list[str]
uncertainty_factors: list[str]
detector_results: list[DetectionResult]
processing_time_ms: float
fusion_details: dict
created_at: datetime = Field(default_factory=datetime.utcnow)
class Config:
# Allow both id and _id
populate_by_name = True
@classmethod
def from_ensemble_result(
cls,
filename: str,
result: EnsembleResult,
) -> "AnalysisHistoryDocument":
"""Create from EnsembleResult."""
return cls(
filename=filename,
verdict=result.verdict,
p_fake=result.p_fake,
confidence=result.confidence,
primary_evidence=result.primary_evidence,
supporting_evidence=result.supporting_evidence,
uncertainty_factors=result.uncertainty_factors,
detector_results=result.detector_results,
processing_time_ms=result.processing_time_ms,
fusion_details=result.fusion_details,
)
class AnalysisHistoryResponse(BaseModel):
"""Response model for history queries."""
id: str = Field(alias="_id")
filename: str
verdict: Verdict
p_fake: float
confidence: float
processing_time_ms: float
created_at: datetime
class Config:
populate_by_name = True