auto-coder 0.1.304__py3-none-any.whl → 0.1.306__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 (45) hide show
  1. {auto_coder-0.1.304.dist-info → auto_coder-0.1.306.dist-info}/METADATA +1 -1
  2. {auto_coder-0.1.304.dist-info → auto_coder-0.1.306.dist-info}/RECORD +45 -40
  3. autocoder/agent/auto_learn_from_commit.py +3 -1
  4. autocoder/agent/auto_review_commit.py +3 -1
  5. autocoder/auto_coder.py +3 -2
  6. autocoder/auto_coder_runner.py +116 -3
  7. autocoder/chat_auto_coder.py +9 -1
  8. autocoder/chat_auto_coder_lang.py +552 -278
  9. autocoder/commands/auto_command.py +1 -4
  10. autocoder/commands/auto_web.py +1 -9
  11. autocoder/common/__init__.py +4 -0
  12. autocoder/common/auto_coder_lang.py +737 -392
  13. autocoder/common/code_auto_generate.py +104 -16
  14. autocoder/common/code_auto_generate_diff.py +101 -10
  15. autocoder/common/code_auto_generate_editblock.py +103 -9
  16. autocoder/common/code_auto_generate_strict_diff.py +99 -9
  17. autocoder/common/code_auto_merge.py +8 -0
  18. autocoder/common/code_auto_merge_diff.py +8 -0
  19. autocoder/common/code_auto_merge_editblock.py +7 -0
  20. autocoder/common/code_auto_merge_strict_diff.py +5 -0
  21. autocoder/common/code_modification_ranker.py +4 -2
  22. autocoder/common/command_completer.py +12 -0
  23. autocoder/common/command_generator.py +5 -4
  24. autocoder/common/git_utils.py +13 -7
  25. autocoder/common/global_cancel.py +68 -7
  26. autocoder/common/stream_out_type.py +5 -1
  27. autocoder/common/utils_code_auto_generate.py +29 -3
  28. autocoder/dispacher/__init__.py +18 -19
  29. autocoder/dispacher/actions/action.py +6 -162
  30. autocoder/dispacher/actions/plugins/action_regex_project.py +2 -6
  31. autocoder/index/filter/quick_filter.py +6 -3
  32. autocoder/index/index.py +2 -4
  33. autocoder/memory/__init__.py +7 -0
  34. autocoder/memory/active_context_manager.py +649 -0
  35. autocoder/memory/active_package.py +469 -0
  36. autocoder/memory/async_processor.py +161 -0
  37. autocoder/memory/directory_mapper.py +67 -0
  38. autocoder/utils/auto_coder_utils/chat_stream_out.py +61 -11
  39. autocoder/utils/project_structure.py +35 -1
  40. autocoder/utils/thread_utils.py +78 -169
  41. autocoder/version.py +1 -1
  42. {auto_coder-0.1.304.dist-info → auto_coder-0.1.306.dist-info}/LICENSE +0 -0
  43. {auto_coder-0.1.304.dist-info → auto_coder-0.1.306.dist-info}/WHEEL +0 -0
  44. {auto_coder-0.1.304.dist-info → auto_coder-0.1.306.dist-info}/entry_points.txt +0 -0
  45. {auto_coder-0.1.304.dist-info → auto_coder-0.1.306.dist-info}/top_level.txt +0 -0
@@ -112,10 +112,7 @@ class ActionTSProject(BaseAction):
112
112
  f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
113
113
  )
114
114
 
115
- if global_cancel.requested:
116
- printer = Printer()
117
- raise Exception(printer.get_message_from_key(
118
- "generation_cancelled"))
115
+ global_cancel.check_and_raise()
119
116
 
120
117
  if args.execute:
121
118
  self.printer.print_in_terminal("code_generation_start")
@@ -181,10 +178,7 @@ class ActionTSProject(BaseAction):
181
178
  action_file=self.args.file
182
179
  ).to_dict())
183
180
 
184
- if global_cancel.requested:
185
- printer = Printer()
186
- raise Exception(printer.get_message_from_key(
187
- "generation_cancelled"))
181
+ global_cancel.check_and_raise()
188
182
 
189
183
  merge_result = None
190
184
  if args.execute and args.auto_merge:
@@ -227,144 +221,6 @@ class ActionTSProject(BaseAction):
227
221
  )
228
222
 
229
223
 
