jarvis-ai-assistant 0.1.42__py3-none-any.whl → 0.1.44__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
jarvis/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """Jarvis AI Assistant"""
2
2
 
3
- __version__ = "0.1.42"
3
+ __version__ = "0.1.44"
Binary file
Binary file
Binary file
jarvis/agent.py CHANGED
@@ -20,7 +20,7 @@ class Agent:
20
20
  name: Agent名称,默认为"Jarvis"
21
21
  is_sub_agent: 是否为子Agent,默认为False
22
22
  """
23
- self.model = PlatformRegistry.get_platform()
23
+ self.model = PlatformRegistry.get_global_platform()
24
24
  self.tool_registry = ToolRegistry.get_global_tool_registry()
25
25
  self.name = name
26
26
  self.is_sub_agent = is_sub_agent
jarvis/main.py CHANGED
@@ -114,7 +114,7 @@ def main():
114
114
  PrettyOutput.print("未指定AI平台,请使用 -p 参数或者设置 JARVIS_PLATFORM 环境变量", OutputType.ERROR)
115
115
  return 1
116
116
 
117
- PlatformRegistry.get_platform_registry().set_global_platform(platform)
117
+ PlatformRegistry.get_global_platform_registry().set_global_platform_name(platform)
118
118
 
119
119
  try:
120
120
  # 获取全局模型实例
jarvis/models/ai8.py CHANGED
@@ -14,59 +14,64 @@ class AI8Model(BasePlatform):
14
14
 
15
15
  def __init__(self):
16
16
  """Initialize model"""
17
- PrettyOutput.section("支持的模型", OutputType.SUCCESS)
18
-
19
- PrettyOutput.print("gpt-3.5-turbo", OutputType.INFO)
20
- PrettyOutput.print("gpt-4-turbo", OutputType.INFO)
21
- PrettyOutput.print("gpt-4o", OutputType.INFO)
22
- PrettyOutput.print("gpt-4o-mini", OutputType.INFO)
23
- PrettyOutput.print("o1-mini", OutputType.INFO)
24
- PrettyOutput.print("gpt-4-vision-preview", OutputType.INFO)
25
- PrettyOutput.print("gpt-4-turbo-preview", OutputType.INFO)
26
- PrettyOutput.print("o1-mini-all", OutputType.INFO)
27
- PrettyOutput.print("gpt-4o-all", OutputType.INFO)
28
- PrettyOutput.print("o1-preview", OutputType.INFO)
29
- PrettyOutput.print("claude-3-5-sonnet-20241022", OutputType.INFO)
30
- PrettyOutput.print("claude-3-opus-20240229", OutputType.INFO)
31
- PrettyOutput.print("claude-3-haiku-20240307", OutputType.INFO)
32
- PrettyOutput.print("claude-3-5-sonnet-20240620", OutputType.INFO)
33
- PrettyOutput.print("deepseek-chat", OutputType.INFO)
34
- PrettyOutput.print("deepseek-coder", OutputType.INFO)
35
- PrettyOutput.print("glm-4-flash", OutputType.INFO)
36
- PrettyOutput.print("glm-4-air", OutputType.INFO)
37
- PrettyOutput.print("glm-4v-flash", OutputType.INFO)
38
- PrettyOutput.print("qwen-plus", OutputType.INFO)
39
- PrettyOutput.print("qwen-vl-max", OutputType.INFO)
40
- PrettyOutput.print("qwen-turbo", OutputType.INFO)
41
- PrettyOutput.print("lite", OutputType.INFO)
42
- PrettyOutput.print("generalv3.5", OutputType.INFO)
43
- PrettyOutput.print("yi-lightning", OutputType.INFO)
44
- PrettyOutput.print("yi-vision", OutputType.INFO)
45
- PrettyOutput.print("yi-spark", OutputType.INFO)
46
- PrettyOutput.print("yi-medium", OutputType.INFO)
47
- PrettyOutput.print("Doubao-lite-4k", OutputType.INFO)
48
- PrettyOutput.print("Doubao-lite-32k", OutputType.INFO)
49
- PrettyOutput.print("Doubao-pro-4k", OutputType.INFO)
50
- PrettyOutput.print("Doubao-pro-32k", OutputType.INFO)
51
- PrettyOutput.print("step-1-flash", OutputType.INFO)
52
- PrettyOutput.print("step-1v-8k", OutputType.INFO)
53
- PrettyOutput.print("Baichuan4-Air", OutputType.INFO)
54
- PrettyOutput.print("Baichuan4-Turbo", OutputType.INFO)
55
- PrettyOutput.print("moonshot-v1-8k", OutputType.INFO)
56
- PrettyOutput.print("ERNIE-Speed-128K", OutputType.INFO)
57
- PrettyOutput.print("ERNIE-3.5-128K", OutputType.INFO)
58
-
59
-
60
- PrettyOutput.print("使用AI8_MODEL环境变量配置模型", OutputType.SUCCESS)
61
-
62
17
  self.system_message = ""
63
18
  self.conversation = None
64
19
  self.files = []
65
- self.model = os.getenv("AI8_MODEL") or "deepseek-chat"
20
+ self.models = {} # 存储模型信息
21
+
22
+ # 获取可用模型列表
23
+ available_models = self.get_available_models()
24
+
25
+ if available_models:
26
+ PrettyOutput.section("支持的模型", OutputType.SUCCESS)
27
+ for model in self.models.values():
28
+ # 格式化显示模型信息
29
+ model_str = f"{model['value']:<30}"
30
+
31
+ # 添加标签
32
+ model_str += f"{model['label']}"
33
+
34
+ # 添加标签和积分信息
35
+ attrs = []
36
+ if model['attr'].get('tag'):
37
+ attrs.append(model['attr']['tag'])
38
+ if model['attr'].get('integral'):
39
+ attrs.append(model['attr']['integral'])
40
+
41
+ # 添加特性标记
42
+ features = []
43
+ if model['attr'].get('multimodal'):
44
+ features.append("多模态")
45
+ if model['attr'].get('plugin'):
46
+ features.append("插件支持")
47
+ if model['attr'].get('onlyImg'):
48
+ features.append("图像支持")
49
+ if features:
50
+ model_str += f" [{'|'.join(features)}]"
51
+
52
+ # 添加备注
53
+ if model['attr'].get('note'):
54
+ model_str += f" - {model['attr']['note']}"
55
+
56
+ PrettyOutput.print(model_str, OutputType.INFO)
57
+ else:
58
+ PrettyOutput.print("获取模型列表失败", OutputType.WARNING)
59
+
66
60
  self.token = os.getenv("AI8_API_KEY")
67
- if not all([self.model, self.token]):
68
- raise Exception("AI8_MODEL or AI8_API_KEY is not set")
69
- PrettyOutput.print(f"当前使用模型: {self.model}", OutputType.SYSTEM)
61
+ if not self.token:
62
+ raise Exception("AI8_API_KEY is not set")
63
+
64
+ PrettyOutput.print("使用AI8_MODEL环境变量配置模型", OutputType.SUCCESS)
65
+
66
+ self.model_name = os.getenv("AI8_MODEL") or "deepseek-chat"
67
+ if self.model_name not in self.models:
68
+ PrettyOutput.print(f"警告: 当前选择的模型 {self.model_name} 不在可用列表中", OutputType.WARNING)
69
+
70
+ PrettyOutput.print(f"当前使用模型: {self.model_name}", OutputType.SYSTEM)
71
+
72
+ def set_model_name(self, model_name: str):
73
+ """设置模型名称"""
74
+ self.model_name = model_name
70
75
 
71
76
  def create_conversation(self) -> bool:
72
77
  """Create a new conversation"""
@@ -102,7 +107,7 @@ class AI8Model(BasePlatform):
102
107
  # 2. 更新会话设置
103
108
  session_data = {
104
109
  **self.conversation,
105
- "model": self.model,
110
+ "model": self.model_name,
106
111
  "contextCount": 1024,
107
112
  "prompt": self.system_message,
108
113
  "plugins": ["tavily_search"],
@@ -228,7 +233,7 @@ class AI8Model(BasePlatform):
228
233
 
229
234
  def name(self) -> str:
230
235
  """Return model name"""
231
- return self.model
236
+ return self.model_name
232
237
 
233
238
  def reset(self):
234
239
  """Reset model state"""
@@ -275,3 +280,45 @@ class AI8Model(BasePlatform):
275
280
  PrettyOutput.print(f"删除会话异常: {str(e)}", OutputType.ERROR)
276
281
  return False
277
282
 
283
+ def get_available_models(self) -> List[str]:
284
+ """获取可用的模型列表
285
+
286
+ Returns:
287
+ List[str]: 可用模型名称列表
288
+ """
289
+ try:
290
+ headers = {
291
+ 'Content-Type': 'application/json',
292
+ 'Accept': 'application/json, text/plain, */*',
293
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
294
+ 'X-APP-VERSION': '2.2.2',
295
+ 'Origin': self.BASE_URL,
296
+ 'Referer': f'{self.BASE_URL}/chat?_userMenuKey=chat'
297
+ }
298
+
299
+ response = requests.get(
300
+ f"{self.BASE_URL}/api/chat/template",
301
+ headers=headers
302
+ )
303
+
304
+ if response.status_code != 200:
305
+ PrettyOutput.print(f"获取模型列表失败: {response.status_code}", OutputType.ERROR)
306
+ return []
307
+
308
+ data = response.json()
309
+ if data['code'] != 0:
310
+ PrettyOutput.print(f"获取模型列表失败: {data.get('msg', '未知错误')}", OutputType.ERROR)
311
+ return []
312
+
313
+ # 保存模型信息
314
+ self.models = {
315
+ model['value']: model
316
+ for model in data['data']['models']
317
+ }
318
+
319
+ return list(self.models.keys())
320
+
321
+ except Exception as e:
322
+ PrettyOutput.print(f"获取模型列表异常: {str(e)}", OutputType.ERROR)
323
+ return []
324
+
jarvis/models/base.py CHANGED
@@ -1,6 +1,5 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from typing import Dict, List
3
- from ..utils import OutputType, PrettyOutput
4
3
 
5
4
 
6
5
  class BasePlatform(ABC):
@@ -9,8 +8,11 @@ class BasePlatform(ABC):
9
8
  def __init__(self):
10
9
  """初始化模型"""
11
10
  pass
11
+
12
+ def set_model_name(self, model_name: str):
13
+ """设置模型名称"""
14
+ raise NotImplementedError("set_model_name is not implemented")
12
15
 
13
-
14
16
  @abstractmethod
15
17
  def chat(self, message: str) -> str:
16
18
  """执行对话"""
jarvis/models/kimi.py CHANGED
@@ -45,6 +45,10 @@ class KimiModel(BasePlatform):
45
45
  """设置系统消息"""
46
46
  self.system_message = message
47
47
 
48
+ def set_model_name(self, model_name: str):
49
+ """设置模型名称"""
50
+ pass
51
+
48
52
  def _create_chat(self) -> bool:
49
53
  """创建新的对话会话"""
50
54
  url = "https://kimi.moonshot.cn/api/chat"
jarvis/models/openai.py CHANGED
@@ -30,9 +30,9 @@ class OpenAIModel(BasePlatform):
30
30
  raise Exception("OPENAI_API_KEY is not set")
31
31
 
32
32
  self.base_url = os.getenv("OPENAI_API_BASE", "https://api.deepseek.com")
33
- self.model = os.getenv("OPENAI_MODEL_NAME", "deepseek-chat")
33
+ self.model_name = os.getenv("OPENAI_MODEL_NAME", "deepseek-chat")
34
34
 
35
- PrettyOutput.print(f"当前使用模型: {self.model}", OutputType.SYSTEM)
35
+ PrettyOutput.print(f"当前使用模型: {self.model_name}", OutputType.SYSTEM)
36
36
 
37
37
  self.client = OpenAI(
38
38
  api_key=self.api_key,
@@ -41,6 +41,10 @@ class OpenAIModel(BasePlatform):
41
41
  self.messages: List[Dict[str, str]] = []
42
42
  self.system_message = ""
43
43
 
44
+ def set_model_name(self, model_name: str):
45
+ """设置模型名称"""
46
+ self.model_name = model_name
47
+
44
48
  def set_system_message(self, message: str):
45
49
  """设置系统消息"""
46
50
  self.system_message = message
@@ -55,7 +59,7 @@ class OpenAIModel(BasePlatform):
55
59
  self.messages.append({"role": "user", "content": message})
56
60
 
57
61
  response = self.client.chat.completions.create(
58
- model=self.model, # 使用配置的模型名称
62
+ model=self.model_name, # 使用配置的模型名称
59
63
  messages=self.messages,
60
64
  stream=True
61
65
  )
@@ -82,7 +86,7 @@ class OpenAIModel(BasePlatform):
82
86
 
83
87
  def name(self) -> str:
84
88
  """返回模型名称"""
85
- return self.model
89
+ return self.model_name
86
90
 
87
91
  def reset(self):
88
92
  """重置模型状态"""
jarvis/models/oyi.py CHANGED
@@ -15,43 +15,36 @@ class OyiModel(BasePlatform):
15
15
  def __init__(self):
16
16
  """Initialize model"""
17
17
  PrettyOutput.section("支持的模型", OutputType.SUCCESS)
18
- PrettyOutput.print("gpt-4o-mini", OutputType.INFO)
19
- PrettyOutput.print("gpt-3.5-turbo", OutputType.INFO)
20
- PrettyOutput.print("gpt-4o", OutputType.INFO)
21
- PrettyOutput.print("gpt-4o-2024-11-20", OutputType.INFO)
22
- PrettyOutput.print("o1-mini", OutputType.INFO)
23
- PrettyOutput.print("o1-mini-2024-09-12", OutputType.INFO)
24
- PrettyOutput.print("gpt-4o-all", OutputType.INFO)
25
- PrettyOutput.print("claude-3-5-sonnet-20240620", OutputType.INFO)
26
- PrettyOutput.print("claude-3-opus-20240229", OutputType.INFO)
27
- PrettyOutput.print("deepseek-chat", OutputType.INFO)
28
- PrettyOutput.print("deepseek-coder", OutputType.INFO)
29
- PrettyOutput.print("glm-4-flash", OutputType.INFO)
30
- PrettyOutput.print("glm-4-air", OutputType.INFO)
31
- PrettyOutput.print("qwen-plus", OutputType.INFO)
32
- PrettyOutput.print("qwen-turbo", OutputType.INFO)
33
- PrettyOutput.print("Doubao-lite-4k", OutputType.INFO)
34
- PrettyOutput.print("Doubao-pro-4k", OutputType.INFO)
35
- PrettyOutput.print("yi-lightning", OutputType.INFO)
36
- PrettyOutput.print("step-1-flash", OutputType.INFO)
37
- PrettyOutput.print("moonshot-v1-8k", OutputType.INFO)
38
- PrettyOutput.print("lite", OutputType.INFO)
39
- PrettyOutput.print("generalv3.5", OutputType.INFO)
40
- PrettyOutput.print("gemini-pro", OutputType.INFO)
41
- PrettyOutput.print("llama3-70b-8192", OutputType.INFO)
18
+
19
+ # 获取可用模型列表
20
+ available_models = self.get_available_models()
21
+ if available_models:
22
+ for model in available_models:
23
+ PrettyOutput.print(model, OutputType.INFO)
24
+ else:
25
+ PrettyOutput.print("获取模型列表失败", OutputType.WARNING)
26
+
42
27
  PrettyOutput.print("使用OYI_MODEL环境变量配置模型", OutputType.SUCCESS)
43
28
 
44
-
45
29
  self.messages = []
46
30
  self.system_message = ""
47
31
  self.conversation = None
48
32
  self.upload_files = []
49
33
  self.first_chat = True
50
- self.model = os.getenv("OYI_MODEL") or "deepseek-chat"
34
+
51
35
  self.token = os.getenv("OYI_API_KEY")
52
- if not all([self.model, self.token]):
53
- raise Exception("OYI_MODEL or OYI_API_KEY is not set")
54
- PrettyOutput.print(f"当前使用模型: {self.model}", OutputType.SYSTEM)
36
+ if not self.token:
37
+ raise Exception("OYI_API_KEY is not set")
38
+
39
+ self.model_name = os.getenv("OYI_MODEL") or "deepseek-chat"
40
+ if self.model_name not in [m.split()[0] for m in available_models]:
41
+ PrettyOutput.print(f"警告: 当前选择的模型 {self.model_name} 不在可用列表中", OutputType.WARNING)
42
+
43
+ PrettyOutput.print(f"当前使用模型: {self.model_name}", OutputType.SYSTEM)
44
+
45
+ def set_model_name(self, model_name: str):
46
+ """设置模型名称"""
47
+ self.model_name = model_name
55
48
 
56
49
 
57
50
  def create_conversation(self) -> bool:
@@ -71,7 +64,7 @@ class OyiModel(BasePlatform):
71
64
  "isLock": False,
72
65
  "systemMessage": "",
73
66
  "params": json.dumps({
74
- "model": self.model,
67
+ "model": self.model_name,
75
68
  "is_webSearch": True,
76
69
  "message": [],
77
70
  "systemMessage": None,
@@ -202,7 +195,7 @@ class OyiModel(BasePlatform):
202
195
 
203
196
  def name(self) -> str:
204
197
  """Return model name"""
205
- return self.model
198
+ return self.model_name
206
199
 
207
200
  def reset(self):
208
201
  """Reset model state"""
@@ -261,6 +254,12 @@ class OyiModel(BasePlatform):
261
254
  Dict: Upload response data
262
255
  """
