auto-coder 0.1.277__tar.gz → 0.1.279__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 (185) hide show
  1. {auto_coder-0.1.277 → auto_coder-0.1.279}/PKG-INFO +2 -2
  2. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/auto_coder.egg-info/PKG-INFO +2 -2
  3. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/auto_coder.egg-info/requires.txt +1 -1
  4. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/commands/auto_command.py +4 -1
  5. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/shells.py +78 -61
  6. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/api_server.py +1 -3
  7. auto_coder-0.1.279/src/autocoder/rag/llm_wrapper.py +91 -0
  8. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/long_context_rag.py +172 -131
  9. auto_coder-0.1.279/src/autocoder/version.py +1 -0
  10. auto_coder-0.1.277/src/autocoder/rag/llm_wrapper.py +0 -61
  11. auto_coder-0.1.277/src/autocoder/version.py +0 -1
  12. {auto_coder-0.1.277 → auto_coder-0.1.279}/LICENSE +0 -0
  13. {auto_coder-0.1.277 → auto_coder-0.1.279}/README.md +0 -0
  14. {auto_coder-0.1.277 → auto_coder-0.1.279}/setup.cfg +0 -0
  15. {auto_coder-0.1.277 → auto_coder-0.1.279}/setup.py +0 -0
  16. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/auto_coder.egg-info/SOURCES.txt +0 -0
  17. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  18. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/auto_coder.egg-info/entry_points.txt +0 -0
  19. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/auto_coder.egg-info/top_level.txt +0 -0
  20. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/__init__.py +0 -0
  21. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/__init__.py +0 -0
  22. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  23. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/auto_filegroup.py +0 -0
  24. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/auto_guess_query.py +0 -0
  25. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  26. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/auto_review_commit.py +0 -0
  27. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/auto_tool.py +0 -0
  28. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/coder.py +0 -0
  29. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/designer.py +0 -0
  30. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/planner.py +0 -0
  31. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/agent/project_reader.py +0 -0
  32. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/auto_coder.py +0 -0
  33. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/auto_coder_rag.py +0 -0
  34. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
  35. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/auto_coder_rag_mcp.py +0 -0
  36. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/auto_coder_runner.py +0 -0
  37. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/auto_coder_server.py +0 -0
  38. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/benchmark.py +0 -0
  39. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/chat/__init__.py +0 -0
  40. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/chat_auto_coder.py +0 -0
  41. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/chat_auto_coder_lang.py +0 -0
  42. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/command_args.py +0 -0
  43. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/commands/__init__.py +0 -0
  44. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/commands/tools.py +0 -0
  45. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/JupyterClient.py +0 -0
  46. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/ShellClient.py +0 -0
  47. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/__init__.py +0 -0
  48. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/anything2images.py +0 -0
  49. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/anything2img.py +0 -0
  50. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/audio.py +0 -0
  51. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/auto_coder_lang.py +0 -0
  52. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/auto_configure.py +0 -0
  53. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/buildin_tokenizer.py +0 -0
  54. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/chunk_validation.py +0 -0
  55. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/cleaner.py +0 -0
  56. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_execute.py +0 -0
  57. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_generate.py +0 -0
  58. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  59. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  60. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  61. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_merge.py +0 -0
  62. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  63. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  64. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  65. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/code_modification_ranker.py +0 -0
  66. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/command_completer.py +0 -0
  67. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/command_generator.py +0 -0
  68. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/command_templates.py +0 -0
  69. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/conf_import_export.py +0 -0
  70. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/conf_validator.py +0 -0
  71. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/const.py +0 -0
  72. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/context_pruner.py +0 -0
  73. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/conversation_pruner.py +0 -0
  74. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/files.py +0 -0
  75. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/git_utils.py +0 -0
  76. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/global_cancel.py +0 -0
  77. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/image_to_page.py +0 -0
  78. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/index_import_export.py +0 -0
  79. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/interpreter.py +0 -0
  80. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/llm_rerank.py +0 -0
  81. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/mcp_hub.py +0 -0
  82. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/mcp_server.py +0 -0
  83. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  84. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  85. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/mcp_tools.py +0 -0
  86. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/memory_manager.py +0 -0
  87. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/model_speed_test.py +0 -0
  88. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/printer.py +0 -0
  89. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/recall_validation.py +0 -0
  90. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/result_manager.py +0 -0
  91. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/screenshots.py +0 -0
  92. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/search.py +0 -0
  93. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/search_replace.py +0 -0
  94. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/stats_panel.py +0 -0
  95. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/sys_prompt.py +0 -0
  96. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/text.py +0 -0
  97. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/types.py +0 -0
  98. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  99. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/data/byzerllm.md +0 -0
  100. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/data/tokenizer.json +0 -0
  101. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/db/__init__.py +0 -0
  102. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/db/store.py +0 -0
  103. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/dispacher/__init__.py +0 -0
  104. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/dispacher/actions/__init__.py +0 -0
  105. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/dispacher/actions/action.py +0 -0
  106. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/dispacher/actions/copilot.py +0 -0
  107. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  108. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  109. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  110. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/__init__.py +0 -0
  111. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/entry.py +0 -0
  112. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/filter/__init__.py +0 -0
  113. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/filter/normal_filter.py +0 -0
  114. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/filter/quick_filter.py +0 -0
  115. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/for_command.py +0 -0
  116. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/index.py +0 -0
  117. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/symbols_utils.py +0 -0
  118. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/index/types.py +0 -0
  119. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/lang.py +0 -0
  120. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/models.py +0 -0
  121. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/privacy/__init__.py +0 -0
  122. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/privacy/model_filter.py +0 -0
  123. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/pyproject/__init__.py +0 -0
  124. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/__init__.py +0 -0
  125. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/cache/__init__.py +0 -0
  126. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/cache/base_cache.py +0 -0
  127. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  128. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  129. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/cache/simple_cache.py +0 -0
  130. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/doc_filter.py +0 -0
  131. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/document_retriever.py +0 -0
  132. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/loaders/__init__.py +0 -0
  133. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  134. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  135. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  136. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  137. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/rag_config.py +0 -0
  138. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/rag_entry.py +0 -0
  139. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/raw_rag.py +0 -0
  140. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/relevant_utils.py +0 -0
  141. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/simple_directory_reader.py +0 -0
  142. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/simple_rag.py +0 -0
  143. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/stream_event/__init__.py +0 -0
  144. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  145. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/stream_event/types.py +0 -0
  146. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/token_checker.py +0 -0
  147. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/token_counter.py +0 -0
  148. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/token_limiter.py +0 -0
  149. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/token_limiter_utils.py +0 -0
  150. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/types.py +0 -0
  151. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/utils.py +0 -0
  152. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/rag/variable_holder.py +0 -0
  153. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/regexproject/__init__.py +0 -0
  154. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/suffixproject/__init__.py +0 -0
  155. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/tsproject/__init__.py +0 -0
  156. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/__init__.py +0 -0
  157. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/_markitdown.py +0 -0
  158. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  159. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  160. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/auto_project_type.py +0 -0
  161. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  162. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/conversation_store.py +0 -0
  163. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  164. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/llms.py +0 -0
  165. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/log_capture.py +0 -0
  166. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/model_provider_selector.py +0 -0
  167. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/multi_turn.py +0 -0
  168. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/operate_config_api.py +0 -0
  169. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/print_table.py +0 -0
  170. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/project_structure.py +0 -0
  171. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/queue_communicate.py +0 -0
  172. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/request_event_queue.py +0 -0
  173. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/request_queue.py +0 -0
  174. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/rest.py +0 -0
  175. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/tests.py +0 -0
  176. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/thread_utils.py +0 -0
  177. {auto_coder-0.1.277 → auto_coder-0.1.279}/src/autocoder/utils/types.py +0 -0
  178. {auto_coder-0.1.277 → auto_coder-0.1.279}/tests/test_action_regex_project.py +0 -0
  179. {auto_coder-0.1.277 → auto_coder-0.1.279}/tests/test_chat_auto_coder.py +0 -0
  180. {auto_coder-0.1.277 → auto_coder-0.1.279}/tests/test_code_auto_merge_editblock.py +0 -0
  181. {auto_coder-0.1.277 → auto_coder-0.1.279}/tests/test_command_completer.py +0 -0
  182. {auto_coder-0.1.277 → auto_coder-0.1.279}/tests/test_planner.py +0 -0
  183. {auto_coder-0.1.277 → auto_coder-0.1.279}/tests/test_privacy.py +0 -0
  184. {auto_coder-0.1.277 → auto_coder-0.1.279}/tests/test_queue_communicate.py +0 -0
  185. {auto_coder-0.1.277 → auto_coder-0.1.279}/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.277
