auto-coder 0.1.252__tar.gz → 0.1.255__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 (164) hide show
  1. {auto_coder-0.1.252 → auto_coder-0.1.255}/PKG-INFO +1 -1
  2. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/auto_coder.egg-info/SOURCES.txt +2 -0
  4. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/auto_coder.py +11 -8
  5. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/chat_auto_coder.py +74 -28
  6. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/chat_auto_coder_lang.py +2 -2
  7. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/__init__.py +1 -0
  8. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/auto_coder_lang.py +9 -0
  9. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_merge.py +1 -1
  10. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_merge_diff.py +1 -1
  11. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_merge_editblock.py +1 -1
  12. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_merge_strict_diff.py +1 -1
  13. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/command_completer.py +5 -1
  14. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/mcp_server.py +3 -4
  15. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +1 -1
  16. auto_coder-0.1.255/src/autocoder/common/model_speed_test.py +392 -0
  17. auto_coder-0.1.255/src/autocoder/data/byzerllm.md +1549 -0
  18. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/entry.py +9 -2
  19. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/filter/quick_filter.py +58 -23
  20. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/models.py +1 -4
  21. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/doc_filter.py +3 -2
  22. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/long_context_rag.py +2 -15
  23. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +28 -16
  24. auto_coder-0.1.255/src/autocoder/version.py +1 -0
  25. auto_coder-0.1.252/src/autocoder/version.py +0 -1
  26. {auto_coder-0.1.252 → auto_coder-0.1.255}/LICENSE +0 -0
  27. {auto_coder-0.1.252 → auto_coder-0.1.255}/README.md +0 -0
  28. {auto_coder-0.1.252 → auto_coder-0.1.255}/setup.cfg +0 -0
  29. {auto_coder-0.1.252 → auto_coder-0.1.255}/setup.py +0 -0
  30. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  31. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/auto_coder.egg-info/entry_points.txt +0 -0
  32. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/auto_coder.egg-info/requires.txt +0 -0
  33. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/auto_coder.egg-info/top_level.txt +0 -0
  34. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/__init__.py +0 -0
  35. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/__init__.py +0 -0
  36. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  37. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/auto_filegroup.py +0 -0
  38. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/auto_guess_query.py +0 -0
  39. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/auto_review_commit.py +0 -0
  40. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/auto_tool.py +0 -0
  41. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/coder.py +0 -0
  42. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/designer.py +0 -0
  43. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/planner.py +0 -0
  44. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/agent/project_reader.py +0 -0
  45. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/auto_coder_rag.py +0 -0
  46. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
  47. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/auto_coder_rag_mcp.py +0 -0
  48. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/auto_coder_server.py +0 -0
  49. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/benchmark.py +0 -0
  50. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/chat/__init__.py +0 -0
  51. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/command_args.py +0 -0
  52. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/JupyterClient.py +0 -0
  53. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/ShellClient.py +0 -0
  54. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/anything2images.py +0 -0
  55. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/anything2img.py +0 -0
  56. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/audio.py +0 -0
  57. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/buildin_tokenizer.py +0 -0
  58. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/chunk_validation.py +0 -0
  59. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/cleaner.py +0 -0
  60. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_execute.py +0 -0
  61. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_generate.py +0 -0
  62. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  63. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  64. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  65. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/code_modification_ranker.py +0 -0
  66. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/command_generator.py +0 -0
  67. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/command_templates.py +0 -0
  68. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/const.py +0 -0
  69. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/files.py +0 -0
  70. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/git_utils.py +0 -0
  71. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/global_cancel.py +0 -0
  72. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/image_to_page.py +0 -0
  73. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/interpreter.py +0 -0
  74. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/llm_rerank.py +0 -0
  75. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/mcp_hub.py +0 -0
  76. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  77. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/mcp_tools.py +0 -0
  78. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/memory_manager.py +0 -0
  79. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/printer.py +0 -0
  80. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/recall_validation.py +0 -0
  81. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/screenshots.py +0 -0
  82. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/search.py +0 -0
  83. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/search_replace.py +0 -0
  84. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/shells.py +0 -0
  85. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/sys_prompt.py +0 -0
  86. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/text.py +0 -0
  87. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/types.py +0 -0
  88. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  89. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/data/tokenizer.json +0 -0
  90. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/db/__init__.py +0 -0
  91. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/db/store.py +0 -0
  92. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/dispacher/__init__.py +0 -0
  93. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/dispacher/actions/__init__.py +0 -0
  94. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/dispacher/actions/action.py +0 -0
  95. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/dispacher/actions/copilot.py +0 -0
  96. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  97. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  98. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  99. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/__init__.py +0 -0
  100. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/filter/__init__.py +0 -0
  101. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/filter/normal_filter.py +0 -0
  102. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/for_command.py +0 -0
  103. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/index.py +0 -0
  104. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/symbols_utils.py +0 -0
  105. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/index/types.py +0 -0
  106. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/lang.py +0 -0
  107. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/pyproject/__init__.py +0 -0
  108. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/__init__.py +0 -0
  109. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/api_server.py +0 -0
  110. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/cache/__init__.py +0 -0
  111. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/cache/base_cache.py +0 -0
  112. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  113. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  114. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/cache/simple_cache.py +0 -0
  115. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/document_retriever.py +0 -0
  116. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/llm_wrapper.py +0 -0
  117. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/loaders/__init__.py +0 -0
  118. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  119. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  120. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  121. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  122. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/rag_config.py +0 -0
  123. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/rag_entry.py +0 -0
  124. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/raw_rag.py +0 -0
  125. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/relevant_utils.py +0 -0
  126. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/simple_directory_reader.py +0 -0
  127. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/simple_rag.py +0 -0
  128. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/stream_event/__init__.py +0 -0
  129. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  130. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/stream_event/types.py +0 -0
  131. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/token_checker.py +0 -0
  132. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/token_counter.py +0 -0
  133. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/token_limiter.py +0 -0
  134. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/types.py +0 -0
  135. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/utils.py +0 -0
  136. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/rag/variable_holder.py +0 -0
  137. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/regexproject/__init__.py +0 -0
  138. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/suffixproject/__init__.py +0 -0
  139. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/tsproject/__init__.py +0 -0
  140. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/__init__.py +0 -0
  141. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/_markitdown.py +0 -0
  142. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  143. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  144. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/conversation_store.py +0 -0
  145. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  146. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/llms.py +0 -0
  147. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/log_capture.py +0 -0
  148. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/multi_turn.py +0 -0
  149. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/operate_config_api.py +0 -0
  150. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/print_table.py +0 -0
  151. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/queue_communicate.py +0 -0
  152. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/request_event_queue.py +0 -0
  153. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/request_queue.py +0 -0
  154. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/rest.py +0 -0
  155. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/tests.py +0 -0
  156. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/thread_utils.py +0 -0
  157. {auto_coder-0.1.252 → auto_coder-0.1.255}/src/autocoder/utils/types.py +0 -0
  158. {auto_coder-0.1.252 → auto_coder-0.1.255}/tests/test_action_regex_project.py +0 -0
  159. {auto_coder-0.1.252 → auto_coder-0.1.255}/tests/test_chat_auto_coder.py +0 -0
  160. {auto_coder-0.1.252 → auto_coder-0.1.255}/tests/test_code_auto_merge_editblock.py +0 -0
  161. {auto_coder-0.1.252 → auto_coder-0.1.255}/tests/test_command_completer.py +0 -0
  162. {auto_coder-0.1.252 → auto_coder-0.1.255}/tests/test_planner.py +0 -0
  163. {auto_coder-0.1.252 → auto_coder-0.1.255}/tests/test_queue_communicate.py +0 -0
  164. {auto_coder-0.1.252 → auto_coder-0.1.255}/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.252
