|
|
@@ -50,7 +50,6 @@ from cyber_agent.core.resource_budget import (
|
|
|
ResourceBudgetExceeded,
|
|
|
ResourceBudgetStateError,
|
|
|
)
|
|
|
-from cyber_agent.core.validation import ValidationResult
|
|
|
from cyber_agent.trace.models import Trace, Messages
|
|
|
from cyber_agent.trace.trace_id import generate_sub_trace_id
|
|
|
from cyber_agent.trace.goal_models import GoalTree
|
|
|
@@ -322,43 +321,28 @@ async def _record_pending_task_reports(
|
|
|
child_state = ensure_task_protocol(child_trace.context)
|
|
|
task_brief = child_state.get("task_brief")
|
|
|
report_payload = report.model_dump()
|
|
|
- cached = child_state.get("task_report_validation")
|
|
|
- validation_result = None
|
|
|
- if isinstance(cached, dict) and cached.get("task_report") == report_payload:
|
|
|
- try:
|
|
|
- validation_result = ValidationResult.model_validate(
|
|
|
- cached.get("validation_result")
|
|
|
- )
|
|
|
- if validation_result.evaluated_trace_id != child_trace_id:
|
|
|
- validation_result = None
|
|
|
- except ValidationError:
|
|
|
- validation_result = None
|
|
|
- if validation_result is None:
|
|
|
- if report.outcome in {"satisfied", "partial"}:
|
|
|
- validation_run = await runner.validate_recursive_trace(
|
|
|
- child_trace_id,
|
|
|
- scope="task",
|
|
|
- task_brief=task_brief,
|
|
|
- task_report=report_payload,
|
|
|
- )
|
|
|
- else:
|
|
|
- is_protocol_error = report.outcome == "protocol_error"
|
|
|
- validation_run = await runner.validate_recursive_trace(
|
|
|
- child_trace_id,
|
|
|
- scope="task",
|
|
|
- deterministic_failure={
|
|
|
- "outcome": "error" if is_protocol_error else "failed",
|
|
|
- "reason": report.summary,
|
|
|
- "issues": report.remaining_issues or [report.summary],
|
|
|
- "retry_from": None if is_protocol_error else "task_definition",
|
|
|
- },
|
|
|
- )
|
|
|
- validation_result = validation_run.result
|
|
|
- child_state["task_report_validation"] = {
|
|
|
- "task_report": report_payload,
|
|
|
- "validation_result": validation_result.model_dump(),
|
|
|
- }
|
|
|
- await store.update_trace(child_trace_id, context=child_trace.context)
|
|
|
+ if report.outcome in {"satisfied", "partial"}:
|
|
|
+ validation_run = await runner.validate_recursive_trace(
|
|
|
+ child_trace_id,
|
|
|
+ scope="task",
|
|
|
+ task_brief=task_brief,
|
|
|
+ task_report=report_payload,
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ is_protocol_error = report.outcome == "protocol_error"
|
|
|
+ validation_run = await runner.validate_recursive_trace(
|
|
|
+ child_trace_id,
|
|
|
+ scope="task",
|
|
|
+ task_brief=task_brief,
|
|
|
+ task_report=report_payload,
|
|
|
+ deterministic_failure={
|
|
|
+ "outcome": "error" if is_protocol_error else "failed",
|
|
|
+ "reason": report.summary,
|
|
|
+ "issues": report.remaining_issues or [report.summary],
|
|
|
+ "retry_from": None if is_protocol_error else "task_definition",
|
|
|
+ },
|
|
|
+ )
|
|
|
+ validation_result = validation_run.result
|
|
|
state["pending_reviews"][child_trace_id] = pending_review_entry(
|
|
|
goal_id=goal_id,
|
|
|
report=report,
|