fix(hypothesis): catch EmptyCompletionError dentro propose() invece di propagare
Run phase2-5-qwen25-prompt-mut-001 fallito perché qwen-2.5-72b ha emesso empty completion ripetutamente; le 3 retry tenacity in LLMClient.complete si sono esaurite e l'exception è bollata fino a run_phase1, marcando l'intero run come failed (perso ~$0.017 di tier C). Fix: HypothesisAgent.propose() ora cattura EmptyCompletionError nel loop max_attempts trattandola come parse-fail "empty_completion" e ritentando con max_retries+1 tentativi (cumulativo: max_retries tenacity × max_attempts loop esterno, default 3×3 = 9 retry effettive). Se TUTTI i tentativi falliscono con empty, ritorna proposal con strategy=None e parse_error="empty_completion: ...", lasciando l'orchestrator continuare con quel genome marcato come "fitness=0" senza crash totale del run. +2 test: success dopo 1 empty + retry; failure totale dopo 3 empty consecutive. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@ import re
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from ..genome.hypothesis import HypothesisAgentGenome
|
||||
from ..llm.client import CompletionResult, LLMClient
|
||||
from ..llm.client import CompletionResult, EmptyCompletionError, LLMClient
|
||||
from ..protocol.parser import ParseError, Strategy, parse_strategy
|
||||
from ..protocol.validator import ValidationError, validate_strategy
|
||||
|
||||
@@ -274,7 +274,14 @@ class HypothesisAgent:
|
||||
previous_error=errors[-1],
|
||||
)
|
||||
|
||||
completion = self._llm.complete(genome, system=system, user=user)
|
||||
try:
|
||||
completion = self._llm.complete(genome, system=system, user=user)
|
||||
except EmptyCompletionError as e:
|
||||
# LLM esaurito retry tenacity senza una risposta. Tratta come
|
||||
# parse-fail "empty" e ritenta nel loop esterno (max_attempts).
|
||||
errors.append(f"empty_completion: {e}")
|
||||
last_raw = ""
|
||||
continue
|
||||
completions.append(completion)
|
||||
last_raw = completion.text
|
||||
|
||||
|
||||
Reference in New Issue
Block a user