Spaces:
Running
Running
File size: 2,617 Bytes
a63c61f d8f8038 a63c61f d8f8038 a63c61f | 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 | from pydantic import BaseModel
from typing import List, Optional, Any
from datetime import datetime
class ChatRequest(BaseModel):
query: str
session_id: Optional[str] = None
top_k: int = 7 # increased from 5 — gives multilingual diversity room
source_filter: Optional[str] = None
language_filter: Optional[str] = None
class SourceDocument(BaseModel):
content: str
metadata: dict
score: float
snippet: Optional[str] = None
image_url: Optional[str] = None
citation_index: Optional[int] = None
class ChatResponse(BaseModel):
answer: str
sources: List[SourceDocument]
follow_up_questions: List[str] = []
session_id: str = "anonymous"
class FeedbackRequest(BaseModel):
session_id: str
message_id: int
rating: int
comment: Optional[str] = None
class SentimentData(BaseModel):
entity: str
avg_sentiment: float
mention_count: int
class TrendData(BaseModel):
topic: str
volume: int
momentum: float
class NewsArticle(BaseModel):
doc_id: str
url: Optional[str] = None
title: Optional[str] = None
content: str
source: Optional[str] = None
published_at: Optional[str] = None
score: Optional[float] = None
metadata: dict = {}
class BrowseResponse(BaseModel):
total_returned: int
articles: List[NewsArticle]
next_offset: Optional[int] = None
class SearchResponse(BaseModel):
results: List[NewsArticle]
class SourceStat(BaseModel):
source: str
article_count: int
avg_sentiment: float
class PipelineStats(BaseModel):
total_articles_in_vector_db: int
total_sentiment_results: int
class ChatSession(BaseModel):
session_id: str
message_count: int
last_active: Optional[datetime] = None
class UserCreate(BaseModel):
username: str
email: str
password: str
full_name: Optional[str] = None
class UserResponse(BaseModel):
id: int
username: str
email: str
full_name: Optional[str] = None
role: str
is_active: bool
created_at: Optional[datetime] = None
class Config:
from_attributes = True
class UserUpdate(BaseModel):
username: Optional[str] = None
full_name: Optional[str] = None
email: Optional[str] = None
class PasswordChange(BaseModel):
current_password: str
new_password: str
class TokenResponse(BaseModel):
access_token: str
refresh_token: str
token_type: str = "bearer"
class RefreshRequest(BaseModel):
refresh_token: str
class AdminUserUpdate(BaseModel):
is_active: Optional[bool] = None
role: Optional[str] = None
|