auto-coder 0.1.212__tar.gz → 0.1.213__tar.gz

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 (138) hide show
  1. {auto_coder-0.1.212 → auto_coder-0.1.213}/PKG-INFO +1 -1
  2. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/auto_coder.py +14 -3
  4. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_modification_ranker.py +17 -15
  5. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/index/index.py +95 -33
  6. auto_coder-0.1.213/src/autocoder/version.py +1 -0
  7. auto_coder-0.1.212/src/autocoder/version.py +0 -1
  8. {auto_coder-0.1.212 → auto_coder-0.1.213}/LICENSE +0 -0
  9. {auto_coder-0.1.212 → auto_coder-0.1.213}/README.md +0 -0
  10. {auto_coder-0.1.212 → auto_coder-0.1.213}/setup.cfg +0 -0
  11. {auto_coder-0.1.212 → auto_coder-0.1.213}/setup.py +0 -0
  12. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/auto_coder.egg-info/SOURCES.txt +0 -0
  13. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  14. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/auto_coder.egg-info/entry_points.txt +0 -0
  15. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/auto_coder.egg-info/requires.txt +0 -0
  16. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/auto_coder.egg-info/top_level.txt +0 -0
  17. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/__init__.py +0 -0
  18. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/__init__.py +0 -0
  19. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  20. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/auto_filegroup.py +0 -0
  21. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/auto_guess_query.py +0 -0
  22. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/auto_tool.py +0 -0
  23. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/coder.py +0 -0
  24. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/designer.py +0 -0
  25. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/planner.py +0 -0
  26. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/agent/project_reader.py +0 -0
  27. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/auto_coder_lang.py +0 -0
  28. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/auto_coder_rag.py +0 -0
  29. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/auto_coder_server.py +0 -0
  30. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/benchmark.py +0 -0
  31. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/chat/__init__.py +0 -0
  32. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/chat_auto_coder.py +0 -0
  33. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/chat_auto_coder_lang.py +0 -0
  34. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/command_args.py +0 -0
  35. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/JupyterClient.py +0 -0
  36. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/ShellClient.py +0 -0
  37. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/__init__.py +0 -0
  38. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/anything2images.py +0 -0
  39. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/audio.py +0 -0
  40. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/buildin_tokenizer.py +0 -0
  41. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/chunk_validation.py +0 -0
  42. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/cleaner.py +0 -0
  43. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_execute.py +0 -0
  44. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_generate.py +0 -0
  45. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  46. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  47. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  48. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_merge.py +0 -0
  49. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  50. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  51. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  52. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/command_completer.py +0 -0
  53. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/command_generator.py +0 -0
  54. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/command_templates.py +0 -0
  55. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/const.py +0 -0
  56. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/git_utils.py +0 -0
  57. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/image_to_page.py +0 -0
  58. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/interpreter.py +0 -0
  59. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/llm_rerank.py +0 -0
  60. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/mcp_hub.py +0 -0
  61. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/mcp_server.py +0 -0
  62. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/mcp_tools.py +0 -0
  63. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/recall_validation.py +0 -0
  64. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/screenshots.py +0 -0
  65. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/search.py +0 -0
  66. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/search_replace.py +0 -0
  67. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/sys_prompt.py +0 -0
  68. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/text.py +0 -0
  69. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/common/types.py +0 -0
  70. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/data/tokenizer.json +0 -0
  71. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/db/__init__.py +0 -0
  72. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/db/store.py +0 -0
  73. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/dispacher/__init__.py +0 -0
  74. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/dispacher/actions/__init__.py +0 -0
  75. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/dispacher/actions/action.py +0 -0
  76. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/dispacher/actions/copilot.py +0 -0
  77. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  78. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  79. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  80. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/index/__init__.py +0 -0
  81. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/index/for_command.py +0 -0
  82. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/index/symbols_utils.py +0 -0
  83. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/lang.py +0 -0
  84. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/pyproject/__init__.py +0 -0
  85. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/__init__.py +0 -0
  86. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/api_server.py +0 -0
  87. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/cache/__init__.py +0 -0
  88. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/cache/base_cache.py +0 -0
  89. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  90. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  91. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/cache/simple_cache.py +0 -0
  92. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/doc_filter.py +0 -0
  93. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/document_retriever.py +0 -0
  94. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/llm_wrapper.py +0 -0
  95. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/loaders/__init__.py +0 -0
  96. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  97. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  98. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  99. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  100. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/long_context_rag.py +0 -0
  101. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/rag_config.py +0 -0
  102. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/rag_entry.py +0 -0
  103. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/raw_rag.py +0 -0
  104. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/relevant_utils.py +0 -0
  105. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/simple_directory_reader.py +0 -0
  106. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/simple_rag.py +0 -0
  107. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/stream_event/__init__.py +0 -0
  108. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  109. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/stream_event/types.py +0 -0
  110. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/token_checker.py +0 -0
  111. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/token_counter.py +0 -0
  112. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/token_limiter.py +0 -0
  113. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/types.py +0 -0
  114. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/utils.py +0 -0
  115. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/rag/variable_holder.py +0 -0
  116. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/regexproject/__init__.py +0 -0
  117. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/suffixproject/__init__.py +0 -0
  118. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/tsproject/__init__.py +0 -0
  119. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/__init__.py +0 -0
  120. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/_markitdown.py +0 -0
  121. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/conversation_store.py +0 -0
  122. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  123. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/log_capture.py +0 -0
  124. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/multi_turn.py +0 -0
  125. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/operate_config_api.py +0 -0
  126. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/print_table.py +0 -0
  127. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/queue_communicate.py +0 -0
  128. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/request_event_queue.py +0 -0
  129. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/request_queue.py +0 -0
  130. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/rest.py +0 -0
  131. {auto_coder-0.1.212 → auto_coder-0.1.213}/src/autocoder/utils/tests.py +0 -0
  132. {auto_coder-0.1.212 → auto_coder-0.1.213}/tests/test_action_regex_project.py +0 -0
  133. {auto_coder-0.1.212 → auto_coder-0.1.213}/tests/test_chat_auto_coder.py +0 -0
  134. {auto_coder-0.1.212 → auto_coder-0.1.213}/tests/test_code_auto_merge_editblock.py +0 -0
  135. {auto_coder-0.1.212 → auto_coder-0.1.213}/tests/test_command_completer.py +0 -0
  136. {auto_coder-0.1.212 → auto_coder-0.1.213}/tests/test_planner.py +0 -0
  137. {auto_coder-0.1.212 → auto_coder-0.1.213}/tests/test_queue_communicate.py +0 -0
  138. {auto_coder-0.1.212 → auto_coder-0.1.213}/tests/test_symbols_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.212
