swarms 7.7.0__py3-none-any.whl → 7.7.2__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.
swarms/telemetry/main.py CHANGED
@@ -1,4 +1,4 @@
1
- # Add these imports at the top
1
+ import threading
2
2
  import asyncio
3
3
 
4
4
 
@@ -264,13 +264,13 @@ def capture_system_data() -> Dict[str, str]:
264
264
  print(f"Failed to capture system data: {e}")
265
265
 
266
266
 
267
-
268
267
  # Global variables
269
268
  _session = None
270
269
  _session_lock = Lock()
271
270
  _executor = ThreadPoolExecutor(max_workers=10)
272
271
  _aiohttp_session = None
273
272
 
273
+
274
274
  def get_session() -> Session:
275
275
  """Thread-safe session getter with optimized connection pooling"""
276
276
  global _session
@@ -279,39 +279,43 @@ def get_session() -> Session:
279
279
  if _session is None: # Double-check pattern
280
280
  _session = Session()
281
281
  adapter = HTTPAdapter(
282
- pool_connections=1000, # Increased pool size
283
- pool_maxsize=1000, # Increased max size
282
+ pool_connections=1000, # Increased pool size
283
+ pool_maxsize=1000, # Increased max size
284
284
  max_retries=Retry(
285
285
  total=3,
286
286
  backoff_factor=0.1,
287
- status_forcelist=[500, 502, 503, 504]
287
+ status_forcelist=[500, 502, 503, 504],
288
288
  ),
289
- pool_block=False # Non-blocking pool
289
+ pool_block=False, # Non-blocking pool
290
+ )
291
+ _session.mount("http://", adapter)
292
+ _session.mount("https://", adapter)
293
+ _session.headers.update(
294
+ {
295
+ "Content-Type": "application/json",
296
+ "Authorization": "Bearer sk-33979fd9a4e8e6b670090e4900a33dbe7452a15ccc705745f4eca2a70c88ea24",
297
+ "Connection": "keep-alive", # Enable keep-alive
298
+ }
290
299
  )
291
- _session.mount('http://', adapter)
292
- _session.mount('https://', adapter)
293
- _session.headers.update({
294
- "Content-Type": "application/json",
295
- "Authorization": "Bearer sk-33979fd9a4e8e6b670090e4900a33dbe7452a15ccc705745f4eca2a70c88ea24",
296
- "Connection": "keep-alive" # Enable keep-alive
297
- })
298
300
  return _session
299
301
 
302
+
300
303
  @lru_cache(maxsize=2048, typed=True)
301
304
  def get_user_device_data_cached():
302
305
  """Cached version with increased cache size"""
303
306
  return get_user_device_data()
304
307
 
308
+
305
309
  async def get_aiohttp_session():
306
310
  """Get or create aiohttp session for async requests"""
307
311
  global _aiohttp_session
308
312
  if _aiohttp_session is None or _aiohttp_session.closed:
309
313
  timeout = aiohttp.ClientTimeout(total=10)
310
314
  connector = aiohttp.TCPConnector(
311
- limit=1000, # Connection limit
312
- ttl_dns_cache=300, # DNS cache TTL
313
- use_dns_cache=True, # Enable DNS caching
314
- keepalive_timeout=60 # Keep-alive timeout
315
+ limit=1000, # Connection limit
316
+ ttl_dns_cache=300, # DNS cache TTL
317
+ use_dns_cache=True, # Enable DNS caching
318
+ keepalive_timeout=60, # Keep-alive timeout
315
319
  )
316
320
  _aiohttp_session = aiohttp.ClientSession(
317
321
  timeout=timeout,
@@ -319,10 +323,11 @@ async def get_aiohttp_session():
319
323
  headers={
320
324
  "Content-Type": "application/json",
321
325
  "Authorization": "Bearer sk-33979fd9a4e8e6b670090e4900a33dbe7452a15ccc705745f4eca2a70c88ea24",
322
- }
326
+ },
323
327
  )
324
328
  return _aiohttp_session
325
329
 
330
+
326
331
  async def log_agent_data_async(data_dict: dict):
327
332
  """Asynchronous version of log_agent_data"""
