Spaces:
Running
Running
File size: 2,971 Bytes
60e8c0a 599f4e5 60e8c0a 599f4e5 60e8c0a 599f4e5 60e8c0a 599f4e5 60e8c0a 599f4e5 60e8c0a 599f4e5 60e8c0a 599f4e5 f39a9fa | 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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | """Pydantic schemas untuk request/response."""
from typing import List, Dict, Optional
from pydantic import BaseModel
class TextItem(BaseModel):
id: int
text: str
# === Shared request ===
class TextItemsRequest(BaseModel):
items: List[TextItem]
# === Sentiment ===
class SentimentRequest(BaseModel):
items: List[TextItem]
class SentimentResult(BaseModel):
id: int
sentiment: str
score: float
confidence: float
class SentimentResponse(BaseModel):
results: List[SentimentResult]
model_mode: str
# === Summarize ===
class SummarizeRequest(BaseModel):
text: str
sentences: int = 3
class SummarizeResponse(BaseModel):
summary: str
sentences: List[str]
# === Topics ===
class TopicRequest(BaseModel):
items: List[TextItem]
num_topics: int = 8
class TopicCluster(BaseModel):
topic_id: int
label: str
keywords: List[str]
article_ids: List[int]
size: int
class TopicResponse(BaseModel):
topics: List[TopicCluster]
model_mode: str
# === Similarity ===
class SimilarityRequest(BaseModel):
items: List[TextItem]
threshold: float = 0.3
class SimilarityPair(BaseModel):
id_a: int
id_b: int
score: float
class SimilarityResponse(BaseModel):
pairs: List[SimilarityPair]
# === Emotion ===
class EmotionResult(BaseModel):
id: int
emotions: Dict[str, float]
dominant_emotion: str
dominant_score: float
class EmotionResponse(BaseModel):
results: List[EmotionResult]
# === Framing ===
class FramingResult(BaseModel):
id: int
frames: Dict[str, float]
dominant_frame: str
score: float
class FramingResponse(BaseModel):
results: List[FramingResult]
# === Fake Score ===
class FakeScoreResult(BaseModel):
id: int
score: int
level: str
reasons: List[str]
class FakeScoreResponse(BaseModel):
results: List[FakeScoreResult]
# === Opinion vs Fact ===
class OpinionFactResult(BaseModel):
id: int
classification: str
opinion_pct: int
fact_pct: int
confidence: float
class OpinionFactResponse(BaseModel):
results: List[OpinionFactResult]
# === Keywords ===
class KeywordItem(BaseModel):
keyword: str
score: float
count: int
class KeywordsResult(BaseModel):
id: int
keywords: List[KeywordItem]
class KeywordsResponse(BaseModel):
results: List[KeywordsResult]
# === NER ===
class EntitiesMap(BaseModel):
persons: List[str]
organizations: List[str]
locations: List[str]
class NerResult(BaseModel):
id: int
entities: EntitiesMap
class NerResponse(BaseModel):
results: List[NerResult]
# === Digest ===
class DigestRequest(BaseModel):
items: List[TextItem]
project_name: str = ""
class DigestTopicItem(BaseModel):
topic: str
count: int
class DigestResponse(BaseModel):
summary: str
top_topics: List[DigestTopicItem]
key_titles: List[str]
article_count: int
|