3
+ Version: 0.1.255
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.252
3
+ Version: 0.1.255
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -65,6 +65,7 @@ src/autocoder/common/mcp_hub.py
65
65
  src/autocoder/common/mcp_server.py
66
66
  src/autocoder/common/mcp_tools.py
67
67
  src/autocoder/common/memory_manager.py
68
+ src/autocoder/common/model_speed_test.py
68
69
  src/autocoder/common/printer.py
69
70
  src/autocoder/common/recall_validation.py
70
71
  src/autocoder/common/screenshots.py
@@ -77,6 +78,7 @@ src/autocoder/common/types.py
77
78
  src/autocoder/common/utils_code_auto_generate.py
78
79
  src/autocoder/common/mcp_servers/__init__.py
79
80
  src/autocoder/common/mcp_servers/mcp_server_perplexity.py
81
+ src/autocoder/data/byzerllm.md
80
82
  src/autocoder/data/tokenizer.json
81
83
  src/autocoder/db/__init__.py
82
84
  src/autocoder/db/store.py
@@ -256,11 +256,13 @@ def main(input_args: Optional[List[str]] = None):
256
256
  libs_dir = os.path.join(auto_coder_dir, "storage", "libs")
257
257
  code_search_path = None
258
258
  if os.path.exists(libs_dir):