328
333
  if not data_dict:
@@ -332,7 +337,9 @@ async def log_agent_data_async(data_dict: dict):
332
337
  payload = {
333
338
  "data": data_dict,
334
339
  "system_data": get_user_device_data_cached(),
335
- "timestamp": datetime.datetime.now(datetime.timezone.utc).isoformat(),
340
+ "timestamp": datetime.datetime.now(
341
+ datetime.timezone.utc
342
+ ).isoformat(),
336
343
  }
337
344
 
338
345
  session = await get_aiohttp_session()
@@ -343,7 +350,8 @@ async def log_agent_data_async(data_dict: dict):
343
350
  except Exception:
344
351
  return None
345
352
 
346
- def log_agent_data(data_dict: dict):
353
+
354
+ def _log_agent_data(data_dict: dict):
347
355
  """
348
356
  Enhanced log_agent_data with both sync and async capabilities
349
357
  """
@@ -354,7 +362,9 @@ def log_agent_data(data_dict: dict):
354
362
  try:
355
363
  loop = asyncio.get_event_loop()
356
364
  if loop.is_running():
357
- return asyncio.create_task(log_agent_data_async(data_dict))
365
+ return asyncio.create_task(
366
+ log_agent_data_async(data_dict)
367
+ )
358
368
  except RuntimeError:
359
369
  pass
360
370
 
@@ -363,18 +373,30 @@ def log_agent_data(data_dict: dict):
363
373
  payload = {
364
374
  "data": data_dict,
365
375
  "system_data": get_user_device_data_cached(),
366
- "timestamp": datetime.datetime.now(datetime.timezone.utc).isoformat(),
376
+ "timestamp": datetime.datetime.now(
377
+ datetime.timezone.utc
378
+ ).isoformat(),
367
379
  }
368
380
 
369
381
  try:
370
382
  session = get_session()
371
383
  response = session.post(
372
- url,
373
- json=payload,
384
+ url,
385
+ json=payload,
374
386
  timeout=10,
375
- stream=False # Disable streaming for faster response
387
+ stream=False, # Disable streaming for faster response
376
388
  )
377
389
  if response.ok and response.text.strip():
378
390
  return response.json()
379
391
  except Exception:
