| from pydantic import BaseModel, Field | |
| from typing import Optional | |
| from .user_settings import ApiKeyItem | |
| class ChatQueryRequest(BaseModel): | |
| """Request model for chat queries.""" | |
| query: str = Field(..., description="The user's question or query") | |
| paper_id: str = Field(..., description="The paper ID to query against") | |
| session_id: int = Field( | |
| ..., description="The session/thread ID for conversation history" | |
| ) | |
| model_name: str = Field(default="gpt-4o-mini", description="The LLM model to use") | |
| temperature: float = Field( | |
| default=0.7, ge=0.0, le=2.0, description="Model temperature" | |
| ) | |
| max_tokens: int = Field( | |
| default=2048, ge=1, le=8192, description="Maximum tokens to generate" | |
| ) | |
| top_k: int = Field( | |
| default=5, ge=1, le=20, description="Number of documents to retrieve" | |
| ) | |
| use_web_search: bool = Field(default=False, description="Whether to use web search") | |
| web_search_topic: str = Field(default="general", description="Topic for web search") | |
| api_keys_encrypted: Optional[list[ApiKeyItem]] = Field( | |
| None, description="List of encrypted API keys from user settings" | |
| ) | |
| class ChatQueryResponse(BaseModel): | |
| """Response model for chat queries.""" | |
| session_id: int | |
| query: str | |
| response: str | |
| model_used: str | |
| tokens_used: Optional[dict] = None | |
| class Config: | |
| from_attributes = True | |