259
- retrieval_libs_dir = os.path.join(
260
- libs_dir, get_latest_byzer_retrieval_lib(libs_dir)
261
- )
262
- if os.path.exists(retrieval_libs_dir):
263
- code_search_path = [retrieval_libs_dir]
259
+ latest_retrieval_lib_dir = get_latest_byzer_retrieval_lib(libs_dir)
260
+ if latest_retrieval_lib_dir :
261
+ retrieval_libs_dir = os.path.join(
262
+ libs_dir, latest_retrieval_lib_dir
263
+ )
264
+ if os.path.exists(retrieval_libs_dir):
265
+ code_search_path = [retrieval_libs_dir]
264
266
 
265
267
  try:
266
268
  init_options = {}
@@ -1109,8 +1111,7 @@ def main(input_args: Optional[List[str]] = None):
1109
1111
  return
1110
1112
 
1111
1113
  elif raw_args.agent_command == "chat":
1112
- from autocoder.rag.rag_entry import RAGFactory
1113
-
1114
+
1114
1115
  memory_dir = os.path.join(args.source_dir, ".auto-coder", "memory")
1115
1116
  os.makedirs(memory_dir, exist_ok=True)
1116
1117
  memory_file = os.path.join(memory_dir, "chat_history.json")
@@ -1335,6 +1336,7 @@ def main(input_args: Optional[List[str]] = None):
1335
1336
  start_time = time.time()
1336
1337
 
1337
1338
  if "rag" in args.action:
1339
+ from autocoder.rag.rag_entry import RAGFactory
1338
1340
  args.enable_rag_search = True
1339
1341
  args.enable_rag_context = False
1340
1342
  rag = RAGFactory.get_rag(llm=chat_llm, args=args, path="")
@@ -1348,7 +1350,8 @@ def main(input_args: Optional[List[str]] = None):
1348
1350
  response = mcp_server.send_request(
1349
1351
  McpRequest(
1350
1352
  query=args.query,
1351
- model=args.inference_model or args.model
1353
+ model=args.inference_model or args.model,
1354
+ product_mode=args.product_mode
1352
1355
  )
1353
1356
  )
1354
1357
  v = [[response.result,None]]
@@ -49,7 +49,7 @@ from autocoder.common.mcp_server import get_mcp_server, McpRequest, McpInstallRe
49
49
  import byzerllm
50
50
  from byzerllm.utils import format_str_jinja2
51
51
  from autocoder.common.memory_manager import get_global_memory_file_paths
52
- from autocoder import models
52
+ from autocoder import models as models_module
53
53
  import shlex
54
54
  from autocoder.utils.llms import get_single_llm
55
55
  import pkg_resources
@@ -1539,11 +1539,12 @@ def mcp(query: str):
1539
1539
  if os.path.exists(temp_yaml):
1540
1540
  os.remove(temp_yaml)
1541
1541
 
1542
- mcp_server = get_mcp_server()
1542
+ mcp_server = get_mcp_server()
1543
1543
  response = mcp_server.send_request(
1544
1544
  McpRequest(
1545
1545
  query=query,
1546
- model=args.inference_model or args.model
1546
+ model=args.inference_model or args.model,
1547
+ product_mode=args.product_mode
1547
1548
  )
1548
1549
  )
1549
1550
 
@@ -1564,19 +1565,19 @@ def mcp(query: str):
1564
1565
  file_path = os.path.join(mcp_dir, f"{timestamp}.md")
1565
1566
 
1566
1567
  # Format response as markdown
1567
- markdown_content = f"# {printer.get_message_from_key('mcp_response_title')}\n\n{response.result}"
1568
+ markdown_content = response.result
1568
1569
 