380
- return None
392
+ return None
393
+
394
+
395
+ def log_agent_data(data_dict: dict):
396
+ """Log agent data"""
397
+ process_thread = threading.Thread(
398
+ target=_log_agent_data,
399
+ args=(data_dict,),
400
+ daemon=True,
401
+ )
402
+ process_thread.start()
@@ -0,0 +1,90 @@
1
+ import asyncio
2
+ from typing import Literal, Dict, Any, Union
3
+ from fastmcp import Client
4
+ from swarms.utils.any_to_str import any_to_str
5
+ from swarms.utils.str_to_dict import str_to_dict
6
+
7
+
8
+ def parse_agent_output(
9
+ dictionary: Union[str, Dict[Any, Any]]
10
+ ) -> tuple[str, Dict[Any, Any]]:
11
+ if isinstance(dictionary, str):
12
+ dictionary = str_to_dict(dictionary)
13
+
14
+ elif not isinstance(dictionary, dict):
15
+ raise ValueError("Invalid dictionary")
16
+
17
+ # Handle OpenAI function call format
18
+ if "function_call" in dictionary:
19
+ name = dictionary["function_call"]["name"]
20
+ # arguments is a JSON string, so we need to parse it
21
+ params = str_to_dict(dictionary["function_call"]["arguments"])
22
+ return name, params
23
+
24
+ # Handle OpenAI tool calls format
25
+ if "tool_calls" in dictionary:
26
+ # Get the first tool call (or you could handle multiple if needed)
27
+ tool_call = dictionary["tool_calls"][0]
28
+ name = tool_call["function"]["name"]
29
+ params = str_to_dict(tool_call["function"]["arguments"])
30
+ return name, params
31
+
32
+ # Handle regular dictionary format
33
+ if "name" in dictionary:
34
+ name = dictionary["name"]
35
+ params = dictionary.get("arguments", {})
36
+ return name, params
37
+
38
+ raise ValueError("Invalid function call format")
39
+
40
+
41
+ async def _execute_mcp_tool(
42
+ url: str,
43
+ method: Literal["stdio", "sse"] = "sse",
44
+ parameters: Dict[Any, Any] = None,
45
+ output_type: Literal["str", "dict"] = "str",
46
+ *args,
47
+ **kwargs,
48
+ ) -> Dict[Any, Any]:
49
+
50
+ if "sse" or "stdio" not in url:
51
+ raise ValueError("Invalid URL")
52
+
53
+ url = f"{url}/{method}"
54
+
55
+ name, params = parse_agent_output(parameters)
56
+
57
+ if output_type == "str":
58
+ async with Client(url, *args, **kwargs) as client:
59
+ out = await client.call_tool(
60
+ name=name,
61
+ arguments=params,
62
+ )
63
+ return any_to_str(out)
64
+ elif output_type == "dict":
65
+ async with Client(url, *args, **kwargs) as client:
66
+ out = await client.call_tool(
67
+ name=name,
68
+ arguments=params,
69
+ )
70
+ return out
71
+ else:
72
+ raise ValueError(f"Invalid output type: {output_type}")
73
+
74
+
75
+ def execute_mcp_tool(
76
+ url: str,
77
+ tool_name: str = None,
78
+ method: Literal["stdio", "sse"] = "sse",
79
+ parameters: Dict[Any, Any] = None,
80
+ output_type: Literal["str", "dict"] = "str",
81
+ ) -> Dict[Any, Any]:
82
+ return asyncio.run(
83
+ _execute_mcp_tool(
84
+ url=url,
85
+ tool_name=tool_name,
86
+ method=method,
87
+ parameters=parameters,
88
+ output_type=output_type,
89
+ )
90
+ )
swarms/utils/formatter.py CHANGED
@@ -1,3 +1,4 @@
1
+ import threading
1
2
  import time
2
3
  from typing import Any, Callable, Dict, List
3
4
 
@@ -20,7 +21,7 @@ class Formatter:
20
21
  """
21
22
  self.console = Console()
22
23
 
23
- def print_panel(
24
+ def _print_panel(
24
25
  self, content: str, title: str = "", style: str = "bold blue"
25
26
  ) -> None:
26
27
  """
@@ -48,6 +49,19 @@ class Formatter:
48
49
  )
49
50
  self.console.print(panel)
50
51
 
52
+ def print_panel(
53
+ self,
54
+ content: str,
55
+ title: str = "",
56
+ style: str = "bold blue",
57
+ ) -> None:
58
+ process_thread = threading.Thread(
59
+ target=self._print_panel,
60
+ args=(content, title, style),
61
+ daemon=True,
62
+ )
63
+ process_thread.start()
64
+
51
65
  def print_table(
52
66
  self, title: str, data: Dict[str, List[str]]
53
67
  ) -> None:
@@ -1,17 +1,35 @@
1
1
  import yaml
2
2
  from swarms.structs.conversation import Conversation
3
3
 
4
+ from typing import Literal, Union, List, Dict, Any
5
+
6
+ HistoryOutputType = Literal[
7
+ "list",
8
+ "dict",
9
+ "dictionary",
10
+ "string",
11
+ "str",
12
+ "final",
13
+ "last",
14
+ "json",
15
+ "all",
16
+ "yaml",
17
+ # "dict-final",
18
+ "dict-all-except-first",
19
+ "str-all-except-first",
20
+ ]
21
+
4
22
 
5
23
  def history_output_formatter(
6
- conversation: Conversation, type: str = "list"
7
- ):
24
+ conversation: Conversation, type: HistoryOutputType = "list"
25
+ ) -> Union[List[Dict[str, Any]], Dict[str, Any], str]:
8
26
  if type == "list":
9
27
  return conversation.return_messages_as_list()
10
- elif type == "dict" or type == "dictionary":
28
+ elif type in ["dict", "dictionary"]:
11
29
  return conversation.to_dict()
12
- elif type == "string" or type == "str":
30
+ elif type in ["string", "str"]:
13
31
  return conversation.get_str()
