auto-coder 0.1.345__tar.gz → 0.1.346__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 (280) hide show
  1. {auto_coder-0.1.345 → auto_coder-0.1.346}/PKG-INFO +1 -1
  2. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/auto_coder_runner.py +4 -5
  4. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit.py +31 -1
  5. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +2 -2
  6. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/long_context_rag.py +1 -2
  7. auto_coder-0.1.346/src/autocoder/rag/qa_conversation_strategy.py +295 -0
  8. auto_coder-0.1.346/src/autocoder/version.py +1 -0
  9. auto_coder-0.1.345/src/autocoder/rag/qa_conversation_strategy.py +0 -145
  10. auto_coder-0.1.345/src/autocoder/version.py +0 -1
  11. {auto_coder-0.1.345 → auto_coder-0.1.346}/LICENSE +0 -0
  12. {auto_coder-0.1.345 → auto_coder-0.1.346}/README.md +0 -0
  13. {auto_coder-0.1.345 → auto_coder-0.1.346}/setup.cfg +0 -0
  14. {auto_coder-0.1.345 → auto_coder-0.1.346}/setup.py +0 -0
  15. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/auto_coder.egg-info/SOURCES.txt +0 -0
  16. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  17. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/auto_coder.egg-info/entry_points.txt +0 -0
  18. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/auto_coder.egg-info/requires.txt +0 -0
  19. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/auto_coder.egg-info/top_level.txt +0 -0
  20. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/__init__.py +0 -0
  21. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/__init__.py +0 -0
  22. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/agentic_filter.py +0 -0
  23. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  24. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/auto_filegroup.py +0 -0
  25. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/auto_guess_query.py +0 -0
  26. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  27. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/auto_review_commit.py +0 -0
  28. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/auto_tool.py +0 -0
  29. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/coder.py +0 -0
  30. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/designer.py +0 -0
  31. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/planner.py +0 -0
  32. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/agent/project_reader.py +0 -0
  33. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/auto_coder.py +0 -0
  34. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/auto_coder_rag.py +0 -0
  35. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/auto_coder_server.py +0 -0
  36. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/benchmark.py +0 -0
  37. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/chat/__init__.py +0 -0
  38. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/chat_auto_coder.py +0 -0
  39. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/chat_auto_coder_lang.py +0 -0
  40. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/command_args.py +0 -0
  41. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/command_parser.py +0 -0
  42. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/commands/__init__.py +0 -0
  43. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/commands/auto_command.py +0 -0
  44. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/commands/auto_web.py +0 -0
  45. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/commands/tools.py +0 -0
  46. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/JupyterClient.py +0 -0
  47. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/ShellClient.py +0 -0
  48. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/__init__.py +0 -0
  49. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/action_yml_file_manager.py +0 -0
  50. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/anything2images.py +0 -0
  51. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/anything2img.py +0 -0
  52. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/audio.py +0 -0
  53. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/auto_coder_lang.py +0 -0
  54. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/auto_configure.py +0 -0
  55. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/buildin_tokenizer.py +0 -0
  56. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/chunk_validation.py +0 -0
  57. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/cleaner.py +0 -0
  58. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_execute.py +0 -0
  59. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_generate.py +0 -0
  60. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  61. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  62. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  63. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_merge.py +0 -0
  64. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  65. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  66. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  67. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/code_modification_ranker.py +0 -0
  68. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/command_completer.py +0 -0
  69. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/command_generator.py +0 -0
  70. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/command_templates.py +0 -0
  71. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/computer_use.py +0 -0
  72. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/conf_import_export.py +0 -0
  73. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/conf_utils.py +0 -0
  74. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/conf_validator.py +0 -0
  75. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/const.py +0 -0
  76. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/context_pruner.py +0 -0
  77. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/conversation_pruner.py +0 -0
  78. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/files.py +0 -0
  79. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/git_utils.py +0 -0
  80. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/global_cancel.py +0 -0
  81. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/image_to_page.py +0 -0
  82. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/index_import_export.py +0 -0
  83. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/interpreter.py +0 -0
  84. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/llm_rerank.py +0 -0
  85. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/mcp_hub.py +0 -0
  86. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/mcp_server.py +0 -0
  87. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/mcp_server_install.py +0 -0
  88. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/mcp_server_types.py +0 -0
  89. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  90. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  91. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  92. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/mcp_tools.py +0 -0
  93. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/memory_manager.py +0 -0
  94. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/model_speed_test.py +0 -0
  95. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/openai_content.py +0 -0
  96. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/printer.py +0 -0
  97. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/recall_validation.py +0 -0
  98. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/result_manager.py +0 -0
  99. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/screenshots.py +0 -0
  100. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/search.py +0 -0
  101. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/search_replace.py +0 -0
  102. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/shells.py +0 -0
  103. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/stats_panel.py +0 -0
  104. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/stream_out_type.py +0 -0
  105. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/sys_prompt.py +0 -0
  106. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/text.py +0 -0
  107. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/token_cost_caculate.py +0 -0
  108. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/types.py +0 -0
  109. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  110. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/__init__.py +0 -0
  111. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/__init__.py +0 -0
  112. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_conversation.py +0 -0
  113. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
  114. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
  115. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  116. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
  117. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
  118. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
  119. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
  120. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
  121. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +0 -0
  122. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
  123. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
  124. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -0
  125. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_edit_types.py +0 -0
  126. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
  127. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/agent/ignore_utils.py +0 -0
  128. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  129. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  130. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  131. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  132. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  133. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  134. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  135. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  136. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  137. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  138. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  139. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_manager.py +0 -0
  140. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  141. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/__init__.py +0 -0
  142. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/base_compiler.py +0 -0
  143. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/compiler_config_api.py +0 -0
  144. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  145. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/compiler_factory.py +0 -0
  146. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/java_compiler.py +0 -0
  147. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/models.py +0 -0
  148. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/provided_compiler.py +0 -0
  149. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/python_compiler.py +0 -0
  150. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  151. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/shadow_compiler.py +0 -0
  152. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/compilers/vue_compiler.py +0 -0
  153. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/data/byzerllm.md +0 -0
  154. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/data/tokenizer.json +0 -0
  155. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/db/__init__.py +0 -0
  156. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/db/store.py +0 -0
  157. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/dispacher/__init__.py +0 -0
  158. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/dispacher/actions/__init__.py +0 -0
  159. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/dispacher/actions/action.py +0 -0
  160. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/dispacher/actions/copilot.py +0 -0
  161. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  162. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  163. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/events/__init__.py +0 -0
  164. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/events/event_content.py +0 -0
  165. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/events/event_manager.py +0 -0
  166. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/events/event_manager_singleton.py +0 -0
  167. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/events/event_store.py +0 -0
  168. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/events/event_types.py +0 -0
  169. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/helper/__init__.py +0 -0
  170. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/helper/project_creator.py +0 -0
  171. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/__init__.py +0 -0
  172. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/entry.py +0 -0
  173. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/filter/__init__.py +0 -0
  174. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/filter/normal_filter.py +0 -0
  175. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/filter/quick_filter.py +0 -0
  176. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/for_command.py +0 -0
  177. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/index.py +0 -0
  178. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/symbols_utils.py +0 -0
  179. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/index/types.py +0 -0
  180. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/lang.py +0 -0
  181. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/linters/__init__.py +0 -0
  182. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/linters/base_linter.py +0 -0
  183. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/linters/linter_factory.py +0 -0
  184. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/linters/models.py +0 -0
  185. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/linters/python_linter.py +0 -0
  186. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/linters/reactjs_linter.py +0 -0
  187. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/linters/shadow_linter.py +0 -0
  188. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/linters/vue_linter.py +0 -0
  189. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/memory/__init__.py +0 -0
  190. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/memory/active_context_manager.py +0 -0
  191. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/memory/active_package.py +0 -0
  192. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/memory/async_processor.py +0 -0
  193. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/memory/directory_mapper.py +0 -0
  194. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/models.py +0 -0
  195. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/plugins/__init__.py +0 -0
  196. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  197. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  198. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/plugins/sample_plugin.py +0 -0
  199. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  200. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/plugins/utils.py +0 -0
  201. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/privacy/__init__.py +0 -0
  202. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/privacy/model_filter.py +0 -0
  203. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/pyproject/__init__.py +0 -0
  204. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/__init__.py +0 -0
  205. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/api_server.py +0 -0
  206. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/__init__.py +0 -0
  207. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/base_cache.py +0 -0
  208. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  209. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  210. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  211. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  212. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  213. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  214. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/cache/simple_cache.py +0 -0
  215. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/conversation_to_queries.py +0 -0
  216. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/doc_filter.py +0 -0
  217. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/document_retriever.py +0 -0
  218. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/lang.py +0 -0
  219. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/llm_wrapper.py +0 -0
  220. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/loaders/__init__.py +0 -0
  221. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  222. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  223. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  224. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  225. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/rag_config.py +0 -0
  226. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/rag_entry.py +0 -0
  227. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/raw_rag.py +0 -0
  228. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/relevant_utils.py +0 -0
  229. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/searchable.py +0 -0
  230. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/simple_directory_reader.py +0 -0
  231. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/simple_rag.py +0 -0
  232. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/stream_event/__init__.py +0 -0
  233. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  234. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/stream_event/types.py +0 -0
  235. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/token_checker.py +0 -0
  236. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/token_counter.py +0 -0
  237. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/token_limiter.py +0 -0
  238. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/token_limiter_utils.py +0 -0
  239. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/types.py +0 -0
  240. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/utils.py +0 -0
  241. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/rag/variable_holder.py +0 -0
  242. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/regexproject/__init__.py +0 -0
  243. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/run_context.py +0 -0
  244. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/shadows/__init__.py +0 -0
  245. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/shadows/shadow_manager.py +0 -0
  246. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/suffixproject/__init__.py +0 -0
  247. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/tsproject/__init__.py +0 -0
  248. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/__init__.py +0 -0
  249. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/_markitdown.py +0 -0
  250. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  251. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  252. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/auto_project_type.py +0 -0
  253. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  254. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/conversation_store.py +0 -0
  255. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  256. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/llms.py +0 -0
  257. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/log_capture.py +0 -0
  258. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/model_provider_selector.py +0 -0
  259. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/multi_turn.py +0 -0
  260. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/operate_config_api.py +0 -0
  261. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/print_table.py +0 -0
  262. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/project_structure.py +0 -0
  263. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/queue_communicate.py +0 -0
  264. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/request_event_queue.py +0 -0
  265. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/request_queue.py +0 -0
  266. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/rest.py +0 -0
  267. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/stream_thinking.py +0 -0
  268. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/tests.py +0 -0
  269. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/thread_utils.py +0 -0
  270. {auto_coder-0.1.345 → auto_coder-0.1.346}/src/autocoder/utils/types.py +0 -0
  271. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_action_regex_project.py +0 -0
  272. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_action_yml_file_manager.py +0 -0
  273. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_chat_auto_coder.py +0 -0
  274. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_code_auto_merge_editblock.py +0 -0
  275. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_command_completer.py +0 -0
  276. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_planner.py +0 -0
  277. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_plugins.py +0 -0
  278. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_privacy.py +0 -0
  279. {auto_coder-0.1.345 → auto_coder-0.1.346}/tests/test_queue_communicate.py +0 -0
  280. {auto_coder-0.1.345 → auto_coder-0.1.346}/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.345