1569
1570
  # Save to file
1570
1571
  with open(file_path, "w", encoding="utf-8") as f:
1571
1572
  f.write(markdown_content)
1572
1573
 
1573
- # Print with markdown formatting
1574
- printer.print_panel(
1575
- Markdown(markdown_content),
1576
- text_options={"justify": "left"},
1577
- panel_options={
1578
- "border_style": "green"
1579
- }
1574
+ console = Console()
1575
+ console.print(
1576
+ Panel(
1577
+ Markdown(markdown_content, justify="left"),
1578
+ title=printer.get_message_from_key('mcp_response_title'),
1579
+ border_style="green"
1580
+ )
1580
1581
  )
1581
1582
 
1582
1583
 
@@ -1741,7 +1742,7 @@ def commit(query: str):
1741
1742
  md5 = hashlib.md5(file_content.encode("utf-8")).hexdigest()
1742
1743
  file_name = os.path.basename(execute_file)
1743
1744
  commit_result = git_utils.commit_changes(
1744
- ".", f"auto_coder_{file_name}_{md5}"
1745
+ ".", f"auto_coder_{file_name}_{md5}\n{commit_message}"
1745
1746
  )
1746
1747
  git_utils.print_commit_info(commit_result=commit_result)
1747
1748
  if commit_message:
@@ -2173,7 +2174,7 @@ def manage_models(params, query: str):
2173
2174
  printer.print_in_terminal("models_lite_only", style="red")
2174
2175
  return
2175
2176
 
2176
- models_data = models.load_models()
2177
+ models_data = models_module.load_models()
2177
2178
  subcmd = ""
2178
2179
  if "/list" in query:
2179
2180
  subcmd = "/list"
@@ -2196,24 +2197,49 @@ def manage_models(params, query: str):
2196
2197
  subcmd = "/remove"
2197
2198
  query = query.replace("/remove", "", 1).strip()
2198
2199
 
2200
+ if "/speed-test" in query:
2201
+ subcmd = "/speed-test"
2202
+ query = query.replace("/speed-test", "", 1).strip()
2203
+
2204
+ if "/speed_test" in query:
2205
+ subcmd = "/speed-test"
2206
+ query = query.replace("/speed_test", "", 1).strip()
2207
+
2208
+ if "input_price" in query:
2209
+ subcmd = "/input_price"
2210
+ query = query.replace("/input_price", "", 1).strip()
2211
+
2212
+ if "output_price" in query:
2213
+ subcmd = "/output_price"
2214
+ query = query.replace("/output_price", "", 1).strip()
2215
+
2216
+ if "/speed" in query:
2217
+ subcmd = "/speed"
2218
+ query = query.replace("/speed", "", 1).strip()
2219
+
2220
+
2221
+
2199
2222
  if not subcmd:
2200
- printer.print_in_terminal("models_usage")
2201
- return
2223
+ printer.print_in_terminal("models_usage")
2202
2224
 
2203
2225
  if subcmd == "/list":
2204
2226
  if models_data:
2227
+ # Sort models by speed (average_speed)
2228
+ sorted_models = sorted(models_data, key=lambda x: float(x.get('average_speed', 0)))
2229
+ sorted_models.reverse()
2230
+
2205
2231
  table = Table(
2206
2232
  title=printer.get_message_from_key("models_title"),
2207
2233
  expand=True,
2208
2234
  show_lines=True
2209
2235
  )
2210
- table.add_column("Name", style="cyan", width=40, no_wrap=False)
2211
- table.add_column("Model Name", style="magenta", width=30, overflow="fold")
2212
- table.add_column("Base URL", style="white", width=50, overflow="fold")
2213
- table.add_column("Input Price (M)", style="magenta", width=15)
2214
- table.add_column("Output Price (M)", style="magenta", width=15)
2215
- table.add_column("Speed (s/req)", style="blue", width=15)
2216
- for m in models_data:
2236
+ table.add_column("Name", style="cyan", width=30, overflow="fold", no_wrap=False)
2237
+ table.add_column("Model Name", style="magenta", width=30, overflow="fold", no_wrap=False)
2238
+ table.add_column("Base URL", style="white", width=40, overflow="fold", no_wrap=False)
2239
+ table.add_column("Input Price (M)", style="magenta", width=15, overflow="fold", no_wrap=False)
2240
+ table.add_column("Output Price (M)", style="magenta", width=15, overflow="fold", no_wrap=False)
2241
+ table.add_column("Speed (s/req)", style="blue", width=15, overflow="fold", no_wrap=False)
2242
+ for m in sorted_models:
2217
2243
  # Check if api_key_path exists and file exists
2218
2244
  is_api_key_set = "api_key" in m
2219
2245
  name = m.get("name", "")
@@ -2241,7 +2267,7 @@ def manage_models(params, query: str):
2241
2267
  name = args[0]
2242
2268
  try:
2243
2269
  price = float(args[1])
2244
- if models.update_model_input_price(name, price):
2270
+ if models_module.update_model_input_price(name, price):
2245
2271
  printer.print_in_terminal("models_input_price_updated", style="green", name=name, price=price)
2246
2272
  else:
2247
2273
  printer.print_in_terminal("models_not_found", style="red", name=name)
@@ -2256,7 +2282,7 @@ def manage_models(params, query: str):
2256
2282
  name = args[0]
2257
2283
  try:
2258
2284
  price = float(args[1])
2259
- if models.update_model_output_price(name, price):
2285
+ if models_module.update_model_output_price(name, price):
2260
2286
  printer.print_in_terminal("models_output_price_updated", style="green", name=name, price=price)
2261
2287
  else:
2262
2288
  printer.print_in_terminal("models_not_found", style="red", name=name)
@@ -2271,7 +2297,7 @@ def manage_models(params, query: str):
2271
2297
  name = args[0]
2272
2298
  try:
2273
2299
  speed = float(args[1])
2274
- if models.update_model_speed(name, speed):
2300
+ if models_module.update_model_speed(name, speed):
2275
2301
  printer.print_in_terminal("models_speed_updated", style="green", name=name, speed=speed)
2276
2302
  else:
2277
2303
  printer.print_in_terminal("models_not_found", style="red", name=name)
@@ -2280,13 +2306,33 @@ def manage_models(params, query: str):
2280
2306
  else:
2281
2307
  printer.print_in_terminal("models_speed_usage", style="red")
2282
2308
 
2309
+ elif subcmd == "/speed-test":
2310
+ from autocoder.common.model_speed_test import render_speed_test_in_terminal
2311
+ test_rounds = 1 # 默认测试轮数
2312
+
2313
+ enable_long_context = False
2314
+ if "/long_context" in query:
2315
+ enable_long_context = True
2316
+ query = query.replace("/long_context", "", 1).strip()
2317
+
2318
+ if "/long-context" in query:
2319
+ enable_long_context = True
2320
+ query = query.replace("/long-context", "", 1).strip()
2321
+
2322
+ # 解析可选的测试轮数参数
2323
+ args = query.strip().split()
2324
+ if args and args[0].isdigit():
2325
+ test_rounds = int(args[0])
2326
+
2327
+ render_speed_test_in_terminal(params.product_mode, test_rounds,enable_long_context=enable_long_context)
2328
+
2283
2329
  elif subcmd == "/add":
2284
2330
  # Support both simplified and legacy formats
2285
2331
  args = query.strip().split(" ")
2286
2332
  if len(args) == 2:
2287
2333
  # Simplified: /models /add <name> <api_key>
2288
2334
  name, api_key = args[0], args[1]
2289
- result = models.update_model_with_api_key(name, api_key)
2335
+ result = models_module.update_model_with_api_key(name, api_key)
2290
2336
  if result:
2291
2337
  printer.print_in_terminal("models_added", style="green", name=name)
2292
2338
  else:
@@ -2328,7 +2374,7 @@ def manage_models(params, query: str):
2328
2374
  }
