"""Pydantic request models for API endpoints.""" from typing import Optional, List, Dict, Any from pydantic import BaseModel class LoginReq(BaseModel): username: str; password: str; totp_code: Optional[str] = None class RegisterReq(BaseModel): first_name: str; last_name: str; username: str; email: str; password: str; role: str = "viewer" class TOTPVerify(BaseModel): totp_code: str class ChangePwReq(BaseModel): current_password: str; new_password: str class UserUpdateReq(BaseModel): email: Optional[str] = None; role: Optional[str] = None; is_active: Optional[bool] = None; timezone: Optional[str] = None class ChatMsg(BaseModel): message: str; session_id: Optional[str] = None genai_config_id: Optional[str] = None model_id: Optional[str] = None; oci_config_id: Optional[str] = None genai_region: Optional[str] = None; compartment_id: Optional[str] = None temperature: Optional[float] = None; max_tokens: Optional[int] = None top_p: Optional[float] = None; top_k: Optional[int] = None frequency_penalty: Optional[float] = None; presence_penalty: Optional[float] = None reasoning_effort: Optional[str] = None use_tools: Optional[bool] = True class RunReportReq(BaseModel): config_id: str; regions: Optional[List[str]] = None level: int = 2; obp: bool = False; raw: bool = False; redact_output: bool = False class GenAIConfigReq(BaseModel): name: str = "default" oci_config_id: str; model_id: str; model_ocid: Optional[str] = None compartment_id: str; genai_region: str endpoint: Optional[str] = None serving_type: str = "ON_DEMAND"; dedicated_endpoint_id: Optional[str] = None temperature: float = 1; max_tokens: int = 6000; top_p: float = 0.95 top_k: int = 1; frequency_penalty: float = 0; presence_penalty: float = 0 reasoning_effort: Optional[str] = None is_default: bool = False class IngestDocReq(BaseModel): adb_config_id: str; documents: List[Dict[str, Any]]; table_name: Optional[str] = None class MCPServerReq(BaseModel): name: str; description: Optional[str] = None; server_type: str = "stdio" command: Optional[str] = None; args: Optional[List[str]] = None env_vars: Optional[Dict[str, str]] = None; url: Optional[str] = None module_path: Optional[str] = None; tools: Optional[List[dict]] = None linked_adb_id: Optional[str] = None; is_global: bool = False class ConsultQuery(BaseModel): query: str table_name: str = "" top_k: int = 10 oci_config_id: str = "" class TfPromptReq(BaseModel): message: str genai_config: Optional[dict] = None history: Optional[list] = None session_id: Optional[str] = None class TfWorkspaceReq(BaseModel): session_id: str oci_config_id: str compartment_id: Optional[str] = None name: str = "workspace" tf_code: str