3
+ Version: 0.1.213
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.212
3
+ Version: 0.1.213
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -295,9 +295,20 @@ def main(input_args: Optional[List[str]] = None):
295
295
  llm.setup_sub_client("code_model", code_model)
296
296
 
297
297
  if args.generate_rerank_model:
298
- generate_rerank_model = byzerllm.ByzerLLM()
299
- generate_rerank_model.setup_default_model_name(args.generate_rerank_model)
300
- llm.setup_sub_client("generate_rerank_model", generate_rerank_model)
298
+ if "," in args.generate_rerank_model:
299
+ # Multiple rerank models specified
300
+ model_names = args.generate_rerank_model.split(",")
301
+ models = []
302
+ for _, model_name in enumerate(model_names):
303
+ rerank_model = byzerllm.ByzerLLM()
304
+ rerank_model.setup_default_model_name(model_name.strip())
305
+ models.append(rerank_model)
306
+ llm.setup_sub_client("generate_rerank_model", models)
307
+ else:
308
+ # Single rerank model
309
+ rerank_model = byzerllm.ByzerLLM()
310
+ rerank_model.setup_default_model_name(args.generate_rerank_model)
311
+ llm.setup_sub_client("generate_rerank_model", rerank_model)
301
312
 
302
313
  if args.inference_model:
303
314
  inference_model = byzerllm.ByzerLLM()
@@ -14,10 +14,9 @@ class CodeModificationRanker:
14
14
  def __init__(self, llm: byzerllm.ByzerLLM, args: AutoCoderArgs):
15
15
  self.llm = llm
16
16
  self.args = args
17
- if self.llm.get_sub_client("generate_rerank_model"):
18
- self.rerank_llm = self.llm.get_sub_client("generate_rerank_model")
19
- else:
20
- self.rerank_llm = self.llm
17
+ self.llms = self.llm.get_sub_client("generate_rerank_model") or [self.llm]
18
+ if not isinstance(self.llms, list):
19
+ self.llms = [self.llms]
21
20
 