2329
2375
 
2330
2376
  models_data.append(final_model)
2331
- models.save_models(models_data)
2377
+ models_module.save_models(models_data)
2332
2378
  printer.print_in_terminal("models_add_model_success", style="green", name=data_dict["name"])
2333
2379
 
2334
2380
  elif subcmd == "/remove":
@@ -2341,7 +2387,7 @@ def manage_models(params, query: str):
2341
2387
  if len(filtered_models) == len(models_data):
2342
2388
  printer.print_in_terminal("models_add_model_remove", style="yellow", name=name)
2343
2389
  return
2344
- models.save_models(filtered_models)
2390
+ models_module.save_models(filtered_models)
2345
2391
  printer.print_in_terminal("models_add_model_removed", style="green", name=name)
2346
2392
 
2347
2393
  else:
@@ -85,7 +85,7 @@ MESSAGES = {
85
85
  "design_desc": "Generate SVG image based on the provided description",
86
86
  "commit_desc": "Auto generate yaml file and commit changes based on user's manual changes",
87
87
  "models_desc": "Manage model configurations, only available in lite mode",
88
- "models_usage": "Usage: /models /list|/add|/add_model|/remove|/price|/speed ...",
88
+ "models_usage": "Usage: /models <command>\nAvailable subcommands:\n /list - List all models\n /add <name> <api_key> - Add a built-in model\n /add_model - Add a custom model\n /remove <name> - Remove a model\n /input_price <name> <value> - Set model input price\n /output_price <name> <value> - Set model output price\n /speed <name> <value> - Set model speed\n /speed-test - Test models speed\n /speed-test-long - Test models speed with long context",
89
89
  "models_added": "Added/Updated model '{{name}}' successfully.",
90
90
  "models_add_failed": "Failed to add model '{{name}}'. Model not found in defaults.",
91
91
  "models_add_usage": "Usage: /models /add <name> <api_key> or\n/models /add <name> <model_type> <model_name> <base_url> <api_key_path> [description]",
@@ -213,7 +213,7 @@ MESSAGES = {
213
213
  "conf_value": "值",
214
214
  "conf_title": "配置设置",
215
215
  "conf_subtitle": "使用 /conf <key>:<value> 修改这些设置",
216
- "models_usage": "用法: /models /list|/add|/add_model|/remove|/price|/speed ...",
216
+ "models_usage": "用法: /models <命令>\n可用的子命令:\n /list - 列出所有模型\n /add <名称> <API密钥> - 添加内置模型\n /add_model - 添加自定义模型\n /remove <名称> - 移除模型\n /input_price <名称> <价格> - 设置模型输入价格\n /output_price <名称> <价格> - 设置模型输出价格\n /speed <名称> <速度> - 设置模型速度\n /speed-test - 测试模型速度\n /speed-test-long - 使用长文本上下文测试模型速度",
217
217
  "models_added": "成功添加/更新模型 '{{name}}'。",
218
218
  "models_add_failed": "添加模型 '{{name}}' 失败。在默认模型中未找到该模型。",
219
219
  "models_add_usage": "用法: /models /add <name> <api_key> 或\n/models /add <name> <model_type> <model_name> <base_url> <api_key_path> [description]",
@@ -359,6 +359,7 @@ class AutoCoderArgs(pydantic.BaseModel):
359
359
  product_mode: Optional[str] = "lite"
360
360
 
361
361
  keep_reasoning_content: Optional[bool] = False
362
+ keep_only_reasoning_content: Optional[bool] = False
362
363
 
363
364
  in_code_apply: bool = False
364
365
 
@@ -3,6 +3,11 @@ from byzerllm.utils import format_str_jinja2
3
3
 
4
4
  MESSAGES = {
5
5
  "en": {
6
+ "models_no_active": "No active models found",
7
+ "models_speed_test_results": "Model Speed Test Results",
8
+ "models_testing": "Testing model: {{name}}...",
9
+ "models_testing_start": "Starting speed test for all active models...",
10
+ "models_testing_progress": "Testing progress: {{ completed }}/{{ total }} models",
6
11
  "generation_cancelled": "[Interrupted] Generation cancelled",
7
12
  "model_not_found": "Model {{model_name}} not found",
8
13
  "generating_shell_script": "Generating Shell Script",
@@ -92,6 +97,10 @@ MESSAGES = {
92
97
  "estimated_input_tokens_in_generate": "Estimated input tokens in generate ({{ generate_mode }}): {{ estimated_input_tokens }}",
93
98
  },
94
99
  "zh": {
100
+ "models_no_active": "未找到激活的模型",
101
+ "models_speed_test_results": "模型速度测试结果",
102
+ "models_testing": "正在测试模型: {{name}}...",
103
+ "models_testing_start": "开始对所有激活的模型进行速度测试...",
95
104
  "generation_cancelled": "[已中断] 生成已取消",
96
105
  "model_not_found": "未找到模型: {{model_name}}",
97
106
  "generating_shell_script": "正在生成 Shell 脚本",
@@ -177,5 +177,5 @@ class CodeAutoMerge:
177
177
 
178
178
  self.printer.print_in_terminal("files_merged", total=total)
179
179
  if not force_skip_git:
180
- commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}")
180
+ commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}\n{self.args.query}")
181
181
  git_utils.print_commit_info(commit_result=commit_result)
@@ -523,5 +523,5 @@ class CodeAutoMergeDiff:
523
523
 
524
524
  self.printer.print_in_terminal("files_merged_total", total=total)
525
525
  if not force_skip_git:
526
- commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}")
526
+ commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}\n{self.args.query}")
527
527
  git_utils.print_commit_info(commit_result=commit_result)
@@ -403,7 +403,7 @@ class CodeAutoMergeEditBlock:
403
403
  if not force_skip_git:
404
404
  try:
405
405
  commit_result = git_utils.commit_changes(
406
- self.args.source_dir, f"auto_coder_{file_name}_{md5}"
406
+ self.args.source_dir, f"auto_coder_{file_name}_{md5}\n{self.args.query}"
407
407
  )
408
408
  git_utils.print_commit_info(commit_result=commit_result)
409
409
  except Exception as e:
@@ -233,7 +233,7 @@ class CodeAutoMergeStrictDiff:
233
233
 
234
234
  self.printer.print_in_terminal("files_merged_total", total=total)
235
235
  if not force_skip_git:
236
- commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}")
236
+ commit_result = git_utils.commit_changes(self.args.source_dir, f"auto_coder_{file_name}_{md5}\n{self.args.query}")
237
237
  git_utils.print_commit_info(commit_result=commit_result)
