from typing import Any, Dict, List, Literal, NewType, Optional, TypedDict, Union from .type_utils import register_type Text = NewType("Text", str) Number = NewType("Number", Union[float, int]) class Turn(TypedDict): role: Literal["system", "user", "agent"] content: Text class RagResponse(TypedDict): answer: str contexts: List[str] context_ids: Union[List[int], List[str]] is_answerable: bool Dialog = NewType("Dialog", List[Turn]) class Image(TypedDict): image: Any format: str class Document(TypedDict): title: str body: str MultiDocument = NewType("MultiDocument", List[Document]) Video = NewType("Video", List[Image]) class Audio(TypedDict): audio: Any class Table(TypedDict): header: List[str] rows: List[List[Any]] class SQLDatabase(TypedDict): db_id: Optional[str] db_type: Literal["local", "in_memory", "remote"] dbms: Optional[str] data: Optional[Dict[str, Dict]] register_type(Text) register_type(Number) register_type(Turn) register_type(Dialog) register_type(Table) register_type(Audio) register_type(Image) register_type(Video) register_type(Document) register_type(MultiDocument) register_type(RagResponse) register_type(SQLDatabase)