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.

@@ -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(SourceCode(
100
- module_name=html_path,
101
- source_code=html_code,
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 (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
120
- code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
121
- code_merge_manager.run(query=args.query, source_code_list=source_code_list)
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
- llm=self.llm, args=self.args, action=self)
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 = generate_result.metadata.get(
148
- 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
149
- input_tokens_cost = generate_result.metadata.get(
150
- 'input_tokens_cost', 0)
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
- 'generated_tokens_cost', 0)
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
- 'input_tokens_count', 0),
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(content=EventContentCreator.ResultTokenStatContent(
170
- model_name=model_names,
171
- elapsed_time=elapsed_time,
172
- input_tokens=generate_result.metadata.get(
173
- 'input_tokens_count', 0),
174
- output_tokens=generate_result.metadata.get(
175
- 'generated_tokens_count', 0),
176
- input_cost=input_tokens_cost,
177
- output_cost=generated_tokens_cost,
178
- speed=round(speed, 2)
179
- )).to_dict(),metadata=EventMetadata(
180
- action_file=self.args.file
181
- ).to_dict())
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 (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
274
- code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
275
- code_merge_manager.run(query=args.query, source_code_list=source_code_list)
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
- llm=self.llm, args=self.args, action=self)
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 = generate_result.metadata.get(
303
- 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
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
- 'generated_tokens_cost', 0)
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
- 'input_tokens_count', 0),
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(content=EventContentCreator.ResultTokenStatContent(
325
- model_name=model_names,
326
- elapsed_time=elapsed_time,
327
- input_tokens=generate_result.metadata.get(
328
- 'input_tokens_count', 0),
329
- output_tokens=generate_result.metadata.get(
330
- 'generated_tokens_count', 0),
331
- input_cost=input_tokens_cost,
332
- output_cost=generated_tokens_cost,
333
- speed=round(speed, 2)
334
- )).to_dict(), metadata=EventMetadata(
335
- action_file=self.args.file
336
- ).to_dict())
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 (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
422
- code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
423
- code_merge_manager.run(query=args.query, source_code_list=source_code_list)
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
- llm=self.llm, args=self.args, action=self)
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 = generate_result.metadata.get(
451
- 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
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
- 'input_tokens_cost', 0)
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('input_tokens_count', 0),
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
- EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
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
- 'generated_tokens_count', 0),
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
- )).to_dict(), metadata=EventMetadata(
482
- action_file=self.args.file
483
- ).to_dict())
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
- llm=self.llm, args=self.args)
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
- llm=self.llm, args=self.args)
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 (args.enable_auto_fix_merge or args.enable_auto_fix_lint) and args.execute and args.auto_merge=="editblock":
579
- code_merge_manager = CodeEditBlockManager(llm=self.llm, args=self.args,action=self)
580
- code_merge_manager.run(query=args.query, source_code_list=source_code_list)
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
- llm=self.llm, args=self.args, action=self)
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 = generate_result.metadata.get(
608
- 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
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
- 'generated_tokens_cost', 0)
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('input_tokens_count', 0),
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
- EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
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
- 'input_tokens_count', 0),
740
+ "input_tokens_count", 0
741
+ ),
633
742
  output_tokens=generate_result.metadata.get(
634
- 'generated_tokens_count', 0),
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
- )).to_dict(), metadata=EventMetadata(
639
- action_file=self.args.file
640
- ).to_dict())
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]