auto-coder 0.1.301__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.

Files changed (33) hide show
  1. {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/METADATA +2 -1
  2. {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/RECORD +33 -25
  3. autocoder/auto_coder.py +6 -7
  4. autocoder/auto_coder_runner.py +9 -9
  5. autocoder/chat_auto_coder.py +6 -1
  6. autocoder/commands/auto_command.py +313 -205
  7. autocoder/commands/tools.py +123 -85
  8. autocoder/common/__init__.py +2 -0
  9. autocoder/common/action_yml_file_manager.py +28 -6
  10. autocoder/common/auto_coder_lang.py +2 -2
  11. autocoder/common/auto_configure.py +9 -4
  12. autocoder/common/code_auto_merge.py +1 -1
  13. autocoder/common/code_auto_merge_diff.py +1 -1
  14. autocoder/common/code_auto_merge_editblock.py +1 -1
  15. autocoder/common/code_auto_merge_strict_diff.py +1 -1
  16. autocoder/common/stream_out_type.py +7 -0
  17. autocoder/dispacher/actions/action.py +221 -101
  18. autocoder/dispacher/actions/plugins/action_regex_project.py +18 -0
  19. autocoder/events/__init__.py +57 -0
  20. autocoder/events/event_content.py +423 -0
  21. autocoder/events/event_manager.py +327 -0
  22. autocoder/events/event_manager_singleton.py +245 -0
  23. autocoder/events/event_store.py +376 -0
  24. autocoder/events/event_types.py +103 -0
  25. autocoder/index/entry.py +88 -60
  26. autocoder/index/filter/quick_filter.py +71 -3
  27. autocoder/run_context.py +62 -0
  28. autocoder/utils/auto_coder_utils/chat_stream_out.py +32 -1
  29. autocoder/version.py +1 -1
  30. {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/LICENSE +0 -0
  31. {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/WHEEL +0 -0
  32. {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/entry_points.txt +0 -0
  33. {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/top_level.txt +0 -0
@@ -156,13 +156,18 @@ def config_readme() -> str:
156
156
  2. py
157
157
  3. 代码文件后缀名列表(比如.java,.py,.go,.js,.ts),多个按逗号分割
158
158
 
159
- 推荐使用 3 选项,因为项目类型通常为多种后缀名混合。
160
-
161
- ## include_project_structure: 是否包含项目结构
162
- 是否包含项目结构。推荐设置为 true。默认为true,但是项目结构也可能很大,如果项目结构很大,那么可以设置为 false。
159
+ 推荐使用 3 选项,因为项目类型通常为多种后缀名混合。
163
160
 
164
161
  ## conversation_prune_safe_zone_tokens: 对话剪枝安全区token数量
165
162
  在对话剪枝时,会根据对话的token数量,如果token数量超过该值,那么会剪枝掉一部分对话。
163
+
164
+ ## enable_task_history
165
+ 该参数对 /auto 指令有效, 当你使用 /auto 指令的时候,系统会自动将近期对项目的变更(commit) 信息给到大模型,方便大模型对用户的需求有更好的理解。
166
+ 默认为 false
167
+
168
+ ## include_project_structure
169
+ 使用 /chat , /coding 等指令时,是否将项目的目录结构也放到上下文中。
170
+ 默认为true, 如果你项目很大,请设置为 false
166
171
  """
167
172
 
168
173
  class ConfigAutoTuner:
@@ -197,7 +197,7 @@ class CodeAutoMerge:
197
197
 
198
198
  self.printer.print_in_terminal("files_merged", total=total)
199
199
  if not force_skip_git and not self.args.skip_commit:
200
- commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}_{md5}")
200
+ commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}")
201
201
 
202
202
  action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
203
203
  action_file_name = os.path.basename(self.args.file)
@@ -580,7 +580,7 @@ class CodeAutoMergeDiff:
580
580
 
581
581
  self.printer.print_in_terminal("files_merged_total", total=total)
582
582
  if not force_skip_git and not self.args.skip_commit:
583
- commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}_{md5}")
583
+ commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}")
584
584
 
585
585
  action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
586
586
  action_file_name = os.path.basename(self.args.file)
@@ -427,7 +427,7 @@ class CodeAutoMergeEditBlock:
427
427
  try:
428
428
  commit_result = git_utils.commit_changes(
429
429
  self.args.source_dir,
430
- f"{self.args.query}\nauto_coder_{file_name}_{md5}",
430
+ f"{self.args.query}\nauto_coder_{file_name}",
431
431
  )
432
432
 
433
433
  action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
@@ -287,7 +287,7 @@ class CodeAutoMergeStrictDiff:
287
287
  self.printer.print_in_terminal("files_merged_total", total=total)
288
288
  if not force_skip_git and not self.args.skip_commit:
289
289
  commit_result = git_utils.commit_changes(
290
- self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}_{md5}"
290
+ self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}"
291
291
  )
292
292
  action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
293
293
  action_file_name = os.path.basename(self.args.file)
@@ -0,0 +1,7 @@
1
+ from enum import Enum
2
+
3
+ class AutoCommandStreamOutType(Enum):
4
+ COMMAND_SUGGESTION = "command_suggestion"
5
+
6
+ class IndexFilterStreamOutType(Enum):
7
+ FILE_NUMBER_LIST = "file_number_list"
@@ -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(f"Failed to use tokenizer to count tokens, fallback to len(): {e}")
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("generation_cancelled"))
113
-
114
- if args.execute:
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(llm=self.llm, args=self.args, action=self)
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('generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
142
- input_tokens_cost = generate_result.metadata.get('input_tokens_cost', 0)
143
- generated_tokens_cost = generate_result.metadata.get('generated_tokens_cost', 0)
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('input_tokens_count', 0),
149
- output_tokens=generate_result.metadata.get('generated_tokens_count', 0),
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("generation_cancelled"))
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(llm=self.llm, args=self.args)
166
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(llm=self.llm, args=self.args)
169
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(llm=self.llm, args=self.args)
172
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(generate_result=generate_result)
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("generation_cancelled"))
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(llm=self.llm, args=self.args, action=self)
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('generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
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('input_tokens_cost', 0)
252
- generated_tokens_cost = generate_result.metadata.get('generated_tokens_cost', 0)
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('input_tokens_count', 0),
257
- output_tokens=generate_result.metadata.get('generated_tokens_count', 0),
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("generation_cancelled"))
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(llm=self.llm, args=self.args)
274
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(llm=self.llm, args=self.args)
277
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(llm=self.llm, args=self.args)
280
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(generate_result=generate_result)
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(",") if args.py_packages else [])
320
- source_code_list = SourceCodeList(pp.sources)
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
- "code_execution_warning",
343
- style="yellow",
344
- content_length=content_length,
345
- max_length=self.args.model_max_input_length
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("generation_cancelled"))
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(llm=self.llm, args=self.args, action=self)
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('generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
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('input_tokens_cost', 0)
383
- generated_tokens_cost = generate_result.metadata.get('generated_tokens_cost', 0)
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('input_tokens_count', 0),
388
- output_tokens=generate_result.metadata.get('generated_tokens_count', 0),
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("generation_cancelled"))
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(llm=self.llm, args=self.args)
405
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(llm=self.llm, args=self.args)
408
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(llm=self.llm, args=self.args)
411
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(generate_result=generate_result)
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("generation_cancelled"))
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(llm=self.llm, args=self.args, action=self)
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('generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
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('input_tokens_cost', 0)
506
- generated_tokens_cost = generate_result.metadata.get('generated_tokens_cost', 0)
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('generated_tokens_count', 0),
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("generation_cancelled") )
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(generate_result=generate_result)
644
+ merge_result = code_merge.merge_code(
645
+ generate_result=generate_result)
529
646
  elif args.auto_merge == "strict_diff":
530
- code_merge = CodeAutoMergeStrictDiff(llm=self.llm, args=self.args)
531
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(llm=self.llm, args=self.args)
534
- merge_result = code_merge.merge_code(generate_result=generate_result)
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(generate_result=generate_result)
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
-