3
+ Version: 0.1.346
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.345
3
+ Version: 0.1.346
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -40,7 +40,7 @@ from rich.markdown import Markdown
40
40
  from byzerllm.utils.nontext import Image
41
41
  import git
42
42
  from autocoder.common import git_utils
43
- from autocoder.chat_auto_coder_lang import get_message
43
+ from autocoder.chat_auto_coder_lang import get_message,get_message_with_format
44
44
  from autocoder.agent.auto_guess_query import AutoGuessQuery
45
45
  from autocoder.common.mcp_server import get_mcp_server
46
46
  from autocoder.common.mcp_server_types import (
@@ -273,8 +273,8 @@ def initialize_system(args:InitializeSystemRequest):
273
273
  else:
274
274
  print(f" {message}")
275
275
 
276
- def init_project():
277
- if not os.path.exists(".auto-coder"):
276
+ def init_project():
277
+ if not os.path.exists(".auto-coder") or not os.path.exists("actions"):
278
278
  first_time[0] = True
279
279
  print_status(get_message("not_initialized"), "warning")
280
280
  init_choice = input(
@@ -295,8 +295,7 @@ def initialize_system(args:InitializeSystemRequest):
295
295
 
296
296
  if not os.path.exists(base_persist_dir):
297
297
  os.makedirs(base_persist_dir, exist_ok=True)
298
- print_status(get_message("created_dir").format(
299
- base_persist_dir), "success")
298
+ print_status(get_message_with_format("created_dir",path=base_persist_dir), "success")
300
299
 
301
300
  if first_time[0]:
302
301
  configure_project_type()
@@ -221,7 +221,7 @@ class AgenticEdit:
221
221
  {{files}}
222
222
  </files>
223
223
 
224
- ====
224
+ ====
225
225
 
226
226
  TOOL USE
227
227
 
@@ -667,7 +667,35 @@ class AgenticEdit:
667
667
  You can use the tool `read_file` to read these description files, which helps you decide exactly which files need detailed attention. Note that the `active.md` file does not contain information about all files within the directory—it only includes information
668
668
  about the files that were recently changed.
669
669
  {% endif %}
670
+
671
+ {% if extra_docs %}
672
+ ====
673
+
674
+ RULES PROVIDED BY USER
675
+
676
+ The following rules are provided by the user, and you must follow them strictly.
677
+
678
+ {% for key, value in extra_docs.items() %}
679
+ ### {{ key }}
680
+ {{ value }}
681
+ {% endfor %}
682
+ {% endif %}
670
683
  """
684
+ import os
685
+ extra_docs = {}
686
+ rules_dir = os.path.join(self.args.source_dir,".auto-coder", "autocoderrules")
687
+ if os.path.isdir(rules_dir):
688
+ for fname in os.listdir(rules_dir):
689
+ if fname.endswith(".md"):
690
+ fpath = os.path.join(rules_dir, fname)
691
+ try:
692
+ with open(fpath, "r", encoding="utf-8") as f:
693
+ content = f.read()
694
+ key = os.path.splitext(fname)[0]
695
+ extra_docs[key] = content
696
+ except Exception:
697
+ continue
698
+
671
699
  env_info = detect_env()
672
700
  shell_type = "bash"
673
701
  if shells.is_running_in_cmd():
@@ -687,6 +715,7 @@ class AgenticEdit:
687
715
  "files": self.files.to_str(),
688
716
  "mcp_server_info": self.mcp_server_info,
689
717
  "enable_active_context": self.args.enable_active_context,
718
+ "extra_docs": extra_docs,
690
719
  }
691
720
 
692
721
  # Removed _execute_command_result and execute_auto_command methods
@@ -971,6 +1000,7 @@ class AgenticEdit:
971
1000
  global_cancel.check_and_raise()
972
1001
 
973
1002
  meta_holder.meta = metadata
1003
+ logger.info(f"metadata: {metadata.input_tokens_count}")
974
1004
  if not content_chunk:
975
1005
  continue
976
1006
  buffer += content_chunk
@@ -29,12 +29,12 @@ class AskFollowupQuestionToolResolver(BaseToolResolver):
29
29
  This resolver doesn't directly ask the user but prepares the data for it.
30
30
  """
31
31
  question = self.tool.question
32
- options = self.tool.options
32
+ options = self.tool.options or []
33
33
  options_text = "\n".join([f"{i+1}. {option}" for i, option in enumerate(options)])
34
34
  if get_run_context().is_web():
35
35
  answer = get_event_manager(
36
36
  self.args.event_file).ask_user(prompt=question)
37
- self.result_manager.append(content=answer + "\n" + options_text, meta={
37
+ self.result_manager.append(content=answer + ("\n" + options_text if options_text else ""), meta={
38
38
  "action": "ask_user",
39
39
  "input": {
40
40
  "question": question
@@ -841,8 +841,7 @@ class LongContextRAG:
841
841
  self._print_rag_stats(rag_stat)
842
842
  else:
843
843
 
844
- qa_strategy = get_qa_strategy(
845
- self.args.rag_qa_conversation_strategy)
844
+ qa_strategy = get_qa_strategy(self.args)
846
845
  new_conversations = qa_strategy.create_conversation(
847
846
  documents=[doc.source_code for doc in relevant_docs],
848
847
  conversations=conversations, local_image_host=self.args.local_image_host
@@ -0,0 +1,295 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import List, Dict, Any, Generator
3
+ import byzerllm
4
+ from autocoder.common import AutoCoderArgs
5
+
6
+ class QAConversationStrategy(ABC):
7
+ """
8
+ Abstract base class for conversation strategies.
9
+ Different strategies organize documents and conversations differently.
10
+ """
11
+ @abstractmethod
12
+ def create_conversation(self, documents: List[Any], conversations: List[Dict[str,str]], local_image_host: str) -> List[Dict]:
13
+ """
14
+ Create a conversation structure based on documents and history
15
+
16
+ Args:
17
+ documents: List of retrieved documents
18
+ conversations: conversation turns
19
+
20
+ Returns:
21
+ List of message dictionaries representing the conversation to send to the model
22
+ """
23
+ pass
24
+
25
+ class MultiRoundStrategy(QAConversationStrategy):
26
+ """
27
+ Multi-round strategy: First let the model read documents, then do Q&A.
28
+ Creates multiple conversation turns.
29
+ """
30
+ def __init__(self, args: AutoCoderArgs):
31
+ self.args = args
32
+
33
+ def create_conversation(self, documents: List[Any], conversations: List[Dict[str,str]], local_image_host: str) -> List[Dict]:
34
+ messages = []
35
+ messages.extend([
36
+ {"role": "user", "content": self._read_docs_prompt.prompt(documents, local_image_host)},
37
+ {"role": "assistant", "content": "好的"}
38
+ ])
39
+ messages.extend(conversations)
40
+ return messages
41
+
42
+ @byzerllm.prompt()
43
+ def _read_docs_prompt_old(
44
+ self, relevant_docs: List[str], local_image_host: str
45
+ ) -> Generator[str, None, None]:
46
+ """
47
+ 请阅读以下:
48
+ <documents>
49
+ {% for doc in relevant_docs %}
50
+ {{ doc }}
51
+ {% endfor %}
52
+ </documents>
53
+
54
+ 阅读完成后,使用以上文档来回答用户的问题。回答要求:
55
+
56
+ 1. 严格基于文档内容回答
57
+ - 如果文档提供的信息无法回答问题,请明确回复:"抱歉,文档中没有足够的信息来回答这个问题。"
58
+ - 不要添加、推测或扩展文档未提及的信息
59
+
60
+ 2. 格式如 ![image](/path/to/images/path.png) 的 Markdown 图片处理
61
+ - 根据Markdown 图片前后文本内容推测改图片与问题的相关性,有相关性则在回答中输出该Markdown图片路径
62
+ - 根据相关图片在文档中的位置,自然融入答复内容,保持上下文连贯
63
+ - 完整保留原始图片路径,不省略任何部分
64
+
65
+ 3. 回答格式要求
66
+ - 使用markdown格式提升可读性
67
+ {% if local_image_host %}
68
+ 4. 图片路径处理
69
+ - 图片地址需返回绝对路径,
70
+ - 对于Windows风格的路径,需要转换为Linux风格, 例如:C:\\Users\\user\\Desktop\\image.png 转换为 C:/Users/user/Desktop/image.png
71
+ - 为请求图片资源 需增加 http://{{ local_image_host }}/static/ 作为前缀
72
+ 例如:/path/to/images/image.png, 返回 http://{{ local_image_host }}/static/path/to/images/image.png
73
+ {% endif %}
74
+ """
75
+
76
+ @byzerllm.prompt()
77
+ def _read_docs_prompt(
78
+ self, relevant_docs: List[str], local_image_host: str
79
+ ) -> Generator[str, None, None]:
80
+ """
81
+ You are a knowledgeable assistant capable of answering any user question strictly based on the retrieved documents.
82
+
83
+ ====
84
+
85
+ FILES CONTEXT
86
+
87
+ The following files are provided to you as context for the user's task. Use these files to understand the project and answer questions strictly based on their content.
88
+
89
+ <documents>
90
+ {% for doc in relevant_docs %}
91
+ {{ doc }}
92
+ {% endfor %}
93
+ </documents>
94
+
95
+ ====
96
+
97
+ {% if extra_docs %}
98
+ AUTO EXTENSION DOCS
99
+
100
+ The following extension documents are loaded dynamically to enhance your understanding or provide special instructions, rules, or context.
101
+
102
+ {% for key, value in extra_docs.items() %}
103
+ ### {{ key }}
104
+ {{ value }}
105
+ {% endfor %}
106
+
107
+ ====
108
+ {% endif %}
109
+
110
+ INSTRUCTIONS
111
+
112
+ - Use ONLY the information from the provided documents and extension docs.
113
+ - If the documents do not contain enough information to answer, reply: "抱歉,文档中没有足够的信息来回答这个问题。"
114
+ - Do NOT invent, guess, or add information beyond what is provided.
115
+
116
+ - For Markdown images like ![image](/path/to/image.png):
117
+ - Analyze surrounding text to determine relevance.
118
+ - Include relevant images naturally in your answer, preserving image paths.
119
+ - Convert Windows paths to Linux style (e.g., C:\\path\\to\\img.png -> C:/path/to/img.png)
120
+ {% if local_image_host %}
121
+ - Prefix image URLs with http://{{ local_image_host }}/static/
122
+ {% endif %}
123
+
124
+ - Format your answer with Markdown for readability.
125
+ - Always use the language used by the user in their question.
126
+
127
+ """
128
+
129
+ import os
130
+ extra_docs = {}
131
+ rules_dir = os.path.join(self.args.source_dir, ".autocoderrules")
132
+ if os.path.isdir(rules_dir):
133
+ for fname in os.listdir(rules_dir):
134
+ if fname.endswith(".md"):
135
+ fpath = os.path.join(rules_dir, fname)
136
+ try:
137
+ with open(fpath, "r", encoding="utf-8") as f:
138
+ content = f.read()
139
+ key = os.path.splitext(fname)[0]
140
+ extra_docs[key] = content
141
+ except Exception:
142
+ continue
143
+ return {"extra_docs": extra_docs}
144
+
145
+ class SingleRoundStrategy(QAConversationStrategy):
146
+ """
147
+ Single-round strategy: Put documents and conversation history in a single round.
148
+ """
149
+ def create_conversation(self, documents: List[Any], conversations: List[Dict[str,str]], local_image_host: str) -> List[Dict]:
150
+ messages = []
151
+ messages.extend([
152
+ {"role": "user", "content": self._single_round_answer_question.prompt(documents, conversations, local_image_host)}
153
+ ])
154
+ return messages
155
+
156
+ @byzerllm.prompt()
157
+ def _single_round_answer_question_old(
158
+ self, relevant_docs: List[str], conversations: List[Dict[str, str]], local_image_host: str
159
+ ) -> Generator[str, None, None]:
160
+ """
161
+ 文档:
162
+ <documents>
163
+ {% for doc in relevant_docs %}
164
+ {{ doc }}
165
+ {% endfor %}
166
+ </documents>
167
+
168
+ 用户历史对话:
169
+ <conversations>
170
+ {% for msg in conversations %}
171
+ <{{ msg.role }}>: {{ msg.content }}
172
+ {% endfor %}
173
+ </conversations>
174
+
175
+ 使用以上文档来回答用户最后的问题。回答要求:
176
+
177
+ 1. 严格基于文档内容回答
178
+ - 如果文档提供的信息无法回答问题,请明确回复:"抱歉,文档中没有足够的信息来回答这个问题。"
179
+ - 不要添加、推测或扩展文档未提及的信息
180
+
181
+ 2. 格式如 ![image](/path/to/images/path.png) 的 Markdown 图片处理
182
+ - 根据Markdown 图片前后文本内容推测改图片与问题的相关性,有相关性则在回答中输出该Markdown图片路径
183
+ - 根据相关图片在文档中的位置,自然融入答复内容,保持上下文连贯
184
+ - 完整保留原始图片路径,不省略任何部分
185
+
186
+ 3. 回答格式要求
187
+ - 使用markdown格式提升可读性
188
+ {% if local_image_host %}
189
+ 4. 图片路径处理
190
+ - 图片地址需返回绝对路径,
191
+ - 对于Windows风格的路径,需要转换为Linux风格, 例如:C:\\Users\\user\\Desktop\\image.png 转换为 C:/Users/user/Desktop/image.png
192
+ - 为请求图片资源 需增加 http://{{ local_image_host }}/static/ 作为前缀
193
+ 例如:/path/to/images/image.png, 返回 http://{{ local_image_host }}/static/path/to/images/image.png
194
+ {% endif %}
195
+ """
196
+
197
+ @byzerllm.prompt()
198
+ def _single_round_answer_question(
199
+ self, relevant_docs: List[str], conversations: List[Dict[str, str]], local_image_host: str
200
+ ) -> Generator[str, None, None]:
201
+ """
202
+ You are a knowledgeable assistant capable of answering any user question strictly based on the retrieved documents.
203
+
204
+ ====
205
+
206
+ FILES CONTEXT
207
+
208
+ The following files are provided to you as context for the user's task. Use these files to understand the project and answer questions strictly based on their content.
209
+
210
+ <documents>
211
+ {% for doc in relevant_docs %}
212
+ {{ doc }}
213
+ {% endfor %}
214
+ </documents>
215
+
216
+ ====
217
+ {% if extra_docs %}
218
+ AUTO EXTENSION DOCS
219
+
220
+ The following extension documents are loaded dynamically to enhance your understanding or provide special instructions, rules, or context.
221
+
222
+ {% for key, value in extra_docs.items() %}
223
+ ### {{ key }}
224
+ {{ value }}
225
+ {% endfor %}
226
+
227
+ ====
228
+ {% endif %}
229
+
230
+ USER CONVERSATION HISTORY
231
+
232
+ {% for msg in conversations %}
233
+ <{{ msg.role }}>: {{ msg.content }}
234
+ {% endfor %}
235
+
236
+ ====
237
+
238
+ INSTRUCTIONS
239
+
240
+ - Use ONLY the information from the provided documents and extension docs.
241
+ - If the documents do not contain enough information to answer, reply: "抱歉,文档中没有足够的信息来回答这个问题。"
242
+ - Do NOT invent, guess, or add information beyond what is provided.
243
+
244
+ - For Markdown images like ![image](/path/to/image.png):
245
+ - Analyze surrounding text to determine relevance.
246
+ - Include relevant images naturally in your answer, preserving image paths.
247
+ - Convert Windows paths to Linux style (e.g., C:\\path\\to\\img.png -> C:/path/to/img.png)
248
+ {% if local_image_host %}
249
+ - Prefix image URLs with http://{{ local_image_host }}/static/
250
+ {% endif %}
251
+
252
+ - Format your answer with Markdown for readability.
253
+ - Always use the language used by the user in their question.
254
+
255
+ """
256
+ import os
257
+ extra_docs = {}
258
+ rules_dir = os.path.join(getattr(self, 'args', None).source_dir if getattr(self, 'args', None) else ".", ".autocoderrules")
259
+ if os.path.isdir(rules_dir):
260
+ for fname in os.listdir(rules_dir):
261
+ if fname.endswith(".md"):
262
+ fpath = os.path.join(rules_dir, fname)
263
+ try:
264
+ with open(fpath, "r", encoding="utf-8") as f:
265
+ content = f.read()
266
+ key = os.path.splitext(fname)[0]
267
+ extra_docs[key] = content
268
+ except Exception:
269
+ continue
270
+ return {"extra_docs": extra_docs}
271
+
272
+ def get_qa_strategy(args: AutoCoderArgs) -> QAConversationStrategy:
273
+ """
274
+ Factory method to get the appropriate conversation strategy based on AutoCoderArgs
275
+
276
+ Args:
277
+ args: AutoCoderArgs instance containing configuration, including strategy name in `rag_qa_conversation_strategy`
278
+
279
+ Returns:
280
+ An instance of the requested strategy
281
+
282
+ Raises:
283
+ ValueError: If the requested strategy doesn't exist
284
+ """
285
+ strategy_name = getattr(args, 'rag_qa_conversation_strategy', None) or "multi_round"
286
+
287
+ strategies = {
288
+ "multi_round": MultiRoundStrategy,
289
+ "single_round": SingleRoundStrategy,
290
+ }
291
+
292
+ if strategy_name not in strategies:
293
+ raise ValueError(f"Unknown strategy: {strategy_name}. Available strategies: {list(strategies.keys())}")
294
+
295
+ return strategies[strategy_name]()
@@ -0,0 +1 @@
1
+ __version__ = "0.1.346"
@@ -1,145 +0,0 @@
1
- from abc import ABC, abstractmethod
2
- from typing import List, Dict, Any,Generator
3
- import byzerllm
4
-
5
- class QAConversationStrategy(ABC):
6
- """
7
- Abstract base class for conversation strategies.
8
- Different strategies organize documents and conversations differently.
9
- """
10
- @abstractmethod
11
- def create_conversation(self, documents: List[Any], conversations: List[Dict[str,str]], local_image_host: str) -> List[Dict]:
12
- """
13
- Create a conversation structure based on documents and history
14
-
15
- Args:
16
- documents: List of retrieved documents
17
- conversations: conversation turns
18
-
19
- Returns:
20
- List of message dictionaries representing the conversation to send to the model
21
- """
22
- pass
23
-
24
- class MultiRoundStrategy(QAConversationStrategy):
25
- """
26
- Multi-round strategy: First let the model read documents, then do Q&A.
27
- Creates multiple conversation turns.
28
- """
29
- def create_conversation(self, documents: List[Any], conversations: List[Dict[str,str]], local_image_host: str) -> List[Dict]:
30
- messages = []
31
- messages.extend([
32
- {"role": "user", "content": self._read_docs_prompt.prompt(documents, local_image_host)},
33
- {"role": "assistant", "content": "好的"}
34
- ])
35
- messages.extend(conversations)
36
- return messages
37
-
38
- @byzerllm.prompt()
39
- def _read_docs_prompt(
40
- self, relevant_docs: List[str], local_image_host: str
41
- ) -> Generator[str, None, None]:
42
- """
43
- 请阅读以下:
44
- <documents>
45
- {% for doc in relevant_docs %}
46
- {{ doc }}
47
- {% endfor %}
48
- </documents>
49
-
50
- 阅读完成后,使用以上文档来回答用户的问题。回答要求:
51
-
52
- 1. 严格基于文档内容回答
53
- - 如果文档提供的信息无法回答问题,请明确回复:"抱歉,文档中没有足够的信息来回答这个问题。"
54
- - 不要添加、推测或扩展文档未提及的信息
55
-
56
- 2. 格式如 ![image](/path/to/images/path.png) 的 Markdown 图片处理
57
- - 根据Markdown 图片前后文本内容推测改图片与问题的相关性,有相关性则在回答中输出该Markdown图片路径
58
- - 根据相关图片在文档中的位置,自然融入答复内容,保持上下文连贯
59
- - 完整保留原始图片路径,不省略任何部分
60
-
61
- 3. 回答格式要求
62
- - 使用markdown格式提升可读性
63
- {% if local_image_host %}
64
- 4. 图片路径处理
65
- - 图片地址需返回绝对路径,
66
- - 对于Windows风格的路径,需要转换为Linux风格, 例如:C:\\Users\\user\\Desktop\\image.png 转换为 C:/Users/user/Desktop/image.png
67
- - 为请求图片资源 需增加 http://{{ local_image_host }}/static/ 作为前缀
68
- 例如:/path/to/images/image.png, 返回 http://{{ local_image_host }}/static/path/to/images/image.png
69
- {% endif %}
70
- """
71
-
72
- class SingleRoundStrategy(QAConversationStrategy):
73
- """
74
- Single-round strategy: Put documents and conversation history in a single round.
75
- """
76
- def create_conversation(self, documents: List[Any], conversations: List[Dict[str,str]], local_image_host: str) -> List[Dict]:
77
- messages = []
78
- messages.extend([
79
- {"role": "user", "content": self._single_round_answer_question.prompt(documents, conversations, local_image_host)}
80
- ])
81
- return messages
82
-
83
- @byzerllm.prompt()
84
- def _single_round_answer_question(
85
- self, relevant_docs: List[str], conversations: List[Dict[str, str]], local_image_host: str
86
- ) -> Generator[str, None, None]:
87
- """
88
- 文档:
89
- <documents>
90
- {% for doc in relevant_docs %}
91
- {{ doc }}
92
- {% endfor %}
93
- </documents>
94
-
95
- 用户历史对话:
96
- <conversations>
97
- {% for msg in conversations %}
98
- <{{ msg.role }}>: {{ msg.content }}
99
- {% endfor %}
100
- </conversations>
101
-
102
- 使用以上文档来回答用户最后的问题。回答要求:
103
-
104
- 1. 严格基于文档内容回答
105
- - 如果文档提供的信息无法回答问题,请明确回复:"抱歉,文档中没有足够的信息来回答这个问题。"
106
- - 不要添加、推测或扩展文档未提及的信息
107
-
108
- 2. 格式如 ![image](/path/to/images/path.png) 的 Markdown 图片处理
109
- - 根据Markdown 图片前后文本内容推测改图片与问题的相关性,有相关性则在回答中输出该Markdown图片路径
110
- - 根据相关图片在文档中的位置,自然融入答复内容,保持上下文连贯
111
- - 完整保留原始图片路径,不省略任何部分
112
-
113
- 3. 回答格式要求
114
- - 使用markdown格式提升可读性
115
- {% if local_image_host %}
116
- 4. 图片路径处理
117
- - 图片地址需返回绝对路径,
118
- - 对于Windows风格的路径,需要转换为Linux风格, 例如:C:\\Users\\user\\Desktop\\image.png 转换为 C:/Users/user/Desktop/image.png
119
- - 为请求图片资源 需增加 http://{{ local_image_host }}/static/ 作为前缀
120
- 例如:/path/to/images/image.png, 返回 http://{{ local_image_host }}/static/path/to/images/image.png
121
- {% endif %}
122
- """
123
-
124
- def get_qa_strategy(strategy_name: str) -> QAConversationStrategy:
125
- """
126
- Factory method to get the appropriate conversation strategy
127
-
128
- Args:
129
- strategy_name: Name of the strategy to use
130
-
131
- Returns:
132
- An instance of the requested strategy
133
-
134
- Raises:
135
- ValueError: If the requested strategy doesn't exist
136
- """
137
- strategies = {
138
- "multi_round": MultiRoundStrategy,
139
- "single_round": SingleRoundStrategy,
140
- }
141
-
142
- if strategy_name not in strategies:
143
- raise ValueError(f"Unknown strategy: {strategy_name}. Available strategies: {list(strategies.keys())}")
144
-
145
- return strategies[strategy_name]()
@@ -1 +0,0 @@
1
- __version__ = "0.1.345"
File without changes
File without changes
File without changes
File without changes