auto-coder 0.1.228__tar.gz → 0.1.229__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 (150) hide show
  1. {auto_coder-0.1.228 → auto_coder-0.1.229}/PKG-INFO +3 -2
  2. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/auto_coder.egg-info/PKG-INFO +3 -2
  3. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/auto_coder.egg-info/SOURCES.txt +2 -0
  4. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/auto_coder.egg-info/requires.txt +2 -1
  5. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/auto_coder.py +6 -58
  6. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/chat_auto_coder.py +13 -3
  7. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/models.py +8 -5
  8. auto_coder-0.1.229/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  9. auto_coder-0.1.229/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +120 -0
  10. auto_coder-0.1.229/src/autocoder/version.py +1 -0
  11. auto_coder-0.1.228/src/autocoder/version.py +0 -1
  12. {auto_coder-0.1.228 → auto_coder-0.1.229}/LICENSE +0 -0
  13. {auto_coder-0.1.228 → auto_coder-0.1.229}/README.md +0 -0
  14. {auto_coder-0.1.228 → auto_coder-0.1.229}/setup.cfg +0 -0
  15. {auto_coder-0.1.228 → auto_coder-0.1.229}/setup.py +0 -0
  16. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  17. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/auto_coder.egg-info/entry_points.txt +0 -0
  18. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/auto_coder.egg-info/top_level.txt +0 -0
  19. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/__init__.py +0 -0
  20. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/__init__.py +0 -0
  21. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  22. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/auto_filegroup.py +0 -0
  23. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/auto_guess_query.py +0 -0
  24. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/auto_tool.py +0 -0
  25. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/coder.py +0 -0
  26. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/designer.py +0 -0
  27. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/planner.py +0 -0
  28. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/agent/project_reader.py +0 -0
  29. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/auto_coder_lang.py +0 -0
  30. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/auto_coder_rag.py +0 -0
  31. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
  32. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/auto_coder_rag_mcp.py +0 -0
  33. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/auto_coder_server.py +0 -0
  34. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/benchmark.py +0 -0
  35. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/chat/__init__.py +0 -0
  36. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/chat_auto_coder_lang.py +0 -0
  37. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/command_args.py +0 -0
  38. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/JupyterClient.py +0 -0
  39. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/ShellClient.py +0 -0
  40. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/__init__.py +0 -0
  41. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/anything2images.py +0 -0
  42. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/anything2img.py +0 -0
  43. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/audio.py +0 -0
  44. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/buildin_tokenizer.py +0 -0
  45. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/chunk_validation.py +0 -0
  46. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/cleaner.py +0 -0
  47. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_execute.py +0 -0
  48. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_generate.py +0 -0
  49. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  50. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  51. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  52. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_merge.py +0 -0
  53. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  54. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  55. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  56. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/code_modification_ranker.py +0 -0
  57. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/command_completer.py +0 -0
  58. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/command_generator.py +0 -0
  59. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/command_templates.py +0 -0
  60. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/const.py +0 -0
  61. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/files.py +0 -0
  62. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/git_utils.py +0 -0
  63. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/image_to_page.py +0 -0
  64. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/interpreter.py +0 -0
  65. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/llm_rerank.py +0 -0
  66. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/mcp_hub.py +0 -0
  67. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/mcp_server.py +0 -0
  68. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  69. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  70. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/mcp_tools.py +0 -0
  71. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/memory_manager.py +0 -0
  72. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/recall_validation.py +0 -0
  73. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/screenshots.py +0 -0
  74. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/search.py +0 -0
  75. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/search_replace.py +0 -0
  76. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/sys_prompt.py +0 -0
  77. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/text.py +0 -0
  78. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/types.py +0 -0
  79. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  80. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/data/tokenizer.json +0 -0
  81. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/db/__init__.py +0 -0
  82. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/db/store.py +0 -0
  83. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/dispacher/__init__.py +0 -0
  84. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/dispacher/actions/__init__.py +0 -0
  85. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/dispacher/actions/action.py +0 -0
  86. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/dispacher/actions/copilot.py +0 -0
  87. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  88. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  89. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
  90. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/index/__init__.py +0 -0
  91. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/index/for_command.py +0 -0
  92. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/index/index.py +0 -0
  93. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/index/symbols_utils.py +0 -0
  94. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/index/types.py +0 -0
  95. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/lang.py +0 -0
  96. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/pyproject/__init__.py +0 -0
  97. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/__init__.py +0 -0
  98. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/api_server.py +0 -0
  99. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/cache/__init__.py +0 -0
  100. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/cache/base_cache.py +0 -0
  101. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  102. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  103. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/cache/simple_cache.py +0 -0
  104. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/doc_filter.py +0 -0
  105. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/document_retriever.py +0 -0
  106. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/llm_wrapper.py +0 -0
  107. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/loaders/__init__.py +0 -0
  108. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  109. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  110. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  111. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  112. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/long_context_rag.py +0 -0
  113. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/rag_config.py +0 -0
  114. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/rag_entry.py +0 -0
  115. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/raw_rag.py +0 -0
  116. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/relevant_utils.py +0 -0
  117. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/simple_directory_reader.py +0 -0
  118. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/simple_rag.py +0 -0
  119. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/stream_event/__init__.py +0 -0
  120. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  121. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/stream_event/types.py +0 -0
  122. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/token_checker.py +0 -0
  123. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/token_counter.py +0 -0
  124. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/token_limiter.py +0 -0
  125. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/types.py +0 -0
  126. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/utils.py +0 -0
  127. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/rag/variable_holder.py +0 -0
  128. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/regexproject/__init__.py +0 -0
  129. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/suffixproject/__init__.py +0 -0
  130. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/tsproject/__init__.py +0 -0
  131. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/__init__.py +0 -0
  132. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/_markitdown.py +0 -0
  133. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/conversation_store.py +0 -0
  134. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  135. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/log_capture.py +0 -0
  136. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/multi_turn.py +0 -0
  137. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/operate_config_api.py +0 -0
  138. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/print_table.py +0 -0
  139. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/queue_communicate.py +0 -0
  140. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/request_event_queue.py +0 -0
  141. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/request_queue.py +0 -0
  142. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/rest.py +0 -0
  143. {auto_coder-0.1.228 → auto_coder-0.1.229}/src/autocoder/utils/tests.py +0 -0
  144. {auto_coder-0.1.228 → auto_coder-0.1.229}/tests/test_action_regex_project.py +0 -0
  145. {auto_coder-0.1.228 → auto_coder-0.1.229}/tests/test_chat_auto_coder.py +0 -0
  146. {auto_coder-0.1.228 → auto_coder-0.1.229}/tests/test_code_auto_merge_editblock.py +0 -0
  147. {auto_coder-0.1.228 → auto_coder-0.1.229}/tests/test_command_completer.py +0 -0
  148. {auto_coder-0.1.228 → auto_coder-0.1.229}/tests/test_planner.py +0 -0
  149. {auto_coder-0.1.228 → auto_coder-0.1.229}/tests/test_queue_communicate.py +0 -0
  150. {auto_coder-0.1.228 → auto_coder-0.1.229}/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.228