22
21
  @byzerllm.prompt()
23
22
  def _rank_modifications(self, s:CodeGenerateResult) -> str:
@@ -63,17 +62,20 @@ class CodeModificationRanker:
63
62
 
64
63
  logger.info(f"Start ranking {len(generate_result.contents)} candidates")
65
64
  generate_times = self.args.generate_times_same_model
66
-
65
+ total_tasks = len(self.llms) * generate_times
67
66
  try:
68
- # Create a thread pool with generate_times workers
69
- with ThreadPoolExecutor(max_workers=generate_times) as executor:
70
- # Submit tasks
71
- futures = [
72
- executor.submit(
73
- self._rank_modifications.with_llm(self.rerank_llm).with_return_type(RankResult).run,
74
- generate_result
75
- ) for _ in range(generate_times)
76
- ]
67
+ # Create a thread pool with (number of models * generate_times) workers
68
+ with ThreadPoolExecutor(max_workers=total_tasks) as executor:
69
+ # Submit tasks for each model and generate_times
70
+ futures = []
71
+ for llm in self.llms:
72
+ for _ in range(generate_times):
73
+ futures.append(
74
+ executor.submit(
75
+ self._rank_modifications.with_llm(llm).with_return_type(RankResult).run,
76
+ generate_result
77
+ )
78
+ )
77
79
 
78
80
  # Collect all results
79
81
  results = []
@@ -104,7 +106,7 @@ class CodeModificationRanker:
104
106
  elapsed = time.time() - start_time
105
107
  # Format scores for logging
106
108
  score_details = ", ".join([f"candidate {i}: {candidate_scores[i]:.2f}" for i in sorted_candidates])
107
- logger.info(f"Ranking completed in {elapsed:.2f}s, best candidate index: {sorted_candidates[0]}, scores: {score_details}")
109
+ logger.info(f"Ranking completed in {elapsed:.2f}s, total voters: {total_tasks}, best candidate index: {sorted_candidates[0]}, scores: {score_details}")
108
110
 
109
111
  rerank_contents = [generate_result.contents[i] for i in sorted_candidates]
110
112
  rerank_conversations = [generate_result.conversations[i] for i in sorted_candidates]
@@ -578,8 +578,18 @@ def build_index_and_filter_files(
578
578
  "indexed_files": 0,
579
579
  "level1_filtered": 0,
580
580
  "level2_filtered": 0,
581
+ "verified_files": 0,
581
582
  "final_files": 0,
582
- "timings": {}
583
+ "timings": {
584
+ "process_tagged_sources": 0.0,
585
+ "build_index": 0.0,
586
+ "level1_filter": 0.0,
587
+ "level2_filter": 0.0,
588
+ "relevance_verification": 0.0,
589
+ "file_selection": 0.0,
590
+ "prepare_output": 0.0,
591
+ "total": 0.0
592
+ }
583
593
  }
584
594
 
585
595
  def get_file_path(file_path):