14
- elif type == "final" or type == "last":
32
+ elif type in ["final", "last"]:
15
33
  return conversation.get_final_message_content()
16
34
  elif type == "json":
17
35
  return conversation.to_json()
@@ -19,5 +37,11 @@ def history_output_formatter(
19
37
  return conversation.get_str()
20
38
  elif type == "yaml":
21
39
  return yaml.safe_dump(conversation.to_dict(), sort_keys=False)
40
+ # elif type == "dict-final":
41
+ # return conversation.to_dict()
42
+ elif type == "dict-all-except-first":
43
+ return conversation.return_all_except_first()
44
+ elif type == "str-all-except-first":
45
+ return conversation.return_all_except_first_string()
22
46
  else:
23
47
  raise ValueError(f"Invalid type: {type}")
@@ -254,16 +254,32 @@ class LiteLLM:
254
254
  self.messages
255
255
  ) # Use modality-processed messages
256
256
 
257
- # Prepare common completion parameters
258
- completion_params = {
259
- "model": self.model_name,
260
- "messages": messages,
261
- "stream": self.stream,
262
- "temperature": self.temperature,
263
- "max_tokens": self.max_tokens,
264
- "caching": self.caching,
265
- **kwargs,
266
- }
257
+ if (
258
+ self.model_name == "openai/o4-mini"
259
+ or self.model_name == "openai/o3-2025-04-16"
260
+ ):
261
+ # Prepare common completion parameters
262
+ completion_params = {
263
+ "model": self.model_name,
264
+ "messages": messages,
265
+ "stream": self.stream,
266
+ # "temperature": self.temperature,
267
+ "max_completion_tokens": self.max_tokens,
268
+ "caching": self.caching,
269
+ **kwargs,
270
+ }
271
+
272
+ else:
273
+ # Prepare common completion parameters
274
+ completion_params = {
275
+ "model": self.model_name,
276
+ "messages": messages,
277
+ "stream": self.stream,
278
+ "temperature": self.temperature,
279
+ "max_tokens": self.max_tokens,
280
+ "caching": self.caching,
281
+ **kwargs,
282
+ }
267
283
 
268
284
  # Handle tool-based completion
269
285
  if self.tools_list_dictionary is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: swarms
3
- Version: 7.7.0
3
+ Version: 7.7.2
4
4
  Summary: Swarms - TGSC
5
5
  Home-page: https://github.com/kyegomez/swarms
6
6
  License: MIT
@@ -51,6 +51,7 @@ swarms/prompts/multi_modal_autonomous_instruction_prompt.py,sha256=SHfaKs5Hj9sV4
51
51
  swarms/prompts/multi_modal_prompts.py,sha256=yvE9_RAFTKU1QhN0rNOelrO7jn5fjDARpcKussbBc2c,3511
52
52
  swarms/prompts/multi_modal_visual_prompts.py,sha256=Apv5vqTzB7nBj7nnoMPO0fog3PL9KLrteEjYM_SjaEE,3225
53
53
  swarms/prompts/operations_agent_prompt.py,sha256=7ioHxH-xMVqo7vy-wuwHvs9OXQjx-sDQbHFgExZVobI,3454
54
+ swarms/prompts/paper_idea_agent.py,sha256=I__fp0Rbpa5yr09C9UWPDZI7_jVRpejt9jrUSqcZHEw,1107
54
55
  swarms/prompts/personal_stylist.py,sha256=_14TSdWdHs6WCnBSK5--1QXcHv5qK466O6A781jif7c,2149
55
56
  swarms/prompts/product_agent_prompt.py,sha256=RN24ZeXA-QEVYWFoobJRtpXzQJ0shPhcUpCbNLkArTc,8333
56
57
  swarms/prompts/programming.py,sha256=Bg_PV5CexJFLqadJjjliU6t89q8IeQTEp2ZyEF9kO0g,10144
@@ -81,21 +82,21 @@ swarms/schemas/__init__.py,sha256=EqqtVcpoptF1kfy19Wykp22ut4AA0z-yMQ5H9WB7ptA,18
81
82
  swarms/schemas/agent_input_schema.py,sha256=qhPyThMx2on91yG9mzNdP_08GpMh1IRDHDwFna29jPs,6345
