swarms 7.8.0__py3-none-any.whl → 7.8.1__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.
@@ -538,8 +538,8 @@ class SwarmRouter:
538
538
  def _run(
539
539
  self,
540
540
  task: str,
541
- img: str,
542
- model_response: str,
541
+ img: Optional[str] = None,
542
+ model_response: Optional[str] = None,
543
543
  *args,
544
544
  **kwargs,
545
545
  ) -> Any:
@@ -591,7 +591,8 @@ class SwarmRouter:
591
591
  def run(
592
592
  self,
593
593
  task: str,
594
- img: str = None,
594
+ img: Optional[str] = None,
595
+ model_response: Optional[str] = None,
595
596
  *args,
596
597
  **kwargs,
597
598
  ) -> Any:
@@ -613,7 +614,7 @@ class SwarmRouter:
613
614
  Exception: If an error occurs during task execution.
614
615
  """
615
616
  try:
616
- return self._run(task=task, img=img, *args, **kwargs)
617
+ return self._run(task=task, img=img, model_response=model_response, *args, **kwargs)
617
618
  except Exception as e:
618
619
  logger.error(f"Error executing task on swarm: {str(e)}")
619
620
  raise
@@ -1,20 +1,106 @@
1
- import subprocess
1
+ from litellm import encode, model_list
2
+ from loguru import logger
3
+ from typing import Optional
4
+ from functools import lru_cache
2
5
 
6
+ # Use consistent default model
7
+ DEFAULT_MODEL = "gpt-4o-mini"
3
8
 
4
- def count_tokens(text: str, model: str = "gpt-4o") -> int:
5
- """Count the number of tokens in the given text."""
9
+
10
+ def count_tokens(
11
+ text: str,
12
+ model: str = DEFAULT_MODEL,
13
+ default_encoder: Optional[str] = DEFAULT_MODEL,
14
+ ) -> int:
15
+ """
16
+ Count the number of tokens in the given text using the specified model.
17
+
18
+ Args:
19
+ text: The text to tokenize
20
+ model: The model to use for tokenization (defaults to gpt-4o-mini)
21
+ default_encoder: Fallback encoder if the primary model fails (defaults to DEFAULT_MODEL)
22
+
23
+ Returns:
24
+ int: Number of tokens in the text
25
+
26
+ Raises:
27
+ ValueError: If text is empty or if both primary and fallback models fail
28
+ """
29
+ if not text or not text.strip():
30
+ logger.warning("Empty or whitespace-only text provided")
31
+ return 0
32
+
33
+ # Set fallback encoder
34
+ fallback_model = default_encoder or DEFAULT_MODEL
35
+
36
+ # First attempt with the requested model
6
37
  try:
7
- from litellm import encode
8
- except ImportError:
9
- import sys
38
+ tokens = encode(model=model, text=text)
39
+ return len(tokens)
10
40
 
11
- subprocess.run(
12
- [sys.executable, "-m", "pip", "install", "litellm"]
41
+ except Exception as e:
42
+ logger.warning(
43
+ f"Failed to tokenize with model '{model}': {e} using fallback model '{fallback_model}'"
13
44
  )
14
- from litellm import encode
15
45
 
16
- return len(encode(model=model, text=text))
46
+ logger.info(f"Using fallback model '{fallback_model}'")
47
+
48
+ # Only try fallback if it's different from the original model
49
+ if fallback_model != model:
50
+ try:
51
+ logger.info(
52
+ f"Falling back to default encoder: {fallback_model}"
53
+ )
54
+ tokens = encode(model=fallback_model, text=text)
55
+ return len(tokens)
56
+
57
+ except Exception as fallback_error:
58
+ logger.error(
59
+ f"Fallback encoder '{fallback_model}' also failed: {fallback_error}"
60
+ )
61
+ raise ValueError(
62
+ f"Both primary model '{model}' and fallback '{fallback_model}' failed to tokenize text"
63
+ )
64
+ else:
65
+ logger.error(
66
+ f"Primary model '{model}' failed and no different fallback available"
67
+ )
68
+ raise ValueError(
69
+ f"Model '{model}' failed to tokenize text: {e}"
70
+ )
71
+
72
+
73
+ @lru_cache(maxsize=100)
74
+ def get_supported_models() -> list:
75
+ """Get list of supported models from litellm."""
76
+ try:
77
+ return model_list
78
+ except Exception as e:
79
+ logger.warning(f"Could not retrieve model list: {e}")
80
+ return []
17
81
 
18
82
 
19
83
  # if __name__ == "__main__":
20
- # print(count_tokens("Hello, how are you?"))
84
+ # # Test with different scenarios
85
+ # test_text = "Hello, how are you?"
86
+
87
+ # # # Test with Claude model
88
+ # # try:
89
+ # # tokens = count_tokens(test_text, model="claude-3-5-sonnet-20240620")
90
+ # # print(f"Claude tokens: {tokens}")
91
+ # # except Exception as e:
92
+ # # print(f"Claude test failed: {e}")
93
+
94
+ # # # Test with default model
95
+ # # try:
96
+ # # tokens = count_tokens(test_text)
97
+ # # print(f"Default model tokens: {tokens}")
98
+ # # except Exception as e:
99
+ # # print(f"Default test failed: {e}")
100
+
101
+ # # Test with explicit fallback
102
+ # try:
103
+ # tokens = count_tokens(test_text, model="some-invalid-model", default_encoder="gpt-4o-mini")
104
+ # print(f"Fallback test tokens: {tokens}")
105
+ # except Exception as e:
106
+ # print(f"Fallback test failed: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: swarms
3
- Version: 7.8.0
3
+ Version: 7.8.1
4
4
  Summary: Swarms - TGSC
5
5
  License: MIT
6
6
  Keywords: artificial intelligence,deep learning,optimizers,Prompt Engineering,swarms,agents,llms,transformers,multi-agent,swarms of agents,Enterprise-Grade Agents,Production-Grade Agents,Agents,Multi-Grade-Agents,Swarms,Transformers,LLMs,Prompt Engineering,Agents,Generative Agents,Generative AI,Agent Marketplace,Agent Store,quant,finance,algorithmic trading,portfolio optimization,risk management,financial modeling,machine learning for finance,natural language processing for finance
@@ -146,7 +146,7 @@ swarms/structs/swarm_eval.py,sha256=148E2R2zaCmt_LZYx15nmdFjybXHiQ2CZbl6pk77jNs,
146
146
  swarms/structs/swarm_id_generator.py,sha256=Wly7AtGM9e6VgzhYmfg8_gSOdxAdsOvWHJFK81cpQNQ,68
147
147
  swarms/structs/swarm_matcher.py,sha256=E2KwHHEJxmW-UfTeMPWZ6VCmYdQ_I9_fwrfJbxD02GY,23322
148
148
  swarms/structs/swarm_registry.py,sha256=P0XRrqp1qBNyt0BycqPQljUzKv9jClaQMhtaBMinhYg,5578
149
- swarms/structs/swarm_router.py,sha256=oj5QumyxutVawthcTFUsY8DcHbn3iWOxAi7xpkoDRQg,30457
149
+ swarms/structs/swarm_router.py,sha256=Q6g3tLUJM9OZn4tbjlChxb6xz_DIl0ix4NUschFtEf0,30578
150
150
  swarms/structs/swarming_architectures.py,sha256=q2XrY2lOqFhVckA8oin65Dz1VPUe-lfbEJHlP1Z8aTE,28278
151
151
  swarms/structs/tree_swarm.py,sha256=AnIxrt0KhWxAQN8uGjfCcOq-XCmsuTJiH8Ex4mXy8V8,12500
152
152
  swarms/structs/utils.py,sha256=Mo6wHQYOB8baWZUKnAJN5Dsgubpo81umNwJIEDitb2A,1873
@@ -186,7 +186,7 @@ swarms/utils/function_caller_model.py,sha256=ZfgCMzOizNnuZipYLclTziECNHszH9p8RQc
186
186
  swarms/utils/generate_keys.py,sha256=i0Ewm1LCTLaqp7qm7B7MgNolaI9IZyJcxNVRLUZklt4,1700
187
187
  swarms/utils/history_output_formatter.py,sha256=d4J-TF63ENCjsQXU36MGR2pvx59y0qBFuBlOrJt_K8M,1487
188
188
  swarms/utils/index.py,sha256=iYVlMiuSpBuKHF34uSrxDUuSYmS26bbYoAqyz_VIyvY,6902
189
- swarms/utils/litellm_tokenizer.py,sha256=0AAj4NffBe2eHii_3_5SpQAhSiBbunJR8MzaBTIm7hg,484
189
+ swarms/utils/litellm_tokenizer.py,sha256=PqzAY4C5lJ3P-K9SL-dCNtxmHHlZvAw1UohT-ob9lxY,3389
190
190
  swarms/utils/litellm_wrapper.py,sha256=dZ9KCR_Rxlm3VZWWVfhpTb4Y6KM_xHipynueJUeU_Jc,15023
191
191
  swarms/utils/loguru_logger.py,sha256=hIoSK3NHLpe7eAmjHRURrEYzNXYC2gbR7_Vv63Yaydk,685
192
192
  swarms/utils/markdown_message.py,sha256=RThHNnMf6ZLTlYK4vKn3yuewChaxWAYAWb0Xm_pTyIU,652
@@ -198,8 +198,8 @@ swarms/utils/visualizer.py,sha256=0ylohEk62MAS6iPRaDOV03m9qo2k5J56tWlKJk_46p4,16
198
198
  swarms/utils/vllm_wrapper.py,sha256=OIGnU9Vf81vE_hul1FK-xEhChFK8fxqZX6-fhQeW22c,4987
199
199
  swarms/utils/wrapper_clusterop.py,sha256=PMSCVM7ZT1vgj1D_MYAe835RR3SMLYxA-si2JS02yNQ,4220
200
200
  swarms/utils/xml_utils.py,sha256=j8byUa56VT7V4e18pL8UBftLdyWKsUHbid1KDxnAWBo,1416
201
- swarms-7.8.0.dist-info/LICENSE,sha256=jwRtEmTWjLrEsvFB6QFdYs2cEeZPRMdj-UMOFkPF8_0,11363
202
- swarms-7.8.0.dist-info/METADATA,sha256=6Npfe5U1IoF9Rty5vbt4vp-17U5psURrMEIFPdqCDXw,94969
203
- swarms-7.8.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
204
- swarms-7.8.0.dist-info/entry_points.txt,sha256=2K0rTtfO1X1WaO-waJlXIKw5Voa_EpAL_yU0HXE2Jgc,47
205
- swarms-7.8.0.dist-info/RECORD,,
201
+ swarms-7.8.1.dist-info/LICENSE,sha256=jwRtEmTWjLrEsvFB6QFdYs2cEeZPRMdj-UMOFkPF8_0,11363
202
+ swarms-7.8.1.dist-info/METADATA,sha256=PqIGF4MP1adudx2SRbDfxkqmOCuP8QC3l-2pq7AVUDg,94969
203
+ swarms-7.8.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
204
+ swarms-7.8.1.dist-info/entry_points.txt,sha256=2K0rTtfO1X1WaO-waJlXIKw5Voa_EpAL_yU0HXE2Jgc,47
205
+ swarms-7.8.1.dist-info/RECORD,,
File without changes