@@ -597,7 +607,8 @@ def build_index_and_filter_files(
597
607
  final_files[get_file_path(source.module_name)] = TargetFile(
598
608
  file_path=source.module_name, reason="Rest/Rag/Search"
599
609
  )
600
- stats["timings"]["process_tagged_sources"] = time.monotonic() - phase_start
610
+ phase_end = time.monotonic()
611
+ stats["timings"]["process_tagged_sources"] = phase_end - phase_start
601
612
 
602
613
  if not args.skip_build_index and llm:
603
614
  # Phase 2: Build index
@@ -615,7 +626,8 @@ def build_index_and_filter_files(
615
626
  index_manager = IndexManager(llm=llm, sources=sources, args=args)
616
627
  index_data = index_manager.build_index()
617
628
  stats["indexed_files"] = len(index_data) if index_data else 0
618
- stats["timings"]["build_index"] = time.monotonic() - phase_start
629
+ phase_end = time.monotonic()
630
+ stats["timings"]["build_index"] = phase_end - phase_start
619
631
 
620
632
  if args.request_id and not args.skip_events:
621
633
  queue_communicate.send_event(
@@ -650,7 +662,8 @@ def build_index_and_filter_files(
650
662
  file_path = file.file_path.strip()
651
663
  final_files[get_file_path(file_path)] = file
652
664
  stats["level1_filtered"] = len(target_files.file_list)
653
- stats["timings"]["level1_filter"] = time.monotonic() - phase_start
665
+ phase_end = time.monotonic()
666
+ stats["timings"]["level1_filter"] = phase_end - phase_start
654
667
 
655
668
  # Phase 4: Level 2 filtering - Related files
656
669
  if target_files is not None and args.index_filter_level >= 2:
@@ -673,8 +686,8 @@ def build_index_and_filter_files(
673
686
  file_path = file.file_path.strip()
674
687
  final_files[get_file_path(file_path)] = file
675
688
  stats["level2_filtered"] = len(related_files.file_list)
676
- stats["timings"]["level2_filter"] = time.monotonic() - \
677
- phase_start
689
+ phase_end = time.monotonic()
690
+ stats["timings"]["level2_filter"] = phase_end - phase_start
678
691
 
679
692
  if not final_files:
680
693
  logger.warning("No related files found, using all files")
@@ -689,6 +702,28 @@ def build_index_and_filter_files(
689
702
  phase_start = time.monotonic()
690
703
  verified_files = {}
691
704
  temp_files = list(final_files.values())
705
+ verification_results = []
706
+
707
+ def print_verification_results(results):
708
+ from rich.table import Table
709
+ from rich.console import Console
710
+
711
+ console = Console()
712
+ table = Table(title="File Relevance Verification Results", show_header=True, header_style="bold magenta")
713
+ table.add_column("File Path", style="cyan", no_wrap=True)
714
+ table.add_column("Score", justify="right", style="green")
715
+ table.add_column("Status", style="yellow")
716
+ table.add_column("Reason/Error")
717
+
718
+ for file_path, score, status, reason in results:
719
+ table.add_row(
720
+ file_path,
721
+ str(score) if score is not None else "N/A",
722
+ status,
723
+ reason
724
+ )
725
+
726
+ console.print(table)
692
727
 
693
728
  def verify_single_file(file: TargetFile):
694
729
  for source in sources:
@@ -700,13 +735,20 @@ def build_index_and_filter_files(
700
735
  query=args.query
701
736
  )
702
737
  if result.relevant_score >= args.verify_file_relevance_score:
703
- return file.file_path, TargetFile(
738
+ verified_files[file.file_path] = TargetFile(
704
739
  file_path=file.file_path,
705
740
  reason=f"Score:{result.relevant_score}, {result.reason}"
706
741
  )
742
+ return file.file_path, result.relevant_score, "PASS", result.reason
743
+ else:
744
+ return file.file_path, result.relevant_score, "FAIL", result.reason
707
745
  except Exception as e:
708
- logger.warning(
709
- f"Failed to verify file {file.file_path}: {str(e)}")
746
+ error_msg = str(e)
747
+ verified_files[file.file_path] = TargetFile(
748
+ file_path=file.file_path,
749
+ reason=f"Verification failed: {error_msg}"
750
+ )
751
+ return file.file_path, None, "ERROR", error_msg
710
752
  return None
711
753
 
712
754
  with ThreadPoolExecutor(max_workers=args.index_filter_workers) as executor:
@@ -715,15 +757,18 @@ def build_index_and_filter_files(
715
757
  for future in as_completed(futures):
716
758
  result = future.result()
717
759
  if result:
718
- file_path, target_file = result
719
- verified_files[file_path] = target_file
760
+ verification_results.append(result)
720
761
  time.sleep(args.anti_quota_limit)
721
762
 
763
+ # Print verification results in a table
764
+ print_verification_results(verification_results)
765
+
722
766
  stats["verified_files"] = len(verified_files)
723
- stats["timings"]["relevance_verification"] = time.monotonic() - \
724
- phase_start
767
+ phase_end = time.monotonic()
768
+ stats["timings"]["relevance_verification"] = phase_end - phase_start
725
769
 
726
- final_files = verified_files if verified_files else final_files
770
+ # Keep all files, not just verified ones
771
+ final_files = verified_files
727
772
 
728
773
  def display_table_and_get_selections(data):
729
774
  from prompt_toolkit.shortcuts import checkboxlist_dialog
@@ -755,7 +800,7 @@ def build_index_and_filter_files(
755
800
  console = Console()
756
801
 
757
802
  table = Table(
758
- title="Target Files You Selected",
803
+ title="Files Used as Context",
759
804
  show_header=True,
760
805
  header_style="bold magenta",
761
806
  )
@@ -802,7 +847,8 @@ def build_index_and_filter_files(
802
847
  if args.index_filter_file_num > 0:
803
848
  final_filenames = final_filenames[: args.index_filter_file_num]
804
849
 
805
- stats["timings"]["file_selection"] = time.monotonic() - phase_start
850
+ phase_end = time.monotonic()
851
+ stats["timings"]["file_selection"] = phase_end - phase_start
806
852
 
807
853
  # Phase 7: Display results and prepare output
808
854
  logger.info("Phase 7: Preparing final output...")
@@ -848,26 +894,42 @@ def build_index_and_filter_files(
848
894
  )
849
895
 
850
896
  stats["final_files"] = len(depulicated_sources)
851
- stats["timings"]["prepare_output"] = time.monotonic() - phase_start
897
+ phase_end = time.monotonic()
898
+ stats["timings"]["prepare_output"] = phase_end - phase_start
852
899
 
853
900
  # Calculate total time and print summary
854
- total_time = time.monotonic() - total_start_time
901
+ total_end_time = time.monotonic()
902
+ total_time = total_end_time - total_start_time
855
903
  stats["timings"]["total"] = total_time
904
+
905
+ # Calculate total filter time
906
+ total_filter_time = (
907
+ stats["timings"]["level1_filter"] +
908
+ stats["timings"]["level2_filter"] +
909
+ stats["timings"]["relevance_verification"]
910
+ )
856
911
 
857
- # Print final statistics
858
- logger.info("\n=== Build Index and Filter Files Summary ===")
859
- logger.info(f"Total files in project: {stats['total_files']}")
860
- logger.info(f"Files indexed: {stats['indexed_files']}")
861
- logger.info(f"Files after Level 1 filter: {stats['level1_filtered']}")
862
- logger.info(f"Files after Level 2 filter: {stats['level2_filtered']}")
863
- logger.info(
864
- f"Files after relevance verification: {stats.get('verified_files', 0)}")
865
- logger.info(f"Final files selected: {stats['final_files']}")
866
- logger.info("\nTime breakdown:")
867
- for phase, duration in stats["timings"].items():
868
- logger.info(f" - {phase}: {duration:.2f}s")
869
- logger.info(f"Total execution time: {total_time:.2f}s")
870
- logger.info("==========================================\n")
912
+ # Print final statistics in a more structured way
913
+ summary = f"""
914
+ === Indexing and Filtering Summary ===
915
+ Total files scanned: {stats['total_files']}
916
+ Files indexed: {stats['indexed_files']}
917
+ Files filtered:
918
+ - Level 1 (query-based): {stats['level1_filtered']}
919
+ - Level 2 (related files): {stats['level2_filtered']}
920
+ - Relevance verified: {stats.get('verified_files', 0)}
921
+ Final files selected: {stats['final_files']}
922
+
923
+ === Time Breakdown ===
924
+ Index build: {stats['timings'].get('build_index', 0):.2f}s
925
+ • Level 1 filter: {stats['timings'].get('level1_filter', 0):.2f}s
926
+ • Level 2 filter: {stats['timings'].get('level2_filter', 0):.2f}s
927
+ • Relevance check: {stats['timings'].get('relevance_verification', 0):.2f}s
928
+ • File selection: {stats['timings'].get('file_selection', 0):.2f}s
929
+ • Total time: {total_time:.2f}s
930
+ ====================================
931
+ """
932
+ logger.info(summary)
871
933
 
872
934
  if args.request_id and not args.skip_events:
873
935
  queue_communicate.send_event(
@@ -876,7 +938,7 @@ def build_index_and_filter_files(
876
938
  event_type=CommunicateEventType.CODE_INDEX_FILTER_END.value,
877
939
  data=json.dumps({
878
940
  "filtered_files": stats["final_files"],
879
- "filter_time": stats['level1_filtered'] + stats['level2_filtered'] + stats.get('verified_files', 0)
941
+ "filter_time": total_filter_time
880
942
  })
881
943
  )
882
944
  )
@@ -0,0 +1 @@
1
+ __version__ = "0.1.213"
@@ -1 +0,0 @@
1
- __version__ = "0.1.212"
File without changes
File without changes
File without changes
File without changes