diff --git a/backend/agenteval/intelligent_eval/decision_logs.py b/backend/agenteval/intelligent_eval/decision_logs.py index b6e0c5f..c761552 100644 --- a/backend/agenteval/intelligent_eval/decision_logs.py +++ b/backend/agenteval/intelligent_eval/decision_logs.py @@ -130,6 +130,92 @@ def list_decision_logs(eval_id: str, session: Session) -> list[dict]: return [_log_to_dict(log) for log in logs] +def _supplement_executing( + ev: IntelligentEvalDB, + sessions: list, + completed: int, + estimated: int, + types: set[str], + session: Session, +) -> int: + """Supplement decision logs for EXECUTING evals.""" + added = 0 + if "execute_session" not in types and completed < estimated: + _append_row( + ev.id, + "execute_session", + "平台兜底:时段欠账需执行会话", + "platform", + {"platform_supplemented": True, "completed": completed, "estimated": estimated}, + session, + ) + added += 1 + elif "start_analysis" not in types and sessions and completed >= estimated: + _append_row( + ev.id, + "start_analysis", + "平台兜底:所有会话已完成开始分析", + "platform", + {"platform_supplemented": True, "completed": completed, "estimated": estimated}, + session, + ) + added += 1 + return added + + +def _supplement_completed( + ev: IntelligentEvalDB, + sessions: list, + completed: int, + estimated: int, + plan: dict, + types: set[str], + session: Session, +) -> int: + """Supplement decision logs for COMPLETED evals (historical backfill).""" + added = 0 + if "execute_session" not in types: + slots = plan.get("time_distribution") or [] + if slots: + for slot in slots: + _append_row( + ev.id, + "execute_session", + f"平台兜底:时段{slot.get('time_slot', '')}执行会话(历史回填)", + "platform", + { + "platform_supplemented": True, + "time_slot": slot.get("time_slot"), + "sessions": slot.get("sessions"), + "completed": completed, + "estimated": estimated, + }, + session, + ) + added += 1 + else: + _append_row( + ev.id, + "execute_session", + "平台兜底:执行会话(历史回填)", + "platform", + {"platform_supplemented": True, "completed": completed, "estimated": estimated}, + session, + ) + added += 1 + if "start_analysis" not in types and sessions: + _append_row( + ev.id, + "start_analysis", + "平台兜底:所有会话已完成开始分析(历史回填)", + "platform", + {"platform_supplemented": True, "completed": completed, "estimated": estimated}, + session, + ) + added += 1 + return added + + def supplement_decision_logs(session: Session) -> int: """Platform audit backfill for decision logs. @@ -162,7 +248,9 @@ def supplement_decision_logs(session: Session) -> int: for ev in evals: plan = ev.get_plan() if ev.plan else {} estimated = plan.get("estimated_sessions", 0) - sessions = session.exec(select(IntelligentEvalSessionDB).where(IntelligentEvalSessionDB.eval_id == ev.id)).all() + sessions = session.exec( + select(IntelligentEvalSessionDB).where(IntelligentEvalSessionDB.eval_id == ev.id) + ).all() completed = sum(1 for s in sessions if s.status == "completed") types = { x.decision_type @@ -170,66 +258,10 @@ def supplement_decision_logs(session: Session) -> int: select(IntelligentEvalDecisionLogDB).where(IntelligentEvalDecisionLogDB.eval_id == ev.id) ).all() } + if ev.status == IntelligentEvalStatus.EXECUTING.value: - if "execute_session" not in types and completed < estimated: - _append_row( - ev.id, - "execute_session", - "平台兜底:时段欠账需执行会话", - "platform", - {"platform_supplemented": True, "completed": completed, "estimated": estimated}, - session, - ) - added += 1 - elif "start_analysis" not in types and sessions and completed >= estimated: - _append_row( - ev.id, - "start_analysis", - "平台兜底:所有会话已完成开始分析", - "platform", - {"platform_supplemented": True, "completed": completed, "estimated": estimated}, - session, - ) - added += 1 + added += _supplement_executing(ev, sessions, completed, estimated, types, session) elif ev.status == IntelligentEvalStatus.COMPLETED.value: - # 历史回填:completed 评估决策日志全缺失时,按时段补 execute_session - if "execute_session" not in types: - slots = plan.get("time_distribution") or [] - if slots: - for slot in slots: - _append_row( - ev.id, - "execute_session", - f"平台兜底:时段{slot.get('time_slot', '')}执行会话(历史回填)", - "platform", - { - "platform_supplemented": True, - "time_slot": slot.get("time_slot"), - "sessions": slot.get("sessions"), - "completed": completed, - "estimated": estimated, - }, - session, - ) - added += 1 - else: - _append_row( - ev.id, - "execute_session", - "平台兜底:执行会话(历史回填)", - "platform", - {"platform_supplemented": True, "completed": completed, "estimated": estimated}, - session, - ) - added += 1 - if "start_analysis" not in types and sessions: - _append_row( - ev.id, - "start_analysis", - "平台兜底:所有会话已完成开始分析(历史回填)", - "platform", - {"platform_supplemented": True, "completed": completed, "estimated": estimated}, - session, - ) - added += 1 + added += _supplement_completed(ev, sessions, completed, estimated, plan, types, session) + return added