jarvis-ai-assistant 0.1.212__py3-none-any.whl → 0.1.214__py3-none-any.whl
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/__init__.py +1 -1
- jarvis/jarvis_agent/__init__.py +43 -20
- jarvis/jarvis_agent/builtin_input_handler.py +12 -1
- jarvis/jarvis_agent/edit_file_handler.py +44 -32
- jarvis/jarvis_code_agent/code_agent.py +10 -4
- jarvis/jarvis_platform/ai8.py +153 -114
- jarvis/jarvis_platform/base.py +33 -7
- jarvis/jarvis_platform/human.py +43 -1
- jarvis/jarvis_platform/kimi.py +50 -6
- jarvis/jarvis_platform/openai.py +38 -1
- jarvis/jarvis_platform/oyi.py +162 -125
- jarvis/jarvis_platform/tongyi.py +53 -7
- jarvis/jarvis_platform/yuanbao.py +47 -4
- jarvis/jarvis_platform_manager/main.py +65 -19
- jarvis/jarvis_platform_manager/service.py +66 -100
- jarvis/jarvis_utils/input.py +6 -5
- {jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/METADATA +2 -2
- {jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/RECORD +22 -22
- {jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/top_level.txt +0 -0
@@ -73,8 +73,9 @@ def chat_with_model(platform_name: str, model_name: str, system_prompt: str) ->
|
|
73
73
|
f"连接到 {platform_name} 平台 {model_name} 模型", OutputType.SUCCESS
|
74
74
|
)
|
75
75
|
PrettyOutput.print(
|
76
|
-
"可用命令: /bye -
|
77
|
-
"/shell -
|
76
|
+
"可用命令: /bye - 退出, /clear - 清除会话, /upload - 上传文件, "
|
77
|
+
"/shell - 执行命令, /save - 保存对话, /saveall - 保存所有对话, "
|
78
|
+
"/save_session - 保存会话状态, /load_session - 加载会话状态",
|
78
79
|
OutputType.INFO,
|
79
80
|
)
|
80
81
|
|
@@ -82,9 +83,6 @@ def chat_with_model(platform_name: str, model_name: str, system_prompt: str) ->
|
|
82
83
|
while True:
|
83
84
|
# Get user input
|
84
85
|
user_input = get_multiline_input("")
|
85
|
-
conversation_history.append(
|
86
|
-
{"role": "user", "content": user_input}
|
87
|
-
) # 记录用户输入
|
88
86
|
|
89
87
|
# Check if input is cancelled
|
90
88
|
if user_input.strip() == "/bye":
|
@@ -190,13 +188,60 @@ def chat_with_model(platform_name: str, model_name: str, system_prompt: str) ->
|
|
190
188
|
for entry in conversation_history:
|
191
189
|
file_obj.write(f"{entry['role']}: {entry['content']}\n\n")
|
192
190
|
|
193
|
-
PrettyOutput.print(
|
194
|
-
f"所有对话已保存到 {file_path}", OutputType.SUCCESS
|
195
|
-
)
|
191
|
+
PrettyOutput.print(f"所有对话已保存到 {file_path}", OutputType.SUCCESS)
|
196
192
|
except Exception as exc:
|
197
|
-
PrettyOutput.print(
|
198
|
-
|
199
|
-
|
193
|
+
PrettyOutput.print(f"保存所有对话失败: {str(exc)}", OutputType.ERROR)
|
194
|
+
continue
|
195
|
+
|
196
|
+
# Check if it is a save_session command
|
197
|
+
if user_input.strip().startswith("/save_session"):
|
198
|
+
try:
|
199
|
+
file_path = user_input.strip()[14:].strip()
|
200
|
+
if not file_path:
|
201
|
+
PrettyOutput.print(
|
202
|
+
"请指定保存会话的文件名,例如: /save_session session.json",
|
203
|
+
OutputType.WARNING,
|
204
|
+
)
|
205
|
+
continue
|
206
|
+
|
207
|
+
# Remove quotes if present
|
208
|
+
if (file_path.startswith('"') and file_path.endswith('"')) or (
|
209
|
+
file_path.startswith("'") and file_path.endswith("'")
|
210
|
+
):
|
211
|
+
file_path = file_path[1:-1]
|
212
|
+
|
213
|
+
if platform.save(file_path):
|
214
|
+
PrettyOutput.print(f"会话已保存到 {file_path}", OutputType.SUCCESS)
|
215
|
+
else:
|
216
|
+
PrettyOutput.print("保存会话失败", OutputType.ERROR)
|
217
|
+
except Exception as exc:
|
218
|
+
PrettyOutput.print(f"保存会话失败: {str(exc)}", OutputType.ERROR)
|
219
|
+
continue
|
220
|
+
|
221
|
+
# Check if it is a load_session command
|
222
|
+
if user_input.strip().startswith("/load_session"):
|
223
|
+
try:
|
224
|
+
file_path = user_input.strip()[14:].strip()
|
225
|
+
if not file_path:
|
226
|
+
PrettyOutput.print(
|
227
|
+
"请指定加载会话的文件名,例如: /load_session session.json",
|
228
|
+
OutputType.WARNING,
|
229
|
+
)
|
230
|
+
continue
|
231
|
+
|
232
|
+
# Remove quotes if present
|
233
|
+
if (file_path.startswith('"') and file_path.endswith('"')) or (
|
234
|
+
file_path.startswith("'") and file_path.endswith("'")
|
235
|
+
):
|
236
|
+
file_path = file_path[1:-1]
|
237
|
+
|
238
|
+
if platform.restore(file_path):
|
239
|
+
conversation_history = [] # Clear local history after loading
|
240
|
+
PrettyOutput.print(f"会话已从 {file_path} 加载", OutputType.SUCCESS)
|
241
|
+
else:
|
242
|
+
PrettyOutput.print("加载会话失败", OutputType.ERROR)
|
243
|
+
except Exception as exc:
|
244
|
+
PrettyOutput.print(f"加载会话失败: {str(exc)}", OutputType.ERROR)
|
200
245
|
continue
|
201
246
|
|
202
247
|
# Check if it is a shell command
|
@@ -223,6 +268,9 @@ def chat_with_model(platform_name: str, model_name: str, system_prompt: str) ->
|
|
223
268
|
continue
|
224
269
|
|
225
270
|
try:
|
271
|
+
conversation_history.append(
|
272
|
+
{"role": "user", "content": user_input}
|
273
|
+
) # 记录用户输入
|
226
274
|
# Send to model and get reply
|
227
275
|
response = platform.chat_until_success(user_input)
|
228
276
|
if not response:
|
@@ -351,8 +399,8 @@ def role_command(args: argparse.Namespace) -> None:
|
|
351
399
|
return
|
352
400
|
|
353
401
|
# 初始化平台和模型
|
354
|
-
platform_name = selected_role["platform"]
|
355
|
-
model_name = selected_role["model"]
|
402
|
+
platform_name = args.platform or selected_role["platform"]
|
403
|
+
model_name = args.model or selected_role["model"]
|
356
404
|
system_prompt = selected_role.get("system_prompt", "")
|
357
405
|
|
358
406
|
# 开始对话
|
@@ -385,12 +433,8 @@ def main() -> None:
|
|
385
433
|
service_parser.add_argument(
|
386
434
|
"--port", type=int, default=8000, help="服务端口 (默认: 8000)"
|
387
435
|
)
|
388
|
-
service_parser.add_argument(
|
389
|
-
|
390
|
-
)
|
391
|
-
service_parser.add_argument(
|
392
|
-
"--model", "-m", help="指定默认模型,当客户端未指定平台时使用"
|
393
|
-
)
|
436
|
+
service_parser.add_argument("--platform", "-p", help="指定默认平台,当客户端未指定平台时使用")
|
437
|
+
service_parser.add_argument("--model", "-m", help="指定默认模型,当客户端未指定平台时使用")
|
394
438
|
service_parser.set_defaults(func=service_command)
|
395
439
|
|
396
440
|
# role subcommand
|
@@ -401,6 +445,8 @@ def main() -> None:
|
|
401
445
|
default="~/.jarvis/roles.yaml",
|
402
446
|
help="角色配置文件路径(YAML格式,默认: ~/.jarvis/roles.yaml)",
|
403
447
|
)
|
448
|
+
role_parser.add_argument("--platform", "-p", help="指定要使用的平台,覆盖角色配置")
|
449
|
+
role_parser.add_argument("--model", "-m", help="指定要使用的模型,覆盖角色配置")
|
404
450
|
role_parser.set_defaults(func=role_command)
|
405
451
|
|
406
452
|
args = parser.parse_args()
|
@@ -180,7 +180,7 @@ def start_service(
|
|
180
180
|
request: ChatCompletionRequest,
|
181
181
|
) -> Response:
|
182
182
|
"""Create a chat completion in OpenAI-compatible format.
|
183
|
-
|
183
|
+
|
184
184
|
Returns:
|
185
185
|
Response: Either a JSONResponse or StreamingResponse depending on the request.
|
186
186
|
"""
|
@@ -233,7 +233,7 @@ def start_service(
|
|
233
233
|
if stream:
|
234
234
|
# Return streaming response
|
235
235
|
return StreamingResponse(
|
236
|
-
stream_chat_response(platform, message_text, model),
|
236
|
+
stream_chat_response(platform, message_text, model), # type: ignore
|
237
237
|
media_type="text/event-stream",
|
238
238
|
)
|
239
239
|
|
@@ -258,36 +258,36 @@ def start_service(
|
|
258
258
|
response_text,
|
259
259
|
)
|
260
260
|
|
261
|
-
return JSONResponse(
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
"
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
261
|
+
return JSONResponse(
|
262
|
+
{
|
263
|
+
"id": completion_id,
|
264
|
+
"object": "chat.completion",
|
265
|
+
"created": int(time.time()),
|
266
|
+
"model": model,
|
267
|
+
"choices": [
|
268
|
+
{
|
269
|
+
"index": 0,
|
270
|
+
"message": {"role": "assistant", "content": response_text},
|
271
|
+
"finish_reason": "stop",
|
272
|
+
}
|
273
|
+
],
|
274
|
+
"usage": {
|
275
|
+
"prompt_tokens": len(message_text) // 4,
|
276
|
+
"completion_tokens": len(response_text) // 4,
|
277
|
+
"total_tokens": (len(message_text) + len(response_text)) // 4,
|
278
|
+
},
|
279
|
+
}
|
280
|
+
)
|
279
281
|
except Exception as exc:
|
280
282
|
raise HTTPException(status_code=500, detail=str(exc))
|
281
283
|
|
282
|
-
async def stream_chat_response(
|
283
|
-
platform: Any, message: str, model_name: str
|
284
|
-
) -> Any:
|
284
|
+
async def stream_chat_response(platform: Any, message: str, model_name: str) -> Any:
|
285
285
|
"""Stream chat response in OpenAI-compatible format."""
|
286
286
|
completion_id = f"chatcmpl-{str(uuid.uuid4())}"
|
287
287
|
created_time = int(time.time())
|
288
288
|
conversation_id = str(uuid.uuid4())
|
289
289
|
|
290
|
-
#
|
290
|
+
# Send the initial chunk with the role
|
291
291
|
initial_data = {
|
292
292
|
"id": completion_id,
|
293
293
|
"object": "chat.completion.chunk",
|
@@ -300,21 +300,17 @@ def start_service(
|
|
300
300
|
yield f"data: {json.dumps(initial_data)}\n\n"
|
301
301
|
|
302
302
|
try:
|
303
|
-
#
|
304
|
-
|
303
|
+
# Use the streaming-capable chat method
|
304
|
+
response_generator = platform.chat(message)
|
305
305
|
|
306
|
-
# Record full response
|
307
306
|
full_response = ""
|
307
|
+
has_content = False
|
308
308
|
|
309
|
-
#
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
for i in range(0, len(response), chunk_size):
|
314
|
-
chunk = response[i : i + chunk_size]
|
309
|
+
# Iterate over the generator and stream chunks
|
310
|
+
for chunk in response_generator:
|
311
|
+
if chunk:
|
312
|
+
has_content = True
|
315
313
|
full_response += chunk
|
316
|
-
|
317
|
-
# Create and send chunk
|
318
314
|
chunk_data = {
|
319
315
|
"id": completion_id,
|
320
316
|
"object": "chat.completion.chunk",
|
@@ -328,13 +324,10 @@ def start_service(
|
|
328
324
|
}
|
329
325
|
],
|
330
326
|
}
|
331
|
-
|
332
327
|
yield f"data: {json.dumps(chunk_data)}\n\n"
|
333
328
|
|
334
|
-
|
335
|
-
|
336
|
-
else:
|
337
|
-
# If no output, send an empty content chunk
|
329
|
+
if not has_content:
|
330
|
+
no_response_message = "No response from model."
|
338
331
|
chunk_data = {
|
339
332
|
"id": completion_id,
|
340
333
|
"object": "chat.completion.chunk",
|
@@ -343,15 +336,15 @@ def start_service(
|
|
343
336
|
"choices": [
|
344
337
|
{
|
345
338
|
"index": 0,
|
346
|
-
"delta": {"content":
|
339
|
+
"delta": {"content": no_response_message},
|
347
340
|
"finish_reason": None,
|
348
341
|
}
|
349
342
|
],
|
350
343
|
}
|
351
344
|
yield f"data: {json.dumps(chunk_data)}\n\n"
|
352
|
-
full_response =
|
345
|
+
full_response = no_response_message
|
353
346
|
|
354
|
-
#
|
347
|
+
# Send the final chunk with finish_reason
|
355
348
|
final_data = {
|
356
349
|
"id": completion_id,
|
357
350
|
"object": "chat.completion.chunk",
|
@@ -361,72 +354,45 @@ def start_service(
|
|
361
354
|
}
|
362
355
|
yield f"data: {json.dumps(final_data)}\n\n"
|
363
356
|
|
364
|
-
# Send [DONE] marker
|
357
|
+
# Send the [DONE] marker
|
365
358
|
yield "data: [DONE]\n\n"
|
366
359
|
|
367
|
-
# Log
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
log_data = {
|
374
|
-
"conversation_id": conversation_id,
|
375
|
-
"timestamp": timestamp,
|
376
|
-
"model": model_name,
|
377
|
-
"message": message,
|
378
|
-
"response": full_response,
|
379
|
-
}
|
380
|
-
|
381
|
-
with open(log_file, "w", encoding="utf-8", errors="ignore") as f:
|
382
|
-
json.dump(log_data, f, ensure_ascii=False, indent=2)
|
383
|
-
|
384
|
-
PrettyOutput.print(
|
385
|
-
f"Stream conversation logged to {log_file}", OutputType.INFO
|
360
|
+
# Log the full conversation
|
361
|
+
log_conversation(
|
362
|
+
conversation_id,
|
363
|
+
[{"role": "user", "content": message}],
|
364
|
+
model_name,
|
365
|
+
full_response,
|
386
366
|
)
|
387
367
|
|
388
368
|
except Exception as exc:
|
389
|
-
|
390
|
-
error_msg
|
391
|
-
print(f"Streaming error: {error_msg}")
|
369
|
+
error_msg = f"Error during streaming: {str(exc)}"
|
370
|
+
PrettyOutput.print(error_msg, OutputType.ERROR)
|
392
371
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
"model": model_name,
|
399
|
-
"choices": [
|
400
|
-
{
|
401
|
-
"index": 0,
|
402
|
-
"delta": {"content": error_msg},
|
403
|
-
"finish_reason": "stop",
|
404
|
-
}
|
405
|
-
],
|
406
|
-
}
|
407
|
-
)
|
408
|
-
yield f"data: {res}\n\n"
|
409
|
-
yield f"data: {json.dumps({'error': {'message': error_msg, 'type': 'server_error'}})}\n\n"
|
410
|
-
yield "data: [DONE]\n\n"
|
411
|
-
|
412
|
-
# Log error to file
|
413
|
-
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
414
|
-
log_file = os.path.join(
|
415
|
-
logs_dir, f"stream_error_{conversation_id}_{timestamp}.json"
|
416
|
-
)
|
417
|
-
|
418
|
-
log_data = {
|
419
|
-
"conversation_id": conversation_id,
|
420
|
-
"timestamp": timestamp,
|
372
|
+
# Send error information in the stream
|
373
|
+
error_chunk = {
|
374
|
+
"id": completion_id,
|
375
|
+
"object": "chat.completion.chunk",
|
376
|
+
"created": created_time,
|
421
377
|
"model": model_name,
|
422
|
-
"
|
423
|
-
|
378
|
+
"choices": [
|
379
|
+
{
|
380
|
+
"index": 0,
|
381
|
+
"delta": {"content": error_msg},
|
382
|
+
"finish_reason": "stop",
|
383
|
+
}
|
384
|
+
],
|
424
385
|
}
|
386
|
+
yield f"data: {json.dumps(error_chunk)}\n\n"
|
387
|
+
yield "data: [DONE]\n\n"
|
425
388
|
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
389
|
+
# Log the error
|
390
|
+
log_conversation(
|
391
|
+
conversation_id,
|
392
|
+
[{"role": "user", "content": message}],
|
393
|
+
model_name,
|
394
|
+
response=f"ERROR: {error_msg}",
|
395
|
+
)
|
430
396
|
|
431
397
|
# Run the server
|
432
398
|
uvicorn.run(app, host=host, port=port)
|
jarvis/jarvis_utils/input.py
CHANGED
@@ -38,7 +38,7 @@ def get_single_line_input(tip: str) -> str:
|
|
38
38
|
返回:
|
39
39
|
str: 用户的输入
|
40
40
|
"""
|
41
|
-
session = PromptSession(history=None)
|
41
|
+
session: PromptSession = PromptSession(history=None)
|
42
42
|
style = PromptStyle.from_dict(
|
43
43
|
{
|
44
44
|
"prompt": "ansicyan",
|
@@ -109,6 +109,7 @@ class FileCompleter(Completer):
|
|
109
109
|
(ot("Clear"), "清除历史"),
|
110
110
|
(ot("ToolUsage"), "工具使用说明"),
|
111
111
|
(ot("ReloadConfig"), "重新加载配置"),
|
112
|
+
(ot("SaveSession"), "保存当前会话"),
|
112
113
|
]
|
113
114
|
)
|
114
115
|
|
@@ -190,7 +191,7 @@ def get_multiline_input(tip: str) -> str:
|
|
190
191
|
"""
|
191
192
|
# 显示输入说明
|
192
193
|
PrettyOutput.section(
|
193
|
-
"用户输入 - 使用 @ 触发文件补全,Tab 选择补全项,Ctrl+J 提交,Ctrl+
|
194
|
+
"用户输入 - 使用 @ 触发文件补全,Tab 选择补全项,Ctrl+J 提交,Ctrl+O 复制最后一条消息,按 Ctrl+C 取消输入",
|
194
195
|
OutputType.USER,
|
195
196
|
)
|
196
197
|
print(f"{Fore.GREEN}{tip}{ColoramaStyle.RESET_ALL}")
|
@@ -212,9 +213,9 @@ def get_multiline_input(tip: str) -> str:
|
|
212
213
|
"""处理Ctrl+J以提交输入。"""
|
213
214
|
event.current_buffer.validate_and_handle()
|
214
215
|
|
215
|
-
@bindings.add("c-
|
216
|
+
@bindings.add("c-o")
|
216
217
|
def _(event):
|
217
|
-
"""处理Ctrl+
|
218
|
+
"""处理Ctrl+O以复制最后一条消息到剪贴板。"""
|
218
219
|
from jarvis.jarvis_utils.globals import get_last_message
|
219
220
|
import subprocess
|
220
221
|
|
@@ -246,7 +247,7 @@ def get_multiline_input(tip: str) -> str:
|
|
246
247
|
# 获取数据目录路径
|
247
248
|
history_dir = get_data_dir()
|
248
249
|
# 初始化带历史记录的会话
|
249
|
-
session = PromptSession(
|
250
|
+
session: PromptSession = PromptSession(
|
250
251
|
history=FileHistory(os.path.join(history_dir, "multiline_input_history")),
|
251
252
|
completer=FileCompleter(),
|
252
253
|
key_bindings=bindings,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jarvis-ai-assistant
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.214
|
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
|
@@ -54,8 +54,8 @@ Requires-Dist: pillow==10.2.0
|
|
54
54
|
Requires-Dist: openai==1.78.1
|
55
55
|
Requires-Dist: tabulate==0.9.0
|
56
56
|
Requires-Dist: pyte==0.8.2
|
57
|
-
Requires-Dist: pyyaml>=6.0.2
|
58
57
|
Requires-Dist: httpx>=0.28.1
|
58
|
+
Requires-Dist: pyyaml>=5.3.1
|
59
59
|
Provides-Extra: dev
|
60
60
|
Requires-Dist: pytest; extra == "dev"
|
61
61
|
Requires-Dist: black; extra == "dev"
|
@@ -1,13 +1,13 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
3
|
-
jarvis/jarvis_agent/builtin_input_handler.py,sha256=
|
4
|
-
jarvis/jarvis_agent/edit_file_handler.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=kNLTFJp--S26zVh7OPZjnG2Dw9L1PjMyssAGW004Z1s,75
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=Jl26-geE3jWkGBzyAaZk2FVdr__U8UJmZM4CzWMeQDU,32671
|
3
|
+
jarvis/jarvis_agent/builtin_input_handler.py,sha256=lcw-VBm8-CVcblxEbGU4dVD6IixgXTLz9uBrv9Y6p20,2710
|
4
|
+
jarvis/jarvis_agent/edit_file_handler.py,sha256=vKx26I4yOQwiQHNfkqMJ44Ybf90n37mojTcXNQQy-hw,17382
|
5
5
|
jarvis/jarvis_agent/jarvis.py,sha256=tTv9X1oSRDGRmNkM1F3RNN6ikFbc_PkRBIbZIffbA_8,5802
|
6
6
|
jarvis/jarvis_agent/main.py,sha256=c6bQe-8LXvW2-NBn9Rn_yPYdrwnkJ8KQaSFY2cPvkxw,2775
|
7
7
|
jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
|
8
8
|
jarvis/jarvis_agent/shell_input_handler.py,sha256=zVaKNthIHJh1j4g8_-d3w5ahNH9aH-ZNRSOourQpHR4,1328
|
9
9
|
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
|
-
jarvis/jarvis_code_agent/code_agent.py,sha256=
|
10
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=l6oMK8z8Rd0seGfND0du359HjjcBPKJRbgBKoqahf0E,18204
|
11
11
|
jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
|
12
12
|
jarvis/jarvis_code_analysis/code_review.py,sha256=uCCbGd4Y1RjDzhZoVE8JdN2avlwOfqimSDIrcM-KMew,30456
|
13
13
|
jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
|
@@ -45,18 +45,18 @@ jarvis/jarvis_methodology/main.py,sha256=-PqsWvtpUJkkhiGgV-1JegEnEZBmv8SHnNMNNm_
|
|
45
45
|
jarvis/jarvis_multi_agent/__init__.py,sha256=sDd3sK88dS7_qAz2ywIAaEWdQ4iRVCiuBu2rQQmrKbU,4512
|
46
46
|
jarvis/jarvis_multi_agent/main.py,sha256=h7VUSwoPrES0XTK8z5kt3XLX1mmcm8UEuFEHQOUWPH4,1696
|
47
47
|
jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
|
48
|
-
jarvis/jarvis_platform/ai8.py,sha256=
|
49
|
-
jarvis/jarvis_platform/base.py,sha256=
|
50
|
-
jarvis/jarvis_platform/human.py,sha256=
|
51
|
-
jarvis/jarvis_platform/kimi.py,sha256=
|
52
|
-
jarvis/jarvis_platform/openai.py,sha256=
|
53
|
-
jarvis/jarvis_platform/oyi.py,sha256=
|
48
|
+
jarvis/jarvis_platform/ai8.py,sha256=jCBKqGalJi29nCJrXqrqMqzyEYS4gE725j9OrFuOvqI,10758
|
49
|
+
jarvis/jarvis_platform/base.py,sha256=US2uiMen17jgnskv3tEUjlqwNPfoC_gYUFpHm5ZbdxQ,8734
|
50
|
+
jarvis/jarvis_platform/human.py,sha256=dlReKzi4LxX4j7Ecw9vnSEWd8VBDaW1AtaSFmLi-03Y,4851
|
51
|
+
jarvis/jarvis_platform/kimi.py,sha256=jGsKX4lXbQKiY9_Daw16PBIi-SxhQN9dMNmWpUjbG5o,15202
|
52
|
+
jarvis/jarvis_platform/openai.py,sha256=5U1uNNDNBYm1XXcUL0Cbk33NgDKip2D26oLFOJDmnao,6248
|
53
|
+
jarvis/jarvis_platform/oyi.py,sha256=kzuLx7g-SlOyUW7SpPMYBba-l5yed4fSefyN-N-FvUc,12483
|
54
54
|
jarvis/jarvis_platform/registry.py,sha256=Sz4ADAaxuufpAQG0KSQZuL1yALzH-aF3FDapkNn5foE,8107
|
55
|
-
jarvis/jarvis_platform/tongyi.py,sha256=
|
56
|
-
jarvis/jarvis_platform/yuanbao.py,sha256=
|
55
|
+
jarvis/jarvis_platform/tongyi.py,sha256=h3aQYkcA0YQMJrfUdDAgpenE6S-99gugz4kAXzPuWnM,22660
|
56
|
+
jarvis/jarvis_platform/yuanbao.py,sha256=izXEAR14jXONKCtLBLoFF2nfLWcw50iPTW1SSLbDtQg,22895
|
57
57
|
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
|
-
jarvis/jarvis_platform_manager/main.py,sha256=
|
59
|
-
jarvis/jarvis_platform_manager/service.py,sha256=
|
58
|
+
jarvis/jarvis_platform_manager/main.py,sha256=LxlXSfIfmkYNcajOG_XvvlmwlSWSGb0DmbzIDSHHYOU,18330
|
59
|
+
jarvis/jarvis_platform_manager/service.py,sha256=hQGWQ2qAlzm_C_lNQDuLORQ4rmjR1P1-V3ou7l2Bv0s,13622
|
60
60
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
61
61
|
jarvis/jarvis_smart_shell/main.py,sha256=DbhRSP1sZfSIaTltP1YWVDSQOTYEsbiOnfO9kSYwcNs,6959
|
62
62
|
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -83,14 +83,14 @@ jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxW
|
|
83
83
|
jarvis/jarvis_utils/git_utils.py,sha256=7AZblSD4b76vXxaDFkmZOy5rNkwvkwQQxGUy3NAusDQ,21641
|
84
84
|
jarvis/jarvis_utils/globals.py,sha256=WzZh_acNfHJj1LDulhyLQ7cojksBy0gdrITe0vH1XA0,3901
|
85
85
|
jarvis/jarvis_utils/http.py,sha256=Uqt1kcz0HWnAfXHHi1fNGwLb2lcVUqpbrG2Uk_-kcIU,4882
|
86
|
-
jarvis/jarvis_utils/input.py,sha256=
|
86
|
+
jarvis/jarvis_utils/input.py,sha256=7W--9Vvzo0v4nIwFct9sEg6O5S-eH5m3fk5qtBxN48s,8966
|
87
87
|
jarvis/jarvis_utils/methodology.py,sha256=-cvM6pwgJK7BXCYg2uVjIId_j3v5RUh2z2PBcK_2vj4,8155
|
88
88
|
jarvis/jarvis_utils/output.py,sha256=PRCgudPOB8gMEP3u-g0FGD2c6tBgJhLXUMqNPglfjV8,10813
|
89
89
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
90
90
|
jarvis/jarvis_utils/utils.py,sha256=BoRwLcixdf7mU3Tawe95ygGhQpkMffrFYLYhPwIvw8A,14498
|
91
|
-
jarvis_ai_assistant-0.1.
|
92
|
-
jarvis_ai_assistant-0.1.
|
93
|
-
jarvis_ai_assistant-0.1.
|
94
|
-
jarvis_ai_assistant-0.1.
|
95
|
-
jarvis_ai_assistant-0.1.
|
96
|
-
jarvis_ai_assistant-0.1.
|
91
|
+
jarvis_ai_assistant-0.1.214.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
92
|
+
jarvis_ai_assistant-0.1.214.dist-info/METADATA,sha256=1SwwIYK56ykQe-f6r9fMt1Yd2zk0ghvnFgDNEPbL3lM,19564
|
93
|
+
jarvis_ai_assistant-0.1.214.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
94
|
+
jarvis_ai_assistant-0.1.214.dist-info/entry_points.txt,sha256=SF46ViTZcQVZEfbqzJDKKVc9TrN1x-P1mQ6wup7u2HY,875
|
95
|
+
jarvis_ai_assistant-0.1.214.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
96
|
+
jarvis_ai_assistant-0.1.214.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.212.dist-info → jarvis_ai_assistant-0.1.214.dist-info}/top_level.txt
RENAMED
File without changes
|