pikamomo's picture
Initial deployment
a60c0af
Raw History Blame Contribute Delete
1.78 kB
"""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)