jarvis-ai-assistant 0.1.224__tar.gz → 0.2.0__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.
- {jarvis_ai_assistant-0.1.224/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.2.0}/PKG-INFO +49 -12
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/README.md +47 -10
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/pyproject.toml +6 -2
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/setup.py +2 -2
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/__init__.py +33 -11
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/jarvis.py +87 -32
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/main.py +13 -2
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_agent/code_agent.py +17 -4
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/loader.py +20 -6
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/code_review.py +14 -3
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_data/config_schema.json +41 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_git_utils/git_commiter.py +9 -2
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_mcp/sse_mcp_client.py +9 -7
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +2 -2
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/base.py +28 -13
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform_manager/main.py +18 -6
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/llm_interface.py +1 -3
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_smart_shell/main.py +18 -12
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/ask_user.py +1 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/generate_new_tool.py +1 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/registry.py +17 -9
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/search_web.py +19 -9
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -1
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/config.py +80 -21
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/git_utils.py +2 -2
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/globals.py +17 -11
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/methodology.py +37 -23
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/output.py +2 -2
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/utils.py +138 -3
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0/src/jarvis_ai_assistant.egg-info}/PKG-INFO +49 -12
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis_ai_assistant.egg-info/requires.txt +1 -1
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/edit_file_handler.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/prompt_builder.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/prompts.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/protocols.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/session_manager.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/tool_executor.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_agent/lint.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_git_details/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_git_details/main.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_git_squash/main.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_mcp/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_mcp/streamable_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_methodology/main.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_multi_agent/main.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/ai8.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/human.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/kimi.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/openai.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/oyi.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/tongyi.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform/yuanbao.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_platform_manager/service.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/cache.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/cli.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/embedding_manager.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/query_rewriter.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/rag_pipeline.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/reranker.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_rag/retriever.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/cli/main.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/edit_file.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/execute_script.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/read_code.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/rewrite_file.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/embedding.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/http.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/input.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_utils/tag.py +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
{jarvis_ai_assistant-0.1.224/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.2.0}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jarvis-ai-assistant
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.2.0
|
4
4
|
Summary: Jarvis: An AI assistant that uses tools to interact with the system
|
5
5
|
Home-page: https://github.com/skyfireitdiy/Jarvis
|
6
6
|
Author: skyfire
|
@@ -57,8 +57,8 @@ Requires-Dist: pyte==0.8.2
|
|
57
57
|
Requires-Dist: httpx>=0.28.1
|
58
58
|
Requires-Dist: pyyaml>=5.3.1
|
59
59
|
Requires-Dist: ddgs==9.0.2
|
60
|
-
Requires-Dist: beautifulsoup4==4.13.4
|
61
60
|
Requires-Dist: lxml==6.0.0
|
61
|
+
Requires-Dist: markdownify>=1.1.0
|
62
62
|
Provides-Extra: dev
|
63
63
|
Requires-Dist: pytest; extra == "dev"
|
64
64
|
Requires-Dist: black; extra == "dev"
|
@@ -158,6 +158,7 @@ jarvis --llm_type thinking -t "初始任务"
|
|
158
158
|
| `-t/--task` | 直接从命令行输入任务内容 |
|
159
159
|
| `-f/--config` | 自定义配置文件的路径 |
|
160
160
|
| `--restore-session` | 从 .jarvis/saved_session.json 恢复会话 |
|
161
|
+
| `-e/--edit` | 编辑配置文件 |
|
161
162
|
|
162
163
|
#### 4. 工作流程
|
163
164
|
1. 初始化环境
|
@@ -507,9 +508,9 @@ ENV:
|
|
507
508
|
#### Kimi
|
508
509
|
```yaml
|
509
510
|
JARVIS_PLATFORM: kimi
|
510
|
-
JARVIS_MODEL:
|
511
|
+
JARVIS_MODEL: k1.5
|
511
512
|
JARVIS_THINKING_PLATFORM: kimi
|
512
|
-
JARVIS_THINKING_MODEL: k1
|
513
|
+
JARVIS_THINKING_MODEL: k1.5-thinking
|
513
514
|
ENV:
|
514
515
|
KIMI_API_KEY: <Kimi API KEY>
|
515
516
|
```
|
@@ -534,19 +535,55 @@ OPENAI_API_KEY: <OpenAI API Key>
|
|
534
535
|
OPENAI_API_BASE: https://api.openai.com/v1
|
535
536
|
```
|
536
537
|
|
537
|
-
### 2.
|
538
|
+
### 2. 模型组配置 (高级)
|
539
|
+
|
540
|
+
除了单独配置每个模型参数,您还可以定义和使用**模型组**来快速切换不同的模型组合。这对于需要在不同任务或平台间频繁切换的场景非常有用。
|
541
|
+
|
542
|
+
**配置示例** (`~/.jarvis/config.yaml`):
|
543
|
+
|
544
|
+
```yaml
|
545
|
+
# 定义模型组
|
546
|
+
JARVIS_MODEL_GROUPS:
|
547
|
+
- kimi:
|
548
|
+
JARVIS_PLATFORM: kimi
|
549
|
+
JARVIS_MODEL: k1.5
|
550
|
+
JARVIS_THINKING_PLATFORM: kimi
|
551
|
+
JARVIS_THINKING_MODEL: k1.5-thinking
|
552
|
+
JARVIS_MAX_TOKEN_COUNT: 8192
|
553
|
+
- ai8:
|
554
|
+
JARVIS_PLATFORM: ai8
|
555
|
+
JARVIS_MODEL: gemini-2.5-pro
|
556
|
+
# 如果不指定思考模型,将自动使用常规模型
|
557
|
+
# JARVIS_THINKING_PLATFORM: ai8
|
558
|
+
# JARVIS_THINKING_MODEL: gemini-2.5-pro
|
559
|
+
|
560
|
+
# 选择要使用的模型组
|
561
|
+
JARVIS_MODEL_GROUP: kimi
|
562
|
+
```
|
563
|
+
|
564
|
+
**配置优先级规则:**
|
565
|
+
|
566
|
+
Jarvis 会按照以下顺序解析模型配置,序号越小优先级越高:
|
567
|
+
|
568
|
+
1. **独立配置**: 直接设置的 `JARVIS_PLATFORM`, `JARVIS_MODEL`, `JARVIS_THINKING_PLATFORM`, `JARVIS_THINKING_MODEL` 环境变量。这些配置会**覆盖**任何模型组中的设置。
|
569
|
+
2. **模型组配置**: 通过 `JARVIS_MODEL_GROUP` 选中的模型组配置。
|
570
|
+
3. **默认值**: 如果以上均未配置,则使用代码中定义的默认模型(如 `yuanbao` 和 `deep_seek_v3`)。
|
571
|
+
|
572
|
+
### 3. 全部配置项说明
|
538
573
|
| 变量名称 | 默认值 | 说明 |
|
539
574
|
|----------|--------|------|
|
540
575
|
| `ENV` | {} | 环境变量配置 |
|
541
|
-
| `
|
542
|
-
| `
|
543
|
-
| `
|
544
|
-
| `
|
545
|
-
| `
|
546
|
-
| `
|
576
|
+
| `JARVIS_MODEL_GROUPS` | `[]` | 预定义的模型配置组列表 |
|
577
|
+
| `JARVIS_MODEL_GROUP` | `null` | 选择要激活的模型组名称 |
|
578
|
+
| `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 (可被模型组覆盖) |
|
579
|
+
| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 (可被模型组覆盖) |
|
580
|
+
| `JARVIS_PLATFORM` | yuanbao | 默认AI平台 (可被模型组覆盖) |
|
581
|
+
| `JARVIS_MODEL` | deep_seek_v3 | 默认模型 (可被模型组覆盖) |
|
582
|
+
| `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 (可被模型组覆盖) |
|
583
|
+
| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 (可被模型组覆盖) |
|
547
584
|
| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
|
548
585
|
| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | false | 应用补丁前是否需要确认 |
|
549
|
-
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 |
|
586
|
+
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 (可被模型组覆盖) |
|
550
587
|
| `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
|
551
588
|
| `JARVIS_GIT_COMMIT_PROMPT` | "" | 自定义git提交信息生成提示模板 |
|
552
589
|
| `JARVIS_PRINT_PROMPT` | false | 是否打印提示 |
|
@@ -74,6 +74,7 @@ jarvis --llm_type thinking -t "初始任务"
|
|
74
74
|
| `-t/--task` | 直接从命令行输入任务内容 |
|
75
75
|
| `-f/--config` | 自定义配置文件的路径 |
|
76
76
|
| `--restore-session` | 从 .jarvis/saved_session.json 恢复会话 |
|
77
|
+
| `-e/--edit` | 编辑配置文件 |
|
77
78
|
|
78
79
|
#### 4. 工作流程
|
79
80
|
1. 初始化环境
|
@@ -423,9 +424,9 @@ ENV:
|
|
423
424
|
#### Kimi
|
424
425
|
```yaml
|
425
426
|
JARVIS_PLATFORM: kimi
|
426
|
-
JARVIS_MODEL:
|
427
|
+
JARVIS_MODEL: k1.5
|
427
428
|
JARVIS_THINKING_PLATFORM: kimi
|
428
|
-
JARVIS_THINKING_MODEL: k1
|
429
|
+
JARVIS_THINKING_MODEL: k1.5-thinking
|
429
430
|
ENV:
|
430
431
|
KIMI_API_KEY: <Kimi API KEY>
|
431
432
|
```
|
@@ -450,19 +451,55 @@ OPENAI_API_KEY: <OpenAI API Key>
|
|
450
451
|
OPENAI_API_BASE: https://api.openai.com/v1
|
451
452
|
```
|
452
453
|
|
453
|
-
### 2.
|
454
|
+
### 2. 模型组配置 (高级)
|
455
|
+
|
456
|
+
除了单独配置每个模型参数,您还可以定义和使用**模型组**来快速切换不同的模型组合。这对于需要在不同任务或平台间频繁切换的场景非常有用。
|
457
|
+
|
458
|
+
**配置示例** (`~/.jarvis/config.yaml`):
|
459
|
+
|
460
|
+
```yaml
|
461
|
+
# 定义模型组
|
462
|
+
JARVIS_MODEL_GROUPS:
|
463
|
+
- kimi:
|
464
|
+
JARVIS_PLATFORM: kimi
|
465
|
+
JARVIS_MODEL: k1.5
|
466
|
+
JARVIS_THINKING_PLATFORM: kimi
|
467
|
+
JARVIS_THINKING_MODEL: k1.5-thinking
|
468
|
+
JARVIS_MAX_TOKEN_COUNT: 8192
|
469
|
+
- ai8:
|
470
|
+
JARVIS_PLATFORM: ai8
|
471
|
+
JARVIS_MODEL: gemini-2.5-pro
|
472
|
+
# 如果不指定思考模型,将自动使用常规模型
|
473
|
+
# JARVIS_THINKING_PLATFORM: ai8
|
474
|
+
# JARVIS_THINKING_MODEL: gemini-2.5-pro
|
475
|
+
|
476
|
+
# 选择要使用的模型组
|
477
|
+
JARVIS_MODEL_GROUP: kimi
|
478
|
+
```
|
479
|
+
|
480
|
+
**配置优先级规则:**
|
481
|
+
|
482
|
+
Jarvis 会按照以下顺序解析模型配置,序号越小优先级越高:
|
483
|
+
|
484
|
+
1. **独立配置**: 直接设置的 `JARVIS_PLATFORM`, `JARVIS_MODEL`, `JARVIS_THINKING_PLATFORM`, `JARVIS_THINKING_MODEL` 环境变量。这些配置会**覆盖**任何模型组中的设置。
|
485
|
+
2. **模型组配置**: 通过 `JARVIS_MODEL_GROUP` 选中的模型组配置。
|
486
|
+
3. **默认值**: 如果以上均未配置,则使用代码中定义的默认模型(如 `yuanbao` 和 `deep_seek_v3`)。
|
487
|
+
|
488
|
+
### 3. 全部配置项说明
|
454
489
|
| 变量名称 | 默认值 | 说明 |
|
455
490
|
|----------|--------|------|
|
456
491
|
| `ENV` | {} | 环境变量配置 |
|
457
|
-
| `
|
458
|
-
| `
|
459
|
-
| `
|
460
|
-
| `
|
461
|
-
| `
|
462
|
-
| `
|
492
|
+
| `JARVIS_MODEL_GROUPS` | `[]` | 预定义的模型配置组列表 |
|
493
|
+
| `JARVIS_MODEL_GROUP` | `null` | 选择要激活的模型组名称 |
|
494
|
+
| `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 (可被模型组覆盖) |
|
495
|
+
| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 (可被模型组覆盖) |
|
496
|
+
| `JARVIS_PLATFORM` | yuanbao | 默认AI平台 (可被模型组覆盖) |
|
497
|
+
| `JARVIS_MODEL` | deep_seek_v3 | 默认模型 (可被模型组覆盖) |
|
498
|
+
| `JARVIS_THINKING_PLATFORM` | JARVIS_PLATFORM | 推理任务使用的平台 (可被模型组覆盖) |
|
499
|
+
| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 (可被模型组覆盖) |
|
463
500
|
| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
|
464
501
|
| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | false | 应用补丁前是否需要确认 |
|
465
|
-
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 |
|
502
|
+
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 160000 | 最大大内容大小 (可被模型组覆盖) |
|
466
503
|
| `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
|
467
504
|
| `JARVIS_GIT_COMMIT_PROMPT` | "" | 自定义git提交信息生成提示模板 |
|
468
505
|
| `JARVIS_PRINT_PROMPT` | false | 是否打印提示 |
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "jarvis-ai-assistant"
|
7
|
-
version = "0.
|
7
|
+
version = "0.2.0"
|
8
8
|
description = "Jarvis: An AI assistant that uses tools to interact with the system"
|
9
9
|
readme = "README.md"
|
10
10
|
authors = [{ name = "skyfire", email = "skyfireitdiy@hotmail.com" }]
|
@@ -39,8 +39,8 @@ dependencies = [
|
|
39
39
|
"httpx>=0.28.1",
|
40
40
|
"pyyaml>=5.3.1",
|
41
41
|
"ddgs==9.0.2",
|
42
|
-
"beautifulsoup4==4.13.4",
|
43
42
|
"lxml==6.0.0",
|
43
|
+
"markdownify>=1.1.0",
|
44
44
|
]
|
45
45
|
requires-python = ">=3.9"
|
46
46
|
|
@@ -89,3 +89,7 @@ jarvis-methodology = "jarvis.jarvis_methodology.main:main"
|
|
89
89
|
jm = "jarvis.jarvis_methodology.main:main"
|
90
90
|
jarvis-rag = "jarvis.jarvis_rag.cli:main"
|
91
91
|
jrg = "jarvis.jarvis_rag.cli:main"
|
92
|
+
|
93
|
+
[[tool.uv.index]]
|
94
|
+
url = "https://artsz.zte.com.cn/artifactory/api/pypi/public-pypi-virtual/simple"
|
95
|
+
default = true
|
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages # type: ignore
|
|
3
3
|
|
4
4
|
setup(
|
5
5
|
name="jarvis-ai-assistant",
|
6
|
-
version="0.
|
6
|
+
version="0.2.0",
|
7
7
|
author="skyfire",
|
8
8
|
author_email="skyfireitdiy@hotmail.com",
|
9
9
|
description="An AI assistant that uses various tools to interact with the system",
|
@@ -34,8 +34,8 @@ setup(
|
|
34
34
|
"httpx>=0.28.1",
|
35
35
|
"pyyaml>=5.3.1",
|
36
36
|
"ddgs==9.0.2",
|
37
|
-
"beautifulsoup4==4.13.4",
|
38
37
|
"lxml==6.0.0",
|
38
|
+
"markdownify>=1.1.0",
|
39
39
|
],
|
40
40
|
extras_require={
|
41
41
|
"dev": ["pytest", "black", "isort", "mypy", "build", "twine"],
|
{jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_agent/__init__.py
RENAMED
@@ -102,6 +102,7 @@ class Agent:
|
|
102
102
|
name: str = "Jarvis",
|
103
103
|
description: str = "",
|
104
104
|
llm_type: str = "normal",
|
105
|
+
model_group: Optional[str] = None,
|
105
106
|
summary_prompt: Optional[str] = None,
|
106
107
|
auto_complete: bool = False,
|
107
108
|
output_handler: List[OutputHandlerProtocol] = [],
|
@@ -137,11 +138,11 @@ class Agent:
|
|
137
138
|
self.description = description
|
138
139
|
# 初始化平台和模型
|
139
140
|
if llm_type == "thinking":
|
140
|
-
platform_name = get_thinking_platform_name()
|
141
|
-
model_name = get_thinking_model_name()
|
141
|
+
platform_name = get_thinking_platform_name(model_group)
|
142
|
+
model_name = get_thinking_model_name(model_group)
|
142
143
|
else: # 默认为 normal
|
143
|
-
platform_name = get_normal_platform_name()
|
144
|
-
model_name = get_normal_model_name()
|
144
|
+
platform_name = get_normal_platform_name(model_group)
|
145
|
+
model_name = get_normal_model_name(model_group)
|
145
146
|
|
146
147
|
self.model = PlatformRegistry().create_platform(platform_name)
|
147
148
|
if self.model is None:
|
@@ -153,6 +154,8 @@ class Agent:
|
|
153
154
|
if model_name:
|
154
155
|
self.model.set_model_name(model_name)
|
155
156
|
|
157
|
+
self.model.set_model_group(model_group)
|
158
|
+
|
156
159
|
self.user_data: Dict[str, Any] = {}
|
157
160
|
|
158
161
|
self.model.set_suppress_output(False)
|
@@ -197,7 +200,7 @@ class Agent:
|
|
197
200
|
summary_prompt if summary_prompt else DEFAULT_SUMMARY_PROMPT
|
198
201
|
)
|
199
202
|
|
200
|
-
self.max_token_count = get_max_token_count()
|
203
|
+
self.max_token_count = get_max_token_count(model_group)
|
201
204
|
self.auto_complete = auto_complete
|
202
205
|
welcome_message = f"{name} 初始化完成 - 使用 {self.model.name()} 模型"
|
203
206
|
|
@@ -213,6 +216,7 @@ class Agent:
|
|
213
216
|
"""
|
214
217
|
)
|
215
218
|
self.first = True
|
219
|
+
self.run_input_handlers_next_turn = False
|
216
220
|
|
217
221
|
def set_user_data(self, key: str, value: Any):
|
218
222
|
"""Sets user data in the session."""
|
@@ -236,6 +240,10 @@ class Agent:
|
|
236
240
|
"""Sets the addon prompt in the session."""
|
237
241
|
self.session.set_addon_prompt(addon_prompt)
|
238
242
|
|
243
|
+
def set_run_input_handlers_next_turn(self, value: bool):
|
244
|
+
"""Sets the flag to run input handlers on the next turn."""
|
245
|
+
self.run_input_handlers_next_turn = value
|
246
|
+
|
239
247
|
def set_after_tool_call_cb(self, cb: Callable[[Any], None]): # type: ignore
|
240
248
|
"""设置工具调用后回调函数。
|
241
249
|
|
@@ -264,7 +272,9 @@ class Agent:
|
|
264
272
|
return handler
|
265
273
|
return None
|
266
274
|
|
267
|
-
def _call_model(
|
275
|
+
def _call_model(
|
276
|
+
self, message: str, need_complete: bool = False, run_input_handlers: bool = True
|
277
|
+
) -> str:
|
268
278
|
"""调用AI模型并实现重试逻辑
|
269
279
|
|
270
280
|
参数:
|
@@ -280,10 +290,11 @@ class Agent:
|
|
280
290
|
3. 会自动添加附加提示
|
281
291
|
4. 会检查并处理上下文长度限制
|
282
292
|
"""
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
293
|
+
if run_input_handlers:
|
294
|
+
for handler in self.input_handler:
|
295
|
+
message, need_return = handler(message, self)
|
296
|
+
if need_return:
|
297
|
+
return message
|
287
298
|
|
288
299
|
if self.session.addon_prompt:
|
289
300
|
message += f"\n\n{self.session.addon_prompt}"
|
@@ -478,12 +489,20 @@ class Agent:
|
|
478
489
|
try:
|
479
490
|
set_agent(self.name, self)
|
480
491
|
|
492
|
+
run_input_handlers = True
|
481
493
|
while True:
|
494
|
+
if self.run_input_handlers_next_turn:
|
495
|
+
run_input_handlers = True
|
496
|
+
self.run_input_handlers_next_turn = False
|
497
|
+
|
482
498
|
if self.first:
|
483
499
|
self._first_run()
|
484
500
|
try:
|
485
|
-
current_response = self._call_model(
|
501
|
+
current_response = self._call_model(
|
502
|
+
self.session.prompt, True, run_input_handlers
|
503
|
+
)
|
486
504
|
self.session.prompt = ""
|
505
|
+
run_input_handlers = False
|
487
506
|
|
488
507
|
if get_interrupt():
|
489
508
|
set_interrupt(False)
|
@@ -491,6 +510,7 @@ class Agent:
|
|
491
510
|
f"模型交互期间被中断,请输入用户干预信息:"
|
492
511
|
)
|
493
512
|
if user_input:
|
513
|
+
run_input_handlers = True
|
494
514
|
# 如果有工具调用且用户确认继续,则将干预信息和工具执行结果拼接为prompt
|
495
515
|
if any(
|
496
516
|
handler.can_handle(current_response)
|
@@ -502,6 +522,7 @@ class Agent:
|
|
502
522
|
self.session.prompt = (
|
503
523
|
f"{user_input}\n\n{current_response}"
|
504
524
|
)
|
525
|
+
run_input_handlers = False
|
505
526
|
continue
|
506
527
|
self.session.prompt += f"{user_input}"
|
507
528
|
continue
|
@@ -529,6 +550,7 @@ class Agent:
|
|
529
550
|
|
530
551
|
if user_input:
|
531
552
|
self.session.prompt = user_input
|
553
|
+
run_input_handlers = True
|
532
554
|
continue
|
533
555
|
|
534
556
|
if not user_input:
|
@@ -1,8 +1,11 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
import argparse
|
3
3
|
import os
|
4
|
+
import shutil
|
5
|
+
import subprocess
|
4
6
|
import sys
|
5
|
-
from
|
7
|
+
from pathlib import Path
|
8
|
+
from typing import Dict, Optional
|
6
9
|
|
7
10
|
import yaml # type: ignore
|
8
11
|
from prompt_toolkit import prompt # type: ignore
|
@@ -106,8 +109,8 @@ def _select_task(tasks: Dict[str, str]) -> str:
|
|
106
109
|
PrettyOutput.print(f"选择任务失败: {str(val_err)}", OutputType.ERROR)
|
107
110
|
|
108
111
|
|
109
|
-
def
|
110
|
-
|
112
|
+
def _parse_args() -> argparse.Namespace:
|
113
|
+
"""Parse command line arguments."""
|
111
114
|
parser = argparse.ArgumentParser(description="Jarvis AI assistant")
|
112
115
|
parser.add_argument(
|
113
116
|
"--llm_type",
|
@@ -122,6 +125,11 @@ def main() -> None:
|
|
122
125
|
type=str,
|
123
126
|
help="Directly input task content from command line",
|
124
127
|
)
|
128
|
+
parser.add_argument(
|
129
|
+
"--model_group",
|
130
|
+
type=str,
|
131
|
+
help="Model group to use, overriding config",
|
132
|
+
)
|
125
133
|
parser.add_argument("-f", "--config", type=str, help="Path to custom config file")
|
126
134
|
parser.add_argument(
|
127
135
|
"--restore-session",
|
@@ -129,44 +137,91 @@ def main() -> None:
|
|
129
137
|
help="Restore session from .jarvis/saved_session.json",
|
130
138
|
default=False,
|
131
139
|
)
|
132
|
-
|
133
|
-
|
134
|
-
"欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!", config_file=args.config
|
140
|
+
parser.add_argument(
|
141
|
+
"-e", "--edit", action="store_true", help="Edit the configuration file"
|
135
142
|
)
|
143
|
+
return parser.parse_args()
|
136
144
|
|
137
|
-
try:
|
138
|
-
agent = Agent(
|
139
|
-
system_prompt=origin_agent_system_prompt,
|
140
|
-
llm_type=args.llm_type,
|
141
|
-
input_handler=[shell_input_handler, builtin_input_handler],
|
142
|
-
output_handler=[ToolRegistry()],
|
143
|
-
need_summary=False,
|
144
|
-
)
|
145
145
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
146
|
+
def _handle_edit_mode(args: argparse.Namespace) -> None:
|
147
|
+
"""If edit flag is set, open config file in editor and exit."""
|
148
|
+
if not args.edit:
|
149
|
+
return
|
150
|
+
|
151
|
+
config_file_path = (
|
152
|
+
Path(args.config)
|
153
|
+
if args.config
|
154
|
+
else Path(os.path.expanduser("~/.jarvis/config.yaml"))
|
155
|
+
)
|
156
|
+
editors = ["nvim", "vim", "vi"]
|
157
|
+
editor = next((e for e in editors if shutil.which(e)), None)
|
152
158
|
|
153
|
-
|
154
|
-
|
155
|
-
|
159
|
+
if editor:
|
160
|
+
try:
|
161
|
+
subprocess.run([editor, str(config_file_path)], check=True)
|
156
162
|
sys.exit(0)
|
163
|
+
except (subprocess.CalledProcessError, FileNotFoundError) as e:
|
164
|
+
PrettyOutput.print(f"Failed to open editor: {e}", OutputType.ERROR)
|
165
|
+
sys.exit(1)
|
166
|
+
else:
|
167
|
+
PrettyOutput.print(
|
168
|
+
"No suitable editor found (nvim, vim, vi).", OutputType.ERROR
|
169
|
+
)
|
170
|
+
sys.exit(1)
|
157
171
|
|
158
|
-
if agent.first:
|
159
|
-
tasks = _load_tasks()
|
160
|
-
if tasks and (selected_task := _select_task(tasks)):
|
161
|
-
PrettyOutput.print(f"开始执行任务: \n{selected_task}", OutputType.INFO)
|
162
|
-
agent.run(selected_task)
|
163
|
-
sys.exit(0)
|
164
172
|
|
165
|
-
|
166
|
-
|
167
|
-
|
173
|
+
def _initialize_agent(args: argparse.Namespace) -> Agent:
|
174
|
+
"""Initialize the agent and restore session if requested."""
|
175
|
+
agent = Agent(
|
176
|
+
system_prompt=origin_agent_system_prompt,
|
177
|
+
llm_type=args.llm_type,
|
178
|
+
model_group=args.model_group,
|
179
|
+
input_handler=[shell_input_handler, builtin_input_handler],
|
180
|
+
output_handler=[ToolRegistry()], # type: ignore
|
181
|
+
need_summary=False,
|
182
|
+
)
|
183
|
+
|
184
|
+
# 尝试恢复会话
|
185
|
+
if args.restore_session:
|
186
|
+
if agent.restore_session():
|
187
|
+
PrettyOutput.print("会话已成功恢复。", OutputType.SUCCESS)
|
188
|
+
else:
|
189
|
+
PrettyOutput.print("无法恢复会话。", OutputType.WARNING)
|
190
|
+
return agent
|
191
|
+
|
192
|
+
|
193
|
+
def _get_and_run_task(agent: Agent, task_content: Optional[str] = None) -> None:
|
194
|
+
"""Get task from various sources and run it."""
|
195
|
+
# 优先处理命令行直接传入的任务
|
196
|
+
if task_content:
|
197
|
+
agent.run(task_content)
|
168
198
|
sys.exit(0)
|
169
199
|
|
200
|
+
if agent.first:
|
201
|
+
tasks = _load_tasks()
|
202
|
+
if tasks and (selected_task := _select_task(tasks)):
|
203
|
+
PrettyOutput.print(f"开始执行任务: \n{selected_task}", OutputType.INFO)
|
204
|
+
agent.run(selected_task)
|
205
|
+
sys.exit(0)
|
206
|
+
|
207
|
+
user_input = get_multiline_input("请输入你的任务(输入空行退出):")
|
208
|
+
if user_input:
|
209
|
+
agent.run(user_input)
|
210
|
+
sys.exit(0)
|
211
|
+
|
212
|
+
|
213
|
+
def main() -> None:
|
214
|
+
"""Main function for Jarvis AI assistant."""
|
215
|
+
args = _parse_args()
|
216
|
+
_handle_edit_mode(args)
|
217
|
+
|
218
|
+
init_env(
|
219
|
+
"欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!", config_file=args.config
|
220
|
+
)
|
221
|
+
|
222
|
+
try:
|
223
|
+
agent = _initialize_agent(args)
|
224
|
+
_get_and_run_task(agent, args.task)
|
170
225
|
except Exception as err: # pylint: disable=broad-except
|
171
226
|
PrettyOutput.print(f"初始化错误: {str(err)}", OutputType.ERROR)
|
172
227
|
sys.exit(1)
|
@@ -20,7 +20,9 @@ def load_config(config_path: str) -> dict:
|
|
20
20
|
dict: 配置字典
|
21
21
|
"""
|
22
22
|
if not os.path.exists(config_path):
|
23
|
-
PrettyOutput.print(
|
23
|
+
PrettyOutput.print(
|
24
|
+
f"配置文件 {config_path} 不存在,使用默认配置", OutputType.WARNING
|
25
|
+
)
|
24
26
|
return {}
|
25
27
|
|
26
28
|
with open(config_path, "r", encoding="utf-8", errors="ignore") as f:
|
@@ -50,10 +52,17 @@ def main():
|
|
50
52
|
choices=["normal", "thinking"],
|
51
53
|
help="LLM type to use, overriding config",
|
52
54
|
)
|
55
|
+
parser.add_argument(
|
56
|
+
"--model_group",
|
57
|
+
type=str,
|
58
|
+
help="Model group to use, overriding config",
|
59
|
+
)
|
53
60
|
args = parser.parse_args()
|
54
61
|
|
55
62
|
# Initialize environment
|
56
|
-
init_env(
|
63
|
+
init_env(
|
64
|
+
"欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!", config_file=args.config
|
65
|
+
)
|
57
66
|
|
58
67
|
# Load configuration
|
59
68
|
config = load_config(args.agent_definition) if args.agent_definition else {}
|
@@ -61,6 +70,8 @@ def main():
|
|
61
70
|
# Override config with command-line arguments if provided
|
62
71
|
if args.llm_type:
|
63
72
|
config["llm_type"] = args.llm_type
|
73
|
+
if args.model_group:
|
74
|
+
config["model_group"] = args.model_group
|
64
75
|
|
65
76
|
# Create and run agent
|
66
77
|
try:
|
{jarvis_ai_assistant-0.1.224 → jarvis_ai_assistant-0.2.0}/src/jarvis/jarvis_code_agent/code_agent.py
RENAMED
@@ -18,7 +18,10 @@ from jarvis.jarvis_code_agent.lint import get_lint_tools
|
|
18
18
|
from jarvis.jarvis_git_utils.git_commiter import GitCommitTool
|
19
19
|
from jarvis.jarvis_platform.registry import PlatformRegistry
|
20
20
|
from jarvis.jarvis_tools.registry import ToolRegistry
|
21
|
-
from jarvis.jarvis_utils.config import
|
21
|
+
from jarvis.jarvis_utils.config import (
|
22
|
+
is_confirm_before_apply_patch,
|
23
|
+
is_enable_static_analysis,
|
24
|
+
)
|
22
25
|
from jarvis.jarvis_utils.git_utils import (
|
23
26
|
confirm_add_new_files,
|
24
27
|
find_git_root_and_cd,
|
@@ -44,6 +47,7 @@ class CodeAgent:
|
|
44
47
|
def __init__(
|
45
48
|
self,
|
46
49
|
llm_type: str = "normal",
|
50
|
+
model_group: Optional[str] = None,
|
47
51
|
need_summary: bool = True,
|
48
52
|
):
|
49
53
|
self.root_dir = os.getcwd()
|
@@ -54,7 +58,6 @@ class CodeAgent:
|
|
54
58
|
"search_web",
|
55
59
|
"ask_user",
|
56
60
|
"read_code",
|
57
|
-
"methodology",
|
58
61
|
"rewrite_file",
|
59
62
|
]
|
60
63
|
)
|
@@ -116,8 +119,9 @@ class CodeAgent:
|
|
116
119
|
system_prompt=code_system_prompt,
|
117
120
|
name="CodeAgent",
|
118
121
|
auto_complete=False,
|
119
|
-
output_handler=[tool_registry, EditFileHandler()],
|
122
|
+
output_handler=[tool_registry, EditFileHandler()], # type: ignore
|
120
123
|
llm_type=llm_type,
|
124
|
+
model_group=model_group,
|
121
125
|
input_handler=[shell_input_handler, builtin_input_handler],
|
122
126
|
need_summary=need_summary,
|
123
127
|
use_methodology=False, # 禁用方法论
|
@@ -409,6 +413,11 @@ def main() -> None:
|
|
409
413
|
choices=["normal", "thinking"],
|
410
414
|
help="LLM type to use",
|
411
415
|
)
|
416
|
+
parser.add_argument(
|
417
|
+
"--model_group",
|
418
|
+
type=str,
|
419
|
+
help="Model group to use, overriding config",
|
420
|
+
)
|
412
421
|
parser.add_argument(
|
413
422
|
"-r", "--requirement", type=str, help="Requirement to process", default=None
|
414
423
|
)
|
@@ -425,7 +434,11 @@ def main() -> None:
|
|
425
434
|
PrettyOutput.print(f"当前目录: {git_dir}", OutputType.INFO)
|
426
435
|
|
427
436
|
try:
|
428
|
-
agent = CodeAgent(
|
437
|
+
agent = CodeAgent(
|
438
|
+
llm_type=args.llm_type,
|
439
|
+
model_group=args.model_group,
|
440
|
+
need_summary=False,
|
441
|
+
)
|
429
442
|
|
430
443
|
# 尝试恢复会话
|
431
444
|
if args.restore_session:
|
@@ -5,12 +5,26 @@ Utility module for loading language-specific code review checklists.
|
|
5
5
|
from typing import Dict, Optional
|
6
6
|
|
7
7
|
# Import checklist modules
|
8
|
-
from jarvis.jarvis_code_analysis.checklists import (
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
from jarvis.jarvis_code_analysis.checklists import (
|
9
|
+
c_cpp,
|
10
|
+
csharp,
|
11
|
+
data_format,
|
12
|
+
devops,
|
13
|
+
docs,
|
14
|
+
go,
|
15
|
+
infrastructure,
|
16
|
+
java,
|
17
|
+
javascript,
|
18
|
+
kotlin,
|
19
|
+
php,
|
20
|
+
python,
|
21
|
+
ruby,
|
22
|
+
rust,
|
23
|
+
shell,
|
24
|
+
sql,
|
25
|
+
swift,
|
26
|
+
web,
|
27
|
+
)
|
14
28
|
|
15
29
|
# Map of language identifiers to their checklist content
|
16
30
|
CHECKLIST_MAP = {
|