jarvis-ai-assistant 0.1.175__tar.gz → 0.1.177__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 jarvis-ai-assistant might be problematic. Click here for more details.
- {jarvis_ai_assistant-0.1.175/src/jarvis_ai_assistant.egg-info → jarvis_ai_assistant-0.1.177}/PKG-INFO +5 -4
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/README.md +4 -3
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/pyproject.toml +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/setup.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/__init__.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_agent/__init__.py +22 -35
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_agent/jarvis.py +14 -12
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_agent/main.py +6 -6
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_agent/code_agent.py +10 -8
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/code_review.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_dev/main.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_git_details/main.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_git_squash/main.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_git_utils/git_commiter.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_multi_agent/main.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/base.py +53 -32
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/human.py +4 -3
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/kimi.py +22 -170
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/openai.py +8 -30
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/yuanbao.py +35 -83
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform_manager/main.py +1 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_smart_shell/main.py +4 -2
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/ask_codebase.py +8 -2
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/cli/main.py +28 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/edit_file.py +163 -103
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/read_code.py +0 -2
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/registry.py +30 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/config.py +12 -3
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/embedding.py +1 -10
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/output.py +78 -41
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/utils.py +19 -1
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177/src/jarvis_ai_assistant.egg-info}/PKG-INFO +5 -4
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis_ai_assistant.egg-info/SOURCES.txt +0 -1
- jarvis_ai_assistant-0.1.175/src/jarvis/jarvis_agent/file_input_handler.py +0 -108
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/MANIFEST.in +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/setup.cfg +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_agent/builtin_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_agent/output_handler.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_agent/shell_input_handler.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/c_cpp.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/csharp.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/data_format.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/devops.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/docs.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/go.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/infrastructure.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/java.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/javascript.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/kotlin.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/loader.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/php.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/python.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/ruby.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/rust.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/shell.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/sql.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/swift.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_code_analysis/checklists/web.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_data/huggingface.tar.gz +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_git_details/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_git_squash/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_lsp/base.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_lsp/cpp.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_lsp/go.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_lsp/python.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_lsp/registry.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_lsp/rust.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_mcp/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_mcp/sse_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_mcp/stdio_mcp_client.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_methodology/main.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_multi_agent/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/registry.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform_manager/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_smart_shell/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/ask_user.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/base.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/chdir.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/cli/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/code_plan.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/create_code_agent.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/create_sub_agent.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/execute_script.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/file_analyzer.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/file_operation.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/find_methodology.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/generate_new_tool.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/lsp_get_diagnostics.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/read_webpage.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/rewrite_file.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/search_web.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_tools/virtual_tty.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/__init__.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/builtin_replace_map.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/file_processors.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/git_utils.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/globals.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/input.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/methodology.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_utils/tag.py +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis_ai_assistant.egg-info/dependency_links.txt +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis_ai_assistant.egg-info/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis_ai_assistant.egg-info/requires.txt +0 -0
- {jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis_ai_assistant.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jarvis-ai-assistant
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.177
|
|
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
|
|
@@ -201,7 +201,7 @@ OPENAI_API_BASE=https://api.openai.com/v1 # 可选,默认为官方API地址
|
|
|
201
201
|
### 环境变量配置
|
|
202
202
|
| 变量名称 | 默认值 | 说明 |
|
|
203
203
|
|----------|--------|------|
|
|
204
|
-
| `JARVIS_MAX_TOKEN_COUNT` |
|
|
204
|
+
| `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 |
|
|
205
205
|
| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
|
|
206
206
|
| `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能(任务判定完成的时候会自动终止) |
|
|
207
207
|
| `JARVIS_SHELL_NAME` | bash | 系统shell名称 |
|
|
@@ -211,9 +211,10 @@ OPENAI_API_BASE=https://api.openai.com/v1 # 可选,默认为官方API地址
|
|
|
211
211
|
| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
|
|
212
212
|
| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
|
|
213
213
|
| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | true | 应用补丁前是否需要确认 |
|
|
214
|
-
| `JARVIS_MAX_TOOL_CALL_COUNT` | 20 |
|
|
214
|
+
| `JARVIS_MAX_TOOL_CALL_COUNT` | 20 | 最大连续工具调用次数,如果是0表示无限制 |
|
|
215
215
|
| `JARVIS_AUTO_UPDATE` | true | 是否自动更新Jarvis(仅在以git仓库方式安装时有效) |
|
|
216
|
-
| `JARVIS_MAX_BIG_CONTENT_SIZE` |
|
|
216
|
+
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 1024000 | 最大大内容大小 |
|
|
217
|
+
| `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
|
|
217
218
|
|
|
218
219
|
所有配置编写到`~/.jarvis/env`文件中即可生效。
|
|
219
220
|
|
|
@@ -131,7 +131,7 @@ OPENAI_API_BASE=https://api.openai.com/v1 # 可选,默认为官方API地址
|
|
|
131
131
|
### 环境变量配置
|
|
132
132
|
| 变量名称 | 默认值 | 说明 |
|
|
133
133
|
|----------|--------|------|
|
|
134
|
-
| `JARVIS_MAX_TOKEN_COUNT` |
|
|
134
|
+
| `JARVIS_MAX_TOKEN_COUNT` | 960000 | 上下文窗口的最大token数量 |
|
|
135
135
|
| `JARVIS_MAX_INPUT_TOKEN_COUNT` | 32000 | 输入的最大token数量 |
|
|
136
136
|
| `JARVIS_AUTO_COMPLETE` | false | 是否启用自动完成功能(任务判定完成的时候会自动终止) |
|
|
137
137
|
| `JARVIS_SHELL_NAME` | bash | 系统shell名称 |
|
|
@@ -141,9 +141,10 @@ OPENAI_API_BASE=https://api.openai.com/v1 # 可选,默认为官方API地址
|
|
|
141
141
|
| `JARVIS_THINKING_MODEL` | JARVIS_MODEL | 推理任务使用的模型 |
|
|
142
142
|
| `JARVIS_EXECUTE_TOOL_CONFIRM` | false | 执行工具前是否需要确认 |
|
|
143
143
|
| `JARVIS_CONFIRM_BEFORE_APPLY_PATCH` | true | 应用补丁前是否需要确认 |
|
|
144
|
-
| `JARVIS_MAX_TOOL_CALL_COUNT` | 20 |
|
|
144
|
+
| `JARVIS_MAX_TOOL_CALL_COUNT` | 20 | 最大连续工具调用次数,如果是0表示无限制 |
|
|
145
145
|
| `JARVIS_AUTO_UPDATE` | true | 是否自动更新Jarvis(仅在以git仓库方式安装时有效) |
|
|
146
|
-
| `JARVIS_MAX_BIG_CONTENT_SIZE` |
|
|
146
|
+
| `JARVIS_MAX_BIG_CONTENT_SIZE` | 1024000 | 最大大内容大小 |
|
|
147
|
+
| `JARVIS_PRETTY_OUTPUT` | false | 是否启用PrettyOutput |
|
|
147
148
|
|
|
148
149
|
所有配置编写到`~/.jarvis/env`文件中即可生效。
|
|
149
150
|
|
|
@@ -8,7 +8,7 @@ default = true
|
|
|
8
8
|
|
|
9
9
|
[project]
|
|
10
10
|
name = "jarvis-ai-assistant"
|
|
11
|
-
version = "0.1.
|
|
11
|
+
version = "0.1.177"
|
|
12
12
|
description = "Jarvis: An AI assistant that uses tools to interact with the system"
|
|
13
13
|
readme = "README.md"
|
|
14
14
|
authors = [{ name = "skyfire", email = "skyfireitdiy@hotmail.com" }]
|
|
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
|
|
|
3
3
|
|
|
4
4
|
setup(
|
|
5
5
|
name="jarvis-ai-assistant",
|
|
6
|
-
version="0.1.
|
|
6
|
+
version="0.1.177",
|
|
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",
|
{jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_agent/__init__.py
RENAMED
|
@@ -337,33 +337,22 @@ class Agent:
|
|
|
337
337
|
action_handlers = '\n'.join([f'- {handler.name()}' for handler in self.output_handler])
|
|
338
338
|
|
|
339
339
|
# 任务完成提示
|
|
340
|
-
complete_prompt = f"
|
|
340
|
+
complete_prompt = f"- 输出{ot('!!!COMPLETE!!!')}" if need_complete and self.auto_complete else ""
|
|
341
341
|
|
|
342
342
|
addon_prompt = f"""
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
-
|
|
349
|
-
-
|
|
350
|
-
-
|
|
351
|
-
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
**可用操作列表:**
|
|
357
|
-
{action_handlers}
|
|
358
|
-
</actions>
|
|
359
|
-
|
|
360
|
-
<completion>
|
|
361
|
-
如果任务已完成,请:
|
|
362
|
-
1. 说明完成原因
|
|
363
|
-
2. 保持输出格式规范
|
|
364
|
-
{complete_prompt}
|
|
365
|
-
</completion>
|
|
366
|
-
</addon>
|
|
343
|
+
[系统提示开始]
|
|
344
|
+
请判断是否已经完成任务,如果已经完成:
|
|
345
|
+
- 说明完成原因,不需要再有新的操作
|
|
346
|
+
{complete_prompt}
|
|
347
|
+
如果没有完成,请进行下一步操作:
|
|
348
|
+
- 仅包含一个操作
|
|
349
|
+
- 如果信息不明确,请请求用户补充
|
|
350
|
+
- 如果执行过程中连续失败5次,请使用ask_user询问用户操作
|
|
351
|
+
- 操作列表:
|
|
352
|
+
{action_handlers}
|
|
353
|
+
[系统提示结束]
|
|
354
|
+
|
|
355
|
+
请继续。
|
|
367
356
|
"""
|
|
368
357
|
|
|
369
358
|
return addon_prompt
|
|
@@ -401,8 +390,6 @@ class Agent:
|
|
|
401
390
|
if self.conversation_length > self.max_token_count:
|
|
402
391
|
message = self._summarize_and_clear_history() + "\n\n" + message
|
|
403
392
|
self.conversation_length += get_context_token_count(message)
|
|
404
|
-
|
|
405
|
-
print("🤖 模型思考:")
|
|
406
393
|
return self.model.chat_until_success(message) # type: ignore
|
|
407
394
|
|
|
408
395
|
|
|
@@ -505,7 +492,7 @@ class Agent:
|
|
|
505
492
|
return False, f"操作失败:检测到多个操作。一次只能执行一个操作。尝试执行的操作:{', '.join([handler.name() for handler in tool_list])}"
|
|
506
493
|
if len(tool_list) == 0:
|
|
507
494
|
return False, ""
|
|
508
|
-
if self.tool_call_count >= self.max_tool_call_count:
|
|
495
|
+
if self.max_tool_call_count > 0 and self.tool_call_count >= self.max_tool_call_count:
|
|
509
496
|
if user_confirm(f"工具调用次数超过限制,是否继续执行?", True):
|
|
510
497
|
self.reset_tool_call_count()
|
|
511
498
|
else:
|
|
@@ -547,7 +534,7 @@ class Agent:
|
|
|
547
534
|
1. 首先检查现有工具或方法论是否已经可以完成该任务,如果可以,直接说明即可,无需生成新内容
|
|
548
535
|
2. 如果现有工具/方法论不足,评估当前任务是否可以通过编写新工具来自动化解决
|
|
549
536
|
3. 如果可以通过工具解决,请设计并提供工具代码
|
|
550
|
-
4.
|
|
537
|
+
4. 如果无法通过编写通用工具完成,评估当前的执行流程是否可以总结为通用方法论
|
|
551
538
|
5. 如果以上都不可行,给出详细理由
|
|
552
539
|
|
|
553
540
|
请根据分析结果采取相应行动:说明现有工具/方法论、创建新工具、生成新方法论或说明原因。
|
|
@@ -570,6 +557,7 @@ class Agent:
|
|
|
570
557
|
2. 方法论应该具备足够的通用性,可应用于同类问题
|
|
571
558
|
3. 特别注意用户在执行过程中提供的修正、反馈和改进建议
|
|
572
559
|
4. 如果用户明确指出了某个解决步骤的优化方向,这应该被纳入方法论
|
|
560
|
+
5. 方法论要严格按照实际的执行流程来总结,不要遗漏或增加任何步骤
|
|
573
561
|
</evaluation_criteria>
|
|
574
562
|
|
|
575
563
|
<tool_requirements>
|
|
@@ -751,19 +739,18 @@ arguments:
|
|
|
751
739
|
self.prompt = f"{user_input}"
|
|
752
740
|
|
|
753
741
|
if self.first:
|
|
754
|
-
msg = user_input
|
|
755
|
-
for handler in self.input_handler:
|
|
756
|
-
msg, _ = handler(msg, self)
|
|
757
742
|
|
|
758
743
|
# 先尝试上传方法轮
|
|
759
744
|
platform = self.model if hasattr(self.model, 'upload_files') else None
|
|
760
745
|
if platform and upload_methodology(platform):
|
|
761
|
-
|
|
746
|
+
self.prompt = f"{user_input}\n\n方法论已上传到平台,请参考平台上的方法论内容"
|
|
762
747
|
else:
|
|
748
|
+
msg = user_input
|
|
749
|
+
for handler in self.input_handler:
|
|
750
|
+
msg, _ = handler(msg, self)
|
|
763
751
|
# 上传失败则回退到本地加载
|
|
764
|
-
|
|
752
|
+
self.prompt = f"{user_input}\n\n以下是历史类似问题的执行经验,可参考:\n{load_methodology(msg, self.get_tool_registry())}"
|
|
765
753
|
|
|
766
|
-
self.prompt = methodology_prompt
|
|
767
754
|
self.first = False
|
|
768
755
|
|
|
769
756
|
self.conversation_length = get_context_token_count(self.prompt)
|
{jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_agent/jarvis.py
RENAMED
|
@@ -3,7 +3,7 @@ import argparse
|
|
|
3
3
|
import os
|
|
4
4
|
import sys
|
|
5
5
|
|
|
6
|
-
from typing import Dict #
|
|
6
|
+
from typing import Dict, List, Tuple # 增加必要的类型导入
|
|
7
7
|
|
|
8
8
|
from jarvis.jarvis_utils.config import get_data_dir
|
|
9
9
|
from prompt_toolkit import prompt
|
|
@@ -18,7 +18,6 @@ from jarvis.jarvis_agent import (
|
|
|
18
18
|
)
|
|
19
19
|
from jarvis.jarvis_tools.registry import ToolRegistry
|
|
20
20
|
from jarvis.jarvis_utils.utils import init_env
|
|
21
|
-
from jarvis.jarvis_agent.file_input_handler import file_input_handler
|
|
22
21
|
from jarvis.jarvis_agent.shell_input_handler import shell_input_handler
|
|
23
22
|
from jarvis.jarvis_agent.builtin_input_handler import builtin_input_handler
|
|
24
23
|
|
|
@@ -40,10 +39,10 @@ def _load_tasks() -> Dict[str, str]:
|
|
|
40
39
|
for name, desc in user_tasks.items():
|
|
41
40
|
if desc:
|
|
42
41
|
tasks[str(name)] = str(desc)
|
|
43
|
-
spinner.text = "预定义任务加载完成"
|
|
42
|
+
spinner.text = f"预定义任务加载完成{pre_command_path}"
|
|
44
43
|
spinner.ok("✅")
|
|
45
44
|
except (yaml.YAMLError, OSError):
|
|
46
|
-
spinner.text = "预定义任务加载失败"
|
|
45
|
+
spinner.text = f"预定义任务加载失败{pre_command_path}"
|
|
47
46
|
spinner.fail("❌")
|
|
48
47
|
|
|
49
48
|
# Check .jarvis/pre-command in current directory
|
|
@@ -59,10 +58,10 @@ def _load_tasks() -> Dict[str, str]:
|
|
|
59
58
|
for name, desc in local_tasks.items():
|
|
60
59
|
if desc:
|
|
61
60
|
tasks[str(name)] = str(desc)
|
|
62
|
-
spinner.text = "预定义任务加载完成"
|
|
61
|
+
spinner.text = f"预定义任务加载完成{pre_command_path}"
|
|
63
62
|
spinner.ok("✅")
|
|
64
63
|
except (yaml.YAMLError, OSError):
|
|
65
|
-
spinner.text = "预定义任务加载失败"
|
|
64
|
+
spinner.text = f"预定义任务加载失败{pre_command_path}"
|
|
66
65
|
spinner.fail("❌")
|
|
67
66
|
|
|
68
67
|
return tasks
|
|
@@ -91,6 +90,7 @@ def _select_task(tasks: Dict[str, str]) -> str:
|
|
|
91
90
|
return ""
|
|
92
91
|
if 1 <= choice <= len(task_names):
|
|
93
92
|
selected_task = tasks[task_names[choice - 1]]
|
|
93
|
+
PrettyOutput.print(f"将要执行任务:\n {selected_task}", OutputType.INFO)
|
|
94
94
|
# 询问是否需要补充信息
|
|
95
95
|
need_additional = user_confirm("需要为此任务添加补充信息吗?", default=False)
|
|
96
96
|
if need_additional:
|
|
@@ -106,11 +106,10 @@ def _select_task(tasks: Dict[str, str]) -> str:
|
|
|
106
106
|
PrettyOutput.print(f"选择任务失败: {str(val_err)}", OutputType.ERROR)
|
|
107
107
|
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
|
|
111
109
|
def main() -> None:
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
init_env("欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!")
|
|
114
113
|
parser = argparse.ArgumentParser(description='Jarvis AI assistant')
|
|
115
114
|
parser.add_argument('-p', '--platform', type=str, help='Platform to use')
|
|
116
115
|
parser.add_argument('-m', '--model', type=str, help='Model to use')
|
|
@@ -122,7 +121,10 @@ def main() -> None:
|
|
|
122
121
|
system_prompt=origin_agent_system_prompt,
|
|
123
122
|
platform=args.platform,
|
|
124
123
|
model_name=args.model,
|
|
125
|
-
input_handler=[
|
|
124
|
+
input_handler=[
|
|
125
|
+
shell_input_handler,
|
|
126
|
+
builtin_input_handler
|
|
127
|
+
],
|
|
126
128
|
output_handler=[ToolRegistry()],
|
|
127
129
|
need_summary=False
|
|
128
130
|
)
|
|
@@ -136,7 +138,7 @@ def main() -> None:
|
|
|
136
138
|
|
|
137
139
|
tasks = _load_tasks()
|
|
138
140
|
if tasks and (selected_task := _select_task(tasks)):
|
|
139
|
-
PrettyOutput.print(f"
|
|
141
|
+
PrettyOutput.print(f"开始执行任务: \n{selected_task}", OutputType.INFO)
|
|
140
142
|
agent.run(selected_task)
|
|
141
143
|
sys.exit(0)
|
|
142
144
|
|
|
@@ -9,13 +9,13 @@ from jarvis.jarvis_utils.utils import init_env
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def load_config(config_path: str) -> dict:
|
|
12
|
-
"""
|
|
12
|
+
"""从YAML文件加载配置
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
config_path:
|
|
14
|
+
参数:
|
|
15
|
+
config_path: YAML配置文件的路径
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
dict:
|
|
17
|
+
返回:
|
|
18
|
+
dict: 配置字典
|
|
19
19
|
"""
|
|
20
20
|
if not os.path.exists(config_path):
|
|
21
21
|
PrettyOutput.print(f"配置文件 {config_path} 不存在,使用默认配置", OutputType.WARNING)
|
|
@@ -32,7 +32,7 @@ def load_config(config_path: str) -> dict:
|
|
|
32
32
|
def main():
|
|
33
33
|
"""Main entry point for Jarvis agent"""
|
|
34
34
|
# Initialize environment
|
|
35
|
-
init_env()
|
|
35
|
+
init_env("欢迎使用 Jarvis AI 助手,您的智能助理已准备就绪!")
|
|
36
36
|
|
|
37
37
|
# Set up argument parser
|
|
38
38
|
parser = argparse.ArgumentParser(description='Jarvis AI assistant')
|
|
@@ -16,7 +16,6 @@ from yaspin import yaspin # type: ignore
|
|
|
16
16
|
|
|
17
17
|
from jarvis.jarvis_agent import Agent
|
|
18
18
|
from jarvis.jarvis_agent.builtin_input_handler import builtin_input_handler
|
|
19
|
-
from jarvis.jarvis_agent.file_input_handler import file_input_handler
|
|
20
19
|
from jarvis.jarvis_agent.shell_input_handler import shell_input_handler
|
|
21
20
|
from jarvis.jarvis_platform.registry import PlatformRegistry
|
|
22
21
|
from jarvis.jarvis_git_utils.git_commiter import GitCommitTool
|
|
@@ -32,7 +31,7 @@ from jarvis.jarvis_utils.git_utils import (
|
|
|
32
31
|
from jarvis.jarvis_utils.input import get_multiline_input
|
|
33
32
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
|
34
33
|
from jarvis.jarvis_utils.utils import init_env, user_confirm
|
|
35
|
-
|
|
34
|
+
from jarvis import __version__
|
|
36
35
|
|
|
37
36
|
class CodeAgent:
|
|
38
37
|
"""Jarvis系统的代码修改代理。
|
|
@@ -109,7 +108,6 @@ class CodeAgent:
|
|
|
109
108
|
platform=platform_instance,
|
|
110
109
|
input_handler=[
|
|
111
110
|
shell_input_handler,
|
|
112
|
-
file_input_handler,
|
|
113
111
|
builtin_input_handler
|
|
114
112
|
],
|
|
115
113
|
need_summary=need_summary
|
|
@@ -374,10 +372,14 @@ class CodeAgent:
|
|
|
374
372
|
final_ret += f"# 应用补丁:\n```diff\n{diff}\n```"
|
|
375
373
|
|
|
376
374
|
# 修改后的提示逻辑
|
|
377
|
-
addon_prompt = "
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
375
|
+
addon_prompt = """
|
|
376
|
+
[系统提示开始]
|
|
377
|
+
如果对应语言有静态检查工具,请使用静态检查工具检查修改的代码,如果本次修改引入了警告和错误,请根据警告和错误信息修复代码
|
|
378
|
+
在引入警告和错误都被修复的前提下,如果用户的需求未完成,请继续修改代码,如果已经完成,请终止,不要实现任何超出用户需求外的内容
|
|
379
|
+
如果有任何信息不明确,调用工具获取信息
|
|
380
|
+
每次响应必须且只能包含一个操作
|
|
381
|
+
[系统提示结束]
|
|
382
|
+
"""
|
|
381
383
|
|
|
382
384
|
agent.set_addon_prompt(addon_prompt)
|
|
383
385
|
|
|
@@ -405,7 +407,7 @@ class CodeAgent:
|
|
|
405
407
|
|
|
406
408
|
def main() -> None:
|
|
407
409
|
"""Jarvis主入口点。"""
|
|
408
|
-
init_env()
|
|
410
|
+
init_env("欢迎使用 Jarvis-CodeAgent,您的代码工程助手已准备就绪!")
|
|
409
411
|
|
|
410
412
|
parser = argparse.ArgumentParser(description='Jarvis Code Agent')
|
|
411
413
|
parser.add_argument('-p', '--platform', type=str,
|
|
@@ -661,7 +661,7 @@ def main():
|
|
|
661
661
|
"""CLI entry point"""
|
|
662
662
|
import argparse
|
|
663
663
|
|
|
664
|
-
init_env()
|
|
664
|
+
init_env("欢迎使用 Jarvis-CodeReview,您的代码审查助手已准备就绪!")
|
|
665
665
|
|
|
666
666
|
parser = argparse.ArgumentParser(description='Autonomous code review tool')
|
|
667
667
|
subparsers = parser.add_subparsers(dest='type')
|
|
@@ -1257,7 +1257,7 @@ def create_dev_team() -> MultiAgent:
|
|
|
1257
1257
|
def main():
|
|
1258
1258
|
"""Main entry point for the development team simulation."""
|
|
1259
1259
|
|
|
1260
|
-
init_env()
|
|
1260
|
+
init_env("欢迎使用 Jarvis-Dev,您的开发团队已准备就绪!")
|
|
1261
1261
|
|
|
1262
1262
|
# Create the development team
|
|
1263
1263
|
dev_team = create_dev_team()
|
{jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_git_details/main.py
RENAMED
|
@@ -233,7 +233,7 @@ def main():
|
|
|
233
233
|
"""主函数,用于命令行接口"""
|
|
234
234
|
import argparse
|
|
235
235
|
|
|
236
|
-
init_env()
|
|
236
|
+
init_env("欢迎使用 Jarvis-GitCommitAnalyzer,您的Git Commit分析助手已准备就绪!")
|
|
237
237
|
|
|
238
238
|
parser = argparse.ArgumentParser(description='Git Commit Analyzer')
|
|
239
239
|
group = parser.add_mutually_exclusive_group(required=True)
|
{jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_git_squash/main.py
RENAMED
|
@@ -46,7 +46,7 @@ class GitSquashTool:
|
|
|
46
46
|
PrettyOutput.print(f"压缩提交失败: {str(e)}", OutputType.WARNING)
|
|
47
47
|
|
|
48
48
|
def main():
|
|
49
|
-
init_env()
|
|
49
|
+
init_env("欢迎使用 Jarvis-GitSquash,您的Git压缩助手已准备就绪!")
|
|
50
50
|
parser = argparse.ArgumentParser(description='Git squash tool')
|
|
51
51
|
parser.add_argument('commit_hash', type=str, help='Base commit hash to squash from')
|
|
52
52
|
parser.add_argument('--lang', type=str, default='Chinese', help='Language for commit messages')
|
|
@@ -265,7 +265,7 @@ class GitCommitTool:
|
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
def main():
|
|
268
|
-
init_env()
|
|
268
|
+
init_env("欢迎使用 Jarvis-GitCommitTool,您的Git提交助手已准备就绪!")
|
|
269
269
|
parser = argparse.ArgumentParser(description='Git commit tool')
|
|
270
270
|
parser.add_argument('--lang', type=str, default='Chinese', help='Language for commit messages')
|
|
271
271
|
parser.add_argument('--root-dir', type=str, default='.', help='Root directory of the Git repository')
|
{jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_multi_agent/main.py
RENAMED
|
@@ -10,7 +10,7 @@ def main():
|
|
|
10
10
|
Returns:
|
|
11
11
|
最终处理结果
|
|
12
12
|
"""
|
|
13
|
-
init_env()
|
|
13
|
+
init_env("欢迎使用 Jarvis-MultiAgent,您的多智能体系统已准备就绪!")
|
|
14
14
|
import argparse
|
|
15
15
|
parser = argparse.ArgumentParser(description="多智能体系统启动器")
|
|
16
16
|
parser.add_argument("--config", "-c", required=True, help="YAML配置文件路径")
|
{jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/base.py
RENAMED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
3
|
import re
|
|
4
|
-
from typing import List, Tuple
|
|
4
|
+
from typing import Generator, List, Tuple
|
|
5
5
|
|
|
6
6
|
from yaspin import yaspin
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
from jarvis.jarvis_utils.config import get_max_input_token_count, get_pretty_output
|
|
8
9
|
from jarvis.jarvis_utils.embedding import split_text_into_chunks
|
|
9
10
|
from jarvis.jarvis_utils.output import OutputType, PrettyOutput
|
|
10
11
|
from jarvis.jarvis_utils.utils import get_context_token_count, is_context_overflow, while_success, while_true
|
|
11
12
|
from jarvis.jarvis_utils.tag import ot, ct
|
|
12
|
-
|
|
13
|
+
from rich.live import Live
|
|
14
|
+
from rich.text import Text
|
|
15
|
+
from rich.panel import Panel
|
|
16
|
+
from rich import box
|
|
13
17
|
|
|
14
18
|
class BasePlatform(ABC):
|
|
15
19
|
"""Base class for large language models"""
|
|
@@ -33,7 +37,7 @@ class BasePlatform(ABC):
|
|
|
33
37
|
self.delete_chat()
|
|
34
38
|
|
|
35
39
|
@abstractmethod
|
|
36
|
-
def chat(self, message: str) -> str:
|
|
40
|
+
def chat(self, message: str) -> Generator[str, None, None]:
|
|
37
41
|
"""Execute conversation"""
|
|
38
42
|
raise NotImplementedError("chat is not implemented")
|
|
39
43
|
|
|
@@ -53,10 +57,8 @@ class BasePlatform(ABC):
|
|
|
53
57
|
return "错误:输入内容超过最大限制"
|
|
54
58
|
|
|
55
59
|
if input_token_count > get_max_input_token_count():
|
|
56
|
-
current_suppress_output = self.suppress_output
|
|
57
|
-
self.set_suppress_output(True)
|
|
58
60
|
max_chunk_size = get_max_input_token_count() - 1024 # 留出一些余量
|
|
59
|
-
min_chunk_size =
|
|
61
|
+
min_chunk_size = get_max_input_token_count() - 2048
|
|
60
62
|
inputs = split_text_into_chunks(message, max_chunk_size, min_chunk_size)
|
|
61
63
|
with yaspin(text="正在提交长上下文...", color="cyan") as spinner:
|
|
62
64
|
prefix_prompt = f"""
|
|
@@ -64,38 +66,57 @@ class BasePlatform(ABC):
|
|
|
64
66
|
"""
|
|
65
67
|
while_true(lambda: while_success(lambda: self.chat(prefix_prompt), 5), 5)
|
|
66
68
|
submit_count = 0
|
|
69
|
+
length = 0
|
|
67
70
|
for input in inputs:
|
|
68
71
|
submit_count += 1
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
length += len(input)
|
|
73
|
+
spinner.text = f"正在提交第{submit_count}部分(共{len(inputs)}部分({length}/{len(message)}))"
|
|
74
|
+
list(while_true(lambda: while_success(lambda: self.chat(f"<part_content>{input}</part_content>请返回已收到"), 5), 5))
|
|
75
|
+
spinner.write(f"提交第{submit_count}部分完成,当前进度:{length}/{len(message)}")
|
|
71
76
|
spinner.text = "提交完成"
|
|
72
77
|
spinner.ok("✅")
|
|
73
|
-
self.
|
|
74
|
-
response = while_true(lambda: while_success(lambda: self.chat("内容已经全部提供完毕,请继续"), 5), 5)
|
|
75
|
-
|
|
78
|
+
response = while_true(lambda: while_success(lambda: self._chat("内容已经全部提供完毕,请继续"), 5), 5)
|
|
76
79
|
else:
|
|
77
|
-
response =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
tokens_per_second = token_count / duration if duration > 0 else 0
|
|
87
|
-
except Exception as e:
|
|
88
|
-
PrettyOutput.print(f"Tokenization failed: {str(e)}", OutputType.WARNING)
|
|
89
|
-
token_count = 0
|
|
90
|
-
tokens_per_second = 0
|
|
91
|
-
|
|
92
|
-
# Print statistics
|
|
93
|
-
if not self.suppress_output:
|
|
94
|
-
PrettyOutput.print(
|
|
95
|
-
f"对话完成 - 耗时: {duration:.2f}秒, 输入字符数: {len(message)}, 输入Token数量: {input_token_count}, 输出字符数: {char_count}, 输出Token数量: {token_count}, 每秒Token数量: {tokens_per_second:.2f}",
|
|
96
|
-
OutputType.INFO,
|
|
80
|
+
response = ""
|
|
81
|
+
|
|
82
|
+
text_content = Text()
|
|
83
|
+
panel = Panel(
|
|
84
|
+
text_content,
|
|
85
|
+
title=f"[bold cyan]{self.name()}[/bold cyan]",
|
|
86
|
+
subtitle="[dim]思考中...[/dim]",
|
|
87
|
+
border_style="bright_blue",
|
|
88
|
+
box=box.ROUNDED
|
|
97
89
|
)
|
|
98
90
|
|
|
91
|
+
if not self.suppress_output:
|
|
92
|
+
if get_pretty_output():
|
|
93
|
+
with Live(panel, refresh_per_second=10, transient=False) as live:
|
|
94
|
+
for s in self.chat(message):
|
|
95
|
+
response += s
|
|
96
|
+
text_content.append(s, style="bright_white")
|
|
97
|
+
panel.subtitle = "[yellow]正在回答...[/yellow]"
|
|
98
|
+
live.update(panel)
|
|
99
|
+
end_time = time.time()
|
|
100
|
+
duration = end_time - start_time
|
|
101
|
+
char_count = len(response)
|
|
102
|
+
# Calculate token count and tokens per second
|
|
103
|
+
try:
|
|
104
|
+
token_count = get_context_token_count(response)
|
|
105
|
+
tokens_per_second = token_count / duration if duration > 0 else 0
|
|
106
|
+
except Exception as e:
|
|
107
|
+
PrettyOutput.print(f"Tokenization failed: {str(e)}", OutputType.WARNING)
|
|
108
|
+
token_count = 0
|
|
109
|
+
tokens_per_second = 0
|
|
110
|
+
panel.subtitle = f"[bold green]✓ 对话完成耗时: {duration:.2f}秒, 输入字符数: {len(message)}, 输入Token数量: {input_token_count}, 输出字符数: {char_count}, 输出Token数量: {token_count}, 每秒Token数量: {tokens_per_second:.2f}[/bold green]"
|
|
111
|
+
live.update(panel)
|
|
112
|
+
else:
|
|
113
|
+
for s in self.chat(message):
|
|
114
|
+
print(s, end="", flush=True)
|
|
115
|
+
response += s
|
|
116
|
+
print()
|
|
117
|
+
else:
|
|
118
|
+
for s in self.chat(message):
|
|
119
|
+
response += s
|
|
99
120
|
# Keep original think tag handling
|
|
100
121
|
response = re.sub(ot("think")+r'.*?'+ct("think"), '', response, flags=re.DOTALL)
|
|
101
122
|
return response
|
{jarvis_ai_assistant-0.1.175 → jarvis_ai_assistant-0.1.177}/src/jarvis/jarvis_platform/human.py
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import Generator, List, Tuple
|
|
3
3
|
import random
|
|
4
4
|
import string
|
|
5
5
|
from jarvis.jarvis_platform.base import BasePlatform
|
|
@@ -34,7 +34,7 @@ class HumanPlatform(BasePlatform):
|
|
|
34
34
|
else:
|
|
35
35
|
PrettyOutput.print(f"错误:不支持的模型: {model_name}", OutputType.ERROR)
|
|
36
36
|
|
|
37
|
-
def chat(self, message: str) -> str:
|
|
37
|
+
def chat(self, message: str) -> Generator[str, None, None]:
|
|
38
38
|
"""发送消息并获取人类响应"""
|
|
39
39
|
if not self.conversation_id:
|
|
40
40
|
self.conversation_id = ''.join(random.choices(string.ascii_letters + string.digits, k=8))
|
|
@@ -49,7 +49,8 @@ class HumanPlatform(BasePlatform):
|
|
|
49
49
|
prompt = f"{message} {session_info}\n\n请回复:"
|
|
50
50
|
|
|
51
51
|
response = get_multiline_input(prompt)
|
|
52
|
-
|
|
52
|
+
yield response
|
|
53
|
+
return None
|
|
53
54
|
|
|
54
55
|
def upload_files(self, file_list: List[str]) -> bool:
|
|
55
56
|
"""文件上传功能,人类平台不需要实际处理"""
|