camel-ai 0.2.57__py3-none-any.whl → 0.2.59__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.

Potentially problematic release.


This version of camel-ai might be problematic. Click here for more details.

@@ -0,0 +1,237 @@
1
+ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ import os
15
+ import xml.etree.ElementTree as ET
16
+ from typing import Any, Dict, List, Union
17
+
18
+ import requests
19
+
20
+ from camel.toolkits.base import BaseToolkit
21
+ from camel.toolkits.function_tool import FunctionTool
22
+ from camel.utils import MCPServer, api_keys_required, dependencies_required
23
+
24
+
25
+ @MCPServer()
26
+ class WolframAlphaToolkit(BaseToolkit):
27
+ r"""A class representing a toolkit for WolframAlpha.
28
+
29
+ Wolfram|Alpha is an answer engine developed by Wolfram Research.
30
+ It is offered as an online service that answers factual queries
31
+ by computing answers from externally sourced data.
32
+ """
33
+
34
+ @api_keys_required(
35
+ [
36
+ (None, "WOLFRAMALPHA_APP_ID"),
37
+ ]
38
+ )
39
+ @dependencies_required("wolframalpha")
40
+ def query_wolfram_alpha(
41
+ self, query: str, is_detailed: bool = False
42
+ ) -> Union[str, Dict[str, Any]]:
43
+ r"""Queries Wolfram|Alpha and returns the result.
44
+
45
+ Args:
46
+ query (str): The query to send to Wolfram Alpha.
47
+ is_detailed (bool): Whether to include additional details
48
+ including step by step information in the result.
49
+ (default: :obj:`False`)
50
+
51
+ Returns:
52
+ Union[str, Dict[str, Any]]: The result from Wolfram Alpha.
53
+ Returns a string if `is_detailed` is False, otherwise returns
54
+ a dictionary with detailed information.
55
+ """
56
+ import wolframalpha
57
+
58
+ WOLFRAMALPHA_APP_ID = os.environ.get("WOLFRAMALPHA_APP_ID", "")
59
+
60
+ try:
61
+ client = wolframalpha.Client(WOLFRAMALPHA_APP_ID)
62
+ res = client.query(query)
63
+
64
+ except Exception as e:
65
+ return f"Wolfram Alpha wasn't able to answer it. Error: {e}"
66
+
67
+ pased_result = self._parse_wolfram_result(res)
68
+
69
+ if is_detailed:
70
+ step_info = self._get_wolframalpha_step_by_step_solution(
71
+ WOLFRAMALPHA_APP_ID, query
72
+ )
73
+ pased_result["steps"] = step_info
74
+ return pased_result
75
+
76
+ return pased_result["final_answer"]
77
+
78
+ @api_keys_required(
79
+ [
80
+ (None, "WOLFRAMALPHA_APP_ID"),
81
+ ]
82
+ )
83
+ def query_wolfram_llm(self, query: str) -> str:
84
+ r"""Queries Wolfram|Alpha LLM API and returns the result.
85
+
86
+ Args:
87
+ query (str): The query to send to Wolfram Alpha LLM.
88
+
89
+ Returns:
90
+ str: The result from Wolfram Alpha as a string.
91
+ """
92
+
93
+ WOLFRAMALPHA_APP_ID = os.environ.get("WOLFRAMALPHA_APP_ID", "")
94
+
95
+ try:
96
+ url = "https://www.wolframalpha.com/api/v1/llm-api"
97
+ params = {"input": query, "appid": WOLFRAMALPHA_APP_ID}
98
+
99
+ response = requests.get(url, params=params)
100
+ response.raise_for_status()
101
+ return response.text
102
+
103
+ except Exception as e:
104
+ return f"Wolfram Alpha wasn't able to answer it. Error: {e}"
105
+
106
+ def _parse_wolfram_result(self, result) -> Dict[str, Any]:
107
+ r"""Parses a Wolfram Alpha API result into a structured dictionary
108
+ format.
109
+
110
+ Args:
111
+ result: The API result returned from a Wolfram Alpha
112
+ query, structured with multiple pods, each containing specific
113
+ information related to the query.
114
+
115
+ Returns:
116
+ Dict[str, Any]: A structured dictionary with the original query
117
+ and the final answer.
118
+ """
119
+
120
+ # Extract the original query
121
+ query = result.get("@inputstring", "")
122
+
123
+ # Initialize a dictionary to hold structured output
124
+ output = {"query": query, "pod_info": [], "final_answer": None}
125
+
126
+ # Loop through each pod to extract the details
127
+ for pod in result.get("pod", []):
128
+ # Handle the case where subpod might be a list
129
+ subpod_data = pod.get("subpod", {})
130
+ if isinstance(subpod_data, list):
131
+ # If it's a list, get the first item for 'plaintext' and 'img'
132
+ description, image_url = next(
133
+ (
134
+ (data["plaintext"], data["img"])
135
+ for data in subpod_data
136
+ if "plaintext" in data and "img" in data
137
+ ),
138
+ ("", ""),
139
+ )
140
+ else:
141
+ # Otherwise, handle it as a dictionary
142
+ description = subpod_data.get("plaintext", "")
143
+ image_url = subpod_data.get("img", {}).get("@src", "")
144
+
145
+ pod_info = {
146
+ "title": pod.get("@title", ""),
147
+ "description": description,
148
+ "image_url": image_url,
149
+ }
150
+
151
+ # For Results pod, collect all plaintext values from subpods
152
+ if pod.get("@title") == "Results":
153
+ results_text = []
154
+ if isinstance(subpod_data, list):
155
+ for subpod in subpod_data:
156
+ if subpod.get("plaintext"):
157
+ results_text.append(subpod["plaintext"])
158
+ else:
159
+ if description:
160
+ results_text.append(description)
161
+ pod_info["description"] = "\n".join(results_text)
162
+
163
+ # Add to steps list
164
+ output["pod_info"].append(pod_info)
165
+
166
+ # Get final answer
167
+ if pod.get("@primary", False):
168
+ output["final_answer"] = description
169
+
170
+ return output
171
+
172
+ def _get_wolframalpha_step_by_step_solution(
173
+ self, app_id: str, query: str
174
+ ) -> dict:
175
+ r"""Retrieve a step-by-step solution from the Wolfram Alpha API for a
176
+ given query.
177
+
178
+ Args:
179
+ app_id (str): Your Wolfram Alpha API application ID.
180
+ query (str): The mathematical or computational query to solve.
181
+
182
+ Returns:
183
+ dict: The step-by-step solution response text from the Wolfram
184
+ Alpha API.
185
+ """
186
+ # Define the base URL
187
+ url = "https://api.wolframalpha.com/v2/query"
188
+
189
+ # Set up the query parameters
190
+ params = {
191
+ "appid": app_id,
192
+ "input": query,
193
+ "podstate": ["Result__Step-by-step solution", "Show all steps"],
194
+ "format": "plaintext",
195
+ }
196
+
197
+ # Send the request
198
+ response = requests.get(url, params=params)
199
+ root = ET.fromstring(response.text)
200
+
201
+ # Extracting step-by-step steps, including 'SBSStep' and 'SBSHintStep'
202
+ steps = []
203
+ # Find all subpods within the 'Results' pod
204
+ for subpod in root.findall(".//pod[@title='Results']//subpod"):
205
+ # Check if the subpod has the desired stepbystepcontenttype
206
+ content_type = subpod.find("stepbystepcontenttype")
207
+ if content_type is not None and content_type.text in [
208
+ "SBSStep",
209
+ "SBSHintStep",
210
+ ]:
211
+ plaintext = subpod.find("plaintext")
212
+ if plaintext is not None and plaintext.text:
213
+ step_text = plaintext.text.strip()
214
+ cleaned_step = step_text.replace(
215
+ "Hint: |", ""
216
+ ).strip() # Remove 'Hint: |' if present
217
+ steps.append(cleaned_step)
218
+
219
+ # Structuring the steps into a dictionary
220
+ structured_steps = {}
221
+ for i, step in enumerate(steps, start=1):
222
+ structured_steps[f"step{i}"] = step
223
+
224
+ return structured_steps
225
+
226
+ def get_tools(self) -> List[FunctionTool]:
227
+ r"""Returns a list of FunctionTool objects representing the
228
+ functions in the toolkit.
229
+
230
+ Returns:
231
+ List[FunctionTool]: A list of FunctionTool objects
232
+ representing the functions in the toolkit.
233
+ """
234
+ return [
235
+ FunctionTool(self.query_wolfram_alpha),
236
+ FunctionTool(self.query_wolfram_llm),
237
+ ]
camel/types/__init__.py CHANGED
@@ -29,6 +29,12 @@ from .enums import (
29
29
  VectorDistance,
30
30
  VoiceType,
31
31
  )