82
83
  swarms/schemas/agent_step_schemas.py,sha256=a14gb58vR0xOwB_fwSJQbN6yb9HddEaT30E6hUrzEQA,2573
83
84
  swarms/schemas/base_schemas.py,sha256=UvBLVWg2qRen4tK5GJz50v42SiX95EQ5qK7hfyAHTEU,3267
84
- swarms/structs/__init__.py,sha256=gzD4B2KvKsS_WU7OOdJUlOwjAefTdhBPnBgsVz3RYCY,4247
85
- swarms/structs/agent.py,sha256=LcxNeZDzZ_Bbgv6ebkzfqAJ3J5yIf7dJP0_Tn-BW63o,96853
85
+ swarms/structs/__init__.py,sha256=HXWoa7nLUzPx6Cfyr3_llGcU58cIlc1OiEUVgrTqY_s,4143
86
+ swarms/structs/agent.py,sha256=Hkgo4WhEvX6ReAku-eTBzhQ405F65U2LKYHWTNF-Tlg,99049
86
87
  swarms/structs/agent_builder.py,sha256=tYNpfO4_8cgfMHfgA5DAOWffHnt70p6CLt59esqfVCY,12133
87
88
  swarms/structs/agent_registry.py,sha256=il507cO1NF-d4ChyANVLuWrN8bXsEAi8_7bLJ_sTU6A,12112
88
89
  swarms/structs/agent_roles.py,sha256=8XEw6RjOOZelaZaWt4gXaYQm5WMLEhSO7W6Z8sQjmFg,582
89
90
  swarms/structs/agent_router.py,sha256=YZw5AaK2yTvxkOA7ouED_4MoYgn0XZggvo1wrglp-4E,13017
90
91
  swarms/structs/agents_available.py,sha256=SedxDim-0IWgGsNwJZxRIUMfKyAFFXdvXSYeBNu0zGw,2804
91
- swarms/structs/async_workflow.py,sha256=7YWsLPyGY-1-mMxoIXWQ0FnYH6F227nxsS9PFAJoF9Q,26214
92
+ swarms/structs/aop.py,sha256=hmyxK0W_I1baW3EQ5U27uJjkDqNT4PHfIbWl8bvYW1I,17154
92
93
  swarms/structs/auto_swarm_builder.py,sha256=vPM5Kq59D_FvuWJB8hxgHuEvTXsxDxovlBnHGVQsM4o,10938
93
94
  swarms/structs/base_structure.py,sha256=GDu4QJQQmhU7IyuFJHIh9UVThACCva-L7uoMbVD9l4s,15901
94
95
  swarms/structs/base_swarm.py,sha256=LSGJDPJdyUCcK6698mNtjxoC1OU3s_J2NxC2k_ccGUs,23779
95
96
  swarms/structs/base_workflow.py,sha256=DTfFwX3AdFYxACDYwUDqhsbcDZnITlg5TeEYyxmJBCc,11414
96
97
  swarms/structs/concat.py,sha256=utezSxNyh1mIwXgdf8-dJ803NDPyEy79WE8zJHuooGk,732
97
98
  swarms/structs/concurrent_workflow.py,sha256=d1_slbALpxrdEGzZffUSAcEbONW0kc7fyTpVZTBmzi4,15517
98
- swarms/structs/conversation.py,sha256=h4A4l9Mcucw1v-N0mOA4keZ9vf-l3t-kBINZlk_CrOA,18392
99
+ swarms/structs/conversation.py,sha256=i3Iqc4Wa11PQKvAv76Qs8pEr6KsGXpc70DeD2EoIrlk,19267
99
100
  swarms/structs/csv_to_agent.py,sha256=ug9JqQFPguXeU9JQpSUXuVtOpHYdJhlpKJUJBovo694,9443
100
101
  swarms/structs/de_hallucination_swarm.py,sha256=9cC0rSSXGwYu6SRDwpeMbCcQ40C1WI1RE9SNapKRLOQ,10309
