jarvis-ai-assistant 0.1.34__py3-none-any.whl → 0.1.36__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- jarvis/__init__.py +1 -1
- jarvis/__pycache__/__init__.cpython-313.pyc +0 -0
- jarvis/__pycache__/agent.cpython-313.pyc +0 -0
- jarvis/agent.py +15 -10
- jarvis/models/__pycache__/ai8.cpython-313.pyc +0 -0
- jarvis/models/__pycache__/oyi.cpython-313.pyc +0 -0
- jarvis/models/ai8.py +1 -1
- jarvis/models/oyi.py +1 -1
- jarvis/tools/__pycache__/methodology.cpython-313.pyc +0 -0
- jarvis/tools/__pycache__/registry.cpython-313.pyc +0 -0
- jarvis/tools/methodology.py +18 -22
- jarvis/tools/registry.py +1 -1
- {jarvis_ai_assistant-0.1.34.dist-info → jarvis_ai_assistant-0.1.36.dist-info}/METADATA +1 -1
- {jarvis_ai_assistant-0.1.34.dist-info → jarvis_ai_assistant-0.1.36.dist-info}/RECORD +18 -18
- {jarvis_ai_assistant-0.1.34.dist-info → jarvis_ai_assistant-0.1.36.dist-info}/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.34.dist-info → jarvis_ai_assistant-0.1.36.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.34.dist-info → jarvis_ai_assistant-0.1.36.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.34.dist-info → jarvis_ai_assistant-0.1.36.dist-info}/top_level.txt +0 -0
jarvis/__init__.py
CHANGED
Binary file
|
Binary file
|
jarvis/agent.py
CHANGED
@@ -88,14 +88,15 @@ class Agent:
|
|
88
88
|
|
89
89
|
|
90
90
|
def _load_methodology(self) -> str:
|
91
|
-
"""
|
91
|
+
"""加载经验总结"""
|
92
92
|
user_jarvis_methodology = os.path.expanduser("~/.jarvis_methodology")
|
93
93
|
ret = ""
|
94
94
|
if os.path.exists(user_jarvis_methodology):
|
95
95
|
with open(user_jarvis_methodology, "r", encoding="utf-8") as f:
|
96
96
|
data = yaml.safe_load(f)
|
97
97
|
for k, v in data.items():
|
98
|
-
ret += f"问题类型: \n{k}\n
|
98
|
+
ret += f"问题类型: \n{k}\n经验总结: \n{v}\n\n"
|
99
|
+
PrettyOutput.print(f"从 {user_jarvis_methodology} 加载经验总结: {', '.join(data.keys())}", OutputType.INFO)
|
99
100
|
return ret
|
100
101
|
|
101
102
|
def run(self, user_input: str, file_list: Optional[List[str]] = None, keep_history: bool = False) -> str:
|
@@ -115,12 +116,12 @@ class Agent:
|
|
115
116
|
if file_list:
|
116
117
|
self.model.upload_files(file_list)
|
117
118
|
|
118
|
-
#
|
119
|
+
# 加载经验总结
|
119
120
|
methodology = self._load_methodology()
|
120
121
|
|
121
122
|
methodology_prompt = ""
|
122
123
|
if methodology:
|
123
|
-
methodology_prompt = f"""
|
124
|
+
methodology_prompt = f"""这是以往处理问题的标准经验总结,如果当前任务与此类似,可参考:
|
124
125
|
{methodology}
|
125
126
|
|
126
127
|
"""
|
@@ -145,11 +146,11 @@ class Agent:
|
|
145
146
|
6. 制定行动计划:根据目前可以使用的工具制定行动计划
|
146
147
|
7. 执行行动计划:每步执行一个步骤,最多使用一个工具(工具执行完成后,等待工具结果再执行下一步)
|
147
148
|
8. 监控与调整:如果执行结果与预期不符,则反思并调整行动计划,迭代之前的步骤
|
148
|
-
9.
|
149
|
+
9. 更新经验总结(如有必要):任务完成后总结执行过程中的经验教训,生成同类问题的通用经验总结,使用经验总结工具进行更新或者添加
|
149
150
|
|
150
151
|
-------------------------------------------------------------
|
151
152
|
|
152
|
-
|
153
|
+
经验总结模板:
|
153
154
|
1. 问题重述
|
154
155
|
2. 最优解决方案
|
155
156
|
3. 最优方案执行步骤(失败的行动不需要体现)
|
@@ -223,7 +224,7 @@ arguments:
|
|
223
224
|
|
224
225
|
if not user_input:
|
225
226
|
while True:
|
226
|
-
choice = prompt("
|
227
|
+
choice = prompt("是否需要手动为此任务生成经验总结以提升Jarvis对类似任务的处理能力?(y/n), 回车跳过: ")
|
227
228
|
if choice == "y":
|
228
229
|
self._make_methodology()
|
229
230
|
break
|
@@ -273,9 +274,9 @@ arguments:
|
|
273
274
|
self.model.reset()
|
274
275
|
|
275
276
|
def _make_methodology(self):
|
276
|
-
"""
|
277
|
-
current_response = self._call_model("""
|
278
|
-
|
277
|
+
"""生成经验总结"""
|
278
|
+
current_response = self._call_model("""请根据之前的对话内容,判断是否有必要更新、添加、删除现有经验总结,如果有,使用methodology工具进行管理。
|
279
|
+
经验总结模板:
|
279
280
|
1. 问题重述
|
280
281
|
2. 最优解决方案
|
281
282
|
3. 最优方案执行步骤(失败的行动不需要体现)
|
@@ -286,4 +287,8 @@ arguments:
|
|
286
287
|
except Exception as e:
|
287
288
|
PrettyOutput.print(f"工具调用错误: {str(e)}", OutputType.ERROR)
|
288
289
|
return
|
290
|
+
if len(result) > 0:
|
291
|
+
PrettyOutput.print("执行工具调用...", OutputType.PROGRESS)
|
292
|
+
tool_result = self.tool_registry.handle_tool_calls(result)
|
293
|
+
PrettyOutput.print(tool_result, OutputType.RESULT)
|
289
294
|
|
Binary file
|
Binary file
|
jarvis/models/ai8.py
CHANGED
@@ -59,7 +59,7 @@ class AI8Model(BaseModel):
|
|
59
59
|
PrettyOutput.print("ERNIE-3.5-128K", OutputType.INFO)
|
60
60
|
|
61
61
|
|
62
|
-
PrettyOutput.print("使用AI8_MODEL
|
62
|
+
PrettyOutput.print("使用AI8_MODEL环境变量配置模型", OutputType.SUCCESS)
|
63
63
|
|
64
64
|
self.system_message = ""
|
65
65
|
self.conversation = None
|
jarvis/models/oyi.py
CHANGED
@@ -39,7 +39,7 @@ class OyiModel(BaseModel):
|
|
39
39
|
PrettyOutput.print("generalv3.5", OutputType.INFO)
|
40
40
|
PrettyOutput.print("gemini-pro", OutputType.INFO)
|
41
41
|
PrettyOutput.print("llama3-70b-8192", OutputType.INFO)
|
42
|
-
PrettyOutput.print("使用OYI_MODEL
|
42
|
+
PrettyOutput.print("使用OYI_MODEL环境变量配置模型", OutputType.SUCCESS)
|
43
43
|
|
44
44
|
|
45
45
|
self.messages = []
|
Binary file
|
Binary file
|
jarvis/tools/methodology.py
CHANGED
@@ -8,7 +8,7 @@ class MethodologyTool:
|
|
8
8
|
"""经验管理工具"""
|
9
9
|
|
10
10
|
name = "methodology"
|
11
|
-
description = "
|
11
|
+
description = "管理问题处理经验总结,支持添加、更新、删除操作"
|
12
12
|
parameters = {
|
13
13
|
"type": "object",
|
14
14
|
"properties": {
|
@@ -23,7 +23,7 @@ class MethodologyTool:
|
|
23
23
|
},
|
24
24
|
"content": {
|
25
25
|
"type": "string",
|
26
|
-
"description": "
|
26
|
+
"description": "经验总结内容 (update/add 时必需)",
|
27
27
|
"optional": True
|
28
28
|
}
|
29
29
|
},
|
@@ -36,39 +36,39 @@ class MethodologyTool:
|
|
36
36
|
self._ensure_file_exists()
|
37
37
|
|
38
38
|
def _ensure_file_exists(self):
|
39
|
-
"""
|
39
|
+
"""确保经验总结文件存在"""
|
40
40
|
if not os.path.exists(self.methodology_file):
|
41
41
|
try:
|
42
42
|
with open(self.methodology_file, 'w', encoding='utf-8') as f:
|
43
43
|
yaml.safe_dump({}, f, allow_unicode=True)
|
44
44
|
except Exception as e:
|
45
|
-
PrettyOutput.print(f"
|
45
|
+
PrettyOutput.print(f"创建经验总结文件失败: {str(e)}", OutputType.ERROR)
|
46
46
|
|
47
47
|
def _load_methodologies(self) -> Dict:
|
48
|
-
"""
|
48
|
+
"""加载所有经验总结"""
|
49
49
|
try:
|
50
50
|
with open(self.methodology_file, 'r', encoding='utf-8') as f:
|
51
51
|
return yaml.safe_load(f) or {}
|
52
52
|
except Exception as e:
|
53
|
-
PrettyOutput.print(f"
|
53
|
+
PrettyOutput.print(f"加载经验总结失败: {str(e)}", OutputType.ERROR)
|
54
54
|
return {}
|
55
55
|
|
56
56
|
def _save_methodologies(self, methodologies: Dict):
|
57
|
-
"""
|
57
|
+
"""保存所有经验总结"""
|
58
58
|
try:
|
59
59
|
with open(self.methodology_file, 'w', encoding='utf-8') as f:
|
60
60
|
yaml.safe_dump(methodologies, f, allow_unicode=True)
|
61
61
|
except Exception as e:
|
62
|
-
PrettyOutput.print(f"
|
62
|
+
PrettyOutput.print(f"保存经验总结失败: {str(e)}", OutputType.ERROR)
|
63
63
|
|
64
64
|
def execute(self, args: Dict[str, Any]) -> Dict[str, Any]:
|
65
|
-
"""
|
65
|
+
"""执行经验总结管理操作
|
66
66
|
|
67
67
|
Args:
|
68
68
|
args: 包含操作参数的字典
|
69
69
|
- operation: 操作类型 (delete/update/add)
|
70
70
|
- problem_type: 问题类型
|
71
|
-
- content:
|
71
|
+
- content: 经验总结内容 (update/add 时必需)
|
72
72
|
|
73
73
|
Returns:
|
74
74
|
Dict[str, Any]: 包含执行结果的字典
|
@@ -92,32 +92,28 @@ class MethodologyTool:
|
|
92
92
|
self._save_methodologies(methodologies)
|
93
93
|
return {
|
94
94
|
"success": True,
|
95
|
-
"stdout": f"已删除问题类型 '{problem_type}'
|
95
|
+
"stdout": f"已删除问题类型 '{problem_type}' 的经验总结"
|
96
96
|
}
|
97
97
|
else:
|
98
98
|
return {
|
99
99
|
"success": False,
|
100
|
-
"error": f"未找到问题类型 '{problem_type}'
|
100
|
+
"error": f"未找到问题类型 '{problem_type}' 的经验总结"
|
101
101
|
}
|
102
102
|
|
103
103
|
elif operation in ["update", "add"]:
|
104
104
|
if not content:
|
105
105
|
return {
|
106
106
|
"success": False,
|
107
|
-
"error":
|
108
|
-
}
|
109
|
-
|
110
|
-
if operation == "update" and problem_type not in methodologies:
|
111
|
-
return {
|
112
|
-
"success": False,
|
113
|
-
"error": f"未找到问题类型 '{problem_type}' 的方法论,无法更新"
|
107
|
+
"error": "需要提供经验总结内容"
|
114
108
|
}
|
115
109
|
|
116
110
|
methodologies[problem_type] = content
|
117
111
|
self._save_methodologies(methodologies)
|
112
|
+
|
113
|
+
action = "更新" if problem_type in methodologies else "添加"
|
118
114
|
return {
|
119
115
|
"success": True,
|
120
|
-
"stdout": f"已{
|
116
|
+
"stdout": f"已{action}问题类型 '{problem_type}' 的经验总结"
|
121
117
|
}
|
122
118
|
|
123
119
|
else:
|
@@ -133,13 +129,13 @@ class MethodologyTool:
|
|
133
129
|
}
|
134
130
|
|
135
131
|
def get_methodology(self, problem_type: str) -> Optional[str]:
|
136
|
-
"""
|
132
|
+
"""获取指定问题类型的经验总结
|
137
133
|
|
138
134
|
Args:
|
139
135
|
problem_type: 问题类型
|
140
136
|
|
141
137
|
Returns:
|
142
|
-
Optional[str]:
|
138
|
+
Optional[str]: 经验总结内容,如果不存在则返回 None
|
143
139
|
"""
|
144
140
|
methodologies = self._load_methodologies()
|
145
141
|
return methodologies.get(problem_type)
|
jarvis/tools/registry.py
CHANGED
@@ -99,7 +99,7 @@ class ToolRegistry:
|
|
99
99
|
parameters=tool_instance.parameters,
|
100
100
|
func=tool_instance.execute
|
101
101
|
)
|
102
|
-
PrettyOutput.print(f"
|
102
|
+
PrettyOutput.print(f"从 {file_path} 加载工具: {tool_instance.name}: {tool_instance.description}", OutputType.INFO)
|
103
103
|
tool_found = True
|
104
104
|
|
105
105
|
if not tool_found:
|
@@ -1,34 +1,34 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/agent.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=1K8mUIwEsy3sPUIxD7iDbKMFX8NiGdBp69nW5a43mLE,50
|
2
|
+
jarvis/agent.py,sha256=i_tETgROksmPp95RYnwb7m-ERl0Ob1OEybXXcXJUpPk,12213
|
3
3
|
jarvis/main.py,sha256=FOfc2v7iX9my5USyf4oxcGzyJe4AH4TwIEQk2WdNWrI,5768
|
4
4
|
jarvis/utils.py,sha256=JlkuC9RtspXH2VWDmj9nR0vnb8ie1gIsKc4vC7WRco8,7321
|
5
|
-
jarvis/__pycache__/__init__.cpython-313.pyc,sha256=
|
6
|
-
jarvis/__pycache__/agent.cpython-313.pyc,sha256=
|
5
|
+
jarvis/__pycache__/__init__.cpython-313.pyc,sha256=y7E-wyD0KJpDfXJV1b-kHQFkNsSNBhIk3DalwVG3xBs,209
|
6
|
+
jarvis/__pycache__/agent.cpython-313.pyc,sha256=OfeSUMB3KcaFXrCiYENrFVcdfRyxBNQks3OtVb8PXO4,15864
|
7
7
|
jarvis/__pycache__/main.cpython-313.pyc,sha256=KKVD1bs_4MDOdq2f04rsJpI8Osp959Fo5KOsUUBvrDM,7985
|
8
8
|
jarvis/__pycache__/models.cpython-313.pyc,sha256=uWuRIjGrY4YDB3dGW5PGDLWaS03et8g11O725TjY_eU,5960
|
9
9
|
jarvis/__pycache__/tools.cpython-313.pyc,sha256=lAD4LrnnWzNZQmHXGfZ_2l7oskOpr2_2OC-gdFhxQY8,33933
|
10
10
|
jarvis/__pycache__/utils.cpython-313.pyc,sha256=eXXM-V-2ax7qBNxktdUrEIwhAXPQHAlI7gLGewlKOj4,10276
|
11
11
|
jarvis/__pycache__/zte_llm.cpython-313.pyc,sha256=kMm9IGundGmOPqjsgrm9oIaWLDagYGCPRAaE3ipkc-0,5662
|
12
12
|
jarvis/models/__init__.py,sha256=Lqb1NWFIfq7HlZIsJ7eUGyGjdYyaJqOoOf7cG_yo73A,57
|
13
|
-
jarvis/models/ai8.py,sha256=
|
13
|
+
jarvis/models/ai8.py,sha256=WfvQzSDUz19EVgqOwDzhlvPy5rNRS0bMkSNqWDwgIG4,11469
|
14
14
|
jarvis/models/base.py,sha256=dNkYPg9ISrHGEpmQLN9kxCDU-kqJAJlm_owdDC302Dk,1132
|
15
15
|
jarvis/models/kimi.py,sha256=iI8mBzUxiyxa_bzDG9uwE3BZtreEUt0EJOIP_l2rSDM,16788
|
16
16
|
jarvis/models/openai.py,sha256=aFpRH6K0YG6suCRGlJLw2JzLh2Ftpn6AYhdnKtMQQlY,3940
|
17
|
-
jarvis/models/oyi.py,sha256=
|
17
|
+
jarvis/models/oyi.py,sha256=6EzUcPkE5dtVZJa8zMhFfcjdKPPFVCg6hqYtFzgh9zM,12231
|
18
18
|
jarvis/models/registry.py,sha256=ecIo3a0G-pRPw4eg77ozzbGVh6vy93DHF8oAnU2g51w,7511
|
19
19
|
jarvis/models/__pycache__/__init__.cpython-313.pyc,sha256=hD4Uui0EPCTfoPOasTYzIi46Kv_q7OI8m-Lck-nX4zM,220
|
20
|
-
jarvis/models/__pycache__/ai8.cpython-313.pyc,sha256=
|
20
|
+
jarvis/models/__pycache__/ai8.cpython-313.pyc,sha256=4tK3twFcGA4gbKciw9GpiI4-e9CxHPINtwvOz3sN_1I,14787
|
21
21
|
jarvis/models/__pycache__/base.cpython-313.pyc,sha256=9VvOXFPYOrB-2pO2py7dWOVbimODnXQJFLlFbyF7-LI,2207
|
22
22
|
jarvis/models/__pycache__/kimi.cpython-313.pyc,sha256=FGtHoTv747oNY4Lqnwf5BkGYKnevHOlIEDIlbsY7va0,20893
|
23
23
|
jarvis/models/__pycache__/openai.cpython-313.pyc,sha256=CU3KaUA0XcOK55sexF7OxfQ6_jdofABsufmFxm0T3mk,6004
|
24
|
-
jarvis/models/__pycache__/oyi.cpython-313.pyc,sha256=
|
24
|
+
jarvis/models/__pycache__/oyi.cpython-313.pyc,sha256=HbZxBtfuR6G_KkKNCmI924SGtRb1tTfexg6Mw2paLtA,14049
|
25
25
|
jarvis/models/__pycache__/registry.cpython-313.pyc,sha256=jUZUyHyfzeQtjCdk2NCZGTsTUsvKyIlnZVDzZY1gLuU,9985
|
26
26
|
jarvis/tools/__init__.py,sha256=Kj1bKj34lwRDKMKHLOrLyQElf2lHbqA2tDgP359eaDo,71
|
27
27
|
jarvis/tools/base.py,sha256=EGRGbdfbLXDLwtyoWdvp9rlxNX7bzc20t0Vc2VkwIEY,652
|
28
28
|
jarvis/tools/file_ops.py,sha256=h8g0eT9UvlJf4kt0DLXvdSsjcPj7x19lxWdDApeDfpg,3842
|
29
29
|
jarvis/tools/generator.py,sha256=qyNdarq5SGEFBjkIlohk13cP5wV9IeQK5qJs7MwGUZg,5740
|
30
|
-
jarvis/tools/methodology.py,sha256=
|
31
|
-
jarvis/tools/registry.py,sha256=
|
30
|
+
jarvis/tools/methodology.py,sha256=G3cOaHTMujGZBhDLhQEqyCV2NISizO3MXRuho1KfI6Y,5223
|
31
|
+
jarvis/tools/registry.py,sha256=_M18bNfcn39razBo47IXtxUnT625oQIrkKx45qq2Ims,7180
|
32
32
|
jarvis/tools/shell.py,sha256=UPKshPyOaUwTngresUw-ot1jHjQIb4wCY5nkJqa38lU,2520
|
33
33
|
jarvis/tools/sub_agent.py,sha256=rEtAmSVY2ZjFOZEKr5m5wpACOQIiM9Zr_3dT92FhXYU,2621
|
34
34
|
jarvis/tools/__pycache__/__init__.cpython-313.pyc,sha256=2ezw_ULVg9CJCUdX-RXTgYHLxQBs5X7wWJu1GNAN3ro,231
|
@@ -38,10 +38,10 @@ jarvis/tools/__pycache__/calculator.cpython-313.pyc,sha256=C_qwTDGm6gc7QNxtPzPZX
|
|
38
38
|
jarvis/tools/__pycache__/calculator_tool.cpython-313.pyc,sha256=PI4LZNDTPdSe3ffWDRovLZ-r-vF8Kl-n6xdGdFWiBpY,4296
|
39
39
|
jarvis/tools/__pycache__/file_ops.cpython-313.pyc,sha256=qfgRIcO7JFsa_FxOOXV-3pNSnlovZDrcIkZ1WN3pOJI,3773
|
40
40
|
jarvis/tools/__pycache__/generator.cpython-313.pyc,sha256=sSO-y6fREIenF4cvFgaAtd0rAu95Epd5VZpjhmOfPRk,6155
|
41
|
-
jarvis/tools/__pycache__/methodology.cpython-313.pyc,sha256=
|
41
|
+
jarvis/tools/__pycache__/methodology.cpython-313.pyc,sha256=GWPSF5b0i6gUsgvJgXIkVQHpLRYQ7OzEiTLwe6aAuWU,6226
|
42
42
|
jarvis/tools/__pycache__/python_script.cpython-313.pyc,sha256=8JpryqTovEiTvBlWAK1KjZmPvHUuPc9GT9rTXBEQoJc,6693
|
43
43
|
jarvis/tools/__pycache__/rag.cpython-313.pyc,sha256=JH6-PSZRMKAvTZqCwlRXJGClxYXNMs-vetU0q7hBLz0,6064
|
44
|
-
jarvis/tools/__pycache__/registry.cpython-313.pyc,sha256=
|
44
|
+
jarvis/tools/__pycache__/registry.cpython-313.pyc,sha256=BE91SasFW5pLIGvnaEuy0wMVLowLStK9xwsGXoPTYdw,9344
|
45
45
|
jarvis/tools/__pycache__/search.cpython-313.pyc,sha256=wLMIkFwT-h4NGHgssytT4xme7sGO6ZhEnex7kjcy0-k,5990
|
46
46
|
jarvis/tools/__pycache__/shell.cpython-313.pyc,sha256=ATt7BraEX6Sd3Ih6etwFpZ8fYczlZn5f0IqdjaqXt6c,3349
|
47
47
|
jarvis/tools/__pycache__/sub_agent.cpython-313.pyc,sha256=ROqk3BEwB_2-ALp6jG3wf18ShUr1lO0bhJjibOn6f3o,2799
|
@@ -49,9 +49,9 @@ jarvis/tools/__pycache__/user_confirmation.cpython-313.pyc,sha256=wK3Ev10lHSUSRv
|
|
49
49
|
jarvis/tools/__pycache__/user_input.cpython-313.pyc,sha256=JjTFOhObKsKF4Pn8KBRuKfV1_Ssj083fjU7Mfc_5z7c,2531
|
50
50
|
jarvis/tools/__pycache__/user_interaction.cpython-313.pyc,sha256=RuVZ-pmiPBDywY3efgXSfohMAciC1avMGPmBK5qlnew,3305
|
51
51
|
jarvis/tools/__pycache__/webpage.cpython-313.pyc,sha256=BjzSfnNzsKCrLETCcWjt32lNDLzwnjqcVGg4JfWd9OM,3008
|
52
|
-
jarvis_ai_assistant-0.1.
|
53
|
-
jarvis_ai_assistant-0.1.
|
54
|
-
jarvis_ai_assistant-0.1.
|
55
|
-
jarvis_ai_assistant-0.1.
|
56
|
-
jarvis_ai_assistant-0.1.
|
57
|
-
jarvis_ai_assistant-0.1.
|
52
|
+
jarvis_ai_assistant-0.1.36.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
53
|
+
jarvis_ai_assistant-0.1.36.dist-info/METADATA,sha256=vCANngD8_2pKamajo7DXgPMM54K13Ja6s5iBtqsPqLk,9765
|
54
|
+
jarvis_ai_assistant-0.1.36.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
55
|
+
jarvis_ai_assistant-0.1.36.dist-info/entry_points.txt,sha256=iKu7OMfew9dtfGhW71gIMTg4wvafuPqKb4wyQOnMAGU,44
|
56
|
+
jarvis_ai_assistant-0.1.36.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
57
|
+
jarvis_ai_assistant-0.1.36.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{jarvis_ai_assistant-0.1.34.dist-info → jarvis_ai_assistant-0.1.36.dist-info}/entry_points.txt
RENAMED
File without changes
|
File without changes
|