models.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. """State models used by the deep research workflow."""
  2. import operator
  3. from dataclasses import dataclass, field
  4. from typing import List, Optional
  5. from typing_extensions import Annotated
  6. @dataclass(kw_only=True)
  7. class TodoItem:
  8. """单个待办任务项。"""
  9. id: int
  10. title: str
  11. intent: str
  12. query: str
  13. status: str = field(default="pending")
  14. summary: Optional[str] = field(default=None)
  15. sources_summary: Optional[str] = field(default=None)
  16. notices: list[str] = field(default_factory=list)
  17. note_id: Optional[str] = field(default=None)
  18. note_path: Optional[str] = field(default=None)
  19. stream_token: Optional[str] = field(default=None)
  20. @dataclass(kw_only=True)
  21. class SummaryState:
  22. research_topic: str = field(default=None) # Report topic
  23. search_query: str = field(default=None) # Deprecated placeholder
  24. web_research_results: Annotated[list, operator.add] = field(default_factory=list)
  25. sources_gathered: Annotated[list, operator.add] = field(default_factory=list)
  26. research_loop_count: int = field(default=0) # Research loop count
  27. running_summary: str = field(default=None) # Legacy summary field
  28. todo_items: Annotated[list, operator.add] = field(default_factory=list)
  29. structured_report: Optional[str] = field(default=None)
  30. report_note_id: Optional[str] = field(default=None)
  31. report_note_path: Optional[str] = field(default=None)
  32. @dataclass(kw_only=True)
  33. class SummaryStateInput:
  34. research_topic: str = field(default=None) # Report topic
  35. @dataclass(kw_only=True)
  36. class SummaryStateOutput:
  37. running_summary: str = field(default=None) # Backward-compatible文本
  38. report_markdown: Optional[str] = field(default=None)
  39. todo_items: List[TodoItem] = field(default_factory=list)