101
102
  swarms/structs/deep_research_swarm.py,sha256=axhzSK43-TViQJntt2Gz2AUhAc6zoBPzj9weRmQ8yE8,16733
@@ -113,11 +114,9 @@ swarms/structs/mixture_of_agents.py,sha256=G8_MVMrDd0-ZD_gJ5YZgtTCUjl7COha9Me-vO
113
114
  swarms/structs/model_router.py,sha256=V5pZHYlxSmCvAA2Gsns7LaCz8dXtRi7pCvb-oLGHYIY,12739
114
115
  swarms/structs/multi_agent_collab.py,sha256=odh2NQRR23LidsphCxUfAke369lDdgL__w3Xovu9jkA,7731
115
116
  swarms/structs/multi_agent_exec.py,sha256=Gxwr9mHADX3n29pdxor-dQDnKPSNdnicpCxBLmPwnLg,14344
116
- swarms/structs/multi_agent_orchestrator.py,sha256=_trjXCW31ZeVR7N2hURLUPDZhYa-Wa3ADMk1wnNJdcQ,13400
117
- swarms/structs/octotools.py,sha256=GZo0qtFM69W7vvewk6_k09vicgw0c0_v7MiPvEZCagE,31406
117
+ swarms/structs/multi_agent_router.py,sha256=_trjXCW31ZeVR7N2hURLUPDZhYa-Wa3ADMk1wnNJdcQ,13400
118
118
  swarms/structs/omni_agent_types.py,sha256=RdKLfZ-lXDJrEa0aJT_Rfx9TypJQo8SISqKz4fnLkAk,230
119
119
  swarms/structs/output_types.py,sha256=F1jNbDLJrubRIUyheMGMahJfGikbWZ_yNmbE9QVIz9A,280
120
- swarms/structs/pulsar_swarm.py,sha256=4_L0GqPBgnA3AJajpNLgO4IAG6U36nIntFK9WNJScv8,15968
121
120
  swarms/structs/queue_swarm.py,sha256=8vcA-rh280midcdgfA5IwJzBmMgdn71nRH6KndWu-DA,6770
122
121
  swarms/structs/rearrange.py,sha256=5u7HwTVVH414w9rhEQvLdltW1ACHjgwn-zS8-8JEXmA,22576
123
122
  swarms/structs/round_robin.py,sha256=MGk623KiN9uSxTMG6MY_BIAkvEDh1RPwyl5Min7GLOU,7573
@@ -129,19 +128,17 @@ swarms/structs/swarm_arange.py,sha256=6fexCPsXRgdLbpY0p9rp_REipeXzsbv1_GOtD9B4Ha
129
128
  swarms/structs/swarm_builder.py,sha256=TqxD4bIE11gPZBqi_awXem5-svnQ-IJVAhRquX0ErQg,13054
130
129
  swarms/structs/swarm_eval.py,sha256=148E2R2zaCmt_LZYx15nmdFjybXHiQ2CZbl6pk77jNs,11635
131
130
  swarms/structs/swarm_id_generator.py,sha256=Wly7AtGM9e6VgzhYmfg8_gSOdxAdsOvWHJFK81cpQNQ,68
132
- swarms/structs/swarm_load_balancer.py,sha256=pUCc5FEBcuJ_GmOFeTWBPfXlUdiTOjYcJqVq_ymGHlM,11374
133
131
  swarms/structs/swarm_matcher.py,sha256=E2KwHHEJxmW-UfTeMPWZ6VCmYdQ_I9_fwrfJbxD02GY,23322
134
132
  swarms/structs/swarm_output_type.py,sha256=tW8Iqar1Jaf2Lzw66nAPc6MDk7-srQl5_XUKFvzoam4,755
135
133
  swarms/structs/swarm_registry.py,sha256=P0XRrqp1qBNyt0BycqPQljUzKv9jClaQMhtaBMinhYg,5578
