auto-coder 0.1.279__tar.gz → 0.1.280__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 (186) hide show
  1. {auto_coder-0.1.279 → auto_coder-0.1.280}/PKG-INFO +1 -1
  2. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/auto_coder.egg-info/SOURCES.txt +2 -0
  4. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/doc_filter.py +104 -29
  5. auto_coder-0.1.280/src/autocoder/rag/lang.py +50 -0
  6. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/long_context_rag.py +217 -102
  7. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/relevant_utils.py +10 -0
  8. auto_coder-0.1.280/src/autocoder/utils/stream_thinking.py +193 -0
  9. auto_coder-0.1.280/src/autocoder/version.py +1 -0
  10. auto_coder-0.1.279/src/autocoder/version.py +0 -1
  11. {auto_coder-0.1.279 → auto_coder-0.1.280}/LICENSE +0 -0
  12. {auto_coder-0.1.279 → auto_coder-0.1.280}/README.md +0 -0
  13. {auto_coder-0.1.279 → auto_coder-0.1.280}/setup.cfg +0 -0
  14. {auto_coder-0.1.279 → auto_coder-0.1.280}/setup.py +0 -0
  15. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  16. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/auto_coder.egg-info/entry_points.txt +0 -0
  17. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/auto_coder.egg-info/requires.txt +0 -0
  18. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/auto_coder.egg-info/top_level.txt +0 -0
  19. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/__init__.py +0 -0
  20. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/__init__.py +0 -0
  21. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  22. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/auto_filegroup.py +0 -0
  23. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/auto_guess_query.py +0 -0
  24. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  25. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/auto_review_commit.py +0 -0
  26. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/auto_tool.py +0 -0
  27. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/coder.py +0 -0
  28. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/designer.py +0 -0
  29. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/planner.py +0 -0
  30. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/agent/project_reader.py +0 -0
  31. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/auto_coder.py +0 -0
  32. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/auto_coder_rag.py +0 -0
  33. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
  34. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/auto_coder_rag_mcp.py +0 -0
  35. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/auto_coder_runner.py +0 -0
  36. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/auto_coder_server.py +0 -0
  37. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/benchmark.py +0 -0
  38. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/chat/__init__.py +0 -0
  39. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/chat_auto_coder.py +0 -0
  40. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/chat_auto_coder_lang.py +0 -0
  41. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/command_args.py +0 -0
  42. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/commands/__init__.py +0 -0
  43. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/commands/auto_command.py +0 -0
  44. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/commands/tools.py +0 -0
  45. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/JupyterClient.py +0 -0
  46. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/ShellClient.py +0 -0
  47. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/__init__.py +0 -0
  48. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/anything2images.py +0 -0
  49. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/anything2img.py +0 -0
  50. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/audio.py +0 -0
  51. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/auto_coder_lang.py +0 -0
  52. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/auto_configure.py +0 -0
  53. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/buildin_tokenizer.py +0 -0
  54. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/chunk_validation.py +0 -0
  55. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/cleaner.py +0 -0
  56. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_execute.py +0 -0
  57. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_generate.py +0 -0
  58. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  59. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  60. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  61. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_merge.py +0 -0
  62. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  63. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  64. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  65. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/code_modification_ranker.py +0 -0
  66. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/command_completer.py +0 -0
  67. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/command_generator.py +0 -0
  68. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/command_templates.py +0 -0
  69. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/conf_import_export.py +0 -0
  70. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/conf_validator.py +0 -0
  71. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/const.py +0 -0
  72. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/context_pruner.py +0 -0
  73. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/conversation_pruner.py +0 -0
  74. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/files.py +0 -0
  75. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/git_utils.py +0 -0
  76. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/global_cancel.py +0 -0
  77. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/image_to_page.py +0 -0
  78. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/index_import_export.py +0 -0
  79. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/interpreter.py +0 -0
  80. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/llm_rerank.py +0 -0
  81. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/mcp_hub.py +0 -0
  82. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/mcp_server.py +0 -0
  83. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  84. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  85. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/mcp_tools.py +0 -0
  86. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/memory_manager.py +0 -0
  87. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/model_speed_test.py +0 -0
  88. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/printer.py +0 -0
  89. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/recall_validation.py +0 -0
  90. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/result_manager.py +0 -0
  91. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/screenshots.py +0 -0
  92. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/search.py +0 -0
  93. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/search_replace.py +0 -0
  94. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/shells.py +0 -0
  95. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/stats_panel.py +0 -0
  96. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/sys_prompt.py +0 -0
  97. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/text.py +0 -0
  98. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/types.py +0 -0
  99. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  100. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/data/byzerllm.md +0 -0
  101. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/data/tokenizer.json +0 -0
  102. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/db/__init__.py +0 -0
  103. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/db/store.py +0 -0
  104. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/dispacher/__init__.py +0 -0
  105. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/dispacher/actions/__init__.py +0 -0
  106. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/dispacher/actions/action.py +0 -0
  107. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/dispacher/actions/copilot.py +0 -0
  108. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  109. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  110. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  111. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/__init__.py +0 -0
  112. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/entry.py +0 -0
  113. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/filter/__init__.py +0 -0
  114. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/filter/normal_filter.py +0 -0
  115. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/filter/quick_filter.py +0 -0
  116. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/for_command.py +0 -0
  117. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/index.py +0 -0
  118. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/symbols_utils.py +0 -0
  119. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/index/types.py +0 -0
  120. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/lang.py +0 -0
  121. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/models.py +0 -0
  122. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/privacy/__init__.py +0 -0
  123. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/privacy/model_filter.py +0 -0
  124. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/pyproject/__init__.py +0 -0
  125. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/__init__.py +0 -0
  126. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/api_server.py +0 -0
  127. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/cache/__init__.py +0 -0
  128. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/cache/base_cache.py +0 -0
  129. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  130. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  131. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/cache/simple_cache.py +0 -0
  132. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/document_retriever.py +0 -0
  133. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/llm_wrapper.py +0 -0
  134. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/loaders/__init__.py +0 -0
  135. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  136. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  137. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  138. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  139. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/rag_config.py +0 -0
  140. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/rag_entry.py +0 -0
  141. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/raw_rag.py +0 -0
  142. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/simple_directory_reader.py +0 -0
  143. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/simple_rag.py +0 -0
  144. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/stream_event/__init__.py +0 -0
  145. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  146. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/stream_event/types.py +0 -0
  147. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/token_checker.py +0 -0
  148. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/token_counter.py +0 -0
  149. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/token_limiter.py +0 -0
  150. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/token_limiter_utils.py +0 -0
  151. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/types.py +0 -0
  152. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/utils.py +0 -0
  153. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/rag/variable_holder.py +0 -0
  154. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/regexproject/__init__.py +0 -0
  155. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/suffixproject/__init__.py +0 -0
  156. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/tsproject/__init__.py +0 -0
  157. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/__init__.py +0 -0
  158. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/_markitdown.py +0 -0
  159. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  160. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  161. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/auto_project_type.py +0 -0
  162. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  163. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/conversation_store.py +0 -0
  164. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  165. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/llms.py +0 -0
  166. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/log_capture.py +0 -0
  167. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/model_provider_selector.py +0 -0
  168. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/multi_turn.py +0 -0
  169. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/operate_config_api.py +0 -0
  170. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/print_table.py +0 -0
  171. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/project_structure.py +0 -0
  172. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/queue_communicate.py +0 -0
  173. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/request_event_queue.py +0 -0
  174. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/request_queue.py +0 -0
  175. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/rest.py +0 -0
  176. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/tests.py +0 -0
  177. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/thread_utils.py +0 -0
  178. {auto_coder-0.1.279 → auto_coder-0.1.280}/src/autocoder/utils/types.py +0 -0
  179. {auto_coder-0.1.279 → auto_coder-0.1.280}/tests/test_action_regex_project.py +0 -0
  180. {auto_coder-0.1.279 → auto_coder-0.1.280}/tests/test_chat_auto_coder.py +0 -0
  181. {auto_coder-0.1.279 → auto_coder-0.1.280}/tests/test_code_auto_merge_editblock.py +0 -0
  182. {auto_coder-0.1.279 → auto_coder-0.1.280}/tests/test_command_completer.py +0 -0
  183. {auto_coder-0.1.279 → auto_coder-0.1.280}/tests/test_planner.py +0 -0
  184. {auto_coder-0.1.279 → auto_coder-0.1.280}/tests/test_privacy.py +0 -0
  185. {auto_coder-0.1.279 → auto_coder-0.1.280}/tests/test_queue_communicate.py +0 -0
  186. {auto_coder-0.1.279 → auto_coder-0.1.280}/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.279
