File size: 1,766 Bytes
2f073d3 76964f5 2f073d3 cdddc93 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | """
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]
|