230
- class ActionPyScriptProject(BaseAction):
231
- def __init__(
232
- self, args: AutoCoderArgs, llm: Optional[byzerllm.ByzerLLM] = None
233
- ) -> None:
234
- self.args = args
235
- self.llm = llm
236
- self.printer = Printer()
237
-
238
- def run(self) -> bool:
239
- args = self.args
240
- if args.project_type != "py-script":
241
- return False
242
- pp = Level1PyProject(
243
- script_path=args.script_path, package_name=args.package_name
244
- )
245
- pp.run()
246
- source_code_list = SourceCodeList(pp.sources)
247
- self.process_content(source_code_list)
248
- return True
249
-
250
- def process_content(self, source_code_list: SourceCodeList):
251
- args = self.args
252
- if global_cancel.requested:
253
- printer = Printer()
254
- raise Exception(printer.get_message_from_key(
255
- "generation_cancelled"))
256
-
257
- if args.execute:
258
- self.printer.print_in_terminal("code_generation_start")
259
- start_time = time.time()
260
- if args.auto_merge == "diff":
261
- generate = CodeAutoGenerateDiff(
262
- llm=self.llm, args=self.args, action=self
263
- )
264
- elif args.auto_merge == "strict_diff":
265
- generate = CodeAutoGenerateStrictDiff(
266
- llm=self.llm, args=self.args, action=self
267
- )
268
- elif args.auto_merge == "editblock":
269
- generate = CodeAutoGenerateEditBlock(
270
- llm=self.llm, args=self.args, action=self
271
- )
272
- else:
273
- generate = CodeAutoGenerate(
274
- llm=self.llm, args=self.args, action=self)
275
- if self.args.enable_multi_round_generate:
276
- generate_result = generate.multi_round_run(
277
- query=args.query, source_code_list=source_code_list
278
- )
279
- else:
280
- generate_result = generate.single_round_run(
281
- query=args.query, source_code_list=source_code_list
282
- )
283
-
284
- elapsed_time = time.time() - start_time
285
- speed = generate_result.metadata.get(
286
- 'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
287
- model_names = ",".join(get_llm_names(generate.llms))
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)
292
- self.printer.print_in_terminal(
293
- "code_generation_complete",
294
- duration=elapsed_time,
295
- input_tokens=generate_result.metadata.get(
296
- 'input_tokens_count', 0),
297
- output_tokens=generate_result.metadata.get(
298
- 'generated_tokens_count', 0),
299
- input_cost=input_tokens_cost,
300
- output_cost=generated_tokens_cost,
301
- speed=round(speed, 2),
302
- model_names=model_names,
303
- sampling_count=len(generate_result.contents)
304
- )
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
-
321
- if global_cancel.requested:
322
- printer = Printer()
323
- raise Exception(printer.get_message_from_key(
324
- "generation_cancelled"))
325
-
326
- merge_result = None
327
- if args.execute and args.auto_merge:
328
- self.printer.print_in_terminal("code_merge_start")
329
- if args.auto_merge == "diff":
330
- code_merge = CodeAutoMergeDiff(
331
- llm=self.llm, args=self.args)
332
- merge_result = code_merge.merge_code(
333
- generate_result=generate_result)
334
- elif args.auto_merge == "strict_diff":
335
- code_merge = CodeAutoMergeStrictDiff(
336
- llm=self.llm, args=self.args)
337
- merge_result = code_merge.merge_code(
338
- generate_result=generate_result)
339
- elif args.auto_merge == "editblock":
340
- code_merge = CodeAutoMergeEditBlock(
341
- llm=self.llm, args=self.args)
342
- merge_result = code_merge.merge_code(
343
- generate_result=generate_result)
344
- else:
345
- code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
346
- merge_result = code_merge.merge_code(
347
- generate_result=generate_result)
348
-
349
- content = merge_result.contents[0]
350
-
351
- store_code_model_conversation(
352
- args=self.args,
353
- instruction=self.args.query,
354
- conversations=merge_result.conversations[0],
355
- model=self.llm.default_model_name,
356
- )
357
- else:
358
- content = generate_result.contents[0]
359
-
360
- store_code_model_conversation(
361
- args=self.args,
362
- instruction=self.args.query,
363
- conversations=generate_result.conversations[0],
364
- model=self.llm.default_model_name,
365
- )
366
-
367
-
368
224
  class ActionPyProject(BaseAction):
369
225
  def __init__(
370
226
  self, args: AutoCoderArgs, llm: Optional[byzerllm.ByzerLLM] = None
@@ -410,10 +266,7 @@ class ActionPyProject(BaseAction):
410
266
  max_length=self.args.model_max_input_length
411
267
  )
412
268
 
413
- if global_cancel.requested:
414
- printer = Printer()
415
- raise Exception(printer.get_message_from_key(
416
- "generation_cancelled"))
269
+ global_cancel.check_and_raise()
417
270
 
