rag-api-node-1 / src /core /domain /schemas.py
Peterase's picture
feat: implement semantic TL;DR citations and live image support
d8f8038
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