32
+ from .mcp_registries import (
33
+ ACIRegistryConfig,
34
+ BaseMCPRegistryConfig,
35
+ MCPRegistryType,
36
+ SmitheryRegistryConfig,
37
+ )
32
38
  from .openai_types import (
33
39
  NOT_GIVEN,
34
40
  ChatCompletion,
@@ -79,4 +85,8 @@ __all__ = [
79
85
  'GeminiEmbeddingTaskType',
80
86
  'NOT_GIVEN',
81
87
  'NotGiven',
88
+ 'BaseMCPRegistryConfig',
89
+ 'MCPRegistryType',
90
+ 'SmitheryRegistryConfig',
91
+ 'ACIRegistryConfig',
82
92
  ]
camel/types/enums.py CHANGED
@@ -180,7 +180,7 @@ class ModelType(UnifiedModelType, Enum):
180
180
  NVIDIA_LLAMA3_3_70B_INSTRUCT = "meta/llama-3.3-70b-instruct"
181
181
 
182
182
  # Gemini models
183
- GEMINI_2_5_PRO_EXP = "gemini-2.5-pro-exp-03-25"
183
+ GEMINI_2_5_PRO_PREVIEW = "gemini-2.5-pro-preview-05-06"
184
184
  GEMINI_2_0_FLASH = "gemini-2.0-flash-exp"
185
185
  GEMINI_2_0_FLASH_THINKING = "gemini-2.0-flash-thinking-exp"
186
186
  GEMINI_2_0_PRO_EXP = "gemini-2.0-pro-exp-02-05"
@@ -629,7 +629,7 @@ class ModelType(UnifiedModelType, Enum):
629
629
  bool: Whether this type of models is gemini.
630
630
  """
631
631
  return self in {
632
- ModelType.GEMINI_2_5_PRO_EXP,
632
+ ModelType.GEMINI_2_5_PRO_PREVIEW,
633
633
  ModelType.GEMINI_2_0_FLASH,
634
634
  ModelType.GEMINI_1_5_FLASH,
635
635
  ModelType.GEMINI_1_5_PRO,
@@ -1181,7 +1181,7 @@ class ModelType(UnifiedModelType, Enum):
1181
1181
  }:
1182
1182
  return 512_000
1183
1183
  elif self in {
1184
- ModelType.GEMINI_2_5_PRO_EXP,
1184
+ ModelType.GEMINI_2_5_PRO_PREVIEW,
1185
1185
  ModelType.GEMINI_2_0_FLASH,
1186
1186
  ModelType.GEMINI_1_5_FLASH,
1187
1187
  ModelType.GEMINI_1_5_PRO,
@@ -0,0 +1,157 @@
1
+ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ import os
15
+ import platform
16
+ from enum import Enum, auto
17
+ from typing import Any, Dict, List, Literal, Optional
18
+
19
+ from pydantic import BaseModel, Field, model_validator
20
+
21
+
22
+ class MCPRegistryType(Enum):
23
+ r"""Enum for different types of MCP registries."""
24
+
25
+ SMITHERY = auto()
26
+ ACI = auto()
27
+ CUSTOM = auto()
28
+
29
+
30
+ class BaseMCPRegistryConfig(BaseModel):
31
+ r"""Base configuration for an MCP registry.
32
+
33
+ Attributes:
34
+ type (MCPRegistryType): The type of the registry.
35
+ os (Literal["darwin", "linux", "windows"]): The operating system. It
36
+ is automatically set to "darwin" for MacOS, "linux" for Linux, and
37
+ "windows" for Windows.
38
+ api_key (Optional[str]): API key for the registry.
39
+ """
40
+
41
+ type: MCPRegistryType
42
+ os: Literal["darwin", "linux", "windows"]
43
+ api_key: Optional[str] = None
44
+
45
+ def get_config(self) -> Dict[str, Any]:
46
+ r"""Generate configuration based on registry type and API key.
47
+
48
+ Returns:
49
+ Dict[str, Any]: The complete configuration for the registry.
50
+ """
51
+ return {}
52
+
53
+ @model_validator(mode='before')
54
+ @classmethod
55
+ def set_default_os(cls, values: Dict) -> Dict:
56
+ r"""Set the default OS based on the current platform if not provided.
57
+
58
+ Args:
59
+ values (Dict): The values dictionary from the model validation.
60
+
61
+ Returns:
62
+ Dict: The updated values dictionary with the OS set.
63
+
64
+ Raises:
65
+ ValueError: If the current system is not supported.
66
+ """
67
+ if 'os' not in values or values['os'] is None:
68
+ system = platform.system().lower()
69
+ if system in ('darwin', 'linux', 'windows'):
70
+ values['os'] = system
71
+ else:
72
+ raise ValueError(f"Unsupported system: {system}")
73
+ return values
74
+
75
+ def _prepare_command_args(
76
+ self, command: str, args: List[str]
77
+ ) -> Dict[str, Any]:
78
+ r"""Prepare command and arguments based on OS.
79
+
80
+ Args:
81
+ command (str): The base command to run.
82
+ args (List[str]): The arguments for the command.
83
+
84
+ Returns:
85
+ Dict[str, Any]: Command configuration with OS-specific adjustments.
86
+ """
87
+ if self.os == "windows":
88
+ return {"command": "cmd", "args": ["/c", command, *args]}
89
+ else: # darwin or linux
90
+ return {"command": command, "args": args}
91
+
92
+
93
+ class SmitheryRegistryConfig(BaseMCPRegistryConfig):
94
+ r"""Configuration for Smithery registry."""
95
+
96
+ type: MCPRegistryType = MCPRegistryType.SMITHERY
97
+ profile: str = Field(
98
+ ..., description="The profile to use for the registry."
99
+ )
100
+
101
+ def get_config(self) -> Dict[str, Any]:
102
+ r"""Generate configuration for Smithery registry.
103
+
104
+ Returns:
105
+ Dict[str, Any]: The complete configuration for the registry.
106
+ """
107
+ api_key = self.api_key or os.environ.get("SMITHERY_API_KEY")
108
+
109
+ args = [
110
+ "-y",
111
+ "@smithery/cli@latest",
112
+ "run",
113
+ "@smithery/toolbox",
114
+ "--key",
115
+ api_key,
116
+ "--profile",
117
+ self.profile,
118
+ ]
119
+
120
+ cmd_config = self._prepare_command_args("npx", args) # type: ignore[arg-type]
121
+
122
+ return {"mcpServers": {"toolbox": cmd_config}}
123
+
124
+
125
+ class ACIRegistryConfig(BaseMCPRegistryConfig):
126
+ r"""Configuration for ACI registry."""
127
+
128
+ type: MCPRegistryType = MCPRegistryType.ACI
129
+ linked_account_owner_id: str = Field(
130
+ ..., description="The owner ID of the linked account."
131
+ )
132
+
133
+ def get_config(self) -> Dict[str, Any]:
134
+ r"""Generate configuration for ACI registry.
135
+
136
+ Returns:
137
+ Dict[str, Any]: The complete configuration for the registry.
138
+ """
139
+ api_key = self.api_key or os.environ.get("ACI_API_KEY")
140
+
141
+ args = [
142
+ "aci-mcp",
143
+ "unified-server",
144
+ "--linked-account-owner-id",
145
+ self.linked_account_owner_id,
146
+ ]
147
+
148
+ cmd_config = self._prepare_command_args("uvx", args)
149
+
150
+ return {
151
+ "mcpServers": {
152
+ "aci-mcp-unified": {
153
+ **cmd_config,
154
+ "env": {"ACI_API_KEY": api_key},
155
+ }
156
+ }
157
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: camel-ai
3
- Version: 0.2.57
3
+ Version: 0.2.59
4
4
  Summary: Communicative Agents for AI Society Study
5
5
  Project-URL: Homepage, https://www.camel-ai.org/
6
6
  Project-URL: Repository, https://github.com/camel-ai/camel
@@ -65,6 +65,7 @@ Requires-Dist: ipykernel<7,>=6.0.0; extra == 'all'
65
65
  Requires-Dist: jupyter-client<9,>=8.6.2; extra == 'all'
66
66
  Requires-Dist: linkup-sdk<0.3,>=0.2.1; extra == 'all'
67
67
  Requires-Dist: litellm<2,>=1.38.1; extra == 'all'
68
+ Requires-Dist: markitdown==0.1.1; extra == 'all'
68
69
  Requires-Dist: math-verify<0.8,>=0.7.0; extra == 'all'
69
70
  Requires-Dist: mcp>=1.3.0; extra == 'all'
70
71
  Requires-Dist: mem0ai>=0.1.67; extra == 'all'
@@ -196,6 +197,7 @@ Requires-Dist: crawl4ai>=0.3.745; extra == 'document-tools'
196
197
  Requires-Dist: docx2txt<0.9,>=0.8; extra == 'document-tools'
197
198
  Requires-Dist: docx>=0.2.4; extra == 'document-tools'
198
199
  Requires-Dist: fpdf>=1.7.2; extra == 'document-tools'
200
+ Requires-Dist: markitdown==0.1.1; extra == 'document-tools'
199
201
  Requires-Dist: numpy~=1.26; extra == 'document-tools'
200
202
  Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'document-tools'
201
203
  Requires-Dist: openpyxl>=3.1.5; extra == 'document-tools'
@@ -598,7 +600,7 @@ Please reach out to us on [CAMEL discord](https://discord.camel-ai.org/) if you
598
600
 
599
601
  <div align="center">
600
602
  <a href="https://docs.camel-ai.org">
601
- <img src="docs/images/techstack.png" alt="TechStack">
603
+ <img src="https://camel-ai.github.io/camel_asset/graphics/techstack.png" alt="TechStack">
602
604
  </a>
603
605
  </div>
604
606
 
@@ -1,18 +1,18 @@
1
- camel/__init__.py,sha256=w5hgs58ruWalSpq12-blpBnUVKcz68enl_rI6eePmx0,912
1
+ camel/__init__.py,sha256=cNw7Nfkek0Zqhs2d7EOms-FvYE37ClsE6Rafn9zGv7g,899
2
2
  camel/generators.py,sha256=JRqj9_m1PF4qT6UtybzTQ-KBT9MJQt18OAAYvQ_fr2o,13844
3
- camel/human.py,sha256=9X09UmxI2JqQnhrFfnZ3B9EzFmVfdSWQcjLWTIXKXe0,4962
3
+ camel/human.py,sha256=Xg8x1cS5KK4bQ1SDByiHZnzsRpvRP-KZViNvmu38xo4,5475
4
4
  camel/logger.py,sha256=rZVeOVYuQ9RYJ5Tqyv0usqy0g4zaVEq4qSfZ9nd2640,5755
5
5
  camel/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  camel/agents/__init__.py,sha256=64weKqdvmpZcGWyVkO-OKASAmVUdrQjv60JApgPk_SA,1644
7
7
  camel/agents/_types.py,sha256=ryPRmEXnpNtbFT23GoAcwK-zxWWsIOqYu64mxMx_PhI,1430
8
8
  camel/agents/_utils.py,sha256=AR7Qqgbkmn4X2edYUQf1rdksGUyV5hm3iK1z-Dn0Mcg,6266
9
9
  camel/agents/base.py,sha256=c4bJYL3G3Z41SaFdMPMn8ZjLdFiFaVOFO6EQIfuCVR8,1124
10
- camel/agents/chat_agent.py,sha256=bumSJSWfyc_8jGUX4Gb66Tma8pAfXGf4UqyGkyWrOog,59549
11
- camel/agents/critic_agent.py,sha256=qFVlHlQo0CVgmPWfWYLT8_oP_KyzCLFsQw_nN_vu5Bs,7487
10
+ camel/agents/chat_agent.py,sha256=IjEs6-2BAhf8cQd-WcirlRUZoFWK-axfhgZBuoUdASA,65008
11
+ camel/agents/critic_agent.py,sha256=L6cTbYjyZB0DCa51tQ6LZLA6my8kHLC4nktHySH78H4,10433
12
12
  camel/agents/deductive_reasoner_agent.py,sha256=6BZGaq1hR6hKJuQtOfoYQnk_AkZpw_Mr7mUy2MspQgs,13540
13
13
  camel/agents/embodied_agent.py,sha256=XBxBu5ZMmSJ4B2U3Z7SMwvLlgp6yNpaBe8HNQmY9CZA,7536
14
14
  camel/agents/knowledge_graph_agent.py,sha256=7Tchhyvm1s8tQ3at7iGKZt70xWZllRXu2vwUFR37p10,9681
15
- camel/agents/mcp_agent.py,sha256=W8-om91DjGbcWyjuvns6st8h6T2HGf06tLg7OLzAUf0,7838
15
+ camel/agents/mcp_agent.py,sha256=tNX7Y1ldjM0Ou8UxcArnRGI68i6s5YluZOQicNAnMFI,16432
16
16
  camel/agents/multi_hop_generator_agent.py,sha256=aYsZNsEFHxIq8_wDN8lZRkvRbfhlOYGBKezWr87y8Bs,4325
17
17
  camel/agents/programmed_agent_instruction.py,sha256=99fLe41che3X6wPpNPJXRwl4If6EoQqQVWIoT3DKE1s,7124
18
18
  camel/agents/repo_agent.py,sha256=ZzZ9zvh0vgdJv1KNY3GEaEPDdDxxXrjUZxjjHjVEWtE,22187
@@ -22,10 +22,11 @@ camel/agents/task_agent.py,sha256=KfJvZ5vOjjbrn20UGqSMnf6lds5ydfXdb7eNMxBU5vs,14
22
22
  camel/agents/tool_agents/__init__.py,sha256=hhd1kQYDshfvszN5JHBorINH9L3dI6xdDfKnbAAaKa0,856
23
23
  camel/agents/tool_agents/base.py,sha256=T6G5OaAJd4L_yHSFoWcrtqkMEyhge42ppVjx7lYD3Cg,1393
24
24
  camel/agents/tool_agents/hugging_face_tool_agent.py,sha256=nNySkdBRYaD05rLyPxzmq8W7D9WPcNHCY9h1jD6S0Hk,8717
25
- camel/benchmarks/__init__.py,sha256=QGZK03uHvXbblVap8lOVUrXlE6VprEDaNev9tiQAWF8,1122
25
+ camel/benchmarks/__init__.py,sha256=6a2CrCz7CeCqBSvDwi2HpXC35I-HKCMwupI1_uX4xVA,1193
26
26
  camel/benchmarks/apibank.py,sha256=kZyyFqqlk8aI5gPD7-zWnrSioME8BMRbk3vtEohYNGg,21429
27
27
  camel/benchmarks/apibench.py,sha256=87wRpKP73nKr8e4q9qecNt6Muaf6tdMWB9-nd1Z64PA,19068
28
28
  camel/benchmarks/base.py,sha256=GHbcE0KAenEiYb3x8orLgyGPp40KTdLHwahVFhI-cgE,4594
29
+ camel/benchmarks/browsecomp.py,sha256=SlsDynCooeEor-GPh7CAoyONv2B_2vo-sYlfIwU_xbk,30816
29
30
  camel/benchmarks/gaia.py,sha256=TKUZr1XsPAVsJHxkpy0HUi64BMz0x3LAUUSRHlG2SxM,16858
30
31
  camel/benchmarks/nexus.py,sha256=Yp1UGyaD3_857QKoUTOeSeB4MKqP08znaxa9hzm5gRk,18207
31
32
  camel/benchmarks/ragbench.py,sha256=XlBV6YK_eZSH0yscNMX10BFHsVOXDfLqj4b8QHgsjlk,11079
@@ -130,13 +131,14 @@ camel/interpreters/interpreter_error.py,sha256=uEhcmHmmcajt5C9PLeHs21h1fE6cmyt23
130
131
  camel/interpreters/ipython_interpreter.py,sha256=-erOR6imuh5pUtpbUYky3zoLDr30Y5E7lm59BwwxzNs,5976
131
132
  camel/interpreters/subprocess_interpreter.py,sha256=xmACW9SeZ1yLogvD2rX_e63ixNE277XgQ3GaTb0c8KY,16639
132
133
  camel/interpreters/docker/Dockerfile,sha256=6_k33dlpxgf8V9vfywWmjLuOgHmT2s-a8Lb8VbFRv4s,253
133
- camel/loaders/__init__.py,sha256=Eo6c98nppLemtua3SZQeX5ZsJ0eUhMKRegiZzuSKNK0,1374
134
+ camel/loaders/__init__.py,sha256=qk-sJoauNdY_iGs9QBw1feV4RWvoa67OlqIUYp_xo0U,1439
134
135
  camel/loaders/apify_reader.py,sha256=oaVjKyNhJhG-hTuIwrpZ2hsB4XTL0M-kUksgSL2R0ck,7952
135
136
  camel/loaders/base_io.py,sha256=zsbdBPHgSPFyQrtiUgAsHvy39QHWUObRYNaVvr-pPk0,10190
136
137
  camel/loaders/chunkr_reader.py,sha256=Vzc0a1ac28DHQ5z40Va4ce2noOxaGnhRi3Clf60R1lc,6140
137
138
  camel/loaders/crawl4ai_reader.py,sha256=ugfGMpWhfLnKf_XEOyDGI2ekpViDnSATg9eSxHyWX7M,7653
138
139
  camel/loaders/firecrawl_reader.py,sha256=wCPHEWbfLv_q2x9MdTiSvJ_LDqUPO88lzPf0mmOBsME,5667
139
140
  camel/loaders/jina_url_reader.py,sha256=dL9J5JlsFKEhi4gU_vYIxKvvf_RJ4LY9gG6i8P8JpcA,3601
141
+ camel/loaders/markitdown.py,sha256=2tc9Tf2pMJFkFzJwTAge-2kdmgRBBAV3sXHjcbo9AVE,7058
140
142
  camel/loaders/mineru_extractor.py,sha256=nKa5n7f3ergv1TURcbXZJP5mQpnSCIFdlWrxWn4hBz8,9070
141
143
  camel/loaders/pandas_reader.py,sha256=zTVrUWsnR6oeOqeL8KLlnapJeaB4El0wyIrEPY1aLus,11922
142
144
  camel/loaders/scrapegraph_reader.py,sha256=k8EOV5-p41DHDr2ITV8BR1sMqBsvN41CN8Byj2cf5kY,3120
@@ -187,7 +189,7 @@ camel/models/novita_model.py,sha256=tU8RXsV-4wYmQhXcZkPXdlXRvLwsnj_pEJVSxnhXiXc,
187
189
  camel/models/nvidia_model.py,sha256=XkHBZJ94nkYB1j9AgyPsorYfvgO1Ys6S6_z3Qh3vrhM,3766
188
190
  camel/models/ollama_model.py,sha256=sc49XZT9KQeUWjvLqXn17kKa1jgAyAHiy2MHiUjQrzw,4416
189
191
  camel/models/openai_audio_models.py,sha256=BSixkXlc8xirQLl2qCla-g6_y9wDLnMZVHukHrhzw98,13344
190
- camel/models/openai_compatible_model.py,sha256=PmNMQKXMPk-4HYiDqn8dJ8cMH8ukl4MAPVtqWyWDnfY,10481
192
+ camel/models/openai_compatible_model.py,sha256=1u-INN5GIoVMWcPmn2yBY3VAkqbdVw3fz_1MklY0C4w,10532
191
193
  camel/models/openai_model.py,sha256=atxW2N6xcA9kqGAE6moqKYZD3IxIxOjmKcQnBs7ff7w,12826
192
194
  camel/models/openrouter_model.py,sha256=WAZxAtl_lVMMuc0HGjWHmfs3K0zt7G0dXM55TIsZ4d0,3866
193
195
  camel/models/ppio_model.py,sha256=Fn7TTaKkRfg5bIRIxbBSlvAXKLTcJf71iJdgQmSuBSk,3891
@@ -255,16 +257,16 @@ camel/schemas/openai_converter.py,sha256=SEnYsYcboZgVmjcC1YP5xke3c0MYPESPRmYQWsD
255
257
  camel/schemas/outlines_converter.py,sha256=OYKPR1fNyrYs9eh5RiXEAccMbnRc9WTwSVJYbh9HkKE,8738
256
258
  camel/societies/__init__.py,sha256=NOHjtlsY-gV9UCF2xXgcbG-xXyuigmbwbpLpNsDgEJ4,826
257
259
  camel/societies/babyagi_playing.py,sha256=KbTdpHfZ2V8AripVck0bNTOyF-RSaMPCRARz3DvzWfQ,11855
258
- camel/societies/role_playing.py,sha256=e4c-mRj---VmdNMD1M9GDBCtAe_w2HWYFYR8aeIXws4,29553
260
+ camel/societies/role_playing.py,sha256=1TsQbGYmN91BeQ0DGM5PpSJ9TMbn1F3maJNuv4fQ5zI,31749
259
261
  camel/societies/workforce/__init__.py,sha256=bkTI-PE-MSK9AQ2V2gR6cR2WY-R7Jqy_NmXRtAoqo8o,920
260
262
  camel/societies/workforce/base.py,sha256=4uSTmBQsWk_UX1xUrEbjo0X7OuYRbGWoroTV71Tvg8U,1947
261
263
  camel/societies/workforce/prompts.py,sha256=4OGp-1-XFYIZ8ZERubSsG-hwXti8fhjtwc3n5-WEgsA,7821
262
- camel/societies/workforce/role_playing_worker.py,sha256=l3m_iM5UKkkccJV4_ZhxVURmTf09v57rz5S2yKTkDK4,7047
264
+ camel/societies/workforce/role_playing_worker.py,sha256=rNI0q_pq0yCXT1_YQs5ViLcaemdT5ZGuUzrhUHRag4Y,7511
263
265
  camel/societies/workforce/single_agent_worker.py,sha256=2pWmUNv5Ru5pZjcEtejuG062byXv4GnL-FhWIH6Jj_o,3465
264
266
  camel/societies/workforce/task_channel.py,sha256=9t5hoinfGYnbRavX4kx34Jk1FOy05SnJZYbNzb5M-CQ,7140
265
267
  camel/societies/workforce/utils.py,sha256=yPbcLx8lNZStl15C4UXRBl5qsTrGA-hiIGynnGi53WQ,2384
266
268
  camel/societies/workforce/worker.py,sha256=Do6FDpEraICQVptBH-LiG5KDYYQzD83sLoYO9J8NAbc,3933
267
- camel/societies/workforce/workforce.py,sha256=pILqMHYbLXzMnxGnca4Dhwn9oCK-Ieadm79s_PfXMRE,19165
269
+ camel/societies/workforce/workforce.py,sha256=jlr7Us6GhVfKh_FTDUN-K5kRBqCOoVBKn0U1hE1bMKs,21599
268
270
  camel/storages/__init__.py,sha256=slOLuoxK45LEmLzogqkSmAfbItwYGa4ytzwZopSvhK0,1840
269
271
  camel/storages/graph_storages/__init__.py,sha256=G29BNn651C0WTOpjCl4QnVM-4B9tcNh8DdmsCiONH8Y,948
270
272
  camel/storages/graph_storages/base.py,sha256=uSe9jWuLudfm5jtfo6E-L_kNzITwK1_Ef-6L4HWw-JM,2852
@@ -295,20 +297,21 @@ camel/terminators/__init__.py,sha256=t8uqrkUnXEOYMXQDgaBkMFJ0EXFKI0kmx4cUimli3Ls
295
297
  camel/terminators/base.py,sha256=xmJzERX7GdSXcxZjAHHODa0rOxRChMSRboDCNHWSscs,1511
296
298
  camel/terminators/response_terminator.py,sha256=n3G5KP6Oj7-7WlRN0yFcrtLpqAJKaKS0bmhrWlFfCgQ,4982
297
299
  camel/terminators/token_limit_terminator.py,sha256=YWv6ZR8R9yI2Qnf_3xES5bEE_O5bb2CxQ0EUXfMh34c,2118
298
- camel/toolkits/__init__.py,sha256=JbvxFf-wUFClNSriXB56LkhaRipw4n4PEc2M9f5-47o,4657
300
+ camel/toolkits/__init__.py,sha256=NDZxXqKBcvAVyFJdkaQ4EqL_5ODn8ycCN83mSU0xFqs,4821
299
301
  camel/toolkits/aci_toolkit.py,sha256=jhXMQggG22hd3dXdT3iJm7qWTH3KJC-TUVk1txoNWrM,16079
300
302
  camel/toolkits/arxiv_toolkit.py,sha256=Bs2-K1yfmqhEhHoQ0j00KoI8LpOd8M3ApXcvI_-ApVw,6303
301
303
  camel/toolkits/ask_news_toolkit.py,sha256=WfWaqwEo1Apbil3-Rb5y65Ws43NU4rAFWZu5VHe4los,23448
304
+ camel/toolkits/async_browser_toolkit.py,sha256=RNQEExzMXCdLHRgewlDad0jPYbLCFzN3VC0ddFzdDDY,65844
302
305
  camel/toolkits/audio_analysis_toolkit.py,sha256=dnDtQJbztVBwBpamSyCfigPw2GBnDAfi3fOPgql4Y50,8941
303
- camel/toolkits/base.py,sha256=4uuQ8peAvNNq-M0lOHVbIbMJiphlNCfQv7bfZ7LSKSI,2052
304
- camel/toolkits/browser_toolkit.py,sha256=qfy4U9VUbYLjt5HgHS4n6RNUCrLKmHN7MojGCM5wS7Q,55378
306
+ camel/toolkits/base.py,sha256=7vW2Je9HZqsA1yKwH3aXEGAsjRN1cqeCnsIWfHp6yfE,2386
307
+ camel/toolkits/browser_toolkit.py,sha256=AKm44-xk4ssL5AxSFMjgrjmZcR7Yss9xYBp1BtjokGs,55977
305
308
  camel/toolkits/code_execution.py,sha256=6nI5wSBE6W8Ha05UfoPRoe7dtyszGUZ7W55_3HUgUoY,4626
306
309
  camel/toolkits/dalle_toolkit.py,sha256=WqQiFYer686awAIc9p4o7CQyA0mJ0G7lH6-nxiF6zpE,6040
307
310
  camel/toolkits/dappier_toolkit.py,sha256=ewhXeeUj7e4DiTzuWDA-gHGhrLdyoZ4l9pbijvF3py0,8199
308
311
  camel/toolkits/data_commons_toolkit.py,sha256=aHZUSL1ACpnYGaf1rE2csVKTmXTmN8lMGRUBYhZ_YEk,14168
309
- camel/toolkits/excel_toolkit.py,sha256=SpmgLJWVFHaR8puDg4eTllGDc6SXzRt4U3QYgFTrLCM,6354
312
+ camel/toolkits/excel_toolkit.py,sha256=8SuK5lTVQF990rR-EvjnXrJ2oocy0eC3Y41PsYwTRYQ,6421
310
313
  camel/toolkits/file_write_toolkit.py,sha256=UiN5G7hX3dqSkktqvpMq0WhQQJW_fKbiPiOhUeuSWYU,14351
311
- camel/toolkits/function_tool.py,sha256=yyNNn6c0Pd-7n2MVlJvl09Cc1zSCt-QPHVstauyZBZY,30349
314
+ camel/toolkits/function_tool.py,sha256=3y0snbYnHHijz4WYkS0xs6GInuTCRJAPACLjR7iutX4,30365
312
315
  camel/toolkits/github_toolkit.py,sha256=x9QBsnZbLqAng4eGmnJrGxMSScrGzIA9yri9zAqfuwQ,12242
313
316
  camel/toolkits/google_calendar_toolkit.py,sha256=E-sdgdbtNBs_CXbhht9t1dsVr4DsTr5NguHkx4fvSmc,15410
314
317
  camel/toolkits/google_maps_toolkit.py,sha256=WTnkURpGri9KcY5OwV7AJJHOzmpu5RNmYE1QCVqvwWM,12023
@@ -319,7 +322,7 @@ camel/toolkits/jina_reranker_toolkit.py,sha256=U-V9qZ7SKP3SPTh_0CsE7ZKNqS9jNkmKY
319
322
  camel/toolkits/klavis_toolkit.py,sha256=ZKerhgz5e-AV-iv0ftf07HgWikknIHjB3EOQswfuR80,9864
320
323
  camel/toolkits/linkedin_toolkit.py,sha256=wn4eXwYYlVA7doTna7k7WYhUqTBF83W79S-UJs_IQr0,8065
321
324
  camel/toolkits/math_toolkit.py,sha256=KdI8AJ9Dbq5cfWboAYJUYgSkmADMCO5eZ6yqYkWuiIQ,3686
322
- camel/toolkits/mcp_toolkit.py,sha256=a2Jdf0TyxqB-P1hB_dh33nH88cEunFMnh7qjgs1H1aQ,21996
325
+ camel/toolkits/mcp_toolkit.py,sha256=MU0Z7OOnrONLYGVwFnOReX-C9DfLD-jcNzI71Buq_DE,26486
323
326
  camel/toolkits/memory_toolkit.py,sha256=TeKYd5UMwgjVpuS2orb-ocFL13eUNKujvrFOruDCpm8,4436
324
327
  camel/toolkits/meshy_toolkit.py,sha256=NbgdOBD3FYLtZf-AfonIv6-Q8-8DW129jsaP1PqI2rs,7126
325
328
  camel/toolkits/mineru_toolkit.py,sha256=vRX9LholLNkpbJ6axfEN4pTG85aWb0PDmlVy3rAAXhg,6868
@@ -335,7 +338,7 @@ camel/toolkits/pulse_mcp_search_toolkit.py,sha256=uLUpm19uC_4xLJow0gGVS9f-5T5EW2
335
338
  camel/toolkits/pyautogui_toolkit.py,sha256=Q810fm8cFvElRory7B74aqS2YV6BOpdRE6jkewoM8xc,16093
336
339
  camel/toolkits/reddit_toolkit.py,sha256=x0XAT1zQJVNHUr1R1HwWCgIlkamU-kPmbfb_H1WIv-w,8036
337
340
  camel/toolkits/retrieval_toolkit.py,sha256=BKjEyOqW3cGEPTS5yHPYb-Qg795iNNPIs1wjowfuq3U,3825
338
- camel/toolkits/search_toolkit.py,sha256=bC1B08M3awfBZlmaNYaemcVZkCiC42eih7AuFCe1-9Y,50171
341
+ camel/toolkits/search_toolkit.py,sha256=5BOBQS5LV33mpRwO9vnnexn9Lsqu6MkO3IgaXJBp7ZQ,43742
339
342
  camel/toolkits/searxng_toolkit.py,sha256=a2GtE4FGSrmaIVvX6Yide-abBYD1wsHqitnDlx9fdVg,7664
340
343
  camel/toolkits/semantic_scholar_toolkit.py,sha256=Rh7eA_YPxV5pvPIzhjjvpr3vtlaCniJicrqzkPWW9_I,11634
341
344
  camel/toolkits/slack_toolkit.py,sha256=Nb3w-TbUmnUWEvHE9Hbf_wkpSepm_zKQj7m19UyoFio,11194
@@ -348,6 +351,7 @@ camel/toolkits/video_analysis_toolkit.py,sha256=-BkRklGawy2KbeOfXFp4LC4FzvVQiF9N
348
351
  camel/toolkits/video_download_toolkit.py,sha256=6e6Cjmb2Xw7ayJ0BHQBrzsgt5MWzNC-nybWuV98CkPo,7389
349
352
  camel/toolkits/weather_toolkit.py,sha256=fs9x9aC38Wsvni6A4PPpbRX6-aBnZiqs2Jix39yoULU,7413
350
353
  camel/toolkits/whatsapp_toolkit.py,sha256=udUQXkXyeWsmrUlOJZsGBhHtc_jhB05Axe_TchhibsU,5760
354
+ camel/toolkits/wolfram_alpha_toolkit.py,sha256=_cIOR-gn08dgWsFaWzG5_yBuf7MWZ54fwuAXJZ2kkN0,8557
351
355
  camel/toolkits/zapier_toolkit.py,sha256=A83y1UcfuopH7Fx82pORzypl1StbhBjB2HhyOqYa300,7124
352
356
  camel/toolkits/open_api_specs/security_config.py,sha256=ZVnBa_zEifaE_ao2xsvV5majuJHpn2Tn7feMDOnj-eo,898
353
357
  camel/toolkits/open_api_specs/biztoc/__init__.py,sha256=OKCZrQCDwaWtXIN_2rA9FSqEvgpQRieRoHh7Ek6N16A,702
@@ -374,8 +378,9 @@ camel/toolkits/open_api_specs/web_scraper/ai-plugin.json,sha256=jjHvbj0DQ4AYcL9J
374
378
  camel/toolkits/open_api_specs/web_scraper/openapi.yaml,sha256=u_WalQ01e8W1D27VnZviOylpGmJ-zssYrfAgkzqdoyk,2191
375
379
  camel/toolkits/open_api_specs/web_scraper/paths/__init__.py,sha256=OKCZrQCDwaWtXIN_2rA9FSqEvgpQRieRoHh7Ek6N16A,702
376
380
  camel/toolkits/open_api_specs/web_scraper/paths/scraper.py,sha256=aWy1_ppV4NVVEZfnbN3tu9XA9yAPAC9bRStJ5JuXMRU,1117
377
- camel/types/__init__.py,sha256=Xdkjh7TQDAQUQ7pFnt7i_rLjjOhsJJnhzusARcFc94Q,2311
378
- camel/types/enums.py,sha256=flMhlgYsmNn_5RdAMTR2_W-Zk4jzuLEtbRzyAEDt2lY,58511
381
+ camel/types/__init__.py,sha256=pFTg3CWGSCfwFdoxPDTf4dKV8DdJS1x-bBPuEOmtdf0,2549
382
+ camel/types/enums.py,sha256=vOWppL5bYLTCZUwpv6KieAVaRRUaW0ASwjBu-3HaMlc,58527
383
+ camel/types/mcp_registries.py,sha256=dl4LgYtSaUhsqAKpz28k_SA9La11qxqBvDLaEuyzrFE,4971
379
384
  camel/types/openai_types.py,sha256=8ZFzLe-zGmKNPfuVZFzxlxAX98lGf18gtrPhOgMmzus,2104
380
385
  camel/types/unified_model_type.py,sha256=TpiUmJ3IuX8LNLtTUeUcVM7U82r4ClSq3ZQlNX3ODKs,5351
381
386
  camel/types/agents/__init__.py,sha256=cbvVkogPoZgcwZrgxLH6EtpGXk0kavF79nOic0Dc1vg,786
@@ -399,7 +404,7 @@ camel/verifiers/math_verifier.py,sha256=tA1D4S0sm8nsWISevxSN0hvSVtIUpqmJhzqfbuMo
399
404
  camel/verifiers/models.py,sha256=GdxYPr7UxNrR1577yW4kyroRcLGfd-H1GXgv8potDWU,2471
400
405
  camel/verifiers/physics_verifier.py,sha256=c1grrRddcrVN7szkxhv2QirwY9viIRSITWeWFF5HmLs,30187
401
406
  camel/verifiers/python_verifier.py,sha256=ogTz77wODfEcDN4tMVtiSkRQyoiZbHPY2fKybn59lHw,20558
402
- camel_ai-0.2.57.dist-info/METADATA,sha256=3p4MukfjBAa2HETSYZYTEL-DBzUWxMxuLmfxlbZhRfo,44254
403
- camel_ai-0.2.57.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
404
- camel_ai-0.2.57.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
405
- camel_ai-0.2.57.dist-info/RECORD,,
407
+ camel_ai-0.2.59.dist-info/METADATA,sha256=gIZZ35HcLU6Jc-ULT7T3drUunf6Eg4ZXik-8nMC4xKI,44399
408
+ camel_ai-0.2.59.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
409
+ camel_ai-0.2.59.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
410
+ camel_ai-0.2.59.dist-info/RECORD,,