auto-coder 0.1.251__tar.gz → 0.1.253__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.
- {auto_coder-0.1.251 → auto_coder-0.1.253}/PKG-INFO +2 -2
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/auto_coder.egg-info/PKG-INFO +2 -2
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/auto_coder.egg-info/SOURCES.txt +2 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/auto_coder.egg-info/requires.txt +1 -1
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/auto_coder.py +32 -7
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/auto_coder_rag.py +198 -35
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/chat_auto_coder.py +73 -19
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/chat_auto_coder_lang.py +21 -3
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/__init__.py +2 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/auto_coder_lang.py +6 -4
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_merge.py +1 -1
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_merge_diff.py +1 -1
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_merge_editblock.py +1 -1
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_merge_strict_diff.py +1 -1
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_modification_ranker.py +3 -3
- auto_coder-0.1.253/src/autocoder/common/global_cancel.py +21 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/mcp_server.py +3 -4
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +1 -1
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/dispacher/actions/action.py +29 -8
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +17 -5
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/filter/quick_filter.py +4 -6
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/index.py +13 -6
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/models.py +87 -6
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/doc_filter.py +2 -4
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/long_context_rag.py +8 -6
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/token_limiter.py +1 -3
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +40 -17
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/llms.py +15 -1
- auto_coder-0.1.253/src/autocoder/utils/thread_utils.py +201 -0
- auto_coder-0.1.253/src/autocoder/version.py +1 -0
- auto_coder-0.1.251/src/autocoder/version.py +0 -1
- {auto_coder-0.1.251 → auto_coder-0.1.253}/LICENSE +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/README.md +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/setup.cfg +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/setup.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/auto_coder.egg-info/dependency_links.txt +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/auto_coder.egg-info/entry_points.txt +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/auto_coder.egg-info/top_level.txt +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/auto_demand_organizer.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/auto_filegroup.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/auto_guess_query.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/auto_review_commit.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/auto_tool.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/coder.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/designer.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/planner.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/agent/project_reader.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/auto_coder_rag_client_mcp.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/auto_coder_rag_mcp.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/auto_coder_server.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/benchmark.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/chat/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/command_args.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/JupyterClient.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/ShellClient.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/anything2images.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/anything2img.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/audio.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/buildin_tokenizer.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/chunk_validation.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/cleaner.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_execute.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_generate.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_generate_diff.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/command_completer.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/command_generator.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/command_templates.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/const.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/files.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/git_utils.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/image_to_page.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/interpreter.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/llm_rerank.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/mcp_hub.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/mcp_servers/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/mcp_tools.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/memory_manager.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/printer.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/recall_validation.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/screenshots.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/search.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/search_replace.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/shells.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/sys_prompt.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/text.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/types.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/common/utils_code_auto_generate.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/data/tokenizer.json +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/db/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/db/store.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/dispacher/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/dispacher/actions/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/dispacher/actions/copilot.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/dispacher/actions/plugins/action_translate.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/entry.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/filter/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/filter/normal_filter.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/for_command.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/symbols_utils.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/index/types.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/lang.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/pyproject/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/api_server.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/cache/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/cache/base_cache.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/cache/simple_cache.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/document_retriever.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/llm_wrapper.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/loaders/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/loaders/docx_loader.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/loaders/excel_loader.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/rag_config.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/rag_entry.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/raw_rag.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/relevant_utils.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/simple_directory_reader.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/simple_rag.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/stream_event/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/stream_event/event_writer.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/stream_event/types.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/token_checker.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/token_counter.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/types.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/utils.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/rag/variable_holder.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/regexproject/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/suffixproject/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/tsproject/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/_markitdown.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/conversation_store.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/llm_client_interceptors.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/log_capture.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/multi_turn.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/operate_config_api.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/print_table.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/queue_communicate.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/request_event_queue.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/request_queue.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/rest.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/tests.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/src/autocoder/utils/types.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/tests/test_action_regex_project.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/tests/test_chat_auto_coder.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/tests/test_code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/tests/test_command_completer.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/tests/test_planner.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/tests/test_queue_communicate.py +0 -0
- {auto_coder-0.1.251 → auto_coder-0.1.253}/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.
|
|
3
|
+
Version: 0.1.253
|
|
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.
|
|
29
|
+
Requires-Dist: byzerllm[saas]>=0.1.163
|
|
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.
|
|
3
|
+
Version: 0.1.253
|
|
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.
|
|
29
|
+
Requires-Dist: byzerllm[saas]>=0.1.163
|
|
30
30
|
Requires-Dist: patch
|
|
31
31
|
Requires-Dist: diff_match_patch
|
|
32
32
|
Requires-Dist: GitPython
|
|
@@ -57,6 +57,7 @@ src/autocoder/common/command_templates.py
|
|
|
57
57
|
src/autocoder/common/const.py
|
|
58
58
|
src/autocoder/common/files.py
|
|
59
59
|
src/autocoder/common/git_utils.py
|
|
60
|
+
src/autocoder/common/global_cancel.py
|
|
60
61
|
src/autocoder/common/image_to_page.py
|
|
61
62
|
src/autocoder/common/interpreter.py
|
|
62
63
|
src/autocoder/common/llm_rerank.py
|
|
@@ -144,6 +145,7 @@ src/autocoder/utils/request_event_queue.py
|
|
|
144
145
|
src/autocoder/utils/request_queue.py
|
|
145
146
|
src/autocoder/utils/rest.py
|
|
146
147
|
src/autocoder/utils/tests.py
|
|
148
|
+
src/autocoder/utils/thread_utils.py
|
|
147
149
|
src/autocoder/utils/types.py
|
|
148
150
|
src/autocoder/utils/auto_coder_utils/__init__.py
|
|
149
151
|
src/autocoder/utils/auto_coder_utils/chat_stream_out.py
|
|
@@ -6,6 +6,7 @@ from autocoder.common import git_utils, code_auto_execute
|
|
|
6
6
|
from autocoder.utils.llm_client_interceptors import token_counter_interceptor
|
|
7
7
|
from autocoder.db.store import Store
|
|
8
8
|
|
|
9
|
+
from autocoder.utils.llms import get_llm_names
|
|
9
10
|
from autocoder.utils.queue_communicate import (
|
|
10
11
|
queue_communicate,
|
|
11
12
|
CommunicateEvent,
|
|
@@ -765,6 +766,23 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
765
766
|
)
|
|
766
767
|
llm.setup_sub_client("planner_model", planner_model)
|
|
767
768
|
|
|
769
|
+
if args.commit_model:
|
|
770
|
+
model_name = args.commit_model.strip()
|
|
771
|
+
model_info = models_module.get_model_by_name(model_name)
|
|
772
|
+
commit_model = byzerllm.SimpleByzerLLM(default_model_name=model_name)
|
|
773
|
+
commit_model.deploy(
|
|
774
|
+
model_path="",
|
|
775
|
+
pretrained_model_type=model_info["model_type"],
|
|
776
|
+
udf_name=model_name,
|
|
777
|
+
infer_params={
|
|
778
|
+
"saas.base_url": model_info["base_url"],
|
|
779
|
+
"saas.api_key": model_info["api_key"],
|
|
780
|
+
"saas.model": model_info["model_name"],
|
|
781
|
+
"saas.is_reasoning": model_info["is_reasoning"]
|
|
782
|
+
}
|
|
783
|
+
)
|
|
784
|
+
llm.setup_sub_client("commit_model", commit_model)
|
|
785
|
+
|
|
768
786
|
if args.designer_model:
|
|
769
787
|
model_name = args.designer_model.strip()
|
|
770
788
|
model_info = models_module.get_model_by_name(model_name)
|
|
@@ -875,6 +893,11 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
875
893
|
designer_model.setup_default_model_name(args.designer_model)
|
|
876
894
|
llm.setup_sub_client("designer_model", designer_model)
|
|
877
895
|
|
|
896
|
+
if args.commit_model:
|
|
897
|
+
commit_model = byzerllm.ByzerLLM()
|
|
898
|
+
commit_model.setup_default_model_name(args.commit_model)
|
|
899
|
+
llm.setup_sub_client("commit_model", commit_model)
|
|
900
|
+
|
|
878
901
|
else:
|
|
879
902
|
llm = None
|
|
880
903
|
|
|
@@ -1086,8 +1109,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
1086
1109
|
return
|
|
1087
1110
|
|
|
1088
1111
|
elif raw_args.agent_command == "chat":
|
|
1089
|
-
|
|
1090
|
-
|
|
1112
|
+
|
|
1091
1113
|
memory_dir = os.path.join(args.source_dir, ".auto-coder", "memory")
|
|
1092
1114
|
os.makedirs(memory_dir, exist_ok=True)
|
|
1093
1115
|
memory_file = os.path.join(memory_dir, "chat_history.json")
|
|
@@ -1312,6 +1334,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
1312
1334
|
start_time = time.time()
|
|
1313
1335
|
|
|
1314
1336
|
if "rag" in args.action:
|
|
1337
|
+
from autocoder.rag.rag_entry import RAGFactory
|
|
1315
1338
|
args.enable_rag_search = True
|
|
1316
1339
|
args.enable_rag_context = False
|
|
1317
1340
|
rag = RAGFactory.get_rag(llm=chat_llm, args=args, path="")
|
|
@@ -1325,7 +1348,8 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
1325
1348
|
response = mcp_server.send_request(
|
|
1326
1349
|
McpRequest(
|
|
1327
1350
|
query=args.query,
|
|
1328
|
-
model=args.inference_model or args.model
|
|
1351
|
+
model=args.inference_model or args.model,
|
|
1352
|
+
product_mode=args.product_mode
|
|
1329
1353
|
)
|
|
1330
1354
|
)
|
|
1331
1355
|
v = [[response.result,None]]
|
|
@@ -1348,9 +1372,7 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
1348
1372
|
)
|
|
1349
1373
|
|
|
1350
1374
|
|
|
1351
|
-
model_name =
|
|
1352
|
-
if not model_name:
|
|
1353
|
-
model_name = "unknown(without default model name)"
|
|
1375
|
+
model_name = ",".join(get_llm_names(chat_llm))
|
|
1354
1376
|
|
|
1355
1377
|
assistant_response, last_meta = stream_out(
|
|
1356
1378
|
v,
|
|
@@ -1364,10 +1386,13 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
1364
1386
|
if last_meta:
|
|
1365
1387
|
elapsed_time = time.time() - start_time
|
|
1366
1388
|
printer = Printer()
|
|
1389
|
+
speed = last_meta.generated_tokens_count / elapsed_time
|
|
1367
1390
|
printer.print_in_terminal("stream_out_stats",
|
|
1368
1391
|
elapsed_time=elapsed_time,
|
|
1392
|
+
first_token_time=last_meta.first_token_time,
|
|
1369
1393
|
input_tokens=last_meta.input_tokens_count,
|
|
1370
|
-
output_tokens=last_meta.generated_tokens_count
|
|
1394
|
+
output_tokens=last_meta.generated_tokens_count,
|
|
1395
|
+
speed=round(speed, 2))
|
|
1371
1396
|
|
|
1372
1397
|
chat_history["ask_conversation"].append(
|
|
1373
1398
|
{"role": "assistant", "content": assistant_response}
|
|
@@ -32,7 +32,10 @@ if platform.system() == "Windows":
|
|
|
32
32
|
init()
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
def initialize_system():
|
|
35
|
+
def initialize_system(args):
|
|
36
|
+
if args.product_mode == "lite":
|
|
37
|
+
return
|
|
38
|
+
|
|
36
39
|
print(f"\n\033[1;34m{get_message('initializing')}\033[0m")
|
|
37
40
|
|
|
38
41
|
def print_status(message, status):
|
|
@@ -316,13 +319,30 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
316
319
|
action="store_true",
|
|
317
320
|
help="Whether to return responses without contexts. only works when pro plugin is installed",
|
|
318
321
|
)
|
|
319
|
-
|
|
320
|
-
|
|
322
|
+
|
|
323
|
+
serve_parser.add_argument("--data_cells_max_num",
|
|
321
324
|
type=int,
|
|
322
325
|
default=2000,
|
|
323
326
|
help="Maximum number of data cells to process",
|
|
324
327
|
)
|
|
325
328
|
|
|
329
|
+
serve_parser.add_argument(
|
|
330
|
+
"--product_mode",
|
|
331
|
+
type=str,
|
|
332
|
+
default="pro",
|
|
333
|
+
help="The mode of the auto-coder.rag, lite/pro default is pro",
|
|
334
|
+
)
|
|
335
|
+
serve_parser.add_argument(
|
|
336
|
+
"--lite",
|
|
337
|
+
action="store_true",
|
|
338
|
+
help="Run in lite mode (equivalent to --product_mode=lite)",
|
|
339
|
+
)
|
|
340
|
+
serve_parser.add_argument(
|
|
341
|
+
"--pro",
|
|
342
|
+
action="store_true",
|
|
343
|
+
help="Run in pro mode (equivalent to --product_mode=pro)",
|
|
344
|
+
)
|
|
345
|
+
|
|
326
346
|
serve_parser.add_argument(
|
|
327
347
|
"--recall_model",
|
|
328
348
|
default="",
|
|
@@ -373,6 +393,22 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
373
393
|
# Tools command
|
|
374
394
|
tools_parser = subparsers.add_parser("tools", help="Various tools")
|
|
375
395
|
tools_subparsers = tools_parser.add_subparsers(dest="tool", help="Available tools")
|
|
396
|
+
tools_parser.add_argument(
|
|
397
|
+
"--product_mode",
|
|
398
|
+
type=str,
|
|
399
|
+
default="pro",
|
|
400
|
+
help="The mode of the auto-coder.rag, lite/pro default is pro",
|
|
401
|
+
)
|
|
402
|
+
tools_parser.add_argument(
|
|
403
|
+
"--lite",
|
|
404
|
+
action="store_true",
|
|
405
|
+
help="Run in lite mode (equivalent to --product_mode=lite)",
|
|
406
|
+
)
|
|
407
|
+
tools_parser.add_argument(
|
|
408
|
+
"--pro",
|
|
409
|
+
action="store_true",
|
|
410
|
+
help="Run in pro mode (equivalent to --product_mode=pro)",
|
|
411
|
+
)
|
|
376
412
|
|
|
377
413
|
# Count tool
|
|
378
414
|
count_parser = tools_subparsers.add_parser("count", help="Count tokens in a file")
|
|
@@ -431,8 +467,15 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
431
467
|
benchmark_byzerllm(args.model, args.parallel, args.rounds, args.query)
|
|
432
468
|
|
|
433
469
|
elif args.command == "serve":
|
|
470
|
+
# Handle lite/pro flags
|
|
471
|
+
if args.lite:
|
|
472
|
+
args.product_mode = "lite"
|
|
473
|
+
elif args.pro:
|
|
474
|
+
args.product_mode = "pro"
|
|
475
|
+
|
|
434
476
|
if not args.quick:
|
|
435
|
-
initialize_system()
|
|
477
|
+
initialize_system(args)
|
|
478
|
+
|
|
436
479
|
server_args = ServerArgs(
|
|
437
480
|
**{
|
|
438
481
|
arg: getattr(args, arg)
|
|
@@ -448,7 +491,11 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
448
491
|
}
|
|
449
492
|
)
|
|
450
493
|
|
|
451
|
-
|
|
494
|
+
|
|
495
|
+
if auto_coder_args.enable_hybrid_index and args.product_mode == "lite":
|
|
496
|
+
raise Exception("Hybrid index is not supported in lite mode")
|
|
497
|
+
|
|
498
|
+
if auto_coder_args.enable_hybrid_index and args.product_mode == "pro":
|
|
452
499
|
# 尝试连接storage
|
|
453
500
|
try:
|
|
454
501
|
from byzerllm.apps.byzer_storage.simple_api import ByzerStorage
|
|
@@ -460,36 +507,107 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
460
507
|
"When enable_hybrid_index is true, ByzerStorage must be started"
|
|
461
508
|
)
|
|
462
509
|
logger.error("Please run 'byzerllm storage start' first")
|
|
463
|
-
return
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
llm = byzerllm.ByzerLLM()
|
|
467
|
-
llm.setup_default_model_name(args.model)
|
|
468
|
-
|
|
469
|
-
# Setup sub models if specified
|
|
470
|
-
if args.recall_model:
|
|
471
|
-
recall_model = byzerllm.ByzerLLM()
|
|
472
|
-
recall_model.setup_default_model_name(args.recall_model)
|
|
473
|
-
llm.setup_sub_client("recall_model", recall_model)
|
|
474
|
-
|
|
475
|
-
if args.chunk_model:
|
|
476
|
-
chunk_model = byzerllm.ByzerLLM()
|
|
477
|
-
chunk_model.setup_default_model_name(args.chunk_model)
|
|
478
|
-
llm.setup_sub_client("chunk_model", chunk_model)
|
|
510
|
+
return
|
|
511
|
+
|
|
512
|
+
|
|
479
513
|
|
|
480
|
-
if args.
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
llm.
|
|
514
|
+
if args.product_mode == "pro":
|
|
515
|
+
byzerllm.connect_cluster(address=args.ray_address)
|
|
516
|
+
llm = byzerllm.ByzerLLM()
|
|
517
|
+
llm.skip_nontext_check = True
|
|
518
|
+
llm.setup_default_model_name(args.model)
|
|
519
|
+
|
|
520
|
+
# Setup sub models if specified
|
|
521
|
+
if args.recall_model:
|
|
522
|
+
recall_model = byzerllm.ByzerLLM()
|
|
523
|
+
recall_model.setup_default_model_name(args.recall_model)
|
|
524
|
+
recall_model.skip_nontext_check = True
|
|
525
|
+
llm.setup_sub_client("recall_model", recall_model)
|
|
526
|
+
|
|
527
|
+
if args.chunk_model:
|
|
528
|
+
chunk_model = byzerllm.ByzerLLM()
|
|
529
|
+
chunk_model.setup_default_model_name(args.chunk_model)
|
|
530
|
+
llm.setup_sub_client("chunk_model", chunk_model)
|
|
531
|
+
|
|
532
|
+
if args.qa_model:
|
|
533
|
+
qa_model = byzerllm.ByzerLLM()
|
|
534
|
+
qa_model.setup_default_model_name(args.qa_model)
|
|
535
|
+
qa_model.skip_nontext_check = True
|
|
536
|
+
llm.setup_sub_client("qa_model", qa_model)
|
|
537
|
+
|
|
538
|
+
# 当启用hybrid_index时,检查必要的组件
|
|
539
|
+
if auto_coder_args.enable_hybrid_index:
|
|
540
|
+
if not llm.is_model_exist("emb"):
|
|
541
|
+
logger.error(
|
|
542
|
+
"When enable_hybrid_index is true, an 'emb' model must be deployed"
|
|
543
|
+
)
|
|
544
|
+
return
|
|
545
|
+
llm.setup_default_emb_model_name("emb")
|
|
546
|
+
|
|
547
|
+
elif args.product_mode == "lite":
|
|
548
|
+
from autocoder import models as models_module
|
|
549
|
+
model_info = models_module.get_model_by_name(args.model)
|
|
550
|
+
llm = byzerllm.SimpleByzerLLM(default_model_name=args.model)
|
|
551
|
+
llm.deploy(
|
|
552
|
+
model_path="",
|
|
553
|
+
pretrained_model_type=model_info["model_type"],
|
|
554
|
+
udf_name=args.model,
|
|
555
|
+
infer_params={
|
|
556
|
+
"saas.base_url": model_info["base_url"],
|
|
557
|
+
"saas.api_key": model_info["api_key"],
|
|
558
|
+
"saas.model": model_info["model_name"],
|
|
559
|
+
"saas.is_reasoning": model_info["is_reasoning"]
|
|
560
|
+
}
|
|
561
|
+
)
|
|
484
562
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
563
|
+
# Setup sub models if specified
|
|
564
|
+
if args.recall_model:
|
|
565
|
+
model_info = models_module.get_model_by_name(args.recall_model)
|
|
566
|
+
recall_model = byzerllm.SimpleByzerLLM(default_model_name=args.recall_model)
|
|
567
|
+
recall_model.deploy(
|
|
568
|
+
model_path="",
|
|
569
|
+
pretrained_model_type=model_info["model_type"],
|
|
570
|
+
udf_name=args.recall_model,
|
|
571
|
+
infer_params={
|
|
572
|
+
"saas.base_url": model_info["base_url"],
|
|
573
|
+
"saas.api_key": model_info["api_key"],
|
|
574
|
+
"saas.model": model_info["model_name"],
|
|
575
|
+
"saas.is_reasoning": model_info["is_reasoning"]
|
|
576
|
+
}
|
|
490
577
|
)
|
|
491
|
-
|
|
492
|
-
|
|
578
|
+
llm.setup_sub_client("recall_model", recall_model)
|
|
579
|
+
|
|
580
|
+
if args.chunk_model:
|
|
581
|
+
model_info = models_module.get_model_by_name(args.chunk_model)
|
|
582
|
+
chunk_model = byzerllm.SimpleByzerLLM(default_model_name=args.chunk_model)
|
|
583
|
+
chunk_model.deploy(
|
|
584
|
+
model_path="",
|
|
585
|
+
pretrained_model_type=model_info["model_type"],
|
|
586
|
+
udf_name=args.chunk_model,
|
|
587
|
+
infer_params={
|
|
588
|
+
"saas.base_url": model_info["base_url"],
|
|
589
|
+
"saas.api_key": model_info["api_key"],
|
|
590
|
+
"saas.model": model_info["model_name"],
|
|
591
|
+
"saas.is_reasoning": model_info["is_reasoning"]
|
|
592
|
+
}
|
|
593
|
+
)
|
|
594
|
+
llm.setup_sub_client("chunk_model", chunk_model)
|
|
595
|
+
|
|
596
|
+
if args.qa_model:
|
|
597
|
+
model_info = models_module.get_model_by_name(args.qa_model)
|
|
598
|
+
qa_model = byzerllm.SimpleByzerLLM(default_model_name=args.qa_model)
|
|
599
|
+
qa_model.deploy(
|
|
600
|
+
model_path="",
|
|
601
|
+
pretrained_model_type=model_info["model_type"],
|
|
602
|
+
udf_name=args.qa_model,
|
|
603
|
+
infer_params={
|
|
604
|
+
"saas.base_url": model_info["base_url"],
|
|
605
|
+
"saas.api_key": model_info["api_key"],
|
|
606
|
+
"saas.model": model_info["model_name"],
|
|
607
|
+
"saas.is_reasoning": model_info["is_reasoning"]
|
|
608
|
+
}
|
|
609
|
+
)
|
|
610
|
+
llm.setup_sub_client("qa_model", qa_model)
|
|
493
611
|
|
|
494
612
|
if server_args.doc_dir:
|
|
495
613
|
auto_coder_args.rag_type = "simple"
|
|
@@ -577,16 +695,61 @@ def main(input_args: Optional[List[str]] = None):
|
|
|
577
695
|
count_tokens(args.tokenizer_path, args.file)
|
|
578
696
|
elif args.tool == "recall":
|
|
579
697
|
from .common.recall_validation import validate_recall
|
|
580
|
-
|
|
581
|
-
|
|
698
|
+
from autocoder import models as models_module
|
|
699
|
+
|
|
700
|
+
# Handle lite/pro flags
|
|
701
|
+
if args.lite:
|
|
702
|
+
args.product_mode = "lite"
|
|
703
|
+
elif args.pro:
|
|
704
|
+
args.product_mode = "pro"
|
|
705
|
+
|
|
706
|
+
if args.product_mode == "pro":
|
|
707
|
+
llm = byzerllm.ByzerLLM.from_default_model(args.model)
|
|
708
|
+
else: # lite mode
|
|
709
|
+
model_info = models_module.get_model_by_name(args.model)
|
|
710
|
+
llm = byzerllm.SimpleByzerLLM(default_model_name=args.model)
|
|
711
|
+
llm.deploy(
|
|
712
|
+
model_path="",
|
|
713
|
+
pretrained_model_type=model_info["model_type"],
|
|
714
|
+
udf_name=args.model,
|
|
715
|
+
infer_params={
|
|
716
|
+
"saas.base_url": model_info["base_url"],
|
|
717
|
+
"saas.api_key": model_info["api_key"],
|
|
718
|
+
"saas.model": model_info["model_name"],
|
|
719
|
+
"saas.is_reasoning": model_info["is_reasoning"]
|
|
720
|
+
}
|
|
721
|
+
)
|
|
582
722
|
|
|
583
723
|
content = None if not args.content else [args.content]
|
|
584
724
|
result = validate_recall(llm, content=content, query=args.query)
|
|
585
725
|
print(f"Recall Validation Result:\n{result}")
|
|
726
|
+
|
|
586
727
|
elif args.tool == "chunk":
|
|
587
728
|
from .common.chunk_validation import validate_chunk
|
|
729
|
+
from autocoder import models as models_module
|
|
730
|
+
|
|
731
|
+
if args.lite:
|
|
732
|
+
args.product_mode = "lite"
|
|
733
|
+
elif args.pro:
|
|
734
|
+
args.product_mode = "pro"
|
|
735
|
+
|
|
736
|
+
if args.product_mode == "pro":
|
|
737
|
+
llm = byzerllm.ByzerLLM.from_default_model(args.model)
|
|
738
|
+
else: # lite mode
|
|
739
|
+
model_info = models_module.get_model_by_name(args.model)
|
|
740
|
+
llm = byzerllm.SimpleByzerLLM(default_model_name=args.model)
|
|
741
|
+
llm.deploy(
|
|
742
|
+
model_path="",
|
|
743
|
+
pretrained_model_type=model_info["model_type"],
|
|
744
|
+
udf_name=args.model,
|
|
745
|
+
infer_params={
|
|
746
|
+
"saas.base_url": model_info["base_url"],
|
|
747
|
+
"saas.api_key": model_info["api_key"],
|
|
748
|
+
"saas.model": model_info["model_name"],
|
|
749
|
+
"saas.is_reasoning": model_info["is_reasoning"]
|
|
750
|
+
}
|
|
751
|
+
)
|
|
588
752
|
|
|
589
|
-
llm = byzerllm.ByzerLLM.from_default_model(args.model)
|
|
590
753
|
content = None if not args.content else [args.content]
|
|
591
754
|
result = validate_chunk(llm, content=content, query=args.query)
|
|
592
755
|
print(f"Chunk Model Validation Result:\n{result}")
|
|
@@ -49,12 +49,12 @@ from autocoder.common.mcp_server import get_mcp_server, McpRequest, McpInstallRe
|
|
|
49
49
|
import byzerllm
|
|
50
50
|
from byzerllm.utils import format_str_jinja2
|
|
51
51
|
from autocoder.common.memory_manager import get_global_memory_file_paths
|
|
52
|
-
from autocoder import models
|
|
52
|
+
from autocoder import models as models_module
|
|
53
53
|
import shlex
|
|
54
54
|
from autocoder.utils.llms import get_single_llm
|
|
55
55
|
import pkg_resources
|
|
56
56
|
from autocoder.common.printer import Printer
|
|
57
|
-
from
|
|
57
|
+
from autocoder.utils.thread_utils import run_in_thread,run_in_raw_thread
|
|
58
58
|
|
|
59
59
|
class SymbolItem(BaseModel):
|
|
60
60
|
symbol_name: str
|
|
@@ -136,6 +136,8 @@ commands = [
|
|
|
136
136
|
|
|
137
137
|
|
|
138
138
|
def show_help():
|
|
139
|
+
print(f"\033[1m{get_message('official_doc')}\033[0m")
|
|
140
|
+
print()
|
|
139
141
|
print(f"\033[1m{get_message('supported_commands')}\033[0m")
|
|
140
142
|
print()
|
|
141
143
|
print(
|
|
@@ -1537,11 +1539,12 @@ def mcp(query: str):
|
|
|
1537
1539
|
if os.path.exists(temp_yaml):
|
|
1538
1540
|
os.remove(temp_yaml)
|
|
1539
1541
|
|
|
1540
|
-
mcp_server = get_mcp_server()
|
|
1542
|
+
mcp_server = get_mcp_server()
|
|
1541
1543
|
response = mcp_server.send_request(
|
|
1542
1544
|
McpRequest(
|
|
1543
1545
|
query=query,
|
|
1544
|
-
model=args.inference_model or args.model
|
|
1546
|
+
model=args.inference_model or args.model,
|
|
1547
|
+
product_mode=args.product_mode
|
|
1545
1548
|
)
|
|
1546
1549
|
)
|
|
1547
1550
|
|
|
@@ -1562,19 +1565,19 @@ def mcp(query: str):
|
|
|
1562
1565
|
file_path = os.path.join(mcp_dir, f"{timestamp}.md")
|
|
1563
1566
|
|
|
1564
1567
|
# Format response as markdown
|
|
1565
|
-
markdown_content =
|
|
1568
|
+
markdown_content = response.result
|
|
1566
1569
|
|
|
1567
1570
|
# Save to file
|
|
1568
1571
|
with open(file_path, "w", encoding="utf-8") as f:
|
|
1569
1572
|
f.write(markdown_content)
|
|
1570
1573
|
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1574
|
+
console = Console()
|
|
1575
|
+
console.print(
|
|
1576
|
+
Panel(
|
|
1577
|
+
Markdown(markdown_content, justify="left"),
|
|
1578
|
+
title=printer.get_message_from_key('mcp_response_title'),
|
|
1579
|
+
border_style="green"
|
|
1580
|
+
)
|
|
1578
1581
|
)
|
|
1579
1582
|
|
|
1580
1583
|
|
|
@@ -1713,7 +1716,7 @@ def commit(query: str):
|
|
|
1713
1716
|
if os.path.exists(temp_yaml):
|
|
1714
1717
|
os.remove(temp_yaml)
|
|
1715
1718
|
|
|
1716
|
-
target_model = args.
|
|
1719
|
+
target_model = args.commit_model or args.model
|
|
1717
1720
|
llm = get_single_llm(target_model, product_mode)
|
|
1718
1721
|
printer = Printer()
|
|
1719
1722
|
printer.print_in_terminal("commit_generating", style="yellow", model_name=target_model)
|
|
@@ -1739,7 +1742,7 @@ def commit(query: str):
|
|
|
1739
1742
|
md5 = hashlib.md5(file_content.encode("utf-8")).hexdigest()
|
|
1740
1743
|
file_name = os.path.basename(execute_file)
|
|
1741
1744
|
commit_result = git_utils.commit_changes(
|
|
1742
|
-
".", f"auto_coder_{file_name}_{md5}"
|
|
1745
|
+
".", f"auto_coder_{file_name}_{md5}\n{commit_message}"
|
|
1743
1746
|
)
|
|
1744
1747
|
git_utils.print_commit_info(commit_result=commit_result)
|
|
1745
1748
|
if commit_message:
|
|
@@ -2171,7 +2174,7 @@ def manage_models(params, query: str):
|
|
|
2171
2174
|
printer.print_in_terminal("models_lite_only", style="red")
|
|
2172
2175
|
return
|
|
2173
2176
|
|
|
2174
|
-
models_data =
|
|
2177
|
+
models_data = models_module.load_models()
|
|
2175
2178
|
subcmd = ""
|
|
2176
2179
|
if "/list" in query:
|
|
2177
2180
|
subcmd = "/list"
|
|
@@ -2208,6 +2211,9 @@ def manage_models(params, query: str):
|
|
|
2208
2211
|
table.add_column("Name", style="cyan", width=40, no_wrap=False)
|
|
2209
2212
|
table.add_column("Model Name", style="magenta", width=30, overflow="fold")
|
|
2210
2213
|
table.add_column("Base URL", style="white", width=50, overflow="fold")
|
|
2214
|
+
table.add_column("Input Price (M)", style="magenta", width=15)
|
|
2215
|
+
table.add_column("Output Price (M)", style="magenta", width=15)
|
|
2216
|
+
table.add_column("Speed (s/req)", style="blue", width=15)
|
|
2211
2217
|
for m in models_data:
|
|
2212
2218
|
# Check if api_key_path exists and file exists
|
|
2213
2219
|
is_api_key_set = "api_key" in m
|
|
@@ -2221,19 +2227,67 @@ def manage_models(params, query: str):
|
|
|
2221
2227
|
table.add_row(
|
|
2222
2228
|
name,
|
|
2223
2229
|
m.get("model_name", ""),
|
|
2224
|
-
m.get("base_url", "")
|
|
2230
|
+
m.get("base_url", ""),
|
|
2231
|
+
f"{m.get('input_price', 0.0):.2f}",
|
|
2232
|
+
f"{m.get('output_price', 0.0):.2f}",
|
|
2233
|
+
f"{m.get('average_speed', 0.0):.3f}"
|
|
2225
2234
|
)
|
|
2226
2235
|
console.print(table)
|
|
2227
2236
|
else:
|
|
2228
2237
|
printer.print_in_terminal("models_no_models", style="yellow")
|
|
2229
2238
|
|
|
2239
|
+
elif subcmd == "/input_price":
|
|
2240
|
+
args = query.strip().split()
|
|
2241
|
+
if len(args) >= 2:
|
|
2242
|
+
name = args[0]
|
|
2243
|
+
try:
|
|
2244
|
+
price = float(args[1])
|
|
2245
|
+
if models_module.update_model_input_price(name, price):
|
|
2246
|
+
printer.print_in_terminal("models_input_price_updated", style="green", name=name, price=price)
|
|
2247
|
+
else:
|
|
2248
|
+
printer.print_in_terminal("models_not_found", style="red", name=name)
|
|
2249
|
+
except ValueError as e:
|
|
2250
|
+
printer.print_in_terminal("models_invalid_price", style="red", error=str(e))
|
|
2251
|
+
else:
|
|
2252
|
+
printer.print_in_terminal("models_input_price_usage", style="red")
|
|
2253
|
+
|
|
2254
|
+
elif subcmd == "/output_price":
|
|
2255
|
+
args = query.strip().split()
|
|
2256
|
+
if len(args) >= 2:
|
|
2257
|
+
name = args[0]
|
|
2258
|
+
try:
|
|
2259
|
+
price = float(args[1])
|
|
2260
|
+
if models_module.update_model_output_price(name, price):
|
|
2261
|
+
printer.print_in_terminal("models_output_price_updated", style="green", name=name, price=price)
|
|
2262
|
+
else:
|
|
2263
|
+
printer.print_in_terminal("models_not_found", style="red", name=name)
|
|
2264
|
+
except ValueError as e:
|
|
2265
|
+
printer.print_in_terminal("models_invalid_price", style="red", error=str(e))
|
|
2266
|
+
else:
|
|
2267
|
+
printer.print_in_terminal("models_output_price_usage", style="red")
|
|
2268
|
+
|
|
2269
|
+
elif subcmd == "/speed":
|
|
2270
|
+
args = query.strip().split()
|
|
2271
|
+
if len(args) >= 2:
|
|
2272
|
+
name = args[0]
|
|
2273
|
+
try:
|
|
2274
|
+
speed = float(args[1])
|
|
2275
|
+
if models_module.update_model_speed(name, speed):
|
|
2276
|
+
printer.print_in_terminal("models_speed_updated", style="green", name=name, speed=speed)
|
|
2277
|
+
else:
|
|
2278
|
+
printer.print_in_terminal("models_not_found", style="red", name=name)
|
|
2279
|
+
except ValueError as e:
|
|
2280
|
+
printer.print_in_terminal("models_invalid_speed", style="red", error=str(e))
|
|
2281
|
+
else:
|
|
2282
|
+
printer.print_in_terminal("models_speed_usage", style="red")
|
|
2283
|
+
|
|
2230
2284
|
elif subcmd == "/add":
|
|
2231
2285
|
# Support both simplified and legacy formats
|
|
2232
2286
|
args = query.strip().split(" ")
|
|
2233
2287
|
if len(args) == 2:
|
|
2234
2288
|
# Simplified: /models /add <name> <api_key>
|
|
2235
2289
|
name, api_key = args[0], args[1]
|
|
2236
|
-
result =
|
|
2290
|
+
result = models_module.update_model_with_api_key(name, api_key)
|
|
2237
2291
|
if result:
|
|
2238
2292
|
printer.print_in_terminal("models_added", style="green", name=name)
|
|
2239
2293
|
else:
|
|
@@ -2275,7 +2329,7 @@ def manage_models(params, query: str):
|
|
|
2275
2329
|
}
|
|
2276
2330
|
|
|
2277
2331
|
models_data.append(final_model)
|
|
2278
|
-
|
|
2332
|
+
models_module.save_models(models_data)
|
|
2279
2333
|
printer.print_in_terminal("models_add_model_success", style="green", name=data_dict["name"])
|
|
2280
2334
|
|
|
2281
2335
|
elif subcmd == "/remove":
|
|
@@ -2288,7 +2342,7 @@ def manage_models(params, query: str):
|
|
|
2288
2342
|
if len(filtered_models) == len(models_data):
|
|
2289
2343
|
printer.print_in_terminal("models_add_model_remove", style="yellow", name=name)
|
|
2290
2344
|
return
|
|
2291
|
-
|
|
2345
|
+
models_module.save_models(filtered_models)
|
|
2292
2346
|
printer.print_in_terminal("models_add_model_removed", style="green", name=name)
|
|
2293
2347
|
|
|
2294
2348
|
else:
|