state_models.py 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. # -*- coding: utf-8 -*-
  2. """
  3. 施工方案编写应用 - 状态定义模块
  4. 定义 LangGraph 工作流使用的状态类和任务信息类
  5. 该模块位于 component 层,为 workflows 层提供状态定义支持
  6. """
  7. from typing import TypedDict, Optional, List, Dict, Any
  8. from datetime import datetime
  9. from langchain_core.messages import BaseMessage, HumanMessage
  10. class OutlineGenerationState(TypedDict):
  11. """
  12. 大纲生成 LangGraph 状态定义
  13. 用于在 LangGraph 工作流节点之间传递状态数据
  14. 注意:所有字段必须是可序列化的(不能包含 ProgressManager 等对象)
  15. Attributes:
  16. # 输入参数
  17. callback_task_id: 任务回调ID
  18. user_id: 用户ID
  19. project_info: 项目基础信息
  20. template_id: 模板ID
  21. generation_chapterenum: 生成章节代码列表
  22. generation_template: 模板结构
  23. similarity_config: 相似推荐配置(可选)
  24. knowledge_config: 知识点配置(可选)
  25. # 中间状态
  26. template: 加载的模板内容
  27. outline_structure: 生成的大纲结构
  28. key_points: 核心要点列表
  29. similar_cases: 相似案例推荐结果
  30. similar_fragments: 相似片段推荐结果
  31. knowledge_bases: 关联的知识点列表
  32. # 流程控制
  33. current_stage: 当前执行阶段
  34. overall_task_status: 整体任务状态
  35. error_message: 错误信息
  36. messages: LangChain 消息列表(用于状态追踪)
  37. # 注意:progress_manager 和 task_info 存储在类实例中,不在状态中
  38. """
  39. # 输入参数
  40. callback_task_id: str
  41. user_id: str
  42. project_info: Dict[str, Any]
  43. template_id: str
  44. generation_chapterenum: List[str]
  45. generation_template: List[Dict[str, Any]]
  46. similarity_config: Optional[Dict[str, Any]]
  47. knowledge_config: Optional[Dict[str, Any]]
  48. # 中间状态
  49. template: Optional[Dict[str, Any]]
  50. outline_structure: Optional[Dict[str, Any]]
  51. key_points: Optional[List[Dict[str, Any]]]
  52. similar_cases: Optional[List[Dict[str, Any]]]
  53. similar_fragments: Optional[List[Dict[str, Any]]]
  54. knowledge_bases: Optional[List[Dict[str, Any]]]
  55. # 流程控制
  56. current_stage: str
  57. overall_task_status: str
  58. error_message: Optional[str]
  59. messages: List[BaseMessage]
  60. class OutlineTaskInfo:
  61. """
  62. 大纲生成任务信息类
  63. 封装大纲生成任务的完整信息,与 outline_views.py 传入的参数保持一致
  64. Attributes:
  65. callback_task_id: 任务回调ID,用于唯一标识任务
  66. user_id: 用户ID
  67. project_info: 项目基础信息字典(包含 project_name, construct_location, engineering_type, selectable)
  68. template_id: 大纲模板ID(对应 generation_template.alias)
  69. generation_chapterenum: 生成章节代码列表
  70. generation_template: 模板结构(对应 generation_template.structure)
  71. similarity_config: 相似推荐配置(包含 topk_plans, topk_fragments, threshold)
  72. knowledge_config: 知识点配置(包含 topk, threshold)
  73. status: 任务状态(pending/processing/completed/failed/cancelled)
  74. start_time: 任务开始时间戳
  75. end_time: 任务结束时间戳
  76. results: 任务执行结果
  77. """
  78. def __init__(
  79. self,
  80. callback_task_id: str,
  81. user_id: str,
  82. project_info: Dict[str, Any],
  83. template_id: str,
  84. generation_chapterenum: List[str],
  85. generation_template: List[Dict[str, Any]],
  86. similarity_config: Optional[Dict[str, Any]] = None,
  87. knowledge_config: Optional[Dict[str, Any]] = None
  88. ):
  89. """
  90. 初始化大纲生成任务信息
  91. Args:
  92. callback_task_id: 任务回调ID
  93. user_id: 用户ID
  94. project_info: 项目基础信息(包含 project_name, construct_location, engineering_type, selectable)
  95. template_id: 模板ID(对应 generation_template.alias)
  96. generation_chapterenum: 生成章节代码列表
  97. generation_template: 模板结构(对应 generation_template.structure)
  98. similarity_config: 相似推荐配置(包含 topk_plans, topk_fragments, threshold)
  99. knowledge_config: 知识点配置(包含 topk, threshold)
  100. """
  101. self.callback_task_id = callback_task_id
  102. self.user_id = user_id
  103. self.project_info = project_info
  104. # 从 project_info 中提取常用字段(便于快速访问)
  105. self.project_name = project_info.get("project_name", "")
  106. self.construct_location = project_info.get("construct_location", "")
  107. self.engineering_type = project_info.get("engineering_type", "")
  108. self.selectable = project_info.get("selectable", "")
  109. # 模板相关
  110. self.template_id = template_id
  111. self.generation_chapterenum = generation_chapterenum
  112. self.generation_template = generation_template
  113. # 配置(使用 outline_views.py 中定义的结构)
  114. self.similarity_config = similarity_config or {
  115. "topk_plans": 3,
  116. "topk_fragments": 10,
  117. "threshold": 0.75
  118. }
  119. self.knowledge_config = knowledge_config or {
  120. "topk": 3,
  121. "threshold": 0.75
  122. }
  123. # 任务状态
  124. self.status = "pending"
  125. self.start_time: Optional[float] = None
  126. self.end_time: Optional[float] = None
  127. self.results: Dict[str, Any] = {}
  128. def start_processing(self):
  129. """标记任务开始处理"""
  130. import time
  131. self.status = "processing"
  132. self.start_time = time.time()
  133. def complete_processing(self, results: Dict[str, Any]):
  134. """
  135. 标记任务完成
  136. Args:
  137. results: 任务执行结果
  138. """
  139. import time
  140. self.status = "completed"
  141. self.end_time = time.time()
  142. self.results = results
  143. def fail_processing(self, error: str):
  144. """
  145. 标记任务失败
  146. Args:
  147. error: 错误信息
  148. """
  149. import time
  150. self.status = "failed"
  151. self.end_time = time.time()
  152. self.results = {"error": error}
  153. def cancel_processing(self):
  154. """标记任务被取消"""
  155. import time
  156. self.status = "cancelled"
  157. self.end_time = time.time()
  158. def __repr__(self) -> str:
  159. return (
  160. f"OutlineTaskInfo("
  161. f"callback_task_id={self.callback_task_id}, "
  162. f"user_id={self.user_id}, "
  163. f"project_name={self.project_name}, "
  164. f"status={self.status}"
  165. f")"
  166. )
  167. def to_dict(self) -> Dict[str, Any]:
  168. """
  169. 转换为字典格式(用于序列化)
  170. Returns:
  171. Dict: 任务信息的字典表示
  172. """
  173. return {
  174. "callback_task_id": self.callback_task_id,
  175. "user_id": self.user_id,
  176. "project_info": self.project_info,
  177. "project_name": self.project_name,
  178. "construct_location": self.construct_location,
  179. "engineering_type": self.engineering_type,
  180. "selectable": self.selectable,
  181. "template_id": self.template_id,
  182. "generation_chapterenum": self.generation_chapterenum,
  183. "generation_template": self.generation_template,
  184. "similarity_config": self.similarity_config,
  185. "knowledge_config": self.knowledge_config,
  186. "status": self.status,
  187. "start_time": self.start_time,
  188. "end_time": self.end_time,
  189. "results": self.results
  190. }
  191. class ContentGenerationState(TypedDict):
  192. """
  193. 内容生成 LangGraph 状态定义
  194. 用于内容补全/续写工作流
  195. Attributes:
  196. task_id: 任务ID
  197. user_id: 用户ID
  198. section_path: 章节路径
  199. current_content: 当前内容
  200. context_window: 上下文窗口大小
  201. completion_mode: 补全模式(continue/expand/rewrite/optimize)
  202. target_length: 目标长度
  203. generated_content: 生成的内容
  204. references: 参考知识点
  205. """
  206. task_id: str
  207. user_id: str
  208. section_path: str
  209. current_content: str
  210. context_window: int
  211. completion_mode: str
  212. target_length: int
  213. generated_content: Optional[str]
  214. references: Optional[List[Dict[str, Any]]]
  215. overall_task_status: str
  216. error_message: Optional[str]
  217. __all__ = [
  218. "OutlineGenerationState",
  219. "OutlineTaskInfo",
  220. "ContentGenerationState"
  221. ]