Skip to content

Commit fd1f1e4

Browse files
committed
Improve error handling in plan approval logic
Added try/except blocks to handle errors during plan approval processing in both router.py and human_approval_manager.py. Updated plan assignment logic to avoid direct dictionary mutation and improved logging for error cases.
1 parent e3209a7 commit fd1f1e4

File tree

2 files changed

+57
-36
lines changed

2 files changed

+57
-36
lines changed

src/backend/v3/api/router.py

Lines changed: 51 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -358,41 +358,57 @@ async def plan_approval(
358358
status_code=401, detail="Missing or invalid user information"
359359
)
360360
# Set the approval in the orchestration config
361-
if user_id and human_feedback.m_plan_id:
362-
if (
363-
orchestration_config
364-
and human_feedback.m_plan_id in orchestration_config.approvals
365-
):
366-
orchestration_config.approvals[human_feedback.m_plan_id] = (
367-
human_feedback.approved
368-
)
369-
orchestration_config.plans[human_feedback.m_plan_id][
370-
"plan_id"
371-
] = human_feedback.plan_id
372-
print("Plan approval received:", human_feedback)
373-
print(
374-
"Updated orchestration config:",
375-
orchestration_config.plans[human_feedback.m_plan_id],
376-
)
377-
track_event_if_configured(
378-
"PlanApprovalReceived",
379-
{
380-
"plan_id": human_feedback.plan_id,
381-
"m_plan_id": human_feedback.m_plan_id,
382-
"approved": human_feedback.approved,
383-
"user_id": user_id,
384-
"feedback": human_feedback.feedback,
385-
},
386-
)
387-
return {"status": "approval recorded"}
388-
else:
389-
logging.warning(
390-
f"No orchestration or plan found for plan_id: {human_feedback.m_plan_id}"
391-
)
392-
raise HTTPException(
393-
status_code=404, detail="No active plan found for approval"
394-
)
395-
361+
try:
362+
if user_id and human_feedback.m_plan_id:
363+
if (
364+
orchestration_config
365+
and human_feedback.m_plan_id in orchestration_config.approvals
366+
):
367+
orchestration_config.approvals[human_feedback.m_plan_id] = (
368+
human_feedback.approved
369+
)
370+
# orchestration_config.plans[human_feedback.m_plan_id][
371+
# "plan_id"
372+
# ] = human_feedback.plan_id
373+
print("Plan approval received:", human_feedback)
374+
# print(
375+
# "Updated orchestration config:",
376+
# orchestration_config.plans[human_feedback.m_plan_id],
377+
# )
378+
try:
379+
plan = orchestration_config.plans[human_feedback.m_plan_id]
380+
if hasattr(plan, 'plan_id'):
381+
print(
382+
"Updated orchestration config:",
383+
orchestration_config.plans[human_feedback.m_plan_id],
384+
)
385+
plan.plan_id = human_feedback.plan_id
386+
orchestration_config.plans[human_feedback.m_plan_id] = plan
387+
except Exception as e:
388+
print(f"Error processing plan approval: {e}")
389+
track_event_if_configured(
390+
"PlanApprovalReceived",
391+
{
392+
"plan_id": human_feedback.plan_id,
393+
"m_plan_id": human_feedback.m_plan_id,
394+
"approved": human_feedback.approved,
395+
"user_id": user_id,
396+
"feedback": human_feedback.feedback,
397+
},
398+
)
399+
return {"status": "approval recorded"}
400+
else:
401+
logging.warning(
402+
f"No orchestration or plan found for plan_id: {human_feedback.m_plan_id}"
403+
)
404+
raise HTTPException(
405+
status_code=404, detail="No active plan found for approval"
406+
)
407+
except Exception as e:
408+
logging.error(f"Error processing plan approval: {e}")
409+
raise HTTPException(
410+
status_code=500, detail="Internal server error"
411+
)
396412

397413
@app_v3.post("/user_clarification")
398414
async def user_clarification(

src/backend/v3/orchestration/human_approval_manager.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,12 @@ async def plan(self, magentic_context: MagenticContext) -> Any:
7979
"participant_descriptions": magentic_context.participant_descriptions
8080
} if hasattr(magentic_context, 'participant_descriptions') else {}
8181
)
82-
82+
try:
83+
orchestration_config.plans[self.magentic_plan.id] = self.magentic_plan
84+
except Exception as e:
85+
print(f"Error processing plan approval: {e}")
86+
87+
8388
# Send the approval request to the user's WebSocket
8489
# The user_id will be automatically retrieved from context
8590
await connection_config.send_status_update_async({

0 commit comments

Comments
 (0)