418
271
  if args.execute:
419
272
  self.printer.print_in_terminal("code_generation_start")
@@ -479,10 +332,7 @@ class ActionPyProject(BaseAction):
479
332
  action_file=self.args.file
480
333
  ).to_dict())
481
334
 
482
- if global_cancel.requested:
483
- printer = Printer()
484
- raise Exception(printer.get_message_from_key(
485
- "generation_cancelled"))
335
+ global_cancel.check_and_raise()
486
336
 
487
337
  merge_result = None
488
338
  if args.execute and args.auto_merge:
@@ -563,10 +413,7 @@ class ActionSuffixProject(BaseAction):
563
413
  f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
564
414
  )
565
415
 
566
- if global_cancel.requested:
567
- printer = Printer()
568
- raise Exception(printer.get_message_from_key(
569
- "generation_cancelled"))
416
+ global_cancel.check_and_raise()
570
417
 
571
418
  if args.execute:
572
419
  self.printer.print_in_terminal("code_generation_start")
@@ -631,10 +478,7 @@ class ActionSuffixProject(BaseAction):
631
478
  action_file=self.args.file
632
479
  ).to_dict())
633
480
 
634
- if global_cancel.requested:
635
- printer = Printer()
636
- raise Exception(printer.get_message_from_key(
637
- "generation_cancelled"))
481
+ global_cancel.check_and_raise()
638
482
 
639
483
  merge_result = None
640
484
  if args.execute and args.auto_merge:
@@ -66,9 +66,7 @@ class ActionRegexProject:
66
66
 
67
67
  start_time = time.time()
68
68
 
69
- if global_cancel.requested:
70
- printer = Printer()
71
- raise Exception(printer.get_message_from_key("generation_cancelled"))
69
+ global_cancel.check_and_raise()
72
70
 
73
71
  if args.execute:
74
72
  self.printer.print_in_terminal("code_generation_start")
@@ -128,9 +126,7 @@ class ActionRegexProject:
128
126
  action_file=self.args.file
129
127
  ).to_dict())
130
128
 
131
- if global_cancel.requested:
132
- printer = Printer()
133
- raise Exception(printer.get_message_from_key("generation_cancelled"))
129
+ global_cancel.check_and_raise()
134
130
 
135
131
  merge_result = None
136
132
  if args.execute and args.auto_merge:
@@ -120,7 +120,8 @@ class QuickFilter():
120
120
  self.index_manager.index_filter_llm,
121
121
  [{"role": "user", "content": self.quick_filter_files.prompt(
122
122
  chunk, self.args.query)}],
123
- {}
123
+ {},
124
+ self.args
124
125
  )
125
126
  full_response, last_meta = stream_out(
126
127
  stream_generator,
@@ -485,7 +486,8 @@ class QuickFilter():
485
486
  stream_generator = stream_chat_with_continue(
486
487
  self.index_manager.index_filter_llm,
487
488
  [{"role": "user", "content": query}],
488
- {}
489
+ {},
490
+ self.args
489
491
  )
490
492
 
491
493
  def extract_file_number_list(content: str) -> str:
@@ -760,7 +762,8 @@ class QuickFilter():
760
762
  stream_generator = stream_chat_with_continue(
761
763
  self.index_manager.index_filter_llm,
762
764
  [{"role": "user", "content": prompt}],
763
- {}
765
+ {},
766
+ self.args
764
767
  )
765
768
 
766
769
  def extract_file_number_list(content: str) -> str:
autocoder/index/index.py CHANGED
@@ -296,8 +296,7 @@ class IndexManager:
296
296
  return False
297
297
 
298
298
  def build_index_for_single_source(self, source: SourceCode):
299
- if global_cancel.requested:
300
- return None
299
+ global_cancel.check_and_raise()
301
300
 
302
301
  file_path = source.module_name
303
302
  if not os.path.exists(file_path):
@@ -552,8 +551,7 @@ class IndexManager:
552
551
  for source in wait_to_build_files
553
552
  ]
554
553
  for future in as_completed(futures):
555
- if global_cancel.requested:
556
- break
554
+ global_cancel.check_and_raise()
557
555
  result = future.result()
558
556
  if result is not None:
559
557
  counter += 1
@@ -0,0 +1,7 @@
1
+ """
2
+ 记忆子系统 - 用于跟踪和记录代码变更上下文
3
+ """
4
+
5
+ from autocoder.memory.active_context_manager import ActiveContextManager
6
+
7
+ __all__ = ["ActiveContextManager"]