@@ -30,6 +30,44 @@ def __init__(self, tasks: Dict[str, Task], agents: List[Agent], manager_llm: Opt
3030 self .task_retry_counter : Dict [str , int ] = {} # Initialize retry counter
3131 self .workflow_finished = False # ADDED: Workflow finished flag
3232
33+ def _build_task_context (self , current_task : Task ) -> str :
34+ """Build context for a task based on its retain_full_context setting"""
35+ if not (current_task .previous_tasks or current_task .context ):
36+ return ""
37+
38+ context = "\n Input data from previous tasks:"
39+
40+ if current_task .retain_full_context :
41+ # Original behavior: include all previous tasks
42+ for prev_name in current_task .previous_tasks :
43+ prev_task = next ((t for t in self .tasks .values () if t .name == prev_name ), None )
44+ if prev_task and prev_task .result :
45+ context += f"\n { prev_name } : { prev_task .result .raw } "
46+
47+ # Add data from context tasks
48+ if current_task .context :
49+ for ctx_task in current_task .context :
50+ if ctx_task .result and ctx_task .name != current_task .name :
51+ context += f"\n { ctx_task .name } : { ctx_task .result .raw } "
52+ else :
53+ # New behavior: only include the most recent previous task
54+ if current_task .previous_tasks :
55+ # Get the most recent previous task (last in the list)
56+ prev_name = current_task .previous_tasks [- 1 ]
57+ prev_task = next ((t for t in self .tasks .values () if t .name == prev_name ), None )
58+ if prev_task and prev_task .result :
59+ context += f"\n { prev_name } : { prev_task .result .raw } "
60+
61+ # For context tasks, still include the most recent one
62+ if current_task .context :
63+ # Get the most recent context task with a result
64+ for ctx_task in reversed (current_task .context ):
65+ if ctx_task .result and ctx_task .name != current_task .name :
66+ context += f"\n { ctx_task .name } : { ctx_task .result .raw } "
67+ break # Only include the most recent one
68+
69+ return context
70+
3371 def _find_next_not_started_task (self ) -> Optional [Task ]:
3472 """Fallback mechanism to find the next 'not started' task."""
3573 fallback_attempts = 0
@@ -147,25 +185,8 @@ async def aworkflow(self) -> AsyncGenerator[str, None]:
147185 """ )
148186
149187 # Add context from previous tasks to description
150- if current_task .previous_tasks or current_task .context :
151- context = "\n Input data from previous tasks:"
152-
153- # Add data from previous tasks in workflow
154- for prev_name in current_task .previous_tasks :
155- prev_task = next ((t for t in self .tasks .values () if t .name == prev_name ), None )
156- if prev_task and prev_task .result :
157- # Handle loop data
158- if current_task .task_type == "loop" :
159- context += f"\n { prev_name } : { prev_task .result .raw } "
160- else :
161- context += f"\n { prev_name } : { prev_task .result .raw } "
162-
163- # Add data from context tasks
164- if current_task .context :
165- for ctx_task in current_task .context :
166- if ctx_task .result and ctx_task .name != current_task .name :
167- context += f"\n { ctx_task .name } : { ctx_task .result .raw } "
168-
188+ context = self ._build_task_context (current_task )
189+ if context :
169190 # Update task description with context
170191 current_task .description = current_task .description + context
171192
@@ -778,25 +799,8 @@ def workflow(self):
778799 """ )
779800
780801 # Add context from previous tasks to description
781- if current_task .previous_tasks or current_task .context :
782- context = "\n Input data from previous tasks:"
783-
784- # Add data from previous tasks in workflow
785- for prev_name in current_task .previous_tasks :
786- prev_task = next ((t for t in self .tasks .values () if t .name == prev_name ), None )
787- if prev_task and prev_task .result :
788- # Handle loop data
789- if current_task .task_type == "loop" :
790- context += f"\n { prev_name } : { prev_task .result .raw } "
791- else :
792- context += f"\n { prev_name } : { prev_task .result .raw } "
793-
794- # Add data from context tasks
795- if current_task .context :
796- for ctx_task in current_task .context :
797- if ctx_task .result and ctx_task .name != current_task .name :
798- context += f"\n { ctx_task .name } : { ctx_task .result .raw } "
799-
802+ context = self ._build_task_context (current_task )
803+ if context :
800804 # Update task description with context
801805 current_task .description = current_task .description + context
802806
0 commit comments