136
- swarms/structs/swarm_router.py,sha256=05G0weYMUUo-20xgSeUnwCaH1lf6p1epXllI_iXo18Y,26854
134
+ swarms/structs/swarm_router.py,sha256=qSPIF7ocQcg-z1WnUXBfzGCnEmQMCpO4cxmpefpf5P4,26848
137
135
  swarms/structs/swarming_architectures.py,sha256=VvkSA9nQnF91V2C5-ALwSY1peZckeM1G4pPeQS7IVsE,13109
138
- swarms/structs/talk_hier.py,sha256=npyEuL52SCgQmMynIvGjfatNqOz4toq0EyhEtSNmQhQ,25649
139
136
  swarms/structs/tree_swarm.py,sha256=AnIxrt0KhWxAQN8uGjfCcOq-XCmsuTJiH8Ex4mXy8V8,12500
140
137
  swarms/structs/utils.py,sha256=Mo6wHQYOB8baWZUKnAJN5Dsgubpo81umNwJIEDitb2A,1873
141
138
  swarms/structs/various_alt_swarms.py,sha256=qdBuOF31UjatlKRu-9bxwyRQzIjohRhTv_63YoUeYEY,27866
142
139
  swarms/telemetry/__init__.py,sha256=yibtkHEbQRPUv6ir1FhDHlAO_3nwKJPQH4LjzBC2AuQ,661
143
140
  swarms/telemetry/bootup.py,sha256=0leCNCy5rhzL19EsOsqHWSDI85KVcWO6_5hLDS0h4sY,1155
144
- swarms/telemetry/main.py,sha256=w_6ud1onZpBgqIF-173GEesXLLj4iyvzTTjhz7pFUqc,11096
141
+ swarms/telemetry/main.py,sha256=FGJ5w4YEqzqWcaGr4RnyGwGpKuGGxl_yra7alDbcNnE,11408
145
142
  swarms/tools/__init__.py,sha256=pqIMcRQr4gtoNdbyI1N5k4upkYSBMxACJbxfB9yrV4c,1493
146
143
  swarms/tools/base_tool.py,sha256=BiBCFHin8AyZO3FYOGA-n3M2o-F36xUeIBUiybnZYjI,15179
147
144
  swarms/tools/cohere_func_call_schema.py,sha256=XJ6_yBMXCrV9KjN7v9Bk1iFj69TRlGIWYKsUTA1oGiQ,600
@@ -151,6 +148,7 @@ swarms/tools/function_util.py,sha256=DAnAPO0Ik__TAqL7IJzFmkukHnhpsW_QtALl3yj837g
151
148
  swarms/tools/json_former.py,sha256=4ugLQ_EZpghhuhFsVKsy-ehin9K64pqVE2gLU7BTO_M,14376
152
149
  swarms/tools/json_utils.py,sha256=WKMZjcJ0Vt6lgIjiTBenslcfjgRSLX4UWs4uDkKFMQI,1316
153
150
  swarms/tools/logits_processor.py,sha256=NifZZ5w9yemWGJAJ5nHFrphtZVX1XlyesgvYZTxK1GM,2965
151
+ swarms/tools/mcp_client.py,sha256=tXlZsh0KKyYw0RIsazlxZ5XsloY569sgQZUlsUdx2bM,2683
154
152
  swarms/tools/mcp_integration.py,sha256=rUXxC9NvXQ3V4B7Lt1AoI4ZYiCl2-T4FW3_689HTRZk,12839
155
153
  swarms/tools/openai_func_calling_schema_pydantic.py,sha256=6BAH9kuaVTvJIbjgSSJ5XvHhWvWszPxgarkfUuE5Ads,978
156
154
  swarms/tools/openai_tool_creator_decorator.py,sha256=SYZjHnARjWvnH9cBdj7Kc_Yy1muvNxMT3RQz8KkA2SE,2578
@@ -167,11 +165,11 @@ swarms/utils/calculate_func_metrics.py,sha256=Nb5r7rWf809m5F7mWIYXZ0H_WeyGr78A2U
167
165
  swarms/utils/data_to_text.py,sha256=1PUoWokylp7MOrGNk1cmO3cJlfskdAIiImGk9ECwsKU,3427
168
166
  swarms/utils/disable_logging.py,sha256=KKPKQVfQqLPFgj03uveOoyeHOTlfEJt-yfLc3SA53Rk,2470