238
238
 
239
239
  @byzerllm.prompt(render="jinja2")
@@ -33,7 +33,11 @@ COMMANDS = {
33
33
  "/add": "",
34
34
  "/add_model": "",
35
35
  "/remove": "",
36
- "/list": ""
36
+ "/list": "",
37
+ "/speed": "",
38
+ "/speed-test": "",
39
+ "/input_price": "",
40
+ "/output_price": "",
37
41
  }
38
42
  }
39
43
 
@@ -3,7 +3,6 @@ from asyncio import Queue as AsyncQueue
3
3
  import threading
4
4
  from typing import List, Dict, Any, Optional
5
5
  from dataclasses import dataclass
6
- import byzerllm
7
6
  from autocoder.common.mcp_hub import McpHub
8
7
  from autocoder.common.mcp_tools import McpExecutor
9
8
  from autocoder.common.mcp_hub import MCP_BUILD_IN_SERVERS
@@ -13,12 +12,13 @@ import time
13
12
  from pydantic import BaseModel
14
13
  import sys
15
14
  from loguru import logger
15
+ from autocoder.utils.llms import get_single_llm
16
16
 
17
17
  @dataclass
18
18
  class McpRequest:
19
19
  query: str
20
20
  model: Optional[str] = None
21
-
21
+ product_mode: Optional[str] = None
22
22
 
23
23
  @dataclass
24
24
  class McpInstallRequest:
@@ -279,8 +279,7 @@ class McpServer:
279
279
  await self._response_queue.put(McpResponse(result="", error=f"Failed to refresh MCP servers: {str(e)}"))
280
280
 
281
281
  else:
282
- llm = byzerllm.ByzerLLM.from_default_model(
283
- model=request.model)
282
+ llm = get_single_llm(request.model,product_mode=request.product_mode)
284
283
  mcp_executor = McpExecutor(hub, llm)
285
284
  conversations = [
286
285
  {"role": "user", "content": request.query}]
@@ -55,7 +55,7 @@ async def handle_list_tools() -> list[types.Tool]:
55
55
  # Commenting out larger models,which have higher risks of timing out,
56
56
  # until Claude Desktop can handle long-running tasks effectively.
57
57
  # "llama-3.1-sonar-large-128k-online",
58
- "llama-3.1-sonar-huge-128k-online",
58
+ "sonar-reasoning-pro",
59
59
  ],
60
60
  },
61
61
  "messages": {