263
256
  try:
257
+ # 检查当前模型是否支持文件上传
258
+ model_info = self.models.get(self.model_name)
259
+ if not model_info or not model_info.get('uploadFile', False):
260
+ PrettyOutput.print(f"当前模型 {self.model_name} 不支持文件上传", OutputType.WARNING)
261
+ return None
262
+
264
263
  headers = {
265
264
  'Authorization': f'Bearer {self.token}',
266
265
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
@@ -272,7 +271,7 @@ class OyiModel(BasePlatform):
272
271
 
273
272
  with open(file_path, 'rb') as f:
274
273
  files = {
275
- 'file': (os.path.basename(file_path), f, mimetypes.guess_type(file_path)[0]) # Adjust content-type based on file type
274
+ 'file': (os.path.basename(file_path), f, mimetypes.guess_type(file_path)[0])
276
275
  }
277
276
 
278
277
  response = requests.post(
@@ -298,3 +297,70 @@ class OyiModel(BasePlatform):
298
297
  except Exception as e:
299
298
  PrettyOutput.print(f"文件上传异常: {str(e)}", OutputType.ERROR)
300
299
  return None
300
+
301
+ def get_available_models(self) -> List[str]:
302
+ """获取可用的模型列表
303
+
304
+ Returns:
305
+ List[str]: 可用模型名称列表
306
+ """
307
+ try:
308
+ headers = {
309
+ 'Content-Type': 'application/json',
310
+ 'Accept': 'application/json, text/plain, */*',
311
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
312
+ 'Origin': 'https://ai.rcouyi.com',
313
+ 'Referer': 'https://ai.rcouyi.com/'
314
+ }
315
+
316
+ response = requests.get(
317
+ "https://ai.rcouyi.com/config/system.json",
318
+ headers=headers
319
+ )
320
+
321
+ if response.status_code != 200:
322
+ PrettyOutput.print(f"获取模型列表失败: {response.status_code}", OutputType.ERROR)
323
+ return []
324
+
325
+ data = response.json()
326
+
327
+ # 保存模型信息
328
+ self.models = {
329
+ model['value']: model
330
+ for model in data.get('model', [])
331
+ if model.get('enable', False) # 只保存启用的模型
332
+ }
333
+
334
+ # 格式化显示
335
+ models = []
336
+ for model in self.models.values():
337
+ # 基本信息
338
+ model_str = f"{model['value']:<30} {model['label']}"
339
+
340
+ # 添加后缀标签
341
+ suffix = model.get('suffix', [])
342
+ if suffix:
343
+ # 处理新格式的suffix (字典列表)
344
+ if suffix and isinstance(suffix[0], dict):
345
+ suffix_str = ', '.join(s.get('tag', '') for s in suffix)
346
+ # 处理旧格式的suffix (字符串列表)
347
+ else:
348
+ suffix_str = ', '.join(str(s) for s in suffix)
349
+ model_str += f" ({suffix_str})"
350
+
351
+ # 添加描述或提示
352
+ info = model.get('tooltip') or model.get('description', '')
353
+ if info:
354
+ model_str += f" - {info}"
355
+
356
+ # 添加文件上传支持标记
357
+ if model.get('uploadFile'):
358
+ model_str += " [支持文件上传]"
359
+
360
+ models.append(model_str)
361
+
362
+ return sorted(models)
363
+
364
+ except Exception as e:
365
+ PrettyOutput.print(f"获取模型列表异常: {str(e)}", OutputType.ERROR)
366
+ return []
jarvis/models/registry.py CHANGED
@@ -130,7 +130,7 @@ class PlatformRegistry:
130
130
 
131
131
 
132
132
  @staticmethod
133
- def get_platform_registry():
133
+ def get_global_platform_registry():
134
134
  """获取全局平台注册器"""
135
135
  if PlatformRegistry.global_platform_registry is None:
136
136
  PlatformRegistry.global_platform_registry = PlatformRegistry()
@@ -152,9 +152,9 @@ class PlatformRegistry:
152
152
  self.platforms: Dict[str, Type[BasePlatform]] = {}
153
153
 
154
154
  @staticmethod
155
- def get_platform() -> BasePlatform:
155
+ def get_global_platform() -> BasePlatform:
156
156
  """获取全局平台实例"""
157
- platform = PlatformRegistry.get_platform_registry().create_platform(PlatformRegistry.global_platform_name)
157
+ platform = PlatformRegistry.get_global_platform_registry().create_platform(PlatformRegistry.global_platform_name)
158
158
  if not platform:
159
159
  raise Exception(f"Failed to create platform: {PlatformRegistry.global_platform_name}")
160
160
  return platform
@@ -194,6 +194,10 @@ class PlatformRegistry:
194
194
  """获取可用平台列表"""
195
195
  return list(self.platforms.keys())
196
196
 
197
- def set_global_platform(self, platform_name: str):
197
+ def set_global_platform_name(self, platform_name: str):
198
198
  """设置全局平台"""
199
199
  PlatformRegistry.global_platform_name = platform_name
200
+
201
+ def get_global_platform_name(self) -> str:
202
+ """获取全局平台名称"""
203
+ return PlatformRegistry.global_platform_name
jarvis/tools/generator.py CHANGED
@@ -1,3 +1,4 @@
1
+ import os
1
2
  from typing import Dict, Any
2
3
  from pathlib import Path
3
4
  from jarvis.models.registry import PlatformRegistry
@@ -41,7 +42,11 @@ class ToolGeneratorTool:
41
42
 
42
43
  def _generate_tool_code(self, tool_name: str, class_name: str, description: str, parameters: Dict) -> str:
43
44
  """使用大模型生成工具代码"""
44
- model = PlatformRegistry.get_platform()
45
+ platform_name = os.getenv("JARVIS_CODEGEN_PLATFORM") or PlatformRegistry.get_global_platform_name()
46
+ model = PlatformRegistry.create_platform(platform_name)
47
+ model_name = os.getenv("JARVIS_CODEGEN_MODEL")
48
+ if model_name:
49
+ model.set_model_name(model_name)
45
50
 
46
51
  prompt = f"""请生成一个Python工具类的代码,要求如下,除了代码,不要输出任何内容:
47
52
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.1.42
3
+ Version: 0.1.44
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
@@ -1,32 +1,32 @@
1
- jarvis/__init__.py,sha256=reJZgg3xnrq70dlR2vezFlcaoE7Jp3x5XPYaNTXTUcU,50
2
- jarvis/agent.py,sha256=X9-vfGsEVAgJ5EoS7cctfvfNxQyan3OFRdReKlHc-ro,12215
3
- jarvis/main.py,sha256=69HjqIUf1SNXNnrWQffN3XAnAAgiNpTNwbOZolNRHdQ,5831
1
+ jarvis/__init__.py,sha256=30wDVtD64NoYQ74EdslpVbhr4wp-p_fPgv7AeQ0i-Ug,50
2
+ jarvis/agent.py,sha256=5GmC9iAOerTR4JoxzrfgLSspoz6qRm1E6xEIWLTR2OI,12222
3
+ jarvis/main.py,sha256=3kpohHORc13A5RBjTSHYF7cdnc6W15hO23R78Iqnz8w,5843
4
4
  jarvis/utils.py,sha256=JlkuC9RtspXH2VWDmj9nR0vnb8ie1gIsKc4vC7WRco8,7321
5
- jarvis/__pycache__/__init__.cpython-313.pyc,sha256=mXb2FNtTXbPBTp5kdbV41lHYlIU96mTuLqD1p7PYMaU,209
6
- jarvis/__pycache__/agent.cpython-313.pyc,sha256=bG6QMODz8G5hxIxKusjQFXS5JZGAWJYqhHmUjsB2jro,15863
7
- jarvis/__pycache__/main.cpython-313.pyc,sha256=PCIqdoAHPetp3Enxqgpeo9AjOX8ViWi2Al3oiBRhqL0,8121
5
+ jarvis/__pycache__/__init__.cpython-313.pyc,sha256=Yc1GRrJWnBTglkYG4V1_bmBz7PIuq1V53ZeSEfcE-wQ,209
6
+ jarvis/__pycache__/agent.cpython-313.pyc,sha256=H7FXCYJSJm0k062oMVFZx1unUD-khreKrZfaKQ2aJqY,15870
7
+ jarvis/__pycache__/main.cpython-313.pyc,sha256=-tDMANWAyPk45zx-lnxM1_uxTUzEqrWwcBe2nWtzH2E,8133
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=mrOt67nselz_H1gX9wdAO4y2DY5WPXzABqJbr5Des8k,63
13
- jarvis/models/ai8.py,sha256=OVBsRuxtttpkGHWe4N1lXoOqDcUMtvyHAxKSN7DzMxI,11466
14
- jarvis/models/base.py,sha256=kLeT1ajmyMRTAtYDa_XDhS319BapQTmm0cfXzda2AxQ,1135
15
- jarvis/models/kimi.py,sha256=IsX0d5DcdpUFbXBQi6K-V5SYD8UdPykh_WXDxYbxOJw,17067
16
- jarvis/models/openai.py,sha256=M5WKBFCfKXGUYGyvK03NIcslHl9H7eKd-sd_R9bnGqw,4018
17
- jarvis/models/oyi.py,sha256=jTwtrnPF2_vMVBsxdtw7tjWqJWfB1r7rSwfzl2oZj6A,12315
18
- jarvis/models/registry.py,sha256=imV-P-i8NgPSHFbAwp0ERRNg8b1D8aF2yy-CS5uFDuU,7785
13
+ jarvis/models/ai8.py,sha256=9i7n_-TPbvq0AaRILs9ERQ7Vy5tDyoibXkiPsJvwQio,12520
14
+ jarvis/models/base.py,sha256=eeNJJbv9ikPVTtV_E7mgW8LZzVgjQ-OzxlHF6slYrHw,1237
15
+ jarvis/models/kimi.py,sha256=N0bPQ1ugx0RwjR96jLchmOPvCmws-fXyA0mnOAdo2k4,17161
16
+ jarvis/models/openai.py,sha256=pB7AaZuorHlmudTPaUnEbFOyl51Fy6uhU9KQBm98Ov8,4156
17
+ jarvis/models/oyi.py,sha256=12jskOgo77LWtXq4u-LX7s_sYomBJSlry4oONtdmVCU,14443
18
+ jarvis/models/registry.py,sha256=iVBjN9ImEvGHcz8WR-z8pPMJQZI907o_nccVOFANhak,7951
19
19
  jarvis/models/__pycache__/__init__.cpython-313.pyc,sha256=b9Z3owWpzLnKKwqQH6bWHZJZDeThHGD9Oa7TMCpyHwc,224
20
- jarvis/models/__pycache__/ai8.cpython-313.pyc,sha256=0pQRw9zxJtEISdOU62LucLUFYgq6aOCmHtutcQnz9cU,14769
21
- jarvis/models/__pycache__/base.cpython-313.pyc,sha256=7FnbUVRV2M9JTUYBk0VaCEkBTuc6ykWbB6MgCxIYTH4,2231
22
- jarvis/models/__pycache__/kimi.cpython-313.pyc,sha256=r1kKcog7gGtnOQ_XbZ3cEvE-zeRF9Shpq5a-B-ntYSc,21473
23
- jarvis/models/__pycache__/openai.cpython-313.pyc,sha256=EkUONtkFt5gytqondwWrtAeCruEoSNytVRtT1zG-DBU,6178
24
- jarvis/models/__pycache__/oyi.cpython-313.pyc,sha256=LKcD5gx8TTY0CXYzMeMSYHJH6CuLb4UcjzRo0rMbvbg,14238
25
- jarvis/models/__pycache__/registry.cpython-313.pyc,sha256=ID2xq5EO2ZbZTvNKi4sqkLXpgxO7xTzfgTdo2GsLLes,10106
20
+ jarvis/models/__pycache__/ai8.cpython-313.pyc,sha256=r3KAXgiIpNHC9X9Z9vbAEorDNmfeiKQOXlKiKC0A_CA,14176
21
+ jarvis/models/__pycache__/base.cpython-313.pyc,sha256=xltXUMcaO5oVNzSmz0-bhPvsH3oHWU7QEPUTPV48x-g,2419
22
+ jarvis/models/__pycache__/kimi.cpython-313.pyc,sha256=uqDghVAZe5bpw9RtVGoiFd3-hJnIkhbNDaBdrAwiq2w,21662
23
+ jarvis/models/__pycache__/openai.cpython-313.pyc,sha256=3buu7rqBwDV8mJ4wMff6xy_8pf6XPt2NYTlfIdPpz8M,6384
24
+ jarvis/models/__pycache__/oyi.cpython-313.pyc,sha256=142O2W2Qrf2OXppA_ScQVkH9Ix2OotK2tQuFW_z7S8c,15691
25
+ jarvis/models/__pycache__/registry.cpython-313.pyc,sha256=iL3zjkiOC-xUnW3SLV_UN1P_CaxS8-RJm5njLZ1z3cg,10384
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
- jarvis/tools/generator.py,sha256=eboA5wd5NtbnWlpmKZfc-t8c5T6dvzEqsYiiS1v8tIs,5742
29
+ jarvis/tools/generator.py,sha256=vVP3eN5cCDpRXf_fn0skETkPXAW1XZFWx9pt2_ahK48,5999
30
30
  jarvis/tools/methodology.py,sha256=G3cOaHTMujGZBhDLhQEqyCV2NISizO3MXRuho1KfI6Y,5223
31
31
  jarvis/tools/registry.py,sha256=NbH7A4A2lyN2IoyZGFwa5Ghed2dpzbJWCAd1Dg95WBI,7183
32
32
  jarvis/tools/shell.py,sha256=UPKshPyOaUwTngresUw-ot1jHjQIb4wCY5nkJqa38lU,2520
@@ -37,7 +37,7 @@ jarvis/tools/__pycache__/bing_search.cpython-313.pyc,sha256=1G_wPbk5wcQYh7H0drLI
37
37
  jarvis/tools/__pycache__/calculator.cpython-313.pyc,sha256=C_qwTDGm6gc7QNxtPzPZXyStdKEintJVQIt5NMHQ8oY,4205
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
- jarvis/tools/__pycache__/generator.cpython-313.pyc,sha256=6gEf-2nlMX6JLrEpaEPRIcb2daF4FlNAe1k-xlH-sgA,6154
40
+ jarvis/tools/__pycache__/generator.cpython-313.pyc,sha256=KxHCnyEZTUL3pNozcUWhMHG-cq2HAJOvi3cOEVSPX_A,6561
41
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
@@ -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.42.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
53
- jarvis_ai_assistant-0.1.42.dist-info/METADATA,sha256=qFDHaq08PqwJ8AkhHrP0R_EAwvzHuZtRdqD3g9rxOPk,10015
54
- jarvis_ai_assistant-0.1.42.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
55
- jarvis_ai_assistant-0.1.42.dist-info/entry_points.txt,sha256=iKu7OMfew9dtfGhW71gIMTg4wvafuPqKb4wyQOnMAGU,44
56
- jarvis_ai_assistant-0.1.42.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
57
- jarvis_ai_assistant-0.1.42.dist-info/RECORD,,
52
+ jarvis_ai_assistant-0.1.44.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
53
+ jarvis_ai_assistant-0.1.44.dist-info/METADATA,sha256=7GkjCkI2v9zr2UjGXletzOPTq9Hhj0sOPTF1J7aDQjo,10015
54
+ jarvis_ai_assistant-0.1.44.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
55
+ jarvis_ai_assistant-0.1.44.dist-info/entry_points.txt,sha256=iKu7OMfew9dtfGhW71gIMTg4wvafuPqKb4wyQOnMAGU,44
56
+ jarvis_ai_assistant-0.1.44.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
57
+ jarvis_ai_assistant-0.1.44.dist-info/RECORD,,