Spaces:
Running
Running
| """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 | |