The final report agent has been largely completed.
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
"""
|
||||
Report Engine状态管理模块
|
||||
定义报告生成过程中的简化状态数据结构
|
||||
"""
|
||||
|
||||
from .state import ReportState, ReportMetadata
|
||||
|
||||
__all__ = ["ReportState", "ReportMetadata"]
|
||||
@@ -0,0 +1,138 @@
|
||||
"""
|
||||
Report Engine状态管理
|
||||
定义报告生成过程中的简化状态数据结构
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, Any, Optional
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
@dataclass
|
||||
class ReportMetadata:
|
||||
"""简化的报告元数据"""
|
||||
query: str = "" # 原始查询
|
||||
template_used: str = "" # 使用的模板名称
|
||||
generation_time: float = 0.0 # 生成耗时(秒)
|
||||
timestamp: str = field(default_factory=lambda: datetime.now().isoformat())
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
"""转换为字典格式"""
|
||||
return {
|
||||
"query": self.query,
|
||||
"template_used": self.template_used,
|
||||
"generation_time": self.generation_time,
|
||||
"timestamp": self.timestamp
|
||||
}
|
||||
|
||||
|
||||
@dataclass
|
||||
class ReportState:
|
||||
"""简化的报告状态管理"""
|
||||
# 基本信息
|
||||
task_id: str = "" # 任务ID
|
||||
query: str = "" # 原始查询
|
||||
status: str = "pending" # 状态: pending, processing, completed, failed
|
||||
|
||||
# 输入数据
|
||||
query_engine_report: str = "" # QueryEngine报告
|
||||
media_engine_report: str = "" # MediaEngine报告
|
||||
insight_engine_report: str = "" # InsightEngine报告
|
||||
forum_logs: str = "" # 论坛日志
|
||||
|
||||
# 处理结果
|
||||
selected_template: str = "" # 选择的模板
|
||||
html_content: str = "" # 最终HTML内容
|
||||
|
||||
# 元数据
|
||||
metadata: ReportMetadata = field(default_factory=ReportMetadata)
|
||||
|
||||
def __post_init__(self):
|
||||
"""初始化后处理"""
|
||||
if not self.task_id:
|
||||
self.task_id = f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
|
||||
self.metadata.query = self.query
|
||||
|
||||
def mark_processing(self):
|
||||
"""标记为处理中"""
|
||||
self.status = "processing"
|
||||
|
||||
def mark_completed(self):
|
||||
"""标记为完成"""
|
||||
self.status = "completed"
|
||||
|
||||
def mark_failed(self, error_message: str = ""):
|
||||
"""标记为失败"""
|
||||
self.status = "failed"
|
||||
self.error_message = error_message
|
||||
|
||||
def is_completed(self) -> bool:
|
||||
"""检查是否完成"""
|
||||
return self.status == "completed" and bool(self.html_content)
|
||||
|
||||
def get_progress(self) -> float:
|
||||
"""获取进度百分比"""
|
||||
if self.status == "completed":
|
||||
return 100.0
|
||||
elif self.status == "processing":
|
||||
# 简单的进度计算
|
||||
progress = 0.0
|
||||
if self.selected_template:
|
||||
progress += 30.0
|
||||
if self.html_content:
|
||||
progress += 70.0
|
||||
return progress
|
||||
else:
|
||||
return 0.0
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
"""转换为字典格式"""
|
||||
return {
|
||||
"task_id": self.task_id,
|
||||
"query": self.query,
|
||||
"status": self.status,
|
||||
"progress": self.get_progress(),
|
||||
"selected_template": self.selected_template,
|
||||
"has_html_content": bool(self.html_content),
|
||||
"html_content_length": len(self.html_content) if self.html_content else 0,
|
||||
"metadata": self.metadata.to_dict()
|
||||
}
|
||||
|
||||
def save_to_file(self, file_path: str):
|
||||
"""保存状态到文件"""
|
||||
try:
|
||||
state_data = self.to_dict()
|
||||
# 不保存完整的HTML内容到状态文件(太大)
|
||||
state_data.pop("html_content", None)
|
||||
|
||||
with open(file_path, 'w', encoding='utf-8') as f:
|
||||
json.dump(state_data, f, ensure_ascii=False, indent=2)
|
||||
except Exception as e:
|
||||
print(f"保存状态文件失败: {str(e)}")
|
||||
|
||||
@classmethod
|
||||
def load_from_file(cls, file_path: str) -> Optional["ReportState"]:
|
||||
"""从文件加载状态"""
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
|
||||
# 创建ReportState对象
|
||||
state = cls(
|
||||
task_id=data.get("task_id", ""),
|
||||
query=data.get("query", ""),
|
||||
status=data.get("status", "pending"),
|
||||
selected_template=data.get("selected_template", "")
|
||||
)
|
||||
|
||||
# 设置元数据
|
||||
metadata_data = data.get("metadata", {})
|
||||
state.metadata.template_used = metadata_data.get("template_used", "")
|
||||
state.metadata.generation_time = metadata_data.get("generation_time", 0.0)
|
||||
|
||||
return state
|
||||
|
||||
except Exception as e:
|
||||
print(f"加载状态文件失败: {str(e)}")
|
||||
return None
|
||||
Reference in New Issue
Block a user