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]