5
5
from code_it .agents .planner import Planner
6
6
from code_it .agents .coder import Coder
7
7
from code_it .agents .linter import Linter
8
- from code_it .agents .refactor import Refactor
9
8
from code_it .agents .dependency_tracker import DependencyTracker
10
9
from code_it .models import HTTPBaseLLM
11
10
from typing import Callable
@@ -29,6 +28,7 @@ def _trim_md(code_editor):
29
28
class TaskExecutionConfig :
30
29
execute_code = True
31
30
install_dependencies = True
31
+ apply_linter = True
32
32
dependency_samples = 3
33
33
max_refactor_attempts = 5
34
34
dependency_install_attempts = 5
@@ -42,12 +42,10 @@ class TaskExecutor:
42
42
def __init__ (
43
43
self ,
44
44
code_editor : PythonCodeEditor ,
45
- refactored_code_editor : PythonCodeEditor ,
46
45
model_builder : Callable [[], HTTPBaseLLM ],
47
46
config : TaskExecutionConfig ,
48
47
) -> None :
49
48
self .code_editor = code_editor
50
- self .refactored_code_editor = refactored_code_editor
51
49
self .config = config
52
50
53
51
# Planner
@@ -58,14 +56,9 @@ def __init__(
58
56
# Coder
59
57
coder_llm = model_builder ()
60
58
coder_llm .set_parameter ("temperature" , config .coder_temperature )
61
- self .coder = Coder (coder_llm )
62
-
63
- # Refactor
64
- refactoring_llm = model_builder ()
65
- refactoring_llm .set_parameter ("temperature" , config .refactor_temperature )
66
- refactoring_llm .set_parameter ("max_new_tokens" , 1024 )
59
+ coder_llm .set_parameter ("max_new_tokens" , 1024 )
67
60
68
- self .refactor = Refactor ( refactoring_llm )
61
+ self .coder = Coder ( coder_llm )
69
62
70
63
# Linter
71
64
linter_llm = model_builder ()
@@ -81,7 +74,6 @@ def __init__(
81
74
self .dependency_tracker = DependencyTracker (dependency_tracker_llm )
82
75
83
76
def execute (self , task : str ):
84
-
85
77
# Generating a coding plan
86
78
plan = self .planner .execute_task (task = task )
87
79
logger .info (type (plan ))
@@ -107,10 +99,10 @@ def execute(self, task: str):
107
99
108
100
logger .info ("Dependency lines: %s" , dependencies )
109
101
for dependency in dependencies :
110
- self .refactored_code_editor .add_dependency (dependency )
102
+ self .code_editor .add_dependency (dependency )
111
103
112
- self .refactored_code_editor .create_env ()
113
- process = self .refactored_code_editor .install_dependencies ()
104
+ self .code_editor .create_env ()
105
+ process = self .code_editor .install_dependencies ()
114
106
if process .returncode != 0 :
115
107
logger .error ("Dependency install failed for: %s" , "\n " .join (dependencies ))
116
108
attempt += 1
@@ -124,55 +116,40 @@ def execute(self, task: str):
124
116
logger .info ("Installed dependencies successfully!" )
125
117
126
118
# Coding
127
- for step in plan :
128
- logger .info ("Coding step : %s" , step )
129
- new_code = self .coder .execute_task (
130
- subtask = step , source_code = self .code_editor .display_code ()
119
+ for i in range ( self . config . max_refactor_attempts ) :
120
+ logger .info ("Coding, attempt : %s" , i )
121
+ refactored = self .coder .execute_task (
122
+ source_code = self .code_editor .display_code (), objective = task , plan = " \n " . join ( plan )
131
123
)
132
- self .code_editor .add_code (new_code )
133
- logger .info ("Trimming MD syntax" )
124
+ self .code_editor .overwrite_code (refactored )
134
125
_trim_md (self .code_editor )
135
126
136
- logger .info ("Applying linter..." )
137
- (pylint_stdout , pylint_stderr ) = lint .py_run (self .code_editor .filename , return_std = True )
138
- pylint_stdout = pylint_stdout .getvalue ()
139
- pylint_stderr = pylint_stderr .getvalue ()
140
- logger .info (pylint_stdout )
141
- logger .error (pylint_stderr )
142
-
143
- new_code = self .linter .execute_task (
144
- source_code = self .code_editor .display_code (),
145
- stdout = pylint_stdout ,
146
- stderr = pylint_stderr
147
- )
148
-
149
- self .code_editor .overwrite_code (new_code )
150
-
127
+ logger .info (self .code_editor .display_code ())
151
128
152
- logger .info ("Finished generating code!" )
129
+ if self .config .apply_linter :
130
+ logger .info ("Applying linter..." )
131
+ (pylint_stdout , _ ) = lint .py_run (self .code_editor .filename , return_std = True )
132
+ pylint_stdout = pylint_stdout .getvalue ()
133
+ logger .info (pylint_stdout )
153
134
154
- logger .info ("Current code: %s" , self .code_editor .display_code ())
155
-
156
-
157
- # Refactoring
158
- for i in range (self .config .max_refactor_attempts ):
159
- logger .info ("After refactoring, attempt: %s" , i )
160
- refactored = self .refactor .execute_task (
161
- source_code = self .code_editor .display_code (), objective = task , plan = "\n " .join (plan )
162
- )
163
- self .refactored_code_editor .overwrite_code (refactored )
164
- _trim_md (self .refactored_code_editor )
165
-
166
- logger .info (self .refactored_code_editor .display_code ())
135
+ new_code = self .linter .execute_task (
136
+ source_code = self .code_editor .display_code (),
137
+ stdout = pylint_stdout ,
138
+ )
139
+ logger .warn ("Linted code: %s" , new_code )
140
+ if new_code :
141
+ self .code_editor .overwrite_code (new_code )
167
142
168
143
if not self .config .execute_code :
169
- return self .refactored_code_editor .display_code ()
144
+ return self .code_editor .display_code ()
170
145
171
- result = self .refactored_code_editor .run_code ()
146
+ result = self .code_editor .run_code ()
172
147
173
148
if "Succeeded" in result :
174
149
break
175
150
151
+ logger .info ("Finished generating code!" )
152
+
176
153
if "Succeeded" in result :
177
154
logger .info ("Source code is functional!" )
178
155
return "Task Success: " + result
0 commit comments