refactor(intelligent-eval): reduce nesting complexity in supplement_decision_logs
Extract helper functions _supplement_executing and _supplement_completed to flatten the nested conditional logic. This improves readability and makes the code easier to test and maintain. Addresses code review finding: supplement_decision_logs nested complexity
This commit is contained in:
parent
da7dd434dd
commit
09ff2ed123
@ -130,47 +130,16 @@ def list_decision_logs(eval_id: str, session: Session) -> list[dict]:
|
||||
return [_log_to_dict(log) for log in logs]
|
||||
|
||||
|
||||
def supplement_decision_logs(session: Session) -> int:
|
||||
"""Platform audit backfill for decision logs.
|
||||
|
||||
方案③的决策日志由 OpenClaw agent 上报(LLM 自主,尽力而为)——异常路径
|
||||
(如卡死恢复后重试)agent 可能跳过上报,导致决策过程页面为空。这里按评估
|
||||
状态推导决策并补录:
|
||||
|
||||
- EXECUTING:欠账(completed < estimated)补 execute_session,所有会话
|
||||
完成后补 start_analysis。
|
||||
- COMPLETED:历史评估/异常路径可能完全没有决策日志,回填 execute_session
|
||||
(按 plan 时段逐条)+ start_analysis,让旧报告也有决策过程可看。
|
||||
|
||||
只补"该类型缺失"的,不重复;且只记录状态,不改变 agent 的实际执行。
|
||||
|
||||
Returns:
|
||||
补录的决策日志条数。
|
||||
"""
|
||||
evals = session.exec(
|
||||
select(IntelligentEvalDB).where(
|
||||
IntelligentEvalDB.status.in_(
|
||||
[
|
||||
IntelligentEvalStatus.EXECUTING.value,
|
||||
IntelligentEvalStatus.COMPLETED.value,
|
||||
]
|
||||
)
|
||||
)
|
||||
).all()
|
||||
|
||||
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
|
||||
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()
|
||||
completed = sum(1 for s in sessions if s.status == "completed")
|
||||
types = {
|
||||
x.decision_type
|
||||
for x in session.exec(
|
||||
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,
|
||||
@ -191,8 +160,20 @@ def supplement_decision_logs(session: Session) -> int:
|
||||
session,
|
||||
)
|
||||
added += 1
|
||||
elif ev.status == IntelligentEvalStatus.COMPLETED.value:
|
||||
# 历史回填:completed 评估决策日志全缺失时,按时段补 execute_session
|
||||
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:
|
||||
@ -233,3 +214,54 @@ def supplement_decision_logs(session: Session) -> int:
|
||||
)
|
||||
added += 1
|
||||
return added
|
||||
|
||||
|
||||
def supplement_decision_logs(session: Session) -> int:
|
||||
"""Platform audit backfill for decision logs.
|
||||
|
||||
方案③的决策日志由 OpenClaw agent 上报(LLM 自主,尽力而为)——异常路径
|
||||
(如卡死恢复后重试)agent 可能跳过上报,导致决策过程页面为空。这里按评估
|
||||
状态推导决策并补录:
|
||||
|
||||
- EXECUTING:欠账(completed < estimated)补 execute_session,所有会话
|
||||
完成后补 start_analysis。
|
||||
- COMPLETED:历史评估/异常路径可能完全没有决策日志,回填 execute_session
|
||||
(按 plan 时段逐条)+ start_analysis,让旧报告也有决策过程可看。
|
||||
|
||||
只补"该类型缺失"的,不重复;且只记录状态,不改变 agent 的实际执行。
|
||||
|
||||
Returns:
|
||||
补录的决策日志条数。
|
||||
"""
|
||||
evals = session.exec(
|
||||
select(IntelligentEvalDB).where(
|
||||
IntelligentEvalDB.status.in_(
|
||||
[
|
||||
IntelligentEvalStatus.EXECUTING.value,
|
||||
IntelligentEvalStatus.COMPLETED.value,
|
||||
]
|
||||
)
|
||||
)
|
||||
).all()
|
||||
|
||||
added = 0
|
||||
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()
|
||||
completed = sum(1 for s in sessions if s.status == "completed")
|
||||
types = {
|
||||
x.decision_type
|
||||
for x in session.exec(
|
||||
select(IntelligentEvalDecisionLogDB).where(IntelligentEvalDecisionLogDB.eval_id == ev.id)
|
||||
).all()
|
||||
}
|
||||
|
||||
if ev.status == IntelligentEvalStatus.EXECUTING.value:
|
||||
added += _supplement_executing(ev, sessions, completed, estimated, types, session)
|
||||
elif ev.status == IntelligentEvalStatus.COMPLETED.value:
|
||||
added += _supplement_completed(ev, sessions, completed, estimated, plan, types, session)
|
||||
|
||||
return added
|
||||
|
||||
Loading…
Reference in New Issue
Block a user