"""Define domain models for conversation.""" from __future__ import annotations from dataclasses import dataclass, field from typing import Any # Keep module behavior explicit so the backend flow stays easy to audit. @dataclass class AnswerSource: """Represent answer source data.""" doc_id: str doc_name: str chunk_id: str section_title: str page_number: int score: float content: str metadata: dict[str, Any] = field(default_factory=dict) @dataclass class ConversationMessage: """Represent conversation message data.""" role: str content: str timestamp: int sources: list[dict[str, Any]] = field(default_factory=list) @dataclass class ConversationSession: """Represent conversation session data.""" session_id: str messages: list[ConversationMessage] = field(default_factory=list) created_at: int = 0 updated_at: int = 0 metadata: dict[str, Any] = field(default_factory=dict) @dataclass class AnswerResult: """Represent answer result data.""" answer: str sources: list[AnswerSource] = field(default_factory=list) model: str = "" latency_ms: int = 0 retrieved_count: int = 0 context_tokens: int = 0 truncated: bool = False error: str | None = None