3
+ Version: 0.1.280
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.279
3
+ Version: 0.1.280
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -118,6 +118,7 @@ src/autocoder/rag/__init__.py
118
118
  src/autocoder/rag/api_server.py
119
119
  src/autocoder/rag/doc_filter.py
120
120
  src/autocoder/rag/document_retriever.py
121
+ src/autocoder/rag/lang.py
121
122
  src/autocoder/rag/llm_wrapper.py
122
123
  src/autocoder/rag/long_context_rag.py
123
124
  src/autocoder/rag/rag_config.py
@@ -165,6 +166,7 @@ src/autocoder/utils/queue_communicate.py
165
166
  src/autocoder/utils/request_event_queue.py
166
167
  src/autocoder/utils/request_queue.py
167
168
  src/autocoder/utils/rest.py
169
+ src/autocoder/utils/stream_thinking.py
168
170
  src/autocoder/utils/tests.py
169
171
  src/autocoder/utils/thread_utils.py
170
172
  src/autocoder/utils/types.py
@@ -1,13 +1,15 @@
1
1
  import time
2
- from typing import List, Dict, Optional
2
+ from typing import List, Dict, Optional, Generator, Tuple
3
3
  from loguru import logger
4
4
  from concurrent.futures import ThreadPoolExecutor, as_completed