3
+ Version: 0.1.279
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -26,7 +26,7 @@ Requires-Dist: tabulate
26
26
  Requires-Dist: jupyter_client
27
27
  Requires-Dist: prompt-toolkit
28
28
  Requires-Dist: tokenizers
29
- Requires-Dist: byzerllm[saas]>=0.1.169
29
+ Requires-Dist: byzerllm[saas]>=0.1.170
30
30
  Requires-Dist: patch
31
31
  Requires-Dist: diff_match_patch
32
32
  Requires-Dist: GitPython
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.277
3
+ Version: 0.1.279
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -26,7 +26,7 @@ Requires-Dist: tabulate
26
26
  Requires-Dist: jupyter_client
27
27
  Requires-Dist: prompt-toolkit
28
28
  Requires-Dist: tokenizers
29
- Requires-Dist: byzerllm[saas]>=0.1.169
29
+ Requires-Dist: byzerllm[saas]>=0.1.170
30
30
  Requires-Dist: patch
31
31
  Requires-Dist: diff_match_patch
32
32
  Requires-Dist: GitPython
@@ -16,7 +16,7 @@ tabulate
16
16
  jupyter_client
17
17
  prompt-toolkit
18
18
  tokenizers
19
- byzerllm[saas]>=0.1.169
19
+ byzerllm[saas]>=0.1.170
20
20
  patch
21
21
  diff_match_patch
22
22
  GitPython
@@ -23,6 +23,7 @@ from autocoder.rag.token_counter import count_tokens
23
23
  from autocoder.common.global_cancel import global_cancel
24
24
  from autocoder.common.auto_configure import config_readme
25
25
  from autocoder.utils.auto_project_type import ProjectTypeAnalyzer
26
+ from rich.text import Text
26
27
 
27
28
  class CommandMessage(BaseModel):
28
29
  role: str
@@ -435,8 +436,10 @@ class CommandAutoTuner:
435
436
  "command_execution_result",
436
437
  action=action
437
438
  )
439
+ # 转义内容,避免Rich将内容中的[]解释为markup语法
440
+ text_content = Text(truncated_content)
438
441
  console.print(Panel(
439
- truncated_content,
442
+ text_content,
440
443
  title=title,
441
444
  border_style="blue",
442
445
  padding=(1, 2)
@@ -11,6 +11,9 @@ from rich.panel import Panel
11
11
  from rich.text import Text
12
12
  from rich.live import Live
13
13
  import getpass
14
+ from rich.markup import escape
15
+ import threading
16
+ import queue
14
17
 
15
18
  from autocoder.common.result_manager import ResultManager
16
19
 
@@ -356,7 +359,7 @@ def _win_code_page_to_encoding(code_page: str) -> str:
356
359
 
357
360
  def execute_shell_command(command: str):
358
361
  """
359
- Execute a shell command with cross-platform encoding support.
362
+ Execute a shell command with cross-platform encoding support and streaming output.
360
363
 
361
364
  Args:
362
365
  command (str): The shell command to execute
@@ -446,81 +449,95 @@ set PYTHONIOENCODING=utf-8
446
449
  encoding='utf-8', # 直接指定 UTF-8 编码
447
450
  errors='replace', # 处理无法解码的字符
448
451
  env=env, # 传递修改后的环境变量
449
- startupinfo=startupinfo
452
+ startupinfo=startupinfo,
453
+ bufsize=1, # Line buffering for immediate flushing
454
+ universal_newlines=True # Use text mode to handle platform line endings
450
455
  )
451
456
 
452
457
  # Safe decoding helper (for binary output)
453
- def safe_decode(byte_stream, encoding):
454
- if isinstance(byte_stream, str):
455
- return byte_stream.strip()
458
+ def safe_decode(text, encoding):
459
+ if isinstance(text, str):
460
+ return text.strip()
456
461
  try:
457
- # 首先尝试 UTF-8
458
- return byte_stream.decode('utf-8').strip()
462
+ # Try UTF-8 first
463
+ return text.decode('utf-8').strip()
459
464
  except UnicodeDecodeError:
460
465
  try:
461
- # 如果失败,尝试 GBK
462
- return byte_stream.decode('gbk').strip()
466
+ # If that fails, try GBK
467
+ return text.decode('gbk').strip()
463
468
  except UnicodeDecodeError:
464
- # 最后使用替换模式
465
- return byte_stream.decode(encoding, errors='replace').strip()
469
+ # Finally use replacement mode
470
+ return text.decode(encoding, errors='replace').strip()
466
471
 
467
472
  output = []
468
- with Live(console=console, refresh_per_second=4) as live:
469
- while True:
470
- # Read output streams
471
- output_bytes = process.stdout.readline()
472
- error_bytes = process.stderr.readline()
473
-
474
- # Handle standard output
475
- if output_bytes:
476
- output_line = safe_decode(output_bytes, encoding)
477
- output.append(output_line)
478
- live.update(
479
- Panel(
480
- Text("\n".join(output[-20:])),
481
- title="Shell Output",
482
- border_style="green",
483
- )
484
- )
485
-
486
- # Handle error output
487
- if error_bytes:
488
- error_line = safe_decode(error_bytes, encoding)
489
- output.append(f"ERROR: {error_line}")
490
- live.update(
491
- Panel(
492
- Text("\n".join(output[-20:])),
493
- title="Shell Output",
494
- border_style="red",
495
- )
496
- )
497
-
498
- # Check if process has ended
499
- if process.poll() is not None:
473
+ # Use direct printing for streaming output, not a Live object
474
+ console.print(f"[bold blue]Running command:[/bold blue] {command}")
475
+ console.print("[bold blue]Output streaming:[/bold blue]")
476
+
477
+ output_queue = queue.Queue()
478
+
479
+ def read_stream(stream, stream_name):
480
+ """Read data from stream and put in queue"""
481
+ for line in stream:
482
+ line = line.rstrip() if isinstance(line, str) else safe_decode(line, encoding)
483
+ prefix = "[ERROR] " if stream_name == "stderr" else ""
484
+ output_queue.put((stream_name, f"{prefix}{line}"))
485
+ output_queue.put((stream_name, None)) # Mark stream end
486
+
487
+ # Create threads to read stdout and stderr
488
+ stdout_thread = threading.Thread(target=read_stream, args=(process.stdout, "stdout"))
489
+ stderr_thread = threading.Thread(target=read_stream, args=(process.stderr, "stderr"))
490
+ stdout_thread.daemon = True
491
+ stderr_thread.daemon = True
492
+ stdout_thread.start()
493
+ stderr_thread.start()
494
+
495
+ # Track number of active streams
496
+ active_streams = 2
497
+
498
+ # Process output from queue
499
+ while active_streams > 0:
500
+ try:
501
+ stream_name, line = output_queue.get(timeout=0.1)
502
+ if line is None:
503
+ active_streams -= 1
504
+ continue
505
+
506
+ output.append(line)
507
+ # Print each line directly for true streaming output
508
+ if stream_name == "stderr":
509
+ console.print(f"[red]{line}[/red]")
510
+ else:
511
+ console.print(line)
512
+
513
+ except queue.Empty:
514
+ # Check if process is still running
515
+ if process.poll() is not None and active_streams == 2:
516
+ # If process ended but threads are still running, may have no output
500
517
  break
501
-
502
- # Get remaining output
503
- remaining_out, remaining_err = process.communicate()
504
- if remaining_out:
505
- output.append(safe_decode(remaining_out, encoding))
506
- if remaining_err:
507
- output.append(f"ERROR: {safe_decode(remaining_err, encoding)}")
518
+ continue
519
+
520
+ # Wait for threads to finish
521
+ stdout_thread.join()
522
+ stderr_thread.join()
508
523
 
509
- result_manager.add_result(content="\n".join(output),meta={
524
+ # Wait for process to end and get return code
525
+ return_code = process.wait()
526
+
527
+ # Compile results
528
+ result_content = "\n".join(output)
529
+ result_manager.add_result(content=result_content, meta={
510
530
  "action": "execute_shell_command",
511
531
  "input": {
512
532
  "command": command
513
- }
533
+ },
534
+ "return_code": return_code
514
535
  })
515
- # Show final output
516
- console.print(
517
- Panel(
518
- Text("\n".join(output)),
519
- title="Final Output",
520
- border_style="blue",
521
- subtitle=f"Encoding: {encoding} | OS: {sys.platform}"
522
- )
523
- )
536
+
537
+ # Show command completion info
538
+ completion_message = f"Command completed with return code: {return_code}"
539
+ style = "green" if return_code == 0 else "red"
540
+ console.print(f"[bold {style}]{escape(completion_message)}[/bold {style}]")
524
541
 
525
542
  except FileNotFoundError:
526
543
  result_manager.add_result(content=f"[bold red]Command not found:[/bold red] [yellow]{command}[/yellow]",meta={
@@ -103,9 +103,7 @@ async def create_chat_completion(
103
103
  NOTE: Currently we do not support the following features:
104
104
  - function_call (Users should implement this by themselves)
105
105
  - logit_bias (to be supported by vLLM engine)
106
- """
107
- # async with async_timeout.timeout(TIMEOUT):
108
-
106
+ """
109
107
  generator = await openai_serving_chat.create_chat_completion(body, request)
110
108
  if isinstance(generator, ErrorResponse):
111
109
  return JSONResponse(
@@ -0,0 +1,91 @@
1
+ from typing import Any, Dict, List, Optional, Union, Callable
2
+ from byzerllm.utils.client.types import (
3
+ LLMFunctionCallResponse,
4
+ LLMClassResponse, LLMResponse
5
+ )
6
+ import pydantic
7
+ from byzerllm import ByzerLLM
8
+ from byzerllm.utils.client import LLMResponse
9
+ from byzerllm.utils.types import SingleOutputMeta
10
+ from autocoder.rag.simple_rag import SimpleRAG
11
+ from autocoder.rag.long_context_rag import LongContextRAG
12
+ from loguru import logger
13
+ from byzerllm.utils.langutil import asyncfy_with_semaphore
14
+
15
+
16
+ class LLWrapper:
17
+
18
+ def __init__(self, llm: ByzerLLM, rag: Union[SimpleRAG, LongContextRAG]):
19
+ self.llm = llm
20
+ self.rag = rag
21
+
22
+ def chat_oai(self,
23
+ conversations,
24
+ tools: List[Union[Callable, str]] = [],
25
+ tool_choice: Optional[Union[Callable, str]] = None,
26
+ execute_tool: bool = False,
27
+ impl_func: Optional[Callable] = None,
28
+ execute_impl_func: bool = False,
29
+ impl_func_params: Optional[Dict[str, Any]] = None,
30
+ func_params: Optional[Dict[str, Any]] = None,
31
+ response_class: Optional[Union[pydantic.BaseModel, str]] = None,
32
+ response_after_chat: Optional[Union[pydantic.BaseModel, str]] = False,
33
+ enable_default_sys_message: bool = True,
34
+ model: Optional[str] = None,
35
+ role_mapping=None,
36
+ llm_config: Dict[str, Any] = {},
37
+ only_return_prompt: bool = False,
38
+ extra_request_params: Dict[str, Any] = {}
39
+ ) -> Union[List[LLMResponse], List[LLMFunctionCallResponse], List[LLMClassResponse]]:
40
+ res, contexts = self.rag.stream_chat_oai(
41
+ conversations, llm_config=llm_config, extra_request_params=extra_request_params)
42
+ metadata = {"request_id":""}
43
+ output = ""
44
+ for chunk in res:
45
+ output += chunk[0]
46
+ metadata["input_tokens_count"] = chunk[1].input_tokens_count
47
+ metadata["generated_tokens_count"] = chunk[1].generated_tokens_count
48
+ metadata["reasoning_content"] = chunk[1].reasoning_content
49
+ metadata["finish_reason"] = chunk[1].finish_reason
50
+ metadata["first_token_time"] = chunk[1].first_token_time
51
+
52
+ return [LLMResponse(output=output, metadata=metadata, input="")]
53
+
54
+ def stream_chat_oai(self, conversations,
55
+ model: Optional[str] = None,
56
+ role_mapping=None,
57
+ delta_mode=False,
58
+ llm_config: Dict[str, Any] = {},
59
+ extra_request_params: Dict[str, Any] = {}
60
+ ):
61
+ res, contexts = self.rag.stream_chat_oai(
62
+ conversations, llm_config=llm_config, extra_request_params=extra_request_params)
63
+
64
+ if isinstance(res, tuple):
65
+ for (t, metadata) in res:
66
+ yield (t, SingleOutputMeta(
67
+ input_tokens_count=metadata.get("input_tokens_count", 0),
68
+ generated_tokens_count=metadata.get(
69
+ "generated_tokens_count", 0),
70
+ reasoning_content=metadata.get("reasoning_content", ""),
71
+ finish_reason=metadata.get("finish_reason", "stop"),
72
+ first_token_time=metadata.get("first_token_time", 0)
73
+ ))
74
+ else:
75
+ for t in res:
76
+ yield (t, SingleOutputMeta(0, 0))
77
+
78
+ async def async_stream_chat_oai(self, conversations,
79
+ model: Optional[str] = None,
80
+ role_mapping=None,
81
+ delta_mode=False,
82
+ llm_config: Dict[str, Any] = {},
83
+ extra_request_params: Dict[str, Any] = {}
84
+ ):
85
+ res, contexts = await asyncfy_with_semaphore(lambda: self.rag.stream_chat_oai(conversations, llm_config=llm_config, extra_request_params=extra_request_params))()
86
+ # res,contexts = await self.llm.async_stream_chat_oai(conversations,llm_config=llm_config)
87
+ for t in res:
88
+ yield t
89
+
90
+ def __getattr__(self, name):
91
+ return getattr(self.llm, name)