Spaces:
Sleeping
Sleeping
Fix revision loop exit: change > 3 to >= 3, handle ESCALATE
Browse filesBug: Loop didn't exit after 3 revisions because:
1. revision_count > 3 was False when count = 3
2. ESCALATE status wasn't checked in should_continue
Fix:
- Change revision_count > 3 to >= 3
- Add check for critique_details.status == "ESCALATE"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- src/utils/conditions.py +10 -4
src/utils/conditions.py
CHANGED
|
@@ -10,10 +10,11 @@ def should_continue(state) -> Literal["exit", "retry"]:
|
|
| 10 |
- Error set (LLM providers failed - abort immediately)
|
| 11 |
- Analyzer revision skipped (LLM failed but using fallback draft - exit gracefully)
|
| 12 |
- Score >= 6 (good quality)
|
| 13 |
-
- Revision count > 3 (max attempts reached)
|
|
|
|
| 14 |
|
| 15 |
Continue conditions:
|
| 16 |
-
- No error AND No revision skip AND Score < 6 AND Revisions <
|
| 17 |
"""
|
| 18 |
# Abort immediately if error is set (critical failure)
|
| 19 |
if state.get("error"):
|
|
@@ -23,11 +24,16 @@ def should_continue(state) -> Literal["exit", "retry"]:
|
|
| 23 |
if state.get("analyzer_revision_skipped"):
|
| 24 |
return "exit"
|
| 25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
current_score = state.get("score", 0)
|
| 27 |
revision_count = state.get("revision_count", 0)
|
| 28 |
|
| 29 |
-
# Exit if quality is good enough or max revisions
|
| 30 |
-
if current_score >= 6 or revision_count > 3:
|
| 31 |
return "exit"
|
| 32 |
|
| 33 |
# Continue the loop for improvement
|
|
|
|
| 10 |
- Error set (LLM providers failed - abort immediately)
|
| 11 |
- Analyzer revision skipped (LLM failed but using fallback draft - exit gracefully)
|
| 12 |
- Score >= 6 (good quality)
|
| 13 |
+
- Revision count >= 3 (max attempts reached)
|
| 14 |
+
- Status is ESCALATE (critic escalated for human review)
|
| 15 |
|
| 16 |
Continue conditions:
|
| 17 |
+
- No error AND No revision skip AND Score < 6 AND Revisions < 3
|
| 18 |
"""
|
| 19 |
# Abort immediately if error is set (critical failure)
|
| 20 |
if state.get("error"):
|
|
|
|
| 24 |
if state.get("analyzer_revision_skipped"):
|
| 25 |
return "exit"
|
| 26 |
|
| 27 |
+
# Exit if critic escalated (max iterations reached)
|
| 28 |
+
critique_details = state.get("critique_details", {})
|
| 29 |
+
if critique_details.get("status") == "ESCALATE":
|
| 30 |
+
return "exit"
|
| 31 |
+
|
| 32 |
current_score = state.get("score", 0)
|
| 33 |
revision_count = state.get("revision_count", 0)
|
| 34 |
|
| 35 |
+
# Exit if quality is good enough or max revisions reached
|
| 36 |
+
if current_score >= 6 or revision_count >= 3:
|
| 37 |
return "exit"
|
| 38 |
|
| 39 |
# Continue the loop for improvement
|