From 903d4beeef1f3f290fb8451ec768938d250d68ea Mon Sep 17 00:00:00 2001 From: Xu Yang Date: Thu, 23 Oct 2025 17:09:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20refine=20task=20scheduling=20logic=20in?= =?UTF-8?q?=20MultiProcessEvolvingStrategy=20for=E2=80=A6=20(#1275)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: refine task scheduling logic in MultiProcessEvolvingStrategy for improved handling of feedback in improve mode * fix: add empty implementation for skipped tasks in MultiProcessEvolvingStrategy --- .../coder/CoSTEER/evolving_strategy.py | 22 +++++++++++-------- requirements.txt | 2 ++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/rdagent/components/coder/CoSTEER/evolving_strategy.py b/rdagent/components/coder/CoSTEER/evolving_strategy.py index 18d56d7b..16b7639b 100644 --- a/rdagent/components/coder/CoSTEER/evolving_strategy.py +++ b/rdagent/components/coder/CoSTEER/evolving_strategy.py @@ -96,16 +96,20 @@ class MultiProcessEvolvingStrategy(EvolvingStrategy): code_list[index] = queried_knowledge.success_task_to_knowledge_dict[ target_task_desc ].implementation.file_dict - elif ( - target_task_desc not in queried_knowledge.success_task_to_knowledge_dict - and target_task_desc not in queried_knowledge.failed_task_info_set - and not ( - self.improve_mode - and isinstance(last_feedback, CoSTEERMultiFeedback) - and last_feedback[index] is None + else: + # Schedule the task only if: + # - it is not marked failed + # - and (in improve mode) we actually have prior failure feedback to act on + skip_for_improve_mode = self.improve_mode and ( + last_feedback is None + or (isinstance(last_feedback, CoSTEERMultiFeedback) and last_feedback[index] is None) ) - ): - to_be_finished_task_index.append(index) + if target_task_desc not in queried_knowledge.failed_task_info_set and not skip_for_improve_mode: + to_be_finished_task_index.append(index) + if skip_for_improve_mode: + code_list[index] = ( + {} + ) # empty implementation for skipped task, but assign_code_list_to_evo will still assign it result = multiprocessing_wrapper( [ diff --git a/requirements.txt b/requirements.txt index 6877b73e..619b19fa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -74,3 +74,5 @@ types-pytz # Agent pydantic-ai-slim[mcp,openai,prefect] nest-asyncio + +prefect \ No newline at end of file