169
167
  swarms/utils/file_processing.py,sha256=QjQCIPTcwicQlfy656BXBYpIzMR0s2343E7ftnok5Uo,4865
170
- swarms/utils/formatter.py,sha256=YykmcuWXkxvQ7a2Vq6OzWuqUDiIwro6VrtSt4ITbXcU,4194
168
+ swarms/utils/formatter.py,sha256=e15FsyTIIkyRreMUApkkZCzJC1Sm67w5Zd6EQcUkMwA,4533
171
169
  swarms/utils/function_caller_model.py,sha256=ZfgCMzOizNnuZipYLclTziECNHszH9p8RQcUq7VNr4Q,4156
172
- swarms/utils/history_output_formatter.py,sha256=WHcd0xhSNRDKakXtkCjv0nW1NF-GM9SYcey3RrN5gl8,778
170
+ swarms/utils/history_output_formatter.py,sha256=5Gc-FLUDTkTYfzZVbfq4EL-wAZqPN0mD3K3h62CB71k,1379
173
171
  swarms/utils/litellm_tokenizer.py,sha256=0AAj4NffBe2eHii_3_5SpQAhSiBbunJR8MzaBTIm7hg,484
174
- swarms/utils/litellm_wrapper.py,sha256=mhlG52rffI-vNYbEnHsuYzraFbtsnx84-jb7WMZLReA,14507
172
+ swarms/utils/litellm_wrapper.py,sha256=xdRRj2MvO-4RtfD1SHOCKoidX1UTKRj__I7CvWxQV3o,15145
175
173
  swarms/utils/loguru_logger.py,sha256=hIoSK3NHLpe7eAmjHRURrEYzNXYC2gbR7_Vv63Yaydk,685
176
174
  swarms/utils/markdown_message.py,sha256=RThHNnMf6ZLTlYK4vKn3yuewChaxWAYAWb0Xm_pTyIU,652
177
175
  swarms/utils/parse_code.py,sha256=XFOLymbdP3HzMZuqsj7pwUyisvUmTm0ev9iThR_ambI,1987
@@ -181,8 +179,8 @@ swarms/utils/try_except_wrapper.py,sha256=appEGu9Afy3TmdkNNXUgQ9yU9lj2j0uNkIoW0J
181
179
  swarms/utils/visualizer.py,sha256=0ylohEk62MAS6iPRaDOV03m9qo2k5J56tWlKJk_46p4,16927
182
180
  swarms/utils/vllm_wrapper.py,sha256=OIGnU9Vf81vE_hul1FK-xEhChFK8fxqZX6-fhQeW22c,4987
183
181
  swarms/utils/wrapper_clusterop.py,sha256=PMSCVM7ZT1vgj1D_MYAe835RR3SMLYxA-si2JS02yNQ,4220
184
- swarms-7.7.0.dist-info/LICENSE,sha256=jwRtEmTWjLrEsvFB6QFdYs2cEeZPRMdj-UMOFkPF8_0,11363
185
- swarms-7.7.0.dist-info/METADATA,sha256=AjkFhCgUgocVqF_3D_HR8IA30JnY2ckwUg3ywrBbvE0,104909
186
- swarms-7.7.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
187
- swarms-7.7.0.dist-info/entry_points.txt,sha256=2K0rTtfO1X1WaO-waJlXIKw5Voa_EpAL_yU0HXE2Jgc,47
188
- swarms-7.7.0.dist-info/RECORD,,
182
+ swarms-7.7.2.dist-info/LICENSE,sha256=jwRtEmTWjLrEsvFB6QFdYs2cEeZPRMdj-UMOFkPF8_0,11363
183
+ swarms-7.7.2.dist-info/METADATA,sha256=NbVlheMq824t9bP3EnHmcUdryKiko2CllUTg5Od-ys4,104909
184
+ swarms-7.7.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
185
+ swarms-7.7.2.dist-info/entry_points.txt,sha256=2K0rTtfO1X1WaO-waJlXIKw5Voa_EpAL_yU0HXE2Jgc,47
186
+ swarms-7.7.2.dist-info/RECORD,,