auto-coder 0.1.257__tar.gz → 0.1.259__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 (168) hide show
  1. {auto_coder-0.1.257 → auto_coder-0.1.259}/PKG-INFO +1 -1
  2. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/auto_coder.py +1 -22
  4. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/auto_coder_rag.py +7 -7
  5. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/auto_coder_rag_client_mcp.py +1 -1
  6. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/chat_auto_coder.py +144 -124
  7. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/auto_coder_lang.py +4 -4
  8. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/command_templates.py +7 -3
  9. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/entry.py +1 -1
  10. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/raw_rag.py +1 -1
  11. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/model_provider_selector.py +28 -6
  12. auto_coder-0.1.259/src/autocoder/version.py +1 -0
  13. auto_coder-0.1.257/src/autocoder/version.py +0 -1
  14. {auto_coder-0.1.257 → auto_coder-0.1.259}/LICENSE +0 -0
  15. {auto_coder-0.1.257 → auto_coder-0.1.259}/README.md +0 -0
  16. {auto_coder-0.1.257 → auto_coder-0.1.259}/setup.cfg +0 -0
  17. {auto_coder-0.1.257 → auto_coder-0.1.259}/setup.py +0 -0
  18. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/auto_coder.egg-info/SOURCES.txt +0 -0
  19. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  20. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/auto_coder.egg-info/entry_points.txt +0 -0
  21. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/auto_coder.egg-info/requires.txt +0 -0
  22. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/auto_coder.egg-info/top_level.txt +0 -0
  23. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/__init__.py +0 -0
  24. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/__init__.py +0 -0
  25. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  26. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/auto_filegroup.py +0 -0
  27. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/auto_guess_query.py +0 -0
  28. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/auto_review_commit.py +0 -0
  29. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/auto_tool.py +0 -0
  30. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/coder.py +0 -0
  31. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/designer.py +0 -0
  32. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/planner.py +0 -0
  33. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/agent/project_reader.py +0 -0
  34. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/auto_coder_rag_mcp.py +0 -0
  35. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/auto_coder_server.py +0 -0
  36. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/benchmark.py +0 -0
  37. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/chat/__init__.py +0 -0
  38. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/chat_auto_coder_lang.py +0 -0
  39. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/command_args.py +0 -0
  40. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/JupyterClient.py +0 -0
  41. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/ShellClient.py +0 -0
  42. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/__init__.py +0 -0
  43. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/anything2images.py +0 -0
  44. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/anything2img.py +0 -0
  45. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/audio.py +0 -0
  46. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/buildin_tokenizer.py +0 -0
  47. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/chunk_validation.py +0 -0
  48. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/cleaner.py +0 -0
  49. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_execute.py +0 -0
  50. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_generate.py +0 -0
  51. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  52. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  53. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  54. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_merge.py +0 -0
  55. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  56. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  57. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  58. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/code_modification_ranker.py +0 -0
  59. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/command_completer.py +0 -0
  60. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/command_generator.py +0 -0
  61. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/const.py +0 -0
  62. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/files.py +0 -0
  63. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/git_utils.py +0 -0
  64. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/global_cancel.py +0 -0
  65. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/image_to_page.py +0 -0
  66. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/interpreter.py +0 -0
  67. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/llm_rerank.py +0 -0
  68. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/mcp_hub.py +0 -0
  69. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/mcp_server.py +0 -0
  70. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  71. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  72. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/mcp_tools.py +0 -0
  73. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/memory_manager.py +0 -0
  74. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/model_speed_test.py +0 -0
  75. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/printer.py +0 -0
  76. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/recall_validation.py +0 -0
  77. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/screenshots.py +0 -0
  78. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/search.py +0 -0
  79. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/search_replace.py +0 -0
  80. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/shells.py +0 -0
  81. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/sys_prompt.py +0 -0
  82. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/text.py +0 -0
  83. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/types.py +0 -0
  84. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  85. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/data/byzerllm.md +0 -0
  86. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/data/tokenizer.json +0 -0
  87. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/db/__init__.py +0 -0
  88. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/db/store.py +0 -0
  89. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/dispacher/__init__.py +0 -0
  90. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/dispacher/actions/__init__.py +0 -0
  91. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/dispacher/actions/action.py +0 -0
  92. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/dispacher/actions/copilot.py +0 -0
  93. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  94. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  95. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  96. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/__init__.py +0 -0
  97. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/filter/__init__.py +0 -0
  98. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/filter/normal_filter.py +0 -0
  99. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/filter/quick_filter.py +0 -0
  100. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/for_command.py +0 -0
  101. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/index.py +0 -0
  102. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/symbols_utils.py +0 -0
  103. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/index/types.py +0 -0
  104. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/lang.py +0 -0
  105. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/models.py +0 -0
  106. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/privacy/__init__.py +0 -0
  107. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/privacy/model_filter.py +0 -0
  108. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/pyproject/__init__.py +0 -0
  109. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/__init__.py +0 -0
  110. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/api_server.py +0 -0
  111. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/cache/__init__.py +0 -0
  112. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/cache/base_cache.py +0 -0
  113. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  114. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  115. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/cache/simple_cache.py +0 -0
  116. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/doc_filter.py +0 -0
  117. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/document_retriever.py +0 -0
  118. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/llm_wrapper.py +0 -0
  119. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/loaders/__init__.py +0 -0
  120. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  121. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  122. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  123. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  124. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/long_context_rag.py +0 -0
  125. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/rag_config.py +0 -0
  126. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/rag_entry.py +0 -0
  127. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/relevant_utils.py +0 -0
  128. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/simple_directory_reader.py +0 -0
  129. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/simple_rag.py +0 -0
  130. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/stream_event/__init__.py +0 -0
  131. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  132. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/stream_event/types.py +0 -0
  133. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/token_checker.py +0 -0
  134. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/token_counter.py +0 -0
  135. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/token_limiter.py +0 -0
  136. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/types.py +0 -0
  137. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/utils.py +0 -0
  138. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/rag/variable_holder.py +0 -0
  139. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/regexproject/__init__.py +0 -0
  140. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/suffixproject/__init__.py +0 -0
  141. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/tsproject/__init__.py +0 -0
  142. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/__init__.py +0 -0
  143. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/_markitdown.py +0 -0
  144. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  145. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  146. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  147. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/conversation_store.py +0 -0
  148. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  149. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/llms.py +0 -0
  150. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/log_capture.py +0 -0
  151. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/multi_turn.py +0 -0
  152. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/operate_config_api.py +0 -0
  153. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/print_table.py +0 -0
  154. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/queue_communicate.py +0 -0
  155. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/request_event_queue.py +0 -0
  156. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/request_queue.py +0 -0
  157. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/rest.py +0 -0
  158. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/tests.py +0 -0
  159. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/thread_utils.py +0 -0
  160. {auto_coder-0.1.257 → auto_coder-0.1.259}/src/autocoder/utils/types.py +0 -0
  161. {auto_coder-0.1.257 → auto_coder-0.1.259}/tests/test_action_regex_project.py +0 -0
  162. {auto_coder-0.1.257 → auto_coder-0.1.259}/tests/test_chat_auto_coder.py +0 -0
  163. {auto_coder-0.1.257 → auto_coder-0.1.259}/tests/test_code_auto_merge_editblock.py +0 -0
  164. {auto_coder-0.1.257 → auto_coder-0.1.259}/tests/test_command_completer.py +0 -0
  165. {auto_coder-0.1.257 → auto_coder-0.1.259}/tests/test_planner.py +0 -0
  166. {auto_coder-0.1.257 → auto_coder-0.1.259}/tests/test_privacy.py +0 -0
  167. {auto_coder-0.1.257 → auto_coder-0.1.259}/tests/test_queue_communicate.py +0 -0
  168. {auto_coder-0.1.257 → auto_coder-0.1.259}/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.257
3
+ Version: 0.1.259
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.257
3
+ Version: 0.1.259
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -282,28 +282,7 @@ def main(input_args: Optional[List[str]] = None):
282
282
  )
283
283
  byzerllm.connect_cluster(address=args.ray_address)
284
284
 
285
- llm = byzerllm.ByzerLLM(verbose=args.print_request)
286
-
287
- # code_model,index_filter_model,generate_rerank_model,chat_model
288
- # 这四个模型如果用户没有设置,就会使用默认的
289
- # 如果用户随便填写 deepseek 官方key,就会导致 Authentic(No User) 的错误
290
- # 或者 Insuffient Balance 之类的错误
291
-
292
- code_model = byzerllm.ByzerLLM()
293
- code_model.setup_default_model_name(args.model)
294
- llm.setup_sub_client("code_model", code_model)
295
-
296
- index_filter_model = byzerllm.ByzerLLM()
297
- index_filter_model.setup_default_model_name("deepseek_r1_chat")
298
- llm.setup_sub_client("index_filter_model", index_filter_model)
299
-
300
- generate_rerank_model = byzerllm.ByzerLLM()
301
- generate_rerank_model.setup_default_model_name("deepseek_r1_chat")
302
- llm.setup_sub_client("generate_rerank_model", generate_rerank_model)
303
-
304
- chat_model = byzerllm.ByzerLLM()
305
- chat_model.setup_default_model_name("deepseek_r1_chat")
306
- llm.setup_sub_client("chat_model", chat_model)
285
+ llm = byzerllm.ByzerLLM(verbose=args.print_request)
307
286
 
308
287
  if args.product_mode == "lite":
309
288
  default_model = args.model
@@ -66,7 +66,7 @@ def initialize_system(args):
66
66
  print_status(get_message("checking_model"), "")
67
67
  try:
68
68
  result = subprocess.run(
69
- ["easy-byzerllm", "chat", "deepseek_chat", "你好"],
69
+ ["easy-byzerllm", "chat", "v3_chat", "你好"],
70
70
  capture_output=True,
71
71
  text=True,
72
72
  timeout=30,
@@ -115,7 +115,7 @@ def initialize_system(args):
115
115
  "--infer_params",
116
116
  f"saas.base_url=https://api.deepseek.com/v1 saas.api_key={api_key} saas.model=deepseek-chat",
117
117
  "--model",
118
- "deepseek_chat",
118
+ "v3_chat",
119
119
  ]
120
120
 
121
121
  try:
@@ -129,7 +129,7 @@ def initialize_system(args):
129
129
  print_status(get_message("validating_deploy"), "")
130
130
  try:
131
131
  validation_result = subprocess.run(
132
- ["easy-byzerllm", "chat", "deepseek_chat", "你好"],
132
+ ["easy-byzerllm", "chat", "v3_chat", "你好"],
133
133
  capture_output=True,
134
134
  text=True,
135
135
  timeout=30,
@@ -139,7 +139,7 @@ def initialize_system(args):
139
139
  except (subprocess.TimeoutExpired, subprocess.CalledProcessError):
140
140
  print_status(get_message("validation_fail"), "error")
141
141
  print_status(get_message("manual_start"), "warning")
142
- print_status("easy-byzerllm chat deepseek_chat 你好", "")
142
+ print_status("easy-byzerllm chat v3_chat 你好", "")
143
143
 
144
144
  print_status(get_message("init_complete_final"), "success")
145
145
 
@@ -168,7 +168,7 @@ def main(input_args: Optional[List[str]] = None):
168
168
  )
169
169
  build_index_parser.add_argument("--file", default="", help=desc["file"])
170
170
  build_index_parser.add_argument(
171
- "--model", default="deepseek_chat", help=desc["model"]
171
+ "--model", default="v3_chat", help=desc["model"]
172
172
  )
173
173
  build_index_parser.add_argument(
174
174
  "--index_model", default="", help=desc["index_model"]
@@ -199,7 +199,7 @@ def main(input_args: Optional[List[str]] = None):
199
199
  "--quick", action="store_true", help="Skip system initialization"
200
200
  )
201
201
  serve_parser.add_argument("--file", default="", help=desc["file"])
202
- serve_parser.add_argument("--model", default="deepseek_chat", help=desc["model"])
202
+ serve_parser.add_argument("--model", default="v3_chat", help=desc["model"])
203
203
  serve_parser.add_argument("--index_model", default="", help=desc["index_model"])
204
204
  serve_parser.add_argument("--emb_model", default="", help=desc["emb_model"])
205
205
  serve_parser.add_argument("--ray_address", default="auto", help=desc["ray_address"])
@@ -366,7 +366,7 @@ def main(input_args: Optional[List[str]] = None):
366
366
  "benchmark", help="Benchmark LLM client performance"
367
367
  )
368
368
  benchmark_parser.add_argument(
369
- "--model", default="deepseek_chat", help="Model to benchmark"
369
+ "--model", default="v3_chat", help="Model to benchmark"
370
370
  )
371
371
  benchmark_parser.add_argument(
372
372
  "--parallel", type=int, default=10, help="Number of parallel requests"
@@ -147,7 +147,7 @@ def parse_args(input_args: Optional[List[str]] = None) -> AutoCoderArgs:
147
147
  parser = argparse.ArgumentParser(description="Auto Coder RAG Client MCP Server")
148
148
  parser.add_argument("--rag_url", required=True, help="RAG server URL")
149
149
  parser.add_argument("--rag_token", required=True, help="RAG server token")
150
- parser.add_argument("--model", default="deepseek_chat", help=desc["model"])
150
+ parser.add_argument("--model", default="v3_chat", help=desc["model"])
151
151
  parser.add_argument("--rag_params_max_tokens", type=int, default=4096, help="Max tokens for RAG response")
152
152
 
153
153
  args = parser.parse_args(input_args)
@@ -74,6 +74,12 @@ def parse_arguments():
74
74
  help="Enter the auto-coder.chat without initializing the system",
75
75
  )
76
76
 
77
+ parser.add_argument(
78
+ "--skip_provider_selection",
79
+ action="store_true",
80
+ help="Skip the provider selection",
81
+ )
82
+
77
83
  parser.add_argument(
78
84
  "--product_mode",
79
85
  type=str,
@@ -252,7 +258,12 @@ def configure_project_type():
252
258
 
253
259
 
254
260
  def initialize_system(args):
261
+ from autocoder.utils.model_provider_selector import ModelProviderSelector
262
+ from autocoder import models as models_module
255
263
  print(f"\n\033[1;34m{get_message('initializing')}\033[0m")
264
+
265
+ first_time = [False]
266
+ configure_success = [False]
256
267
 
257
268
  def print_status(message, status):
258
269
  if status == "success":
@@ -264,10 +275,9 @@ def initialize_system(args):
264
275
  else:
265
276
  print(f" {message}")
266
277
 
267
- def init_project():
268
- first_time = False
278
+ def init_project():
269
279
  if not os.path.exists(".auto-coder"):
270
- first_time = True
280
+ first_time[0] = True
271
281
  print_status(get_message("not_initialized"), "warning")
272
282
  init_choice = input(
273
283
  f" {get_message('init_prompt')}").strip().lower()
@@ -290,140 +300,150 @@ def initialize_system(args):
290
300
  print_status(get_message("created_dir").format(
291
301
  base_persist_dir), "success")
292
302
 
293
- if first_time:
303
+ if first_time[0]:
294
304
  configure_project_type()
305
+ configure_success[0] = True
295
306
 
296
307
  print_status(get_message("init_complete"), "success")
297
308
 
298
309
  init_project()
299
310
 
300
- if args.product_mode == "lite":
301
- from autocoder.utils.model_provider_selector import ModelProviderSelector
302
- from autocoder import models as models_module
303
- if not models_module.check_model_exists("v3_chat") or not models_module.check_model_exists("r1_chat"):
304
- model_provider_selector = ModelProviderSelector()
305
- model_provider_info = model_provider_selector.select_provider()
306
- if model_provider_info is not None:
307
- models_json_list = model_provider_selector.to_models_json(model_provider_info)
308
- models_module.add_and_activate_models(models_json_list)
309
- r1_model = models_json_list[0]['name']
310
- v3_model = models_json_list[1]['name']
311
- configure(f"model:{v3_model}", skip_print=True)
312
- configure(f"chat_model:{r1_model}", skip_print=True)
313
- configure(f"generate_rerank_model:{r1_model}", skip_print=True)
314
- configure(f"code_model:{v3_model}", skip_print=True)
315
- configure(f"index_filter_model:{r1_model}", skip_print=True)
316
-
317
- if args.product_mode == "pro":
318
- # Check if Ray is running
319
- print_status(get_message("checking_ray"), "")
320
- ray_status = subprocess.run(
321
- ["ray", "status"], capture_output=True, text=True)
322
- if ray_status.returncode != 0:
323
- print_status(get_message("ray_not_running"), "warning")
311
+ if not args.skip_provider_selection and first_time[0]:
312
+ if args.product_mode == "lite":
313
+ ## 如果已经是配置过的项目,就无需再选择
314
+ if first_time[0]:
315
+ if not models_module.check_model_exists("v3_chat") or not models_module.check_model_exists("r1_chat"):
316
+ model_provider_selector = ModelProviderSelector()
317
+ model_provider_info = model_provider_selector.select_provider()
318
+ if model_provider_info is not None:
319
+ models_json_list = model_provider_selector.to_models_json(model_provider_info)
320
+ models_module.add_and_activate_models(models_json_list)
321
+
322
+ if args.product_mode == "pro":
323
+ # Check if Ray is running
324
+ print_status(get_message("checking_ray"), "")
325
+ ray_status = subprocess.run(
326
+ ["ray", "status"], capture_output=True, text=True)
327
+ if ray_status.returncode != 0:
328
+ print_status(get_message("ray_not_running"), "warning")
329
+ try:
330
+ subprocess.run(["ray", "start", "--head"], check=True)
331
+ print_status(get_message("ray_start_success"), "success")
332
+ except subprocess.CalledProcessError:
333
+ print_status(get_message("ray_start_fail"), "error")
334
+ return
335
+ else:
336
+ print_status(get_message("ray_running"), "success")
337
+
338
+ # Check if deepseek_chat model is available
339
+ print_status(get_message("checking_model"), "")
324
340
  try:
325
- subprocess.run(["ray", "start", "--head"], check=True)
326
- print_status(get_message("ray_start_success"), "success")
341
+ result = subprocess.run(
342
+ ["easy-byzerllm", "chat", "v3_chat", "你好"],
343
+ capture_output=True,
344
+ text=True,
345
+ timeout=30,
346
+ )
347
+ if result.returncode == 0:
348
+ print_status(get_message("model_available"), "success")
349
+ init_project()
350
+ print_status(get_message("init_complete_final"), "success")
351
+ return
352
+ except subprocess.TimeoutExpired:
353
+ print_status(get_message("model_timeout"), "error")
327
354
  except subprocess.CalledProcessError:
328
- print_status(get_message("ray_start_fail"), "error")
329
- return
330
- else:
331
- print_status(get_message("ray_running"), "success")
355
+ print_status(get_message("model_error"), "error")
356
+
357
+ # If deepseek_chat is not available
358
+ print_status(get_message("model_not_available"), "warning")
359
+ api_key = prompt(HTML(f"<b>{get_message('enter_api_key')} </b>"))
360
+
361
+ print_status(get_message("deploying_model").format("Deepseek官方"), "")
362
+ deploy_cmd = [
363
+ "byzerllm",
364
+ "deploy",
365
+ "--pretrained_model_type",
366
+ "saas/openai",
367
+ "--cpus_per_worker",
368
+ "0.001",
369
+ "--gpus_per_worker",
370
+ "0",
371
+ "--worker_concurrency",
372
+ "1000",
373
+ "--num_workers",
374
+ "1",
375
+ "--infer_params",
376
+ f"saas.base_url=https://api.deepseek.com/v1 saas.api_key={api_key} saas.model=deepseek-chat",
377
+ "--model",
378
+ "v3_chat",
379
+ ]
332
380
 
333
- # Check if deepseek_chat model is available
334
- print_status(get_message("checking_model"), "")
335
- try:
336
- result = subprocess.run(
337
- ["easy-byzerllm", "chat", "deepseek_chat", "你好"],
338
- capture_output=True,
339
- text=True,
340
- timeout=30,
341
- )
342
- if result.returncode == 0:
343
- print_status(get_message("model_available"), "success")
344
- init_project()
345
- print_status(get_message("init_complete_final"), "success")
381
+ try:
382
+ subprocess.run(deploy_cmd, check=True)
383
+ print_status(get_message("deploy_complete"), "success")
384
+ except subprocess.CalledProcessError:
385
+ print_status(get_message("deploy_fail"), "error")
346
386
  return
347
- except subprocess.TimeoutExpired:
348
- print_status(get_message("model_timeout"), "error")
349
- except subprocess.CalledProcessError:
350
- print_status(get_message("model_error"), "error")
351
-
352
- # If deepseek_chat is not available
353
- print_status(get_message("model_not_available"), "warning")
354
- api_key = prompt(HTML(f"<b>{get_message('enter_api_key')} </b>"))
355
-
356
- print_status(get_message("deploying_model").format("Deepseek官方"), "")
357
- deploy_cmd = [
358
- "byzerllm",
359
- "deploy",
360
- "--pretrained_model_type",
361
- "saas/openai",
362
- "--cpus_per_worker",
363
- "0.001",
364
- "--gpus_per_worker",
365
- "0",
366
- "--worker_concurrency",
367
- "1000",
368
- "--num_workers",
369
- "1",
370
- "--infer_params",
371
- f"saas.base_url=https://api.deepseek.com/v1 saas.api_key={api_key} saas.model=deepseek-chat",
372
- "--model",
373
- "deepseek_chat",
374
- ]
375
-
376
- try:
377
- subprocess.run(deploy_cmd, check=True)
378
- print_status(get_message("deploy_complete"), "success")
379
- except subprocess.CalledProcessError:
380
- print_status(get_message("deploy_fail"), "error")
381
- return
382
-
383
-
384
- deploy_cmd = [
385
- "byzerllm",
386
- "deploy",
387
- "--pretrained_model_type",
388
- "saas/reasoning_openai",
389
- "--cpus_per_worker",
390
- "0.001",
391
- "--gpus_per_worker",
392
- "0",
393
- "--worker_concurrency",
394
- "1000",
395
- "--num_workers",
396
- "1",
397
- "--infer_params",
398
- f"saas.base_url=https://api.deepseek.com/v1 saas.api_key={api_key} saas.model=deepseek-reasoner",
399
- "--model",
400
- "deepseek_r1_chat",
401
- ]
387
+
402
388
 
403
- try:
404
- subprocess.run(deploy_cmd, check=True)
405
- print_status(get_message("deploy_complete"), "success")
406
- except subprocess.CalledProcessError:
407
- print_status(get_message("deploy_fail"), "error")
408
- return
389
+ deploy_cmd = [
390
+ "byzerllm",
391
+ "deploy",
392
+ "--pretrained_model_type",
393
+ "saas/reasoning_openai",
394
+ "--cpus_per_worker",
395
+ "0.001",
396
+ "--gpus_per_worker",
397
+ "0",
398
+ "--worker_concurrency",
399
+ "1000",
400
+ "--num_workers",
401
+ "1",
402
+ "--infer_params",
403
+ f"saas.base_url=https://api.deepseek.com/v1 saas.api_key={api_key} saas.model=deepseek-reasoner",
404
+ "--model",
405
+ "r1_chat",
406
+ ]
409
407
 
410
- # Validate the deployment
411
- print_status(get_message("validating_deploy"), "")
412
- try:
413
- validation_result = subprocess.run(
414
- ["easy-byzerllm", "chat", "deepseek_chat", "你好"],
415
- capture_output=True,
416
- text=True,
417
- timeout=30,
418
- check=True,
419
- )
420
- print_status(get_message("validation_success"), "success")
421
- except (subprocess.TimeoutExpired, subprocess.CalledProcessError):
422
- print_status(get_message("validation_fail"), "error")
423
- print_status(get_message("manual_start"), "warning")
424
- print_status("easy-byzerllm chat deepseek_chat 你好", "")
408
+ try:
409
+ subprocess.run(deploy_cmd, check=True)
410
+ print_status(get_message("deploy_complete"), "success")
411
+ except subprocess.CalledProcessError:
412
+ print_status(get_message("deploy_fail"), "error")
413
+ return
425
414
 
426
- print_status(get_message("init_complete_final"), "success")
415
+ # Validate the deployment
416
+ print_status(get_message("validating_deploy"), "")
417
+ try:
418
+ validation_result = subprocess.run(
419
+ ["easy-byzerllm", "chat", "v3_chat", "你好"],
420
+ capture_output=True,
421
+ text=True,
422
+ timeout=30,
423
+ check=True,
424
+ )
425
+ print_status(get_message("validation_success"), "success")
426
+ except (subprocess.TimeoutExpired, subprocess.CalledProcessError):
427
+ print_status(get_message("validation_fail"), "error")
428
+ print_status(get_message("manual_start"), "warning")
429
+ print_status("easy-byzerllm chat v3_chat 你好", "")
430
+
431
+ print_status(get_message("init_complete_final"), "success")
432
+ configure_success[0] = True
433
+
434
+ if first_time[0] and args.product_mode == "pro" and configure_success[0]:
435
+ configure(f"model:v3_chat", skip_print=True)
436
+ configure(f"chat_model:r1_chat", skip_print=True)
437
+ configure(f"generate_rerank_model:r1_chat", skip_print=True)
438
+ configure(f"code_model:v3_chat", skip_print=True)
439
+ configure(f"index_filter_model:r1_chat", skip_print=True)
440
+
441
+ if first_time[0] and args.product_mode == "lite" and models_module.check_model_exists("v3_chat"):
442
+ configure(f"model:v3_chat", skip_print=True)
443
+ configure(f"chat_model:r1_chat", skip_print=True)
444
+ configure(f"generate_rerank_model:r1_chat", skip_print=True)
445
+ configure(f"code_model:v3_chat", skip_print=True)
446
+ configure(f"index_filter_model:r1_chat", skip_print=True)
427
447
 
428
448
 
429
449
  def convert_yaml_config_to_str(yaml_config):
@@ -6,13 +6,13 @@ MESSAGES = {
6
6
  "model_provider_select_title": "Select Model Provider",
7
7
  "model_provider_select_text": "Please select your model provider:",
8
8
  "model_provider_volcano": "Volcano Engine",
9
- "model_provider_guiji": "GuiJi AI",
9
+ "model_provider_siliconflow": "SiliconFlow AI",
10
10
  "model_provider_deepseek": "DeepSeek Official",
11
11
  "model_provider_api_key_title": "API Key",
12
12
  "model_provider_volcano_api_key_text": "Please enter your Volcano Engine API key:",
13
13
  "model_provider_volcano_r1_text": "Please enter your Volcano Engine R1 endpoint (format: ep-20250204215011-vzbsg):",
14
14
  "model_provider_volcano_v3_text": "Please enter your Volcano Engine V3 endpoint (format: ep-20250204215011-vzbsg):",
15
- "model_provider_guiji_api_key_text": "Please enter your GuiJi AI API key:",
15
+ "model_provider_siliconflow_api_key_text": "Please enter your SiliconFlow AI API key:",
16
16
  "model_provider_deepseek_api_key_text": "Please enter your DeepSeek API key:",
17
17
  "model_provider_selected": "Provider configuration completed successfully! You can use /models command to view, add and modify all models later.",
18
18
  "model_provider_success_title": "Success",
@@ -115,13 +115,13 @@ MESSAGES = {
115
115
  "model_provider_select_title": "选择模型供应商",
116
116
  "model_provider_select_text": "请选择您的模型供应商:",
117
117
  "model_provider_volcano": "火山方舟",
118
- "model_provider_guiji": "硅基流动",
118
+ "model_provider_siliconflow": "硅基流动",
119
119
  "model_provider_deepseek": "DeepSeek官方",
120
120
  "model_provider_api_key_title": "API密钥",
121
121
  "model_provider_volcano_api_key_text": "请输入您的火山方舟API密钥:",
122
122
  "model_provider_volcano_r1_text": "请输入您的火山方舟 R1 推理点(格式如: ep-20250204215011-vzbsg):",
123
123
  "model_provider_volcano_v3_text": "请输入您的火山方舟 V3 推理点(格式如: ep-20250204215011-vzbsg):",
124
- "model_provider_guiji_api_key_text": "请输入您的硅基流动API密钥:",
124
+ "model_provider_siliconflow_api_key_text": "请输入您的硅基流动API密钥:",
125
125
  "model_provider_deepseek_api_key_text": "请输入您的DeepSeek API密钥:",
126
126
  "model_provider_selected": "供应商配置已成功完成!后续你可以使用 /models 命令,查看,新增和修改所有模型",
127
127
  "model_provider_success_title": "成功",
@@ -30,7 +30,11 @@ def init_command_template(source_dir:str):
30
30
  project_type: py
31
31
 
32
32
  ## The model you want to drive AutoCoder to run
33
- model: deepseek_chat
33
+ model: v3_chat
34
+ chat_model: r1_chat
35
+ generate_rerank_model: r1_chat
36
+ code_model: v3_chat
37
+ index_filter_model: r1_chat
34
38
 
35
39
 
36
40
  ## Enable the index building which can help you find the related files by your query
@@ -38,7 +42,7 @@ def init_command_template(source_dir:str):
38
42
  skip_build_index: false
39
43
  ## The model to build index for the project (Optional)
40
44
  ## 用于为项目构建索引的模型(可选)
41
- index_model: deepseek_chat
45
+ index_model: v3_chat
42
46
 
43
47
  ## the filter level to find the related files
44
48
  ## 0: only find the files with the file name
@@ -170,7 +174,7 @@ def base_base(source_dir:str,project_type:str)->str:
170
174
  source_dir: {{ source_dir }}
171
175
  target_file: {{ target_file }}
172
176
 
173
- model: deepseek_chat
177
+ model: v3_chat
174
178
  model_max_input_length: 100000
175
179
  model_max_input_length: 120000
176
180
  enable_multi_round_generate: false
@@ -70,7 +70,7 @@ def build_index_and_filter_files(
70
70
  )
71
71
  phase_end = time.monotonic()
72
72
  stats["timings"]["process_tagged_sources"] = phase_end - phase_start
73
-
73
+
74
74
  if not args.skip_build_index and llm:
75
75
  # Phase 2: Build index
76
76
  if args.request_id and not args.skip_events:
@@ -43,7 +43,7 @@ def process_query(context: str, query: str) -> str:
43
43
 
44
44
  class RawRAG:
45
45
  def __init__(
46
- self, llm_model="deepseek_chat", emb_model="emb", storage_name="byzerai_store"
46
+ self, llm_model="v3_chat", emb_model="emb", storage_name="byzerai_store"
47
47
  ):
48
48
  self.storage = ByzerStorage(
49
49
  storage_name, "rag_database", "rag_table", emb_model=emb_model
@@ -1,5 +1,6 @@
1
1
  from prompt_toolkit.shortcuts import radiolist_dialog, input_dialog
2
2
  from prompt_toolkit.validation import Validator, ValidationError
3
+ from prompt_toolkit.styles import Style
3
4
  from rich.console import Console
4
5
  from typing import Optional, Dict, Any, List
5
6
  from autocoder.common.printer import Printer
@@ -33,7 +34,7 @@ PROVIDER_INFO_LIST = [
33
34
  v3_output_price=4.0,
34
35
  ),
35
36
  ProviderInfo(
36
- name="siliconFlow",
37
+ name="siliconflow",
37
38
  endpoint="https://api.siliconflow.cn/v1",
38
39
  r1_model="Pro/deepseek-ai/DeepSeek-R1",
39
40
  v3_model="Pro/deepseek-ai/DeepSeek-V3",
@@ -56,6 +57,21 @@ PROVIDER_INFO_LIST = [
56
57
  ),
57
58
  ]
58
59
 
60
+ dialog_style = Style.from_dict({
61
+ 'dialog': 'bg:#2b2b2b',
62
+ 'dialog frame.label': 'bg:#2b2b2b #ffffff',
63
+ 'dialog.body': 'bg:#2b2b2b #ffffff',
64
+ 'dialog shadow': 'bg:#1f1f1f',
65
+ 'button': 'bg:#2b2b2b #808080',
66
+ 'button.focused': 'bg:#1e1e1e #ffd700 bold',
67
+ 'checkbox': '#e6e6e6',
68
+ 'checkbox-selected': '#0078d4',
69
+ 'radio-selected': 'bg:#0078d4 #ffffff',
70
+ 'dialog frame.border': '#0078d4',
71
+ 'radio': 'bg:#2b2b2b #808080',
72
+ 'radio.focused': 'bg:#1e1e1e #ffd700 bold'
73
+ })
74
+
59
75
  class VolcanoEndpointValidator(Validator):
60
76
  def validate(self, document):
61
77
  text = document.text
@@ -123,14 +139,17 @@ class ModelProviderSelector:
123
139
  Let user select a model provider and input necessary credentials.
124
140
  Returns a dictionary with provider info or None if cancelled.
125
141
  """
142
+
143
+
126
144
  result = radiolist_dialog(
127
145
  title=self.printer.get_message_from_key("model_provider_select_title"),
128
146
  text=self.printer.get_message_from_key("model_provider_select_text"),
129
147
  values=[
130
148
  ("volcano", self.printer.get_message_from_key("model_provider_volcano")),
131
- ("siliconflow", self.printer.get_message_from_key("model_provider_guiji")),
149
+ ("siliconflow", self.printer.get_message_from_key("model_provider_siliconflow")),
132
150
  ("deepseek", self.printer.get_message_from_key("model_provider_deepseek"))
133
- ]
151
+ ],
152
+ style=dialog_style
134
153
  ).run()
135
154
 
136
155
  if result is None:
@@ -148,7 +167,8 @@ class ModelProviderSelector:
148
167
  r1_endpoint = input_dialog(
149
168
  title=self.printer.get_message_from_key("model_provider_api_key_title"),
150
169
  text=self.printer.get_message_from_key("model_provider_volcano_r1_text"),
151
- validator=VolcanoEndpointValidator()
170
+ validator=VolcanoEndpointValidator(),
171
+ style=dialog_style
152
172
  ).run()
153
173
 
154
174
  if r1_endpoint is None:
@@ -160,7 +180,8 @@ class ModelProviderSelector:
160
180
  v3_endpoint = input_dialog(
161
181
  title=self.printer.get_message_from_key("model_provider_api_key_title"),
162
182
  text=self.printer.get_message_from_key("model_provider_volcano_v3_text"),
163
- validator=VolcanoEndpointValidator()
183
+ validator=VolcanoEndpointValidator(),
184
+ style=dialog_style
164
185
  ).run()
165
186
 
166
187
  if v3_endpoint is None:
@@ -172,7 +193,8 @@ class ModelProviderSelector:
172
193
  api_key = input_dialog(
173
194
  title=self.printer.get_message_from_key("model_provider_api_key_title"),
174
195
  text=self.printer.get_message_from_key(f"model_provider_{result}_api_key_text"),
175
- password=True
196
+ password=True,
197
+ style=dialog_style
176
198
  ).run()
177
199
 
178
200
  if api_key is None:
@@ -0,0 +1 @@
1
+ __version__ = "0.1.259"
@@ -1 +0,0 @@
1
- __version__ = "0.1.257"
File without changes
File without changes
File without changes
File without changes