5
+ from autocoder.rag.lang import get_message_with_format_and_newline
5
6
 
6
7
  from autocoder.rag.relevant_utils import (
7
8
  parse_relevance,
8
9
  FilterDoc,
9
10
  TaskTiming,
10
- DocFilterResult
11
+ DocFilterResult,
12
+ ProgressUpdate
11
13
  )
12
14
 
13
15
  from autocoder.common import SourceCode, AutoCoderArgs
@@ -49,6 +51,7 @@ def _check_relevance_with_conversation(
49
51
  其中, <relevant> 是你认为文档中和问题的相关度,0-10之间的数字,数字越大表示相关度越高。
50
52
  """
51
53
 
54
+
52
55
  class DocFilter:
53
56
  def __init__(
54
57
  self,
@@ -73,10 +76,10 @@ class DocFilter:
73
76
  ) -> DocFilterResult:
74
77
  return self.filter_docs_with_threads(conversations, documents)
75
78
 
76
- def filter_docs_with_threads(
79
+ def filter_docs_with_progress(
77
80
  self, conversations: List[Dict[str, str]], documents: List[SourceCode]
78
- ) -> DocFilterResult:
79
-
81
+ ) -> Generator[Tuple[ProgressUpdate, Optional[DocFilterResult]], None, DocFilterResult]:
82
+ """使用线程过滤文档,同时产生进度更新"""
80
83
  start_time = time.time()
81
84
  logger.info(f"=== DocFilter Starting ===")
82
85
  logger.info(
@@ -93,6 +96,16 @@ class DocFilter:
93
96
  relevant_count = 0
94
97
  model_name = self.recall_llm.default_model_name or "unknown"
95
98
 
99
+ doc_filter_result = DocFilterResult(
100
+ docs=[],
101
+ raw_docs=[],
102
+ input_tokens_counts=[],
103
+ generated_tokens_counts=[],
104
+ durations=[],
105
+ model_name=model_name
106
+ )
107
+ relevant_docs = doc_filter_result.docs
108
+
96
109
  with ThreadPoolExecutor(
97
110
  max_workers=self.args.index_filter_workers or 5
98
111
  ) as executor:
@@ -141,16 +154,19 @@ class DocFilter:
141
154
  logger.info(
142
155
  f"Submitted {submitted_tasks} document filtering tasks to thread pool")
143
156
 
157
+ # 发送初始进度更新
158
+ yield (ProgressUpdate(
159
+ phase="doc_filter",
160
+ completed=0,
161
+ total=len(documents),
162
+ relevant_count=0,
163
+ message=get_message_with_format_and_newline(
164
+ "doc_filter_start",
165
+ total=len(documents)
166
+ )
167
+ ), None)
168
+
144
169
  # 处理完成的任务
145
- doc_filter_result = DocFilterResult(
146
- docs=[],
147
- raw_docs=[],
148
- input_tokens_counts=[],
149
- generated_tokens_counts=[],
150
- durations=[],
151
- model_name=model_name
152
- )
153
- relevant_docs = doc_filter_result.docs
154
170
  for future in as_completed(list(future_to_doc.keys())):
155
171
  try:
156
172
  doc, submit_time = future_to_doc[future]
@@ -194,32 +210,50 @@ class DocFilter:
194
210
  f"\n - Timing: Duration={task_timing.duration:.2f}s, Processing={task_timing.real_duration:.2f}s, Queue={queue_time:.2f}s"
195
211
  f"\n - Response: {v}"
196
212
  )
197
-
213
+
198
214
  if "rag" not in doc.metadata:
199
215
  doc.metadata["rag"] = {}
200
216
  doc.metadata["rag"]["recall"] = {
201
217
  "input_tokens_count": input_tokens_count,
202
218
  "generated_tokens_count": generated_tokens_count,
203
219
  "recall_model": model_name,
204
- "duration": task_timing.real_duration
220
+ "duration": task_timing.real_duration
205
221
  }
206
-
207
- doc_filter_result.input_tokens_counts.append(input_tokens_count)
208
- doc_filter_result.generated_tokens_counts.append(generated_tokens_count)
209
- doc_filter_result.durations.append(task_timing.real_duration)
210
-
222
+
223
+ doc_filter_result.input_tokens_counts.append(
224
+ input_tokens_count)
225
+ doc_filter_result.generated_tokens_counts.append(
226
+ generated_tokens_count)
227
+ doc_filter_result.durations.append(
228
+ task_timing.real_duration)
229
+
211
230
  new_filter_doc = FilterDoc(
212
- source_code=doc,
213
- relevance=relevance,
214
- task_timing=task_timing,
215
- )
216
-
231
+ source_code=doc,
232
+ relevance=relevance,
233
+ task_timing=task_timing,
234
+ )
235
+
217
236
  doc_filter_result.raw_docs.append(new_filter_doc)
218
237
 
219
238
  if is_relevant:
220
239
  relevant_docs.append(
221
240
  new_filter_doc
222
241
  )
242
+
243
+ # 产生进度更新
244
+ yield (ProgressUpdate(
245
+ phase="doc_filter",
246
+ completed=completed_tasks,
247
+ total=len(documents),
248
+ relevant_count=relevant_count,
249
+ message=get_message_with_format_and_newline(
250
+ "doc_filter_progress",
251
+ progress_percent=progress_percent,
252
+ relevant_count=relevant_count,
253
+ total=len(documents)
254
+ )
255
+ ), None)
256
+
223
257
  except Exception as exc:
224
258
  try:
225
259
  doc, submit_time = future_to_doc[future]
@@ -236,7 +270,7 @@ class DocFilter:
236
270
  FilterDoc(
237
271
  source_code=doc,
238
272
  relevance=None,
239
- task_timing=TaskTiming(),
273
+ task_timing=TaskTiming(),
240
274
  )
241
275
  )
242
276
  except Exception as e:
@@ -244,6 +278,18 @@ class DocFilter:
244
278
  f"Document filtering error in task tracking: {exc}"
245
279
  )
246
280
 
281
+ # 报告错误进度
282
+ yield (ProgressUpdate(
283
+ phase="doc_filter",
284
+ completed=completed_tasks,
285
+ total=len(documents),
286
+ relevant_count=relevant_count,
287
+ message=get_message_with_format_and_newline(
288
+ "doc_filter_error",
289
+ error=str(exc)
290
+ )
291
+ ), None)
292
+
247
293
  # Sort relevant_docs by relevance score in descending order
248
294
  relevant_docs.sort(
249
295
  key=lambda x: x.relevance.relevant_score, reverse=True)
@@ -254,7 +300,7 @@ class DocFilter:
254
300
  doc.task_timing.real_duration for doc in relevant_docs) / len(relevant_docs) if relevant_docs else 0
255
301
  avg_queue_time = sum(doc.task_timing.real_start_time -
256
302
  doc.task_timing.submit_time for doc in relevant_docs) / len(relevant_docs) if relevant_docs else 0
257
-
303
+
258
304
  total_input_tokens = sum(doc_filter_result.input_tokens_counts)
259
305
  total_generated_tokens = sum(doc_filter_result.generated_tokens_counts)
260
306
 
@@ -278,4 +324,33 @@ class DocFilter:
278
324
  else:
279
325
  logger.warning("No relevant documents found!")
280
326
 
281
- return doc_filter_result
327
+ # 返回最终结果
328
+ yield (ProgressUpdate(
329
+ phase="doc_filter",
330
+ completed=len(documents),
331
+ total=len(documents),
332
+ relevant_count=relevant_count,
333
+ message=get_message_with_format_and_newline(
334
+ "doc_filter_complete",
335
+ total_time=total_time,
336
+ relevant_count=relevant_count
337
+ )
338
+ ), doc_filter_result)
339
+
340
+ def filter_docs_with_threads(
341
+ self, conversations: List[Dict[str, str]], documents: List[SourceCode]
342
+ ) -> DocFilterResult:
343
+ # 保持兼容性的接口
344
+ for _, result in self.filter_docs_with_progress(conversations, documents):
345
+ if result is not None:
346
+ return result
347
+
348
+ # 这是一个应急情况,不应该到达这里
349
+ return DocFilterResult(
350
+ docs=[],
351
+ raw_docs=[],
352
+ input_tokens_counts=[],
353
+ generated_tokens_counts=[],
354
+ durations=[],
355
+ model_name=self.recall_llm.default_model_name or "unknown"
356
+ )
@@ -0,0 +1,50 @@
1
+ import locale
2
+ from byzerllm.utils import format_str_jinja2
3
+
4
+ MESSAGES = {
5
+ "en": {
6
+ "rag_error_title": "RAG Error",
7
+ "rag_error_message": "Failed to generate response: {{error}}",
8
+ "rag_searching_docs": "Searching documents with {{model}}...",
9
+ "rag_docs_filter_result": "{{model}} processed {{docs_num}} documents, cost {{filter_time}} seconds, input tokens: {{input_tokens}}, output tokens: {{output_tokens}}",
10
+ "dynamic_chunking_start": "Dynamic chunking start with {{model}}",
11
+ "dynamic_chunking_result": "Dynamic chunking result with {{model}}, first round cost {{first_round_time}} seconds, second round cost {{sencond_round_time}} seconds, input tokens: {{input_tokens}}, output tokens: {{output_tokens}}, first round full docs: {{first_round_full_docs}}, second round extracted docs: {{second_round_extracted_docs}}",
12
+ "send_to_model": "Send to model {{model}} with {{tokens}} tokens",
13
+ "doc_filter_start": "Document filtering start, total {{total}} documents",
14
+ "doc_filter_progress": "Document filtering progress: {{progress_percent}}% processed {{relevant_count}}/{{total}} documents",
15
+ "doc_filter_error": "Document filtering error: {{error}}",
16
+ "doc_filter_complete": "Document filtering complete, cost {{total_time}} seconds, found {{relevant_count}} relevant documents"
17
+ },
18
+ "zh": {
19
+ "rag_error_title": "RAG 错误",
20
+ "rag_error_message": "生成响应失败: {{error}}",
21
+ "rag_searching_docs": "正在使用 {{model}} 搜索文档...",
22
+ "rag_docs_filter_result": "{{model}} 处理了 {{docs_num}} 个文档, 耗时 {{filter_time}} 秒, 输入 tokens: {{input_tokens}}, 输出 tokens: {{output_tokens}}",
23
+ "dynamic_chunking_start": "使用 {{model}} 进行动态分块",
24
+ "dynamic_chunking_result": "使用 {{model}} 进行动态分块, 第一轮耗时 {{first_round_time}} 秒, 第二轮耗时 {{sencond_round_time}} 秒, 输入 tokens: {{input_tokens}}, 输出 tokens: {{output_tokens}}, 第一轮全量文档: {{first_round_full_docs}}, 第二轮提取文档: {{second_round_extracted_docs}}",
25
+ "send_to_model": "发送给模型 {{model}} 的 tokens 数量预估为 {{tokens}}",
26
+ "doc_filter_start": "开始过滤文档,共 {{total}} 个文档",
27
+ "doc_filter_progress": "文档过滤进度:{{progress_percent}}%,处理了 {{relevant_count}}/{{total}} 个文档",
28
+ "doc_filter_error": "文档过滤错误:{{error}}",
29
+ "doc_filter_complete": "文档过滤完成,耗时 {{total_time}} 秒,找到 {{relevant_count}} 个相关文档"
30
+ }
31
+ }
32
+
33
+
34
+ def get_system_language():
35
+ try:
36
+ return locale.getdefaultlocale()[0][:2]
37
+ except:
38
+ return 'en'
39
+
40
+
41
+ def get_message(key):
42
+ lang = get_system_language()
43
+ return MESSAGES.get(lang, MESSAGES['en']).get(key, MESSAGES['en'][key])
44
+
45
+
46
+ def get_message_with_format(msg_key: str, **kwargs):
47
+ return format_str_jinja2(get_message(msg_key), **kwargs)
48
+
49
+ def get_message_with_format_and_newline(msg_key: str, **kwargs):
50
+ return format_str_jinja2(get_message(msg_key), **kwargs) + "\n"