File size: 1,142 Bytes
208266a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from pydantic import BaseModel, Field
from typing import Optional

class AnalyzeRequest(BaseModel):
    topic: str = Field(..., min_length=1, max_length=200)
    top_k: int = Field(default=10, ge=1, le=20)

class ArticleResult(BaseModel):
    source: str
    source_bias: str
    source_bias_provenance: Optional[str] = None
    url: str
    title: Optional[str] = None
    description: Optional[str] = None
    publishedAt: Optional[str] = None
    text: str
    text_label: str
    confidence: float
    similarity_score: float
    probabilities: dict

class SourceSummary(BaseModel):
    source_bias: str
    Biased: int
    Not_Biased: int = Field(alias="Not Biased")
    total: int

    class Config:
        populate_by_name = True

class AnalyzeResponse(BaseModel):
    topic: str
    total_articles: int
    results: list[ArticleResult]
    summary: dict[str, SourceSummary]

class IngestRequest(BaseModel):
    topic: str = Field(..., min_length=1, max_length=200)
    page_size: int = Field(default=10, ge=1, le=50)

class IngestResponse(BaseModel):
    topic: str
    articles_fetched: int
    articles_stored: int
    status: str