auto-coder 0.1.302__py3-none-any.whl → 0.1.303__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- {auto_coder-0.1.302.dist-info → auto_coder-0.1.303.dist-info}/METADATA +2 -1
- {auto_coder-0.1.302.dist-info → auto_coder-0.1.303.dist-info}/RECORD +28 -20
- autocoder/auto_coder.py +5 -3
- autocoder/auto_coder_runner.py +7 -7
- autocoder/chat_auto_coder.py +6 -1
- autocoder/commands/auto_command.py +285 -206
- autocoder/commands/tools.py +123 -85
- autocoder/common/__init__.py +2 -0
- autocoder/common/action_yml_file_manager.py +22 -0
- autocoder/common/auto_configure.py +9 -4
- autocoder/common/stream_out_type.py +7 -0
- autocoder/dispacher/actions/action.py +221 -101
- autocoder/dispacher/actions/plugins/action_regex_project.py +18 -0
- autocoder/events/__init__.py +57 -0
- autocoder/events/event_content.py +423 -0
- autocoder/events/event_manager.py +327 -0
- autocoder/events/event_manager_singleton.py +245 -0
- autocoder/events/event_store.py +376 -0
- autocoder/events/event_types.py +103 -0
- autocoder/index/entry.py +88 -60
- autocoder/index/filter/quick_filter.py +71 -3
- autocoder/run_context.py +62 -0
- autocoder/utils/auto_coder_utils/chat_stream_out.py +32 -1
- autocoder/version.py +1 -1
- {auto_coder-0.1.302.dist-info → auto_coder-0.1.303.dist-info}/LICENSE +0 -0
- {auto_coder-0.1.302.dist-info → auto_coder-0.1.303.dist-info}/WHEEL +0 -0
- {auto_coder-0.1.302.dist-info → auto_coder-0.1.303.dist-info}/entry_points.txt +0 -0
- {auto_coder-0.1.302.dist-info → auto_coder-0.1.303.dist-info}/top_level.txt +0 -0
|
@@ -30,17 +30,22 @@ from autocoder.utils.llms import get_llm_names
|
|
|
30
30
|
from autocoder.privacy.model_filter import ModelPathFilter
|
|
31
31
|
from autocoder.common import SourceCodeList
|
|
32
32
|
from autocoder.common.global_cancel import global_cancel
|
|
33
|
+
from autocoder.events.event_manager_singleton import get_event_manager
|
|
34
|
+
from autocoder.events import event_content as EventContentCreator
|
|
35
|
+
from autocoder.events.event_types import EventMetadata
|
|
33
36
|
|
|
34
37
|
|
|
35
|
-
class BaseAction:
|
|
38
|
+
class BaseAction:
|
|
36
39
|
def _get_content_length(self, content: str) -> int:
|
|
37
40
|
try:
|
|
38
41
|
tokenizer = BuildinTokenizer()
|
|
39
42
|
return tokenizer.count_tokens(content)
|
|
40
43
|
except Exception as e:
|
|
41
|
-
logger.warning(
|
|
44
|
+
logger.warning(
|
|
45
|
+
f"Failed to use tokenizer to count tokens, fallback to len(): {e}")
|
|
42
46
|
return len(content)
|
|
43
47
|
|
|
48
|
+
|
|
44
49
|
class ActionTSProject(BaseAction):
|
|
45
50
|
def __init__(
|
|
46
51
|
self, args: AutoCoderArgs, llm: Optional[byzerllm.ByzerLLM] = None
|
|
@@ -66,7 +71,7 @@ class ActionTSProject(BaseAction):
|
|
|
66
71
|
args.query = (args.context or "") + "\n\n" + args.query
|
|
67
72
|
source_code_list = build_index_and_filter_files(
|
|
68
73
|
llm=self.llm, args=args, sources=pp.sources
|
|
69
|
-
)
|
|
74
|
+
)
|
|
70
75
|
if args.in_code_apply:
|
|
71
76
|
args.query = old_query
|
|
72
77
|
|
|
@@ -86,13 +91,13 @@ class ActionTSProject(BaseAction):
|
|
|
86
91
|
max_iter=self.args.image_max_iter,
|
|
87
92
|
)
|
|
88
93
|
html_code = ""
|
|
89
|
-
with open(html_path, "r",encoding="utf-8") as f:
|
|
94
|
+
with open(html_path, "r", encoding="utf-8") as f:
|
|
90
95
|
html_code = f.read()
|
|
91
|
-
|
|
92
|
-
source_code_list.sources.append(SourceCode(
|
|
96
|
+
|
|
97
|
+
source_code_list.sources.append(SourceCode(
|
|
93
98
|
module_name=html_path,
|
|
94
99
|
source_code=html_code,
|
|
95
|
-
tag="IMAGE"))
|
|
100
|
+
tag="IMAGE"))
|
|
96
101
|
|
|
97
102
|
self.process_content(source_code_list)
|
|
98
103
|
return True
|
|
@@ -105,13 +110,14 @@ class ActionTSProject(BaseAction):
|
|
|
105
110
|
if content_length > self.args.model_max_input_length:
|
|
106
111
|
logger.warning(
|
|
107
112
|
f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
|
|
108
|
-
)
|
|
113
|
+
)
|
|
109
114
|
|
|
110
115
|
if global_cancel.requested:
|
|
111
|
-
printer = Printer()
|
|
112
|
-
raise Exception(printer.get_message_from_key(
|
|
113
|
-
|
|
114
|
-
|
|
116
|
+
printer = Printer()
|
|
117
|
+
raise Exception(printer.get_message_from_key(
|
|
118
|
+
"generation_cancelled"))
|
|
119
|
+
|
|
120
|
+
if args.execute:
|
|
115
121
|
self.printer.print_in_terminal("code_generation_start")
|
|
116
122
|
start_time = time.time()
|
|
117
123
|
if args.auto_merge == "diff":
|
|
@@ -127,8 +133,9 @@ class ActionTSProject(BaseAction):
|
|
|
127
133
|
llm=self.llm, args=self.args, action=self
|
|
128
134
|
)
|
|
129
135
|
else:
|
|
130
|
-
generate = CodeAutoGenerate(
|
|
131
|
-
|
|
136
|
+
generate = CodeAutoGenerate(
|
|
137
|
+
llm=self.llm, args=self.args, action=self)
|
|
138
|
+
|
|
132
139
|
if self.args.enable_multi_round_generate:
|
|
133
140
|
generate_result = generate.multi_round_run(
|
|
134
141
|
query=args.query, source_code_list=source_code_list
|
|
@@ -138,41 +145,69 @@ class ActionTSProject(BaseAction):
|
|
|
138
145
|
query=args.query, source_code_list=source_code_list
|
|
139
146
|
)
|
|
140
147
|
elapsed_time = time.time() - start_time
|
|
141
|
-
speed = generate_result.metadata.get(
|
|
142
|
-
|
|
143
|
-
|
|
148
|
+
speed = generate_result.metadata.get(
|
|
149
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
150
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
151
|
+
'input_tokens_cost', 0)
|
|
152
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
153
|
+
'generated_tokens_cost', 0)
|
|
144
154
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
145
155
|
self.printer.print_in_terminal(
|
|
146
156
|
"code_generation_complete",
|
|
147
157
|
duration=elapsed_time,
|
|
148
|
-
input_tokens=generate_result.metadata.get(
|
|
149
|
-
|
|
158
|
+
input_tokens=generate_result.metadata.get(
|
|
159
|
+
'input_tokens_count', 0),
|
|
160
|
+
output_tokens=generate_result.metadata.get(
|
|
161
|
+
'generated_tokens_count', 0),
|
|
150
162
|
input_cost=input_tokens_cost,
|
|
151
163
|
output_cost=generated_tokens_cost,
|
|
152
164
|
speed=round(speed, 2),
|
|
153
165
|
model_names=model_names,
|
|
154
166
|
sampling_count=len(generate_result.contents)
|
|
155
167
|
)
|
|
156
|
-
|
|
168
|
+
|
|
169
|
+
get_event_manager(self.args.event_file).write_result(
|
|
170
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
171
|
+
model_name=model_names,
|
|
172
|
+
elapsed_time=elapsed_time,
|
|
173
|
+
input_tokens=generate_result.metadata.get(
|
|
174
|
+
'input_tokens_count', 0),
|
|
175
|
+
output_tokens=generate_result.metadata.get(
|
|
176
|
+
'generated_tokens_count', 0),
|
|
177
|
+
input_cost=input_tokens_cost,
|
|
178
|
+
output_cost=generated_tokens_cost,
|
|
179
|
+
speed=round(speed, 2)
|
|
180
|
+
)).to_dict(),metadata=EventMetadata(
|
|
181
|
+
action_file=self.args.file
|
|
182
|
+
).to_dict())
|
|
183
|
+
|
|
157
184
|
if global_cancel.requested:
|
|
158
|
-
printer = Printer()
|
|
159
|
-
raise Exception(printer.get_message_from_key(
|
|
160
|
-
|
|
185
|
+
printer = Printer()
|
|
186
|
+
raise Exception(printer.get_message_from_key(
|
|
187
|
+
"generation_cancelled"))
|
|
188
|
+
|
|
161
189
|
merge_result = None
|
|
162
190
|
if args.execute and args.auto_merge:
|
|
163
191
|
self.printer.print_in_terminal("code_merge_start")
|
|
164
192
|
if args.auto_merge == "diff":
|
|
165
|
-
code_merge = CodeAutoMergeDiff(
|
|
166
|
-
|
|
193
|
+
code_merge = CodeAutoMergeDiff(
|
|
194
|
+
llm=self.llm, args=self.args)
|
|
195
|
+
merge_result = code_merge.merge_code(
|
|
196
|
+
generate_result=generate_result)
|
|
167
197
|
elif args.auto_merge == "strict_diff":
|
|
168
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
169
|
-
|
|
198
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
199
|
+
llm=self.llm, args=self.args)
|
|
200
|
+
merge_result = code_merge.merge_code(
|
|
201
|
+
generate_result=generate_result)
|
|
170
202
|
elif args.auto_merge == "editblock":
|
|
171
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
172
|
-
|
|
203
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
204
|
+
llm=self.llm, args=self.args)
|
|
205
|
+
merge_result = code_merge.merge_code(
|
|
206
|
+
generate_result=generate_result)
|
|
173
207
|
else:
|
|
174
208
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
175
|
-
merge_result = code_merge.merge_code(
|
|
209
|
+
merge_result = code_merge.merge_code(
|
|
210
|
+
generate_result=generate_result)
|
|
176
211
|
|
|
177
212
|
if merge_result is not None:
|
|
178
213
|
content = merge_result.contents[0]
|
|
@@ -190,7 +225,6 @@ class ActionTSProject(BaseAction):
|
|
|
190
225
|
conversations=generate_result.conversations[0],
|
|
191
226
|
model=self.llm.default_model_name,
|
|
192
227
|
)
|
|
193
|
-
|
|
194
228
|
|
|
195
229
|
|
|
196
230
|
class ActionPyScriptProject(BaseAction):
|
|
@@ -216,9 +250,10 @@ class ActionPyScriptProject(BaseAction):
|
|
|
216
250
|
def process_content(self, source_code_list: SourceCodeList):
|
|
217
251
|
args = self.args
|
|
218
252
|
if global_cancel.requested:
|
|
219
|
-
printer = Printer()
|
|
220
|
-
raise Exception(printer.get_message_from_key(
|
|
221
|
-
|
|
253
|
+
printer = Printer()
|
|
254
|
+
raise Exception(printer.get_message_from_key(
|
|
255
|
+
"generation_cancelled"))
|
|
256
|
+
|
|
222
257
|
if args.execute:
|
|
223
258
|
self.printer.print_in_terminal("code_generation_start")
|
|
224
259
|
start_time = time.time()
|
|
@@ -235,7 +270,8 @@ class ActionPyScriptProject(BaseAction):
|
|
|
235
270
|
llm=self.llm, args=self.args, action=self
|
|
236
271
|
)
|
|
237
272
|
else:
|
|
238
|
-
generate = CodeAutoGenerate(
|
|
273
|
+
generate = CodeAutoGenerate(
|
|
274
|
+
llm=self.llm, args=self.args, action=self)
|
|
239
275
|
if self.args.enable_multi_round_generate:
|
|
240
276
|
generate_result = generate.multi_round_run(
|
|
241
277
|
query=args.query, source_code_list=source_code_list
|
|
@@ -246,15 +282,20 @@ class ActionPyScriptProject(BaseAction):
|
|
|
246
282
|
)
|
|
247
283
|
|
|
248
284
|
elapsed_time = time.time() - start_time
|
|
249
|
-
speed = generate_result.metadata.get(
|
|
285
|
+
speed = generate_result.metadata.get(
|
|
286
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
250
287
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
251
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
252
|
-
|
|
288
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
289
|
+
'input_tokens_cost', 0)
|
|
290
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
291
|
+
'generated_tokens_cost', 0)
|
|
253
292
|
self.printer.print_in_terminal(
|
|
254
293
|
"code_generation_complete",
|
|
255
294
|
duration=elapsed_time,
|
|
256
|
-
input_tokens=generate_result.metadata.get(
|
|
257
|
-
|
|
295
|
+
input_tokens=generate_result.metadata.get(
|
|
296
|
+
'input_tokens_count', 0),
|
|
297
|
+
output_tokens=generate_result.metadata.get(
|
|
298
|
+
'generated_tokens_count', 0),
|
|
258
299
|
input_cost=input_tokens_cost,
|
|
259
300
|
output_cost=generated_tokens_cost,
|
|
260
301
|
speed=round(speed, 2),
|
|
@@ -262,25 +303,48 @@ class ActionPyScriptProject(BaseAction):
|
|
|
262
303
|
sampling_count=len(generate_result.contents)
|
|
263
304
|
)
|
|
264
305
|
|
|
306
|
+
get_event_manager(self.args.event_file).write_result(
|
|
307
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
308
|
+
model_name=model_names,
|
|
309
|
+
elapsed_time=elapsed_time,
|
|
310
|
+
input_tokens=generate_result.metadata.get(
|
|
311
|
+
'input_tokens_count', 0),
|
|
312
|
+
output_tokens=generate_result.metadata.get(
|
|
313
|
+
'generated_tokens_count', 0),
|
|
314
|
+
input_cost=input_tokens_cost,
|
|
315
|
+
output_cost=generated_tokens_cost,
|
|
316
|
+
speed=round(speed, 2)
|
|
317
|
+
)).to_dict(),metadata=EventMetadata(
|
|
318
|
+
action_file=self.args.file
|
|
319
|
+
).to_dict())
|
|
320
|
+
|
|
265
321
|
if global_cancel.requested:
|
|
266
|
-
printer = Printer()
|
|
267
|
-
raise Exception(printer.get_message_from_key(
|
|
268
|
-
|
|
322
|
+
printer = Printer()
|
|
323
|
+
raise Exception(printer.get_message_from_key(
|
|
324
|
+
"generation_cancelled"))
|
|
325
|
+
|
|
269
326
|
merge_result = None
|
|
270
327
|
if args.execute and args.auto_merge:
|
|
271
328
|
self.printer.print_in_terminal("code_merge_start")
|
|
272
329
|
if args.auto_merge == "diff":
|
|
273
|
-
code_merge = CodeAutoMergeDiff(
|
|
274
|
-
|
|
330
|
+
code_merge = CodeAutoMergeDiff(
|
|
331
|
+
llm=self.llm, args=self.args)
|
|
332
|
+
merge_result = code_merge.merge_code(
|
|
333
|
+
generate_result=generate_result)
|
|
275
334
|
elif args.auto_merge == "strict_diff":
|
|
276
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
277
|
-
|
|
335
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
336
|
+
llm=self.llm, args=self.args)
|
|
337
|
+
merge_result = code_merge.merge_code(
|
|
338
|
+
generate_result=generate_result)
|
|
278
339
|
elif args.auto_merge == "editblock":
|
|
279
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
280
|
-
|
|
340
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
341
|
+
llm=self.llm, args=self.args)
|
|
342
|
+
merge_result = code_merge.merge_code(
|
|
343
|
+
generate_result=generate_result)
|
|
281
344
|
else:
|
|
282
345
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
283
|
-
merge_result = code_merge.merge_code(
|
|
346
|
+
merge_result = code_merge.merge_code(
|
|
347
|
+
generate_result=generate_result)
|
|
284
348
|
|
|
285
349
|
content = merge_result.contents[0]
|
|
286
350
|
|
|
@@ -298,7 +362,7 @@ class ActionPyScriptProject(BaseAction):
|
|
|
298
362
|
instruction=self.args.query,
|
|
299
363
|
conversations=generate_result.conversations[0],
|
|
300
364
|
model=self.llm.default_model_name,
|
|
301
|
-
)
|
|
365
|
+
)
|
|
302
366
|
|
|
303
367
|
|
|
304
368
|
class ActionPyProject(BaseAction):
|
|
@@ -316,8 +380,9 @@ class ActionPyProject(BaseAction):
|
|
|
316
380
|
return False
|
|
317
381
|
pp = PyProject(args=self.args, llm=self.llm)
|
|
318
382
|
self.pp = pp
|
|
319
|
-
pp.run(packages=args.py_packages.split(
|
|
320
|
-
|
|
383
|
+
pp.run(packages=args.py_packages.split(
|
|
384
|
+
",") if args.py_packages else [])
|
|
385
|
+
source_code_list = SourceCodeList(pp.sources)
|
|
321
386
|
|
|
322
387
|
if self.llm:
|
|
323
388
|
old_query = args.query
|
|
@@ -339,15 +404,16 @@ class ActionPyProject(BaseAction):
|
|
|
339
404
|
content_length = self._get_content_length(content)
|
|
340
405
|
if content_length > self.args.model_max_input_length:
|
|
341
406
|
self.printer.print_in_terminal(
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
407
|
+
"code_execution_warning",
|
|
408
|
+
style="yellow",
|
|
409
|
+
content_length=content_length,
|
|
410
|
+
max_length=self.args.model_max_input_length
|
|
411
|
+
)
|
|
412
|
+
|
|
348
413
|
if global_cancel.requested:
|
|
349
|
-
printer = Printer()
|
|
350
|
-
raise Exception(printer.get_message_from_key(
|
|
414
|
+
printer = Printer()
|
|
415
|
+
raise Exception(printer.get_message_from_key(
|
|
416
|
+
"generation_cancelled"))
|
|
351
417
|
|
|
352
418
|
if args.execute:
|
|
353
419
|
self.printer.print_in_terminal("code_generation_start")
|
|
@@ -365,8 +431,8 @@ class ActionPyProject(BaseAction):
|
|
|
365
431
|
llm=self.llm, args=self.args, action=self
|
|
366
432
|
)
|
|
367
433
|
else:
|
|
368
|
-
generate = CodeAutoGenerate(
|
|
369
|
-
|
|
434
|
+
generate = CodeAutoGenerate(
|
|
435
|
+
llm=self.llm, args=self.args, action=self)
|
|
370
436
|
|
|
371
437
|
if self.args.enable_multi_round_generate:
|
|
372
438
|
generate_result = generate.multi_round_run(
|
|
@@ -377,15 +443,20 @@ class ActionPyProject(BaseAction):
|
|
|
377
443
|
query=args.query, source_code_list=source_code_list
|
|
378
444
|
)
|
|
379
445
|
elapsed_time = time.time() - start_time
|
|
380
|
-
speed = generate_result.metadata.get(
|
|
446
|
+
speed = generate_result.metadata.get(
|
|
447
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
381
448
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
382
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
383
|
-
|
|
449
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
450
|
+
'input_tokens_cost', 0)
|
|
451
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
452
|
+
'generated_tokens_cost', 0)
|
|
384
453
|
self.printer.print_in_terminal(
|
|
385
454
|
"code_generation_complete",
|
|
386
455
|
duration=elapsed_time,
|
|
387
|
-
input_tokens=generate_result.metadata.get(
|
|
388
|
-
|
|
456
|
+
input_tokens=generate_result.metadata.get(
|
|
457
|
+
'input_tokens_count', 0),
|
|
458
|
+
output_tokens=generate_result.metadata.get(
|
|
459
|
+
'generated_tokens_count', 0),
|
|
389
460
|
input_cost=input_tokens_cost,
|
|
390
461
|
output_cost=generated_tokens_cost,
|
|
391
462
|
speed=round(speed, 2),
|
|
@@ -393,25 +464,48 @@ class ActionPyProject(BaseAction):
|
|
|
393
464
|
sampling_count=len(generate_result.contents)
|
|
394
465
|
)
|
|
395
466
|
|
|
467
|
+
get_event_manager(self.args.event_file).write_result(
|
|
468
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
469
|
+
model_name=model_names,
|
|
470
|
+
elapsed_time=elapsed_time,
|
|
471
|
+
input_tokens=generate_result.metadata.get(
|
|
472
|
+
'input_tokens_count', 0),
|
|
473
|
+
output_tokens=generate_result.metadata.get(
|
|
474
|
+
'generated_tokens_count', 0),
|
|
475
|
+
input_cost=input_tokens_cost,
|
|
476
|
+
output_cost=generated_tokens_cost,
|
|
477
|
+
speed=round(speed, 2)
|
|
478
|
+
)).to_dict(), metadata=EventMetadata(
|
|
479
|
+
action_file=self.args.file
|
|
480
|
+
).to_dict())
|
|
481
|
+
|
|
396
482
|
if global_cancel.requested:
|
|
397
|
-
printer = Printer()
|
|
398
|
-
raise Exception(printer.get_message_from_key(
|
|
399
|
-
|
|
483
|
+
printer = Printer()
|
|
484
|
+
raise Exception(printer.get_message_from_key(
|
|
485
|
+
"generation_cancelled"))
|
|
486
|
+
|
|
400
487
|
merge_result = None
|
|
401
488
|
if args.execute and args.auto_merge:
|
|
402
489
|
self.printer.print_in_terminal("code_merge_start")
|
|
403
490
|
if args.auto_merge == "diff":
|
|
404
|
-
code_merge = CodeAutoMergeDiff(
|
|
405
|
-
|
|
491
|
+
code_merge = CodeAutoMergeDiff(
|
|
492
|
+
llm=self.llm, args=self.args)
|
|
493
|
+
merge_result = code_merge.merge_code(
|
|
494
|
+
generate_result=generate_result)
|
|
406
495
|
elif args.auto_merge == "strict_diff":
|
|
407
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
408
|
-
|
|
496
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
497
|
+
llm=self.llm, args=self.args)
|
|
498
|
+
merge_result = code_merge.merge_code(
|
|
499
|
+
generate_result=generate_result)
|
|
409
500
|
elif args.auto_merge == "editblock":
|
|
410
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
411
|
-
|
|
501
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
502
|
+
llm=self.llm, args=self.args)
|
|
503
|
+
merge_result = code_merge.merge_code(
|
|
504
|
+
generate_result=generate_result)
|
|
412
505
|
else:
|
|
413
506
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
414
|
-
merge_result = code_merge.merge_code(
|
|
507
|
+
merge_result = code_merge.merge_code(
|
|
508
|
+
generate_result=generate_result)
|
|
415
509
|
|
|
416
510
|
content = merge_result.contents[0]
|
|
417
511
|
|
|
@@ -429,7 +523,7 @@ class ActionPyProject(BaseAction):
|
|
|
429
523
|
instruction=self.args.query,
|
|
430
524
|
conversations=generate_result.conversations[0],
|
|
431
525
|
model=self.llm.default_model_name,
|
|
432
|
-
)
|
|
526
|
+
)
|
|
433
527
|
|
|
434
528
|
|
|
435
529
|
class ActionSuffixProject(BaseAction):
|
|
@@ -467,11 +561,12 @@ class ActionSuffixProject(BaseAction):
|
|
|
467
561
|
if content_length > self.args.model_max_input_length:
|
|
468
562
|
logger.warning(
|
|
469
563
|
f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
|
|
470
|
-
)
|
|
564
|
+
)
|
|
471
565
|
|
|
472
566
|
if global_cancel.requested:
|
|
473
|
-
printer = Printer()
|
|
474
|
-
raise Exception(printer.get_message_from_key(
|
|
567
|
+
printer = Printer()
|
|
568
|
+
raise Exception(printer.get_message_from_key(
|
|
569
|
+
"generation_cancelled"))
|
|
475
570
|
|
|
476
571
|
if args.execute:
|
|
477
572
|
self.printer.print_in_terminal("code_generation_start")
|
|
@@ -489,7 +584,8 @@ class ActionSuffixProject(BaseAction):
|
|
|
489
584
|
llm=self.llm, args=self.args, action=self
|
|
490
585
|
)
|
|
491
586
|
else:
|
|
492
|
-
generate = CodeAutoGenerate(
|
|
587
|
+
generate = CodeAutoGenerate(
|
|
588
|
+
llm=self.llm, args=self.args, action=self)
|
|
493
589
|
if self.args.enable_multi_round_generate:
|
|
494
590
|
generate_result = generate.multi_round_run(
|
|
495
591
|
query=args.query, source_code_list=source_code_list
|
|
@@ -498,43 +594,69 @@ class ActionSuffixProject(BaseAction):
|
|
|
498
594
|
generate_result = generate.single_round_run(
|
|
499
595
|
query=args.query, source_code_list=source_code_list
|
|
500
596
|
)
|
|
501
|
-
|
|
597
|
+
|
|
502
598
|
elapsed_time = time.time() - start_time
|
|
503
|
-
speed = generate_result.metadata.get(
|
|
599
|
+
speed = generate_result.metadata.get(
|
|
600
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
504
601
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
505
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
506
|
-
|
|
602
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
603
|
+
'input_tokens_cost', 0)
|
|
604
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
605
|
+
'generated_tokens_cost', 0)
|
|
507
606
|
self.printer.print_in_terminal(
|
|
508
607
|
"code_generation_complete",
|
|
509
608
|
duration=elapsed_time,
|
|
510
609
|
input_tokens=generate_result.metadata.get('input_tokens_count', 0),
|
|
511
|
-
output_tokens=generate_result.metadata.get(
|
|
610
|
+
output_tokens=generate_result.metadata.get(
|
|
611
|
+
'generated_tokens_count', 0),
|
|
512
612
|
input_cost=input_tokens_cost,
|
|
513
613
|
output_cost=generated_tokens_cost,
|
|
514
614
|
speed=round(speed, 2),
|
|
515
615
|
model_names=model_names,
|
|
516
616
|
sampling_count=len(generate_result.contents)
|
|
517
617
|
)
|
|
518
|
-
|
|
618
|
+
|
|
619
|
+
get_event_manager(self.args.event_file).write_result(
|
|
620
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
621
|
+
model_name=model_names,
|
|
622
|
+
elapsed_time=elapsed_time,
|
|
623
|
+
input_tokens=generate_result.metadata.get(
|
|
624
|
+
'input_tokens_count', 0),
|
|
625
|
+
output_tokens=generate_result.metadata.get(
|
|
626
|
+
'generated_tokens_count', 0),
|
|
627
|
+
input_cost=input_tokens_cost,
|
|
628
|
+
output_cost=generated_tokens_cost,
|
|
629
|
+
speed=round(speed, 2)
|
|
630
|
+
)).to_dict(), metadata=EventMetadata(
|
|
631
|
+
action_file=self.args.file
|
|
632
|
+
).to_dict())
|
|
633
|
+
|
|
519
634
|
if global_cancel.requested:
|
|
520
|
-
printer = Printer()
|
|
521
|
-
raise Exception(printer.get_message_from_key(
|
|
522
|
-
|
|
635
|
+
printer = Printer()
|
|
636
|
+
raise Exception(printer.get_message_from_key(
|
|
637
|
+
"generation_cancelled"))
|
|
638
|
+
|
|
523
639
|
merge_result = None
|
|
524
640
|
if args.execute and args.auto_merge:
|
|
525
641
|
self.printer.print_in_terminal("code_merge_start")
|
|
526
642
|
if args.auto_merge == "diff":
|
|
527
643
|
code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
|
|
528
|
-
merge_result = code_merge.merge_code(
|
|
644
|
+
merge_result = code_merge.merge_code(
|
|
645
|
+
generate_result=generate_result)
|
|
529
646
|
elif args.auto_merge == "strict_diff":
|
|
530
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
531
|
-
|
|
647
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
648
|
+
llm=self.llm, args=self.args)
|
|
649
|
+
merge_result = code_merge.merge_code(
|
|
650
|
+
generate_result=generate_result)
|
|
532
651
|
elif args.auto_merge == "editblock":
|
|
533
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
534
|
-
|
|
652
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
653
|
+
llm=self.llm, args=self.args)
|
|
654
|
+
merge_result = code_merge.merge_code(
|
|
655
|
+
generate_result=generate_result)
|
|
535
656
|
else:
|
|
536
657
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
537
|
-
merge_result = code_merge.merge_code(
|
|
658
|
+
merge_result = code_merge.merge_code(
|
|
659
|
+
generate_result=generate_result)
|
|
538
660
|
|
|
539
661
|
if merge_result is not None:
|
|
540
662
|
content = merge_result.contents[0]
|
|
@@ -543,7 +665,7 @@ class ActionSuffixProject(BaseAction):
|
|
|
543
665
|
instruction=self.args.query,
|
|
544
666
|
conversations=merge_result.conversations[0],
|
|
545
667
|
model=self.llm.default_model_name,
|
|
546
|
-
)
|
|
668
|
+
)
|
|
547
669
|
else:
|
|
548
670
|
content = generate_result.contents[0]
|
|
549
671
|
|
|
@@ -553,5 +675,3 @@ class ActionSuffixProject(BaseAction):
|
|
|
553
675
|
conversations=generate_result.conversations[0],
|
|
554
676
|
model=self.llm.default_model_name,
|
|
555
677
|
)
|
|
556
|
-
|
|
557
|
-
|
|
@@ -17,6 +17,9 @@ import time
|
|
|
17
17
|
from autocoder.utils.llms import get_llm_names
|
|
18
18
|
from autocoder.common import SourceCodeList
|
|
19
19
|
from autocoder.common.global_cancel import global_cancel
|
|
20
|
+
from autocoder.events.event_manager_singleton import get_event_manager
|
|
21
|
+
from autocoder.events import event_content as EventContentCreator
|
|
22
|
+
from autocoder.events.event_types import EventMetadata
|
|
20
23
|
from loguru import logger
|
|
21
24
|
class ActionRegexProject:
|
|
22
25
|
def __init__(
|
|
@@ -110,6 +113,21 @@ class ActionRegexProject:
|
|
|
110
113
|
sampling_count=len(generate_result.contents)
|
|
111
114
|
)
|
|
112
115
|
|
|
116
|
+
get_event_manager(self.args.event_file).write_result(
|
|
117
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
118
|
+
model_name=model_names,
|
|
119
|
+
elapsed_time=elapsed_time,
|
|
120
|
+
input_tokens=generate_result.metadata.get(
|
|
121
|
+
'input_tokens_count', 0),
|
|
122
|
+
output_tokens=generate_result.metadata.get(
|
|
123
|
+
'generated_tokens_count', 0),
|
|
124
|
+
input_cost=input_tokens_cost,
|
|
125
|
+
output_cost=generated_tokens_cost,
|
|
126
|
+
speed=round(speed, 2),
|
|
127
|
+
)).to_dict(),metadata=EventMetadata(
|
|
128
|
+
action_file=self.args.file
|
|
129
|
+
).to_dict())
|
|
130
|
+
|
|
113
131
|
if global_cancel.requested:
|
|
114
132
|
printer = Printer()
|
|
115
133
|
raise Exception(printer.get_message_from_key("generation_cancelled"))
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Event handling system for autocoder.
|
|
3
|
+
This module provides a way for two systems to communicate through events.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from .event_store import EventStore, JsonlEventStore
|
|
7
|
+
from .event_types import Event, EventType, ResponseEvent
|
|
8
|
+
from .event_manager import EventManager
|
|
9
|
+
from .event_manager_singleton import EventManagerSingleton, get_event_manager
|
|
10
|
+
from .event_content import (
|
|
11
|
+
BaseEventContent, StreamContent, ResultContent,
|
|
12
|
+
AskUserContent, UserResponseContent, CodeContent,
|
|
13
|
+
MarkdownContent, ErrorContent, CompletionContent, ContentType, StreamState,
|
|
14
|
+
create_stream_thinking, create_stream_content,
|
|
15
|
+
create_result, create_ask_user, create_user_response,
|
|
16
|
+
create_completion, create_error
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
# Event store
|
|
21
|
+
"EventStore",
|
|
22
|
+
"JsonlEventStore",
|
|
23
|
+
|
|
24
|
+
# Event types
|
|
25
|
+
"Event",
|
|
26
|
+
"EventType",
|
|
27
|
+
"ResponseEvent",
|
|
28
|
+
"EventManager",
|
|
29
|
+
|
|
30
|
+
# Singleton
|
|
31
|
+
"EventManagerSingleton",
|
|
32
|
+
"get_event_manager",
|
|
33
|
+
|
|
34
|
+
# Content models
|
|
35
|
+
"BaseEventContent",
|
|
36
|
+
"StreamContent",
|
|
37
|
+
"ResultContent",
|
|
38
|
+
"AskUserContent",
|
|
39
|
+
"UserResponseContent",
|
|
40
|
+
"CodeContent",
|
|
41
|
+
"MarkdownContent",
|
|
42
|
+
"ErrorContent",
|
|
43
|
+
"CompletionContent",
|
|
44
|
+
|
|
45
|
+
# Enums
|
|
46
|
+
"ContentType",
|
|
47
|
+
"StreamState",
|
|
48
|
+
|
|
49
|
+
# Factory functions
|
|
50
|
+
"create_stream_thinking",
|
|
51
|
+
"create_stream_content",
|
|
52
|
+
"create_result",
|
|
53
|
+
"create_ask_user",
|
|
54
|
+
"create_user_response",
|
|
55
|
+
"create_completion",
|
|
56
|
+
"create_error"
|
|
57
|
+
]
|