auto-coder 2.0.0__py3-none-any.whl → 2.0.1__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-2.0.0.dist-info → auto_coder-2.0.1.dist-info}/METADATA +1 -1
- {auto_coder-2.0.0.dist-info → auto_coder-2.0.1.dist-info}/RECORD +19 -19
- autocoder/agent/entry_command_agent/chat.py +7 -17
- autocoder/auto_coder_runner.py +1 -9
- autocoder/common/file_handler/coding_handler.py +14 -6
- autocoder/common/llms/registry.py +29 -1
- autocoder/common/v2/agent/agentic_edit_tools/load_extra_document_tool_resolver.py +14 -7
- autocoder/completer/command_completer_v2.py +43 -0
- autocoder/dispacher/actions/action.py +268 -155
- autocoder/index/entry.py +1 -1
- autocoder/inner/agentic.py +1 -10
- autocoder/version.py +1 -1
- autocoder/workflow_agents/executor.py +177 -1
- autocoder/workflow_agents/loader.py +12 -0
- autocoder/workflow_agents/types.py +1 -0
- {auto_coder-2.0.0.dist-info → auto_coder-2.0.1.dist-info}/LICENSE +0 -0
- {auto_coder-2.0.0.dist-info → auto_coder-2.0.1.dist-info}/WHEEL +0 -0
- {auto_coder-2.0.0.dist-info → auto_coder-2.0.1.dist-info}/entry_points.txt +0 -0
- {auto_coder-2.0.0.dist-info → auto_coder-2.0.1.dist-info}/top_level.txt +0 -0
|
@@ -35,6 +35,9 @@ from autocoder.events.event_manager_singleton import get_event_manager
|
|
|
35
35
|
from autocoder.events import event_content as EventContentCreator
|
|
36
36
|
from autocoder.events.event_types import EventMetadata
|
|
37
37
|
from autocoder.common.v2.code_editblock_manager import CodeEditBlockManager
|
|
38
|
+
from autocoder.common.conversations.get_conversation_manager import (
|
|
39
|
+
get_conversation_manager,
|
|
40
|
+
)
|
|
38
41
|
|
|
39
42
|
|
|
40
43
|
class BaseAction:
|
|
@@ -44,9 +47,53 @@ class BaseAction:
|
|
|
44
47
|
return tokenizer.count_tokens(content)
|
|
45
48
|
except Exception as e:
|
|
46
49
|
logger.warning(
|
|
47
|
-
f"Failed to use tokenizer to count tokens, fallback to len(): {e}"
|
|
50
|
+
f"Failed to use tokenizer to count tokens, fallback to len(): {e}"
|
|
51
|
+
)
|
|
48
52
|
return len(content)
|
|
49
53
|
|
|
54
|
+
def _add_conversations_to_manager(
|
|
55
|
+
self, result, conversation_manager, namespace=None
|
|
56
|
+
):
|
|
57
|
+
"""
|
|
58
|
+
将生成结果中的对话添加到 conversation_manager
|
|
59
|
+
|
|
60
|
+
参数:
|
|
61
|
+
result: CodeGenerateResult 对象
|
|
62
|
+
conversation_manager: ConversationManager 实例
|
|
63
|
+
namespace: 命名空间(可选)
|
|
64
|
+
"""
|
|
65
|
+
if not result.conversations:
|
|
66
|
+
return
|
|
67
|
+
|
|
68
|
+
# 确保有当前会话,如果没有则创建
|
|
69
|
+
current_conversation_id = conversation_manager.get_current_conversation_id(
|
|
70
|
+
namespace
|
|
71
|
+
)
|
|
72
|
+
if not current_conversation_id:
|
|
73
|
+
current_conversation_id = conversation_manager.create_conversation(
|
|
74
|
+
name="Code Generation Session",
|
|
75
|
+
description="Auto-coder code generation session",
|
|
76
|
+
)
|
|
77
|
+
conversation_manager.set_current_conversation(
|
|
78
|
+
current_conversation_id, namespace
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# 添加对话到当前会话
|
|
82
|
+
# result.conversations 是 List[List[Dict[str, Any]]],取最后一轮对话
|
|
83
|
+
if result.conversations:
|
|
84
|
+
last_conversation = result.conversations[-1]
|
|
85
|
+
for message in last_conversation:
|
|
86
|
+
if (
|
|
87
|
+
isinstance(message, dict)
|
|
88
|
+
and "role" in message
|
|
89
|
+
and "content" in message
|
|
90
|
+
):
|
|
91
|
+
conversation_manager.append_message_to_current(
|
|
92
|
+
role=message["role"],
|
|
93
|
+
content=message["content"],
|
|
94
|
+
namespace=namespace,
|
|
95
|
+
)
|
|
96
|
+
|
|
50
97
|
|
|
51
98
|
class ActionTSProject(BaseAction):
|
|
52
99
|
def __init__(
|
|
@@ -56,6 +103,8 @@ class ActionTSProject(BaseAction):
|
|
|
56
103
|
self.llm = llm
|
|
57
104
|
self.pp = None
|
|
58
105
|
self.printer = Printer()
|
|
106
|
+
self.conversation_manager = get_conversation_manager()
|
|
107
|
+
self.namespace = None
|
|
59
108
|
|
|
60
109
|
def run(self):
|
|
61
110
|
args = self.args
|
|
@@ -96,10 +145,9 @@ class ActionTSProject(BaseAction):
|
|
|
96
145
|
with open(html_path, "r", encoding="utf-8") as f:
|
|
97
146
|
html_code = f.read()
|
|
98
147
|
|
|
99
|
-
source_code_list.sources.append(
|
|
100
|
-
module_name=html_path,
|
|
101
|
-
|
|
102
|
-
tag="IMAGE"))
|
|
148
|
+
source_code_list.sources.append(
|
|
149
|
+
SourceCode(module_name=html_path, source_code=html_code, tag="IMAGE")
|
|
150
|
+
)
|
|
103
151
|
|
|
104
152
|
self.process_content(source_code_list)
|
|
105
153
|
return True
|
|
@@ -116,9 +164,21 @@ class ActionTSProject(BaseAction):
|
|
|
116
164
|
|
|
117
165
|
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
118
166
|
|
|
119
|
-
if (
|
|
120
|
-
|
|
121
|
-
|
|
167
|
+
if (
|
|
168
|
+
(args.enable_auto_fix_merge or args.enable_auto_fix_lint)
|
|
169
|
+
and args.execute
|
|
170
|
+
and args.auto_merge == "editblock"
|
|
171
|
+
):
|
|
172
|
+
code_merge_manager = CodeEditBlockManager(
|
|
173
|
+
llm=self.llm, args=self.args, action=self
|
|
174
|
+
)
|
|
175
|
+
result = code_merge_manager.run(
|
|
176
|
+
query=args.query, source_code_list=source_code_list
|
|
177
|
+
)
|
|
178
|
+
# 将对话添加到 conversation_manager
|
|
179
|
+
self._add_conversations_to_manager(
|
|
180
|
+
result, self.conversation_manager, self.namespace
|
|
181
|
+
)
|
|
122
182
|
return
|
|
123
183
|
|
|
124
184
|
if args.execute:
|
|
@@ -137,48 +197,52 @@ class ActionTSProject(BaseAction):
|
|
|
137
197
|
llm=self.llm, args=self.args, action=self
|
|
138
198
|
)
|
|
139
199
|
else:
|
|
140
|
-
generate = CodeAutoGenerate(
|
|
141
|
-
|
|
142
|
-
|
|
200
|
+
generate = CodeAutoGenerate(llm=self.llm, args=self.args, action=self)
|
|
201
|
+
|
|
143
202
|
generate_result = generate.single_round_run(
|
|
144
203
|
query=args.query, source_code_list=source_code_list
|
|
145
204
|
)
|
|
146
205
|
elapsed_time = time.time() - start_time
|
|
147
|
-
speed =
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
206
|
+
speed = (
|
|
207
|
+
generate_result.metadata.get("generated_tokens_count", 0) / elapsed_time
|
|
208
|
+
if elapsed_time > 0
|
|
209
|
+
else 0
|
|
210
|
+
)
|
|
211
|
+
input_tokens_cost = generate_result.metadata.get("input_tokens_cost", 0)
|
|
151
212
|
generated_tokens_cost = generate_result.metadata.get(
|
|
152
|
-
|
|
213
|
+
"generated_tokens_cost", 0
|
|
214
|
+
)
|
|
153
215
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
154
216
|
self.printer.print_in_terminal(
|
|
155
217
|
"code_generation_complete",
|
|
156
218
|
duration=elapsed_time,
|
|
157
|
-
input_tokens=generate_result.metadata.get(
|
|
158
|
-
|
|
159
|
-
output_tokens=generate_result.metadata.get(
|
|
160
|
-
'generated_tokens_count', 0),
|
|
219
|
+
input_tokens=generate_result.metadata.get("input_tokens_count", 0),
|
|
220
|
+
output_tokens=generate_result.metadata.get("generated_tokens_count", 0),
|
|
161
221
|
input_cost=input_tokens_cost,
|
|
162
222
|
output_cost=generated_tokens_cost,
|
|
163
223
|
speed=round(speed, 2),
|
|
164
224
|
model_names=model_names,
|
|
165
|
-
sampling_count=len(generate_result.contents)
|
|
225
|
+
sampling_count=len(generate_result.contents),
|
|
166
226
|
)
|
|
167
227
|
|
|
168
228
|
get_event_manager(self.args.event_file).write_result(
|
|
169
|
-
EventContentCreator.create_result(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
229
|
+
EventContentCreator.create_result(
|
|
230
|
+
content=EventContentCreator.ResultTokenStatContent(
|
|
231
|
+
model_name=model_names,
|
|
232
|
+
elapsed_time=elapsed_time,
|
|
233
|
+
input_tokens=generate_result.metadata.get(
|
|
234
|
+
"input_tokens_count", 0
|
|
235
|
+
),
|
|
236
|
+
output_tokens=generate_result.metadata.get(
|
|
237
|
+
"generated_tokens_count", 0
|
|
238
|
+
),
|
|
239
|
+
input_cost=input_tokens_cost,
|
|
240
|
+
output_cost=generated_tokens_cost,
|
|
241
|
+
speed=round(speed, 2),
|
|
242
|
+
)
|
|
243
|
+
).to_dict(),
|
|
244
|
+
metadata=EventMetadata(action_file=self.args.file).to_dict(),
|
|
245
|
+
)
|
|
182
246
|
|
|
183
247
|
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
184
248
|
|
|
@@ -186,24 +250,25 @@ class ActionTSProject(BaseAction):
|
|
|
186
250
|
if args.execute and args.auto_merge:
|
|
187
251
|
self.printer.print_in_terminal("code_merge_start")
|
|
188
252
|
if args.auto_merge == "diff":
|
|
189
|
-
code_merge = CodeAutoMergeDiff(
|
|
190
|
-
llm=self.llm, args=self.args)
|
|
253
|
+
code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
|
|
191
254
|
merge_result = code_merge.merge_code(
|
|
192
|
-
generate_result=generate_result
|
|
255
|
+
generate_result=generate_result
|
|
256
|
+
)
|
|
193
257
|
elif args.auto_merge == "strict_diff":
|
|
194
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
195
|
-
llm=self.llm, args=self.args)
|
|
258
|
+
code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
|
|
196
259
|
merge_result = code_merge.merge_code(
|
|
197
|
-
generate_result=generate_result
|
|
260
|
+
generate_result=generate_result
|
|
261
|
+
)
|
|
198
262
|
elif args.auto_merge == "editblock":
|
|
199
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
200
|
-
llm=self.llm, args=self.args)
|
|
263
|
+
code_merge = CodeAutoMergeEditBlock(llm=self.llm, args=self.args)
|
|
201
264
|
merge_result = code_merge.merge_code(
|
|
202
|
-
generate_result=generate_result
|
|
265
|
+
generate_result=generate_result
|
|
266
|
+
)
|
|
203
267
|
else:
|
|
204
268
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
205
269
|
merge_result = code_merge.merge_code(
|
|
206
|
-
generate_result=generate_result
|
|
270
|
+
generate_result=generate_result
|
|
271
|
+
)
|
|
207
272
|
|
|
208
273
|
if merge_result is not None:
|
|
209
274
|
content = merge_result.contents[0]
|
|
@@ -231,6 +296,8 @@ class ActionPyProject(BaseAction):
|
|
|
231
296
|
self.llm = llm
|
|
232
297
|
self.pp = None
|
|
233
298
|
self.printer = Printer()
|
|
299
|
+
self.conversation_manager = get_conversation_manager()
|
|
300
|
+
self.namespace = None
|
|
234
301
|
|
|
235
302
|
def run(self):
|
|
236
303
|
args = self.args
|
|
@@ -238,8 +305,7 @@ class ActionPyProject(BaseAction):
|
|
|
238
305
|
return False
|
|
239
306
|
pp = PyProject(args=self.args, llm=self.llm)
|
|
240
307
|
self.pp = pp
|
|
241
|
-
pp.run(packages=args.py_packages.split(
|
|
242
|
-
",") if args.py_packages else [])
|
|
308
|
+
pp.run(packages=args.py_packages.split(",") if args.py_packages else [])
|
|
243
309
|
source_code_list = SourceCodeList(pp.sources)
|
|
244
310
|
|
|
245
311
|
if self.llm:
|
|
@@ -265,14 +331,26 @@ class ActionPyProject(BaseAction):
|
|
|
265
331
|
"code_execution_warning",
|
|
266
332
|
style="yellow",
|
|
267
333
|
content_length=content_length,
|
|
268
|
-
max_length=self.args.model_max_input_length
|
|
334
|
+
max_length=self.args.model_max_input_length,
|
|
269
335
|
)
|
|
270
336
|
|
|
271
337
|
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
272
338
|
|
|
273
|
-
if (
|
|
274
|
-
|
|
275
|
-
|
|
339
|
+
if (
|
|
340
|
+
(args.enable_auto_fix_merge or args.enable_auto_fix_lint)
|
|
341
|
+
and args.execute
|
|
342
|
+
and args.auto_merge == "editblock"
|
|
343
|
+
):
|
|
344
|
+
code_merge_manager = CodeEditBlockManager(
|
|
345
|
+
llm=self.llm, args=self.args, action=self
|
|
346
|
+
)
|
|
347
|
+
result = code_merge_manager.run(
|
|
348
|
+
query=args.query, source_code_list=source_code_list
|
|
349
|
+
)
|
|
350
|
+
# 将对话添加到 conversation_manager
|
|
351
|
+
self._add_conversations_to_manager(
|
|
352
|
+
result, self.conversation_manager, self.namespace
|
|
353
|
+
)
|
|
276
354
|
return
|
|
277
355
|
|
|
278
356
|
if args.execute:
|
|
@@ -291,49 +369,53 @@ class ActionPyProject(BaseAction):
|
|
|
291
369
|
llm=self.llm, args=self.args, action=self
|
|
292
370
|
)
|
|
293
371
|
else:
|
|
294
|
-
generate = CodeAutoGenerate(
|
|
295
|
-
|
|
296
|
-
|
|
372
|
+
generate = CodeAutoGenerate(llm=self.llm, args=self.args, action=self)
|
|
373
|
+
|
|
297
374
|
generate_result = generate.single_round_run(
|
|
298
375
|
query=args.query, source_code_list=source_code_list
|
|
299
376
|
)
|
|
300
377
|
|
|
301
378
|
elapsed_time = time.time() - start_time
|
|
302
|
-
speed =
|
|
303
|
-
|
|
379
|
+
speed = (
|
|
380
|
+
generate_result.metadata.get("generated_tokens_count", 0) / elapsed_time
|
|
381
|
+
if elapsed_time > 0
|
|
382
|
+
else 0
|
|
383
|
+
)
|
|
304
384
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
305
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
306
|
-
'input_tokens_cost', 0)
|
|
385
|
+
input_tokens_cost = generate_result.metadata.get("input_tokens_cost", 0)
|
|
307
386
|
generated_tokens_cost = generate_result.metadata.get(
|
|
308
|
-
|
|
387
|
+
"generated_tokens_cost", 0
|
|
388
|
+
)
|
|
309
389
|
self.printer.print_in_terminal(
|
|
310
390
|
"code_generation_complete",
|
|
311
391
|
duration=elapsed_time,
|
|
312
|
-
input_tokens=generate_result.metadata.get(
|
|
313
|
-
|
|
314
|
-
output_tokens=generate_result.metadata.get(
|
|
315
|
-
'generated_tokens_count', 0),
|
|
392
|
+
input_tokens=generate_result.metadata.get("input_tokens_count", 0),
|
|
393
|
+
output_tokens=generate_result.metadata.get("generated_tokens_count", 0),
|
|
316
394
|
input_cost=input_tokens_cost,
|
|
317
395
|
output_cost=generated_tokens_cost,
|
|
318
396
|
speed=round(speed, 2),
|
|
319
397
|
model_names=model_names,
|
|
320
|
-
sampling_count=len(generate_result.contents)
|
|
398
|
+
sampling_count=len(generate_result.contents),
|
|
321
399
|
)
|
|
322
400
|
|
|
323
401
|
get_event_manager(self.args.event_file).write_result(
|
|
324
|
-
EventContentCreator.create_result(
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
402
|
+
EventContentCreator.create_result(
|
|
403
|
+
content=EventContentCreator.ResultTokenStatContent(
|
|
404
|
+
model_name=model_names,
|
|
405
|
+
elapsed_time=elapsed_time,
|
|
406
|
+
input_tokens=generate_result.metadata.get(
|
|
407
|
+
"input_tokens_count", 0
|
|
408
|
+
),
|
|
409
|
+
output_tokens=generate_result.metadata.get(
|
|
410
|
+
"generated_tokens_count", 0
|
|
411
|
+
),
|
|
412
|
+
input_cost=input_tokens_cost,
|
|
413
|
+
output_cost=generated_tokens_cost,
|
|
414
|
+
speed=round(speed, 2),
|
|
415
|
+
)
|
|
416
|
+
).to_dict(),
|
|
417
|
+
metadata=EventMetadata(action_file=self.args.file).to_dict(),
|
|
418
|
+
)
|
|
337
419
|
|
|
338
420
|
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
339
421
|
|
|
@@ -341,24 +423,25 @@ class ActionPyProject(BaseAction):
|
|
|
341
423
|
if args.execute and args.auto_merge:
|
|
342
424
|
self.printer.print_in_terminal("code_merge_start")
|
|
343
425
|
if args.auto_merge == "diff":
|
|
344
|
-
code_merge = CodeAutoMergeDiff(
|
|
345
|
-
llm=self.llm, args=self.args)
|
|
426
|
+
code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
|
|
346
427
|
merge_result = code_merge.merge_code(
|
|
347
|
-
generate_result=generate_result
|
|
428
|
+
generate_result=generate_result
|
|
429
|
+
)
|
|
348
430
|
elif args.auto_merge == "strict_diff":
|
|
349
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
350
|
-
llm=self.llm, args=self.args)
|
|
431
|
+
code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
|
|
351
432
|
merge_result = code_merge.merge_code(
|
|
352
|
-
generate_result=generate_result
|
|
433
|
+
generate_result=generate_result
|
|
434
|
+
)
|
|
353
435
|
elif args.auto_merge == "editblock":
|
|
354
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
355
|
-
llm=self.llm, args=self.args)
|
|
436
|
+
code_merge = CodeAutoMergeEditBlock(llm=self.llm, args=self.args)
|
|
356
437
|
merge_result = code_merge.merge_code(
|
|
357
|
-
generate_result=generate_result
|
|
438
|
+
generate_result=generate_result
|
|
439
|
+
)
|
|
358
440
|
else:
|
|
359
441
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
360
442
|
merge_result = code_merge.merge_code(
|
|
361
|
-
generate_result=generate_result
|
|
443
|
+
generate_result=generate_result
|
|
444
|
+
)
|
|
362
445
|
|
|
363
446
|
content = merge_result.contents[0]
|
|
364
447
|
|
|
@@ -387,6 +470,8 @@ class ActionSuffixProject(BaseAction):
|
|
|
387
470
|
self.llm = llm
|
|
388
471
|
self.pp = None
|
|
389
472
|
self.printer = Printer()
|
|
473
|
+
self.conversation_manager = get_conversation_manager()
|
|
474
|
+
self.namespace = None
|
|
390
475
|
|
|
391
476
|
def run(self):
|
|
392
477
|
args = self.args
|
|
@@ -418,9 +503,21 @@ class ActionSuffixProject(BaseAction):
|
|
|
418
503
|
|
|
419
504
|
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
420
505
|
|
|
421
|
-
if (
|
|
422
|
-
|
|
423
|
-
|
|
506
|
+
if (
|
|
507
|
+
(args.enable_auto_fix_merge or args.enable_auto_fix_lint)
|
|
508
|
+
and args.execute
|
|
509
|
+
and args.auto_merge == "editblock"
|
|
510
|
+
):
|
|
511
|
+
code_merge_manager = CodeEditBlockManager(
|
|
512
|
+
llm=self.llm, args=self.args, action=self
|
|
513
|
+
)
|
|
514
|
+
result = code_merge_manager.run(
|
|
515
|
+
query=args.query, source_code_list=source_code_list
|
|
516
|
+
)
|
|
517
|
+
# 将对话添加到 conversation_manager
|
|
518
|
+
self._add_conversations_to_manager(
|
|
519
|
+
result, self.conversation_manager, self.namespace
|
|
520
|
+
)
|
|
424
521
|
return
|
|
425
522
|
|
|
426
523
|
if args.execute:
|
|
@@ -439,48 +536,49 @@ class ActionSuffixProject(BaseAction):
|
|
|
439
536
|
llm=self.llm, args=self.args, action=self
|
|
440
537
|
)
|
|
441
538
|
else:
|
|
442
|
-
generate = CodeAutoGenerate(
|
|
443
|
-
|
|
444
|
-
|
|
539
|
+
generate = CodeAutoGenerate(llm=self.llm, args=self.args, action=self)
|
|
540
|
+
|
|
445
541
|
generate_result = generate.single_round_run(
|
|
446
542
|
query=args.query, source_code_list=source_code_list
|
|
447
543
|
)
|
|
448
544
|
|
|
449
545
|
elapsed_time = time.time() - start_time
|
|
450
|
-
speed =
|
|
451
|
-
|
|
546
|
+
speed = (
|
|
547
|
+
generate_result.metadata.get("generated_tokens_count", 0) / elapsed_time
|
|
548
|
+
if elapsed_time > 0
|
|
549
|
+
else 0
|
|
550
|
+
)
|
|
452
551
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
453
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
454
|
-
|
|
455
|
-
generated_tokens_cost = generate_result.metadata.get(
|
|
456
|
-
'generated_tokens_cost', 0)
|
|
552
|
+
input_tokens_cost = generate_result.metadata.get("input_tokens_cost", 0)
|
|
553
|
+
generated_tokens_cost = generate_result.metadata.get("generated_tokens_cost", 0)
|
|
457
554
|
self.printer.print_in_terminal(
|
|
458
555
|
"code_generation_complete",
|
|
459
556
|
duration=elapsed_time,
|
|
460
|
-
input_tokens=generate_result.metadata.get(
|
|
461
|
-
output_tokens=generate_result.metadata.get(
|
|
462
|
-
'generated_tokens_count', 0),
|
|
557
|
+
input_tokens=generate_result.metadata.get("input_tokens_count", 0),
|
|
558
|
+
output_tokens=generate_result.metadata.get("generated_tokens_count", 0),
|
|
463
559
|
input_cost=input_tokens_cost,
|
|
464
560
|
output_cost=generated_tokens_cost,
|
|
465
561
|
speed=round(speed, 2),
|
|
466
562
|
model_names=model_names,
|
|
467
|
-
sampling_count=len(generate_result.contents)
|
|
563
|
+
sampling_count=len(generate_result.contents),
|
|
468
564
|
)
|
|
469
565
|
|
|
470
566
|
get_event_manager(self.args.event_file).write_result(
|
|
471
|
-
|
|
567
|
+
EventContentCreator.create_result(
|
|
568
|
+
content=EventContentCreator.ResultTokenStatContent(
|
|
472
569
|
model_name=model_names,
|
|
473
570
|
elapsed_time=elapsed_time,
|
|
474
|
-
input_tokens=generate_result.metadata.get(
|
|
475
|
-
'input_tokens_count', 0),
|
|
571
|
+
input_tokens=generate_result.metadata.get("input_tokens_count", 0),
|
|
476
572
|
output_tokens=generate_result.metadata.get(
|
|
477
|
-
|
|
573
|
+
"generated_tokens_count", 0
|
|
574
|
+
),
|
|
478
575
|
input_cost=input_tokens_cost,
|
|
479
576
|
output_cost=generated_tokens_cost,
|
|
480
|
-
speed=round(speed, 2)
|
|
481
|
-
)
|
|
482
|
-
|
|
483
|
-
|
|
577
|
+
speed=round(speed, 2),
|
|
578
|
+
)
|
|
579
|
+
).to_dict(),
|
|
580
|
+
metadata=EventMetadata(action_file=self.args.file).to_dict(),
|
|
581
|
+
)
|
|
484
582
|
|
|
485
583
|
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
486
584
|
|
|
@@ -489,22 +587,16 @@ class ActionSuffixProject(BaseAction):
|
|
|
489
587
|
self.printer.print_in_terminal("code_merge_start")
|
|
490
588
|
if args.auto_merge == "diff":
|
|
491
589
|
code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
|
|
492
|
-
merge_result = code_merge.merge_code(
|
|
493
|
-
generate_result=generate_result)
|
|
590
|
+
merge_result = code_merge.merge_code(generate_result=generate_result)
|
|
494
591
|
elif args.auto_merge == "strict_diff":
|
|
495
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
496
|
-
|
|
497
|
-
merge_result = code_merge.merge_code(
|
|
498
|
-
generate_result=generate_result)
|
|
592
|
+
code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
|
|
593
|
+
merge_result = code_merge.merge_code(generate_result=generate_result)
|
|
499
594
|
elif args.auto_merge == "editblock":
|
|
500
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
501
|
-
|
|
502
|
-
merge_result = code_merge.merge_code(
|
|
503
|
-
generate_result=generate_result)
|
|
595
|
+
code_merge = CodeAutoMergeEditBlock(llm=self.llm, args=self.args)
|
|
596
|
+
merge_result = code_merge.merge_code(generate_result=generate_result)
|
|
504
597
|
else:
|
|
505
598
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
506
|
-
merge_result = code_merge.merge_code(
|
|
507
|
-
generate_result=generate_result)
|
|
599
|
+
merge_result = code_merge.merge_code(generate_result=generate_result)
|
|
508
600
|
|
|
509
601
|
if merge_result is not None:
|
|
510
602
|
content = merge_result.contents[0]
|
|
@@ -530,7 +622,7 @@ class ActionDefaultProject(BaseAction):
|
|
|
530
622
|
ActionDefaultProject用于处理默认项目类型,使用ignorefiles模块进行文件过滤。
|
|
531
623
|
与ActionSuffixProject不同,它不按文件后缀过滤,而是收集所有不被忽略的文本文件。
|
|
532
624
|
"""
|
|
533
|
-
|
|
625
|
+
|
|
534
626
|
def __init__(
|
|
535
627
|
self, args: AutoCoderArgs, llm: Optional[byzerllm.ByzerLLM] = None
|
|
536
628
|
) -> None:
|
|
@@ -538,14 +630,16 @@ class ActionDefaultProject(BaseAction):
|
|
|
538
630
|
self.llm = llm
|
|
539
631
|
self.pp = None
|
|
540
632
|
self.printer = Printer()
|
|
633
|
+
self.conversation_manager = get_conversation_manager()
|
|
634
|
+
self.namespace = None
|
|
541
635
|
|
|
542
636
|
def run(self):
|
|
543
637
|
args = self.args
|
|
544
|
-
|
|
638
|
+
|
|
545
639
|
# project_type为*时,或者没有设置project_type时,执行默认项目
|
|
546
640
|
if args.project_type and args.project_type != "*":
|
|
547
641
|
return False
|
|
548
|
-
|
|
642
|
+
|
|
549
643
|
pp = DefaultProject(args=args, llm=self.llm)
|
|
550
644
|
self.pp = pp
|
|
551
645
|
pp.run()
|
|
@@ -575,9 +669,21 @@ class ActionDefaultProject(BaseAction):
|
|
|
575
669
|
|
|
576
670
|
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
577
671
|
|
|
578
|
-
if (
|
|
579
|
-
|
|
580
|
-
|
|
672
|
+
if (
|
|
673
|
+
(args.enable_auto_fix_merge or args.enable_auto_fix_lint)
|
|
674
|
+
and args.execute
|
|
675
|
+
and args.auto_merge == "editblock"
|
|
676
|
+
):
|
|
677
|
+
code_merge_manager = CodeEditBlockManager(
|
|
678
|
+
llm=self.llm, args=self.args, action=self
|
|
679
|
+
)
|
|
680
|
+
result = code_merge_manager.run(
|
|
681
|
+
query=args.query, source_code_list=source_code_list
|
|
682
|
+
)
|
|
683
|
+
# 将对话添加到 conversation_manager
|
|
684
|
+
self._add_conversations_to_manager(
|
|
685
|
+
result, self.conversation_manager, self.namespace
|
|
686
|
+
)
|
|
581
687
|
return
|
|
582
688
|
|
|
583
689
|
if args.execute:
|
|
@@ -596,48 +702,53 @@ class ActionDefaultProject(BaseAction):
|
|
|
596
702
|
llm=self.llm, args=self.args, action=self
|
|
597
703
|
)
|
|
598
704
|
else:
|
|
599
|
-
generate = CodeAutoGenerate(
|
|
600
|
-
|
|
601
|
-
|
|
705
|
+
generate = CodeAutoGenerate(llm=self.llm, args=self.args, action=self)
|
|
706
|
+
|
|
602
707
|
generate_result = generate.single_round_run(
|
|
603
708
|
query=args.query, source_code_list=source_code_list
|
|
604
709
|
)
|
|
605
710
|
|
|
606
711
|
elapsed_time = time.time() - start_time
|
|
607
|
-
speed =
|
|
608
|
-
|
|
712
|
+
speed = (
|
|
713
|
+
generate_result.metadata.get("generated_tokens_count", 0) / elapsed_time
|
|
714
|
+
if elapsed_time > 0
|
|
715
|
+
else 0
|
|
716
|
+
)
|
|
609
717
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
610
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
611
|
-
'input_tokens_cost', 0)
|
|
718
|
+
input_tokens_cost = generate_result.metadata.get("input_tokens_cost", 0)
|
|
612
719
|
generated_tokens_cost = generate_result.metadata.get(
|
|
613
|
-
|
|
720
|
+
"generated_tokens_cost", 0
|
|
721
|
+
)
|
|
614
722
|
self.printer.print_in_terminal(
|
|
615
723
|
"code_generation_complete",
|
|
616
724
|
duration=elapsed_time,
|
|
617
|
-
input_tokens=generate_result.metadata.get(
|
|
618
|
-
output_tokens=generate_result.metadata.get(
|
|
619
|
-
'generated_tokens_count', 0),
|
|
725
|
+
input_tokens=generate_result.metadata.get("input_tokens_count", 0),
|
|
726
|
+
output_tokens=generate_result.metadata.get("generated_tokens_count", 0),
|
|
620
727
|
input_cost=input_tokens_cost,
|
|
621
728
|
output_cost=generated_tokens_cost,
|
|
622
729
|
speed=round(speed, 2),
|
|
623
730
|
model_names=model_names,
|
|
624
|
-
sampling_count=len(generate_result.contents)
|
|
731
|
+
sampling_count=len(generate_result.contents),
|
|
625
732
|
)
|
|
626
733
|
|
|
627
734
|
get_event_manager(self.args.event_file).write_result(
|
|
628
|
-
|
|
735
|
+
EventContentCreator.create_result(
|
|
736
|
+
content=EventContentCreator.ResultTokenStatContent(
|
|
629
737
|
model_name=model_names,
|
|
630
738
|
elapsed_time=elapsed_time,
|
|
631
739
|
input_tokens=generate_result.metadata.get(
|
|
632
|
-
|
|
740
|
+
"input_tokens_count", 0
|
|
741
|
+
),
|
|
633
742
|
output_tokens=generate_result.metadata.get(
|
|
634
|
-
|
|
743
|
+
"generated_tokens_count", 0
|
|
744
|
+
),
|
|
635
745
|
input_cost=input_tokens_cost,
|
|
636
746
|
output_cost=generated_tokens_cost,
|
|
637
|
-
speed=round(speed, 2)
|
|
638
|
-
)
|
|
639
|
-
|
|
640
|
-
|
|
747
|
+
speed=round(speed, 2),
|
|
748
|
+
)
|
|
749
|
+
).to_dict(),
|
|
750
|
+
metadata=EventMetadata(action_file=self.args.file).to_dict(),
|
|
751
|
+
)
|
|
641
752
|
|
|
642
753
|
global_cancel.check_and_raise(token=self.args.cancel_token)
|
|
643
754
|
|
|
@@ -647,21 +758,23 @@ class ActionDefaultProject(BaseAction):
|
|
|
647
758
|
if args.auto_merge == "diff":
|
|
648
759
|
code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
|
|
649
760
|
merge_result = code_merge.merge_code(
|
|
650
|
-
generate_result=generate_result
|
|
761
|
+
generate_result=generate_result
|
|
762
|
+
)
|
|
651
763
|
elif args.auto_merge == "strict_diff":
|
|
652
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
653
|
-
llm=self.llm, args=self.args)
|
|
764
|
+
code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
|
|
654
765
|
merge_result = code_merge.merge_code(
|
|
655
|
-
generate_result=generate_result
|
|
766
|
+
generate_result=generate_result
|
|
767
|
+
)
|
|
656
768
|
elif args.auto_merge == "editblock":
|
|
657
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
658
|
-
llm=self.llm, args=self.args)
|
|
769
|
+
code_merge = CodeAutoMergeEditBlock(llm=self.llm, args=self.args)
|
|
659
770
|
merge_result = code_merge.merge_code(
|
|
660
|
-
generate_result=generate_result
|
|
771
|
+
generate_result=generate_result
|
|
772
|
+
)
|
|
661
773
|
else:
|
|
662
774
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
663
775
|
merge_result = code_merge.merge_code(
|
|
664
|
-
generate_result=generate_result
|
|
776
|
+
generate_result=generate_result
|
|
777
|
+
)
|
|
665
778
|
|
|
666
779
|
if merge_result is not None:
|
|
667
780
|
content = merge_result.contents[0]
|