3
+ Version: 0.1.229
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.149
29
+ Requires-Dist: byzerllm[saas]>=0.1.150
30
30
  Requires-Dist: patch
31
31
  Requires-Dist: diff_match_patch
32
32
  Requires-Dist: GitPython
@@ -35,6 +35,7 @@ Requires-Dist: anthropic
35
35
  Requires-Dist: google-generativeai
36
36
  Requires-Dist: protobuf
37
37
  Requires-Dist: azure-cognitiveservices-speech
38
+ Requires-Dist: real_agent
38
39
  Requires-Dist: python-docx
39
40
  Requires-Dist: docx2txt
40
41
  Requires-Dist: pdf2image
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.228
3
+ Version: 0.1.229
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.149
29
+ Requires-Dist: byzerllm[saas]>=0.1.150
30
30
  Requires-Dist: patch
31
31
  Requires-Dist: diff_match_patch
32
32
  Requires-Dist: GitPython
@@ -35,6 +35,7 @@ Requires-Dist: anthropic
35
35
  Requires-Dist: google-generativeai
36
36
  Requires-Dist: protobuf
37
37
  Requires-Dist: azure-cognitiveservices-speech
38
+ Requires-Dist: real_agent
38
39
  Requires-Dist: python-docx
39
40
  Requires-Dist: docx2txt
40
41
  Requires-Dist: pdf2image
@@ -136,6 +136,8 @@ src/autocoder/utils/request_event_queue.py
136
136
  src/autocoder/utils/request_queue.py
137
137
  src/autocoder/utils/rest.py
138
138
  src/autocoder/utils/tests.py
139
+ src/autocoder/utils/auto_coder_utils/__init__.py
140
+ src/autocoder/utils/auto_coder_utils/chat_stream_out.py
139
141
  tests/test_action_regex_project.py
140
142
  tests/test_chat_auto_coder.py
141
143
  tests/test_code_auto_merge_editblock.py
@@ -16,7 +16,7 @@ tabulate
16
16
  jupyter_client
17
17
  prompt-toolkit
18
18
  tokenizers
19
- byzerllm[saas]>=0.1.149
19
+ byzerllm[saas]>=0.1.150
20
20
  patch
21
21
  diff_match_patch
22
22
  GitPython
@@ -25,6 +25,7 @@ anthropic
25
25
  google-generativeai
26
26
  protobuf
27
27
  azure-cognitiveservices-speech
28
+ real_agent
28
29
  python-docx
29
30
  docx2txt
30
31
  pdf2image
@@ -42,6 +42,7 @@ from rich.live import Live
42
42
  from autocoder.auto_coder_lang import get_message
43
43
  from autocoder.common.memory_manager import save_to_memory_file
44
44
  from autocoder import models as models_module
45
+ from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
45
46
 
46
47
  console = Console()
47
48
 
@@ -1257,64 +1258,11 @@ def main(input_args: Optional[List[str]] = None):
1257
1258
  v = chat_llm.stream_chat_oai(
1258
1259
  conversations=loaded_conversations, delta_mode=True
1259
1260
  )
1260
-
1261
- assistant_response = ""
1262
- markdown_content = ""
1263
-
1264
- try:
1265
- with Live(
1266
- Panel("", title="Response", border_style="green", expand=False),
1267
- refresh_per_second=4,
1268
- auto_refresh=True,
1269
- vertical_overflow="visible",
1270
- console=Console(force_terminal=True, color_system="auto", height=None)
1271
- ) as live:
1272
- for res in v:
1273
- markdown_content += res[0]
1274
- assistant_response += res[0]
1275
- if args.request_id:
1276
- request_queue.add_request(
1277
- args.request_id,
1278
- RequestValue(
1279
- value=StreamValue(value=[res[0]]),
1280
- status=RequestOption.RUNNING,
1281
- ),
1282
- )
1283
- live.update(
1284
- Panel(
1285
- Markdown(markdown_content),
1286
- title="Response",
1287
- border_style="green",
1288
- expand=False,
1289
- )
1290
- )
1291
- live.update(
1292
- Panel(
1293
- Markdown(markdown_content),
1294
- title="Response",
1295
- border_style="green",
1296
- expand=False,
1297
- )
1298
- )
1299
- except Exception as e:
1300
- ##MARK
1301
- console.print(Panel(
1302
- f"Error: {str(e)}",
1303
- title="Error",
1304
- border_style="red"
1305
- ))
1306
- request_queue.add_request(
1307
- args.request_id,
1308
- RequestValue(
1309
- value=StreamValue(value=[str(e)]), status=RequestOption.FAILED
1310
- ),
1311
- )
1312
- finally:
1313
- request_queue.add_request(
1314
- args.request_id,
1315
- RequestValue(
1316
- value=StreamValue(value=[""]), status=RequestOption.COMPLETED
1317
- ),
1261
+
1262
+ assistant_response, last_meta = stream_out(
1263
+ v,
1264
+ request_id=args.request_id,
1265
+ console=console
1318
1266
  )
1319
1267
 
1320
1268
  chat_history["ask_conversation"].append(
@@ -2173,7 +2173,8 @@ def manage_models(params, query: str):
2173
2173
  "model_name": data_dict.get("model_name", data_dict["name"]),
2174
2174
  "base_url": data_dict.get("base_url", "https://api.openai.com/v1"),
2175
2175
  "api_key_path": data_dict.get("api_key_path", "api.openai.com"),
2176
- "description": data_dict.get("description", "")
2176
+ "description": data_dict.get("description", ""),
2177
+ "is_reasoning": data_dict.get("is_reasoning", "false") in ["true", "True", "TRUE", "1"]
2177
2178
  }
2178
2179
 
2179
2180
  models_data.append(final_model)
@@ -2476,6 +2477,9 @@ def lib_command(args: List[str]):
2476
2477
  else:
2477
2478
  console.print(f"Unknown subcommand: {subcommand}")
2478
2479
 
2480
+ def agent(query: str):
2481
+ console.print(f"Agent query: {query}")
2482
+
2479
2483
 
2480
2484
  def main():
2481
2485
  ARGS = parse_arguments()
@@ -2650,14 +2654,20 @@ def main():
2650
2654
  if not query:
2651
2655
  print("Please enter your query.")
2652
2656
  else:
2653
- manage_models(ARGS,query)
2657
+ manage_models(ARGS,query)
2658
+ elif user_input.startswith("/agent"):
2659
+ query = user_input[len("/agent"):].strip()
2660
+ if not query:
2661
+ print("Please enter your query.")
2662
+ else:
2663
+ agent(query)
2654
2664
 
2655
2665
  elif user_input.startswith("/mode"):
2656
2666
  conf = user_input[len("/mode"):].strip()
2657
2667
  if not conf:
2658
2668
  print(memory["mode"])
2659
2669
  else:
2660
- memory["mode"] = conf
2670
+ memory["mode"] = conf
2661
2671
 
2662
2672
  elif user_input.startswith("/conf"):
2663
2673
  conf = user_input[len("/conf"):].strip()
@@ -13,7 +13,8 @@ default_models_list = [
13
13
  "model_name": "deepseek-reasoner",
14
14
  "model_type": "saas/openai",
15
15
  "base_url": "https://api.deepseek.com/v1",
16
- "api_key_path": "api.deepseek.com"
16
+ "api_key_path": "api.deepseek.com",
17
+ "is_reasoning": True
17
18
  },
18
19
  {
19
20
  "name": "deepseek_chat",
@@ -21,7 +22,8 @@ default_models_list = [
21
22
  "model_name": "deepseek-chat",
22
23
  "model_type": "saas/openai",
23
24
  "base_url": "https://api.deepseek.com/v1",
24
- "api_key_path": "api.deepseek.com"
25
+ "api_key_path": "api.deepseek.com",
26
+ "is_reasoning": False
25
27
  },
26
28
  {
27
29
  "name":"o1",
@@ -29,7 +31,8 @@ default_models_list = [
29
31
  "model_name": "o1-2024-12-17",
30
32
  "model_type": "saas/openai",
31
33
  "base_url": "https://api.openai.com/v1",
32
- "api_key_path": ""
34
+ "api_key_path": "",
35
+ "is_reasoning": False
33
36
  }
34
37
  ]
35
38
 
@@ -123,7 +126,7 @@ def update_model_with_api_key(name: str, api_key: str) -> Dict:
123
126
  # 在现有模型中查找
124
127
  found_model = None
125
128
  for model in models:
126
- if model["name"] == name:
129
+ if model["name"] == name.strip():
127
130
  found_model = model
128
131
  break
129
132
 
@@ -140,7 +143,7 @@ def update_model_with_api_key(name: str, api_key: str) -> Dict:
140
143
  os.makedirs(api_key_dir, exist_ok=True)
141
144
  api_key_file = os.path.join(api_key_dir, api_key_path)
142
145
  with open(api_key_file, "w") as f:
143
- f.write(api_key)
146
+ f.write(api_key.strip())
144
147
 
145
148
  # 如果是新模型,添加到模型列表中
146
149
  if all(model["name"] != name for model in models):
@@ -0,0 +1,120 @@
1
+ from rich.console import Console
2
+ from rich.live import Live
3
+ from rich.panel import Panel
4
+ from rich.markdown import Markdown
5
+ from typing import Generator, List, Dict, Any, Optional, Tuple
6
+ from autocoder.utils.request_queue import RequestValue, RequestOption, StreamValue
7
+ from autocoder.utils.request_queue import request_queue
8
+
9
+ MAX_HISTORY_LINES = 40 # 最大保留历史行数
10
+
11
+ def stream_out(
12
+ stream_generator: Generator[Tuple[str, Dict[str, Any]], None, None],
13
+ request_id: Optional[str] = None,
14
+ console: Optional[Console] = None
15
+ ) -> Tuple[str, Optional[Dict[str, Any]]]:
16
+ """
17
+ 处理流式输出事件并在终端中展示
18
+
19
+ Args:
20
+ stream_generator: 生成流式输出的生成器
21
+ request_id: 请求ID,用于更新请求队列
22
+ console: Rich Console对象
23
+
24
+ Returns:
25
+ Tuple[str, Dict[str, Any]]: 返回完整的响应内容和最后的元数据
26
+ """
27
+ if console is None:
28
+ console = Console(force_terminal=True, color_system="auto", height=None)
29
+
30
+ lines_buffer = [] # 存储历史行
31
+ current_line = "" # 当前行
32
+ assistant_response = ""
33
+ last_meta = None
34
+
35
+ try:
36
+ with Live(
37
+ Panel("", title="Response", border_style="green"),
38
+ refresh_per_second=4,
39
+ console=console
40
+ ) as live:
41
+ for res in stream_generator:
42
+ last_meta = res[1]
43
+ content = res[0]
44
+ assistant_response += content
45
+
46
+ # 处理所有行
47
+ parts = (current_line + content).split("\n")
48
+
49
+ # 最后一部分是未完成的新行
50
+ if len(parts) > 1:
51
+ # 将完整行加入缓冲区
52
+ lines_buffer.extend(parts[:-1])
53
+ # 保留最大行数限制
54
+ if len(lines_buffer) > MAX_HISTORY_LINES:
55
+ del lines_buffer[0:len(lines_buffer) - MAX_HISTORY_LINES]
56
+
57
+ # 更新当前行
58
+ current_line = parts[-1]
59
+
60
+ # 构建显示内容 = 历史行 + 当前行
61
+ display_content = "\n".join(lines_buffer[-MAX_HISTORY_LINES:] + [current_line])
62
+
63
+ if request_id and request_queue:
64
+ request_queue.add_request(
65
+ request_id,
66
+ RequestValue(
67
+ value=StreamValue(value=[content]),
68
+ status=RequestOption.RUNNING,
69
+ ),
70
+ )
71
+
72
+ live.update(
73
+ Panel(
74
+ Markdown(display_content),
75
+ title="Response",
76
+ border_style="green",
77
+ height=min(50, live.console.height - 4)
78
+ )
79
+ )
80
+
81
+ # 处理最后一行的内容
82
+ if current_line:
83
+ lines_buffer.append(current_line)
84
+
85
+ # 最终显示结果
86
+ live.update(
87
+ Panel(
88
+ Markdown(assistant_response),
89
+ title="Final Response",
90
+ border_style="blue"
91
+ )
92
+ )
93
+
94
+ except Exception as e:
95
+ console.print(Panel(
96
+ f"Error: {str(e)}",
97
+ title="Error",
98
+ border_style="red"
99
+ ))
100
+
101
+ if request_id and request_queue:
102
+ request_queue.add_request(
103
+ request_id,
104
+ RequestValue(
105
+ value=StreamValue(value=[str(e)]),
106
+ status=RequestOption.FAILED
107
+ ),
108
+ )
109
+
110
+ finally:
111
+ if request_id and request_queue:
112
+ request_queue.add_request(
113
+ request_id,
114
+ RequestValue(
115
+ value=StreamValue(value=[""]),
116
+ status=RequestOption.COMPLETED
117
+ ),
118
+ )
119
+
120
+ return assistant_response, last_meta
@@ -0,0 +1 @@
1
+ __version__ = "0.1.229"
@@ -1 +0,0 @@
1
- __version__ = "0.1.228"
File without changes
File without changes
File without changes
File without changes