pikamomo's picture
Initial deployment
a60c0af
"""State models used by the deep research workflow."""
import operator
from dataclasses import dataclass, field
from typing import List, Optional
from typing_extensions import Annotated
@dataclass(kw_only=True)
class TodoItem:
"""A single todo task item."""
id: int
title: str
intent: str
query: str
status: str = field(default="pending")
summary: Optional[str] = field(default=None)
sources_summary: Optional[str] = field(default=None)
notices: list[str] = field(default_factory=list)
note_id: Optional[str] = field(default=None)
note_path: Optional[str] = field(default=None)
stream_token: Optional[str] = field(default=None)
@dataclass(kw_only=True)
class SummaryState:
research_topic: str = field(default=None) # Report topic
search_query: str = field(default=None) # Deprecated placeholder
web_research_results: Annotated[list, operator.add] = field(default_factory=list)
sources_gathered: Annotated[list, operator.add] = field(default_factory=list)
research_loop_count: int = field(default=0) # Research loop count
running_summary: str = field(default=None) # Legacy summary field
todo_items: Annotated[list, operator.add] = field(default_factory=list)
structured_report: Optional[str] = field(default=None)
report_note_id: Optional[str] = field(default=None)
report_note_path: Optional[str] = field(default=None)
@dataclass(kw_only=True)
class SummaryStateInput:
research_topic: str = field(default=None) # Report topic
@dataclass(kw_only=True)
class SummaryStateOutput:
running_summary: str = field(default=None) # Backward-compatible text
report_markdown: Optional[str] = field(default=None)
todo_items: List[TodoItem] = field(default_factory=list)