mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-28 16:07:46 +00:00
31 lines
1.4 KiB
Python
31 lines
1.4 KiB
Python
from rdagent.components.coder.CoSTEER.evolvable_subjects import EvolvingItem
|
|
from rdagent.core.evolving_agent import RAGEvoAgent
|
|
from rdagent.core.evolving_framework import EvolvableSubjects
|
|
from rdagent.core.exception import CoderError
|
|
|
|
|
|
class FilterFailedRAGEvoAgent(RAGEvoAgent):
|
|
|
|
def filter_evolvable_subjects_by_feedback(self, evo: EvolvableSubjects, feedback: list) -> EvolvableSubjects:
|
|
assert isinstance(evo, EvolvingItem)
|
|
# FIXME: the list does not align with the annotation; It should be MultipleFeedback instead of a list of feedbacks
|
|
assert isinstance(feedback, list)
|
|
assert len(evo.sub_workspace_list) == len(feedback)
|
|
|
|
for index in range(len(evo.sub_workspace_list)):
|
|
evo.sub_workspace_list[index].feedback = None
|
|
if evo.sub_workspace_list[index] is not None and feedback[index] is not None and not feedback[index]:
|
|
evo.sub_workspace_list[index].clear()
|
|
|
|
failed_feedbacks = [
|
|
f"- feedback{index + 1:02d}:\n - execution: {f.execution}\n - return_checking: {f.return_checking}\n - code: {f.code}"
|
|
for index, f in enumerate(feedback)
|
|
if f is not None and not f.final_decision
|
|
]
|
|
|
|
if len(failed_feedbacks) == len(feedback):
|
|
feedback_summary = "\n".join(failed_feedbacks)
|
|
raise CoderError(f"All tasks are failed:\n{feedback_summary}")
|
|
|
|
return evo
|