from __future__ import annotations from dataclasses import dataclass, field from typing import Any, Dict, List, Optional from pydantic import BaseModel class ChatRequest(BaseModel): message: Optional[str] = None prompt: Optional[str] = None query: Optional[str] = None text: Optional[str] = None user_message: Optional[str] = None input: Optional[str] = None content: Optional[str] = None tone: Optional[float] = 0.5 verbosity: Optional[float] = 0.5 transparency: Optional[float] = 0.5 help_mode: Optional[str] = None intent: Optional[str] = None category: Optional[str] = None chat_history: Optional[List[Dict[str, Any]]] = None history: Optional[List[Dict[str, Any]]] = None session_state: Optional[Dict[str, Any]] = None question_text: Optional[str] = None options_text: Optional[List[str]] = None question_id: Optional[str] = None session_id: Optional[str] = None user_id: Optional[str] = None class SessionStartRequest(BaseModel): session_id: str user_id: Optional[str] = None condition: Optional[str] = None metadata: Optional[Dict[str, Any]] = None class EventLogRequest(BaseModel): session_id: str event_type: str timestamp: Optional[str] = None payload: Optional[Dict[str, Any]] = None class SessionFinalizeRequest(BaseModel): session_id: str summary: Optional[Dict[str, Any]] = None @dataclass class RetrievedChunk: text: str topic: str = "general" source: str = "local" score: float = 0.0 @dataclass class SolverResult: reply: str = "" domain: str = "fallback" solved: bool = False help_mode: str = "answer" answer_letter: Optional[str] = None answer_value: Optional[str] = None topic: Optional[str] = None used_retrieval: bool = False used_generator: bool = False internal_answer: Optional[str] = None steps: List[str] = field(default_factory=list) teaching_chunks: List[RetrievedChunk] = field(default_factory=list) meta: Dict[str, Any] = field(default_factory=dict) @dataclass class ExplainerResult: understood: bool = False topic: Optional[str] = None asks_for: Optional[str] = None givens: List[str] = field(default_factory=list) constraints: List[str] = field(default_factory=list) relationships: List[str] = field(default_factory=list) needed_concepts: List[str] = field(default_factory=list) trap_notes: List[str] = field(default_factory=list) strategy_hint: Optional[str] = None plain_english: Optional[str] = None