jarvis-ai-assistant 0.1.34__py3-none-any.whl → 0.1.36__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/__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
|