camel-ai 0.2.58__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.

camel/human.py CHANGED
@@ -136,3 +136,17 @@ class Human:
136
136
  content = self.parse_input(human_input)
137
137
  message = meta_chat_message.create_new_instance(content)
138
138
  return ChatAgentResponse(msgs=[message], terminated=False, info={})
139
+
140
+ def clone(self, with_memory: bool = False) -> 'Human':
141
+ r"""Creates a new instance of the Human class with the same
142
+ attributes.
143
+
144
+ Args:
145
+ with_memory (bool): Flag indicating whether to include memory in
146
+ the cloned instance. Currently not used.
147
+ (default: :obj:`False`)
148
+
149
+ Returns:
150
+ Human: A new Human instance with the same name and logger_color.
151
+ """
152
+ return Human(name=self.name, logger_color=self.logger_color)
@@ -120,6 +120,9 @@ class RolePlaying:
120
120
  self.task_type = task_type
121
121
  self.task_prompt = task_prompt
122
122
 
123
+ self.task_specify_agent_kwargs = task_specify_agent_kwargs
124
+ self.task_planner_agent_kwargs = task_planner_agent_kwargs
125
+
123
126
  self.specified_task_prompt: Optional[TextPrompt] = None
124
127
  self._init_specified_task_prompt(
125
128
  assistant_role_name,
@@ -680,3 +683,50 @@ class RolePlaying:
680
683
  info=user_response.info,
681
684
  ),
682
685
  )
686
+
687
+ def clone(
688
+ self, task_prompt: str, with_memory: bool = False
689
+ ) -> 'RolePlaying':
690
+ r"""Creates a new instance of RolePlaying with the same configuration.
691
+
692
+ Args:
693
+ task_prompt (str): The task prompt to be used by the new instance.
694
+ with_memory (bool, optional): Whether to copy the memory
695
+ (conversation history) to the new instance. If True, the new
696
+ instance will have the same conversation history. If False,
697
+ the new instance will have a fresh memory.
698
+ (default: :obj:`False`)
699
+
700
+ Returns:
701
+ RolePlaying: A new instance of RolePlaying with the same
702
+ configuration.
703
+ """
704
+
705
+ new_instance = RolePlaying(
706
+ assistant_role_name=self.assistant_agent.role_name,
707
+ user_role_name=self.user_agent.role_name,
708
+ task_prompt=task_prompt,
709
+ with_task_specify=self.with_task_specify,
710
+ task_specify_agent_kwargs=self.task_specify_agent_kwargs,
711
+ with_task_planner=self.with_task_planner,
712
+ task_planner_agent_kwargs=self.task_planner_agent_kwargs,
713
+ with_critic_in_the_loop=False,
714
+ model=self.model,
715
+ task_type=self.task_type,
716
+ )
717
+ tmp_assistant_sys_msg = new_instance.assistant_sys_msg
718
+ new_instance.assistant_agent = self.assistant_agent.clone(with_memory)
719
+ new_instance.assistant_sys_msg = tmp_assistant_sys_msg
720
+ new_instance.assistant_agent._system_message = tmp_assistant_sys_msg
721
+
722
+ tmp_user_sys_msg = new_instance.user_sys_msg
723
+ new_instance.user_agent = self.user_agent.clone(with_memory)
724
+ new_instance.user_sys_msg = tmp_user_sys_msg
725
+ new_instance.user_agent._system_message = tmp_user_sys_msg
726
+
727
+ new_instance.with_critic_in_the_loop = self.with_critic_in_the_loop
728
+ new_instance.critic_sys_msg = self.critic_sys_msg
729
+ if self.critic:
730
+ new_instance.critic = self.critic.clone(with_memory)
731
+
732
+ return new_instance
@@ -38,14 +38,17 @@ class RolePlayingWorker(Worker):
38
38
  description (str): Description of the node.
39
39
  assistant_role_name (str): The role name of the assistant agent.
40
40
  user_role_name (str): The role name of the user agent.
41
- assistant_agent_kwargs (Optional[Dict], optional): The keyword
42
- arguments to initialize the assistant agent in the role playing,
43
- like the model name, etc. Defaults to None.
44
- user_agent_kwargs (Optional[Dict], optional): The keyword arguments to
41
+ assistant_agent_kwargs (Optional[Dict]): The keyword arguments to
42
+ initialize the assistant agent in the role playing, like the model
43
+ name, etc. (default: :obj:`None`)
44
+ user_agent_kwargs (Optional[Dict]): The keyword arguments to
45
45
  initialize the user agent in the role playing, like the model name,
46
- etc. Defaults to None.
47
- chat_turn_limit (int, optional): The maximum number of chat turns in
48
- the role playing. Defaults to 3.
46
+ etc. (default: :obj:`None`)
47
+ summarize_agent_kwargs (Optional[Dict]): The keyword arguments to
48
+ initialize the summarize agent, like the model name, etc.
49
+ (default: :obj:`None`)
50
+ chat_turn_limit (int): The maximum number of chat turns in the role
51
+ playing. (default: :obj:`3`)
49
52
  """
50
53
 
51
54
  def __init__(
@@ -55,9 +58,11 @@ class RolePlayingWorker(Worker):
55
58
  user_role_name: str,
56
59
  assistant_agent_kwargs: Optional[Dict] = None,
57
60
  user_agent_kwargs: Optional[Dict] = None,
61
+ summarize_agent_kwargs: Optional[Dict] = None,
58
62
  chat_turn_limit: int = 3,
59
63
  ) -> None:
60
64
  super().__init__(description)
65
+ self.summarize_agent_kwargs = summarize_agent_kwargs
61
66
  summ_sys_msg = BaseMessage.make_assistant_message(
62
67
  role_name="Summarizer",
63
68
  content="You are a good summarizer. You will be presented with "
@@ -65,7 +70,11 @@ class RolePlayingWorker(Worker):
65
70
  "are trying to solve a task. Your job is summarizing the result "
66
71
  "of the task based on the chat history.",
67
72
  )
68
- self.summarize_agent = ChatAgent(summ_sys_msg)
73
+ summarize_agent_dict = (
74
+ summarize_agent_kwargs if summarize_agent_kwargs else {}
75
+ )
76
+ summarize_agent_dict['system_message'] = summ_sys_msg
77
+ self.summarize_agent = ChatAgent(**summarize_agent_dict)
69
78
  self.chat_turn_limit = chat_turn_limit
70
79
  self.assistant_role_name = assistant_role_name
71
80
  self.user_role_name = user_role_name
@@ -202,6 +202,7 @@ class Workforce(BaseNode):
202
202
  user_role_name: str,
203
203
  assistant_agent_kwargs: Optional[Dict] = None,
204
204
  user_agent_kwargs: Optional[Dict] = None,
205
+ summarize_agent_kwargs: Optional[Dict] = None,
205
206
  chat_turn_limit: int = 3,
206
207
  ) -> Workforce:
207
208
  r"""Add a worker node to the workforce that uses `RolePlaying` system.
@@ -210,25 +211,29 @@ class Workforce(BaseNode):
210
211
  description (str): Description of the node.
211
212
  assistant_role_name (str): The role name of the assistant agent.
212
213
  user_role_name (str): The role name of the user agent.
213
- assistant_agent_kwargs (Optional[Dict], optional): The keyword
214
- arguments to initialize the assistant agent in the role
215
- playing, like the model name, etc. Defaults to `None`.
216
- user_agent_kwargs (Optional[Dict], optional): The keyword arguments
217
- to initialize the user agent in the role playing, like the
218
- model name, etc. Defaults to `None`.
219
- chat_turn_limit (int, optional): The maximum number of chat turns
220
- in the role playing. Defaults to 3.
214
+ assistant_agent_kwargs (Optional[Dict]): The keyword arguments to
215
+ initialize the assistant agent in the role playing, like the
216
+ model name, etc. (default: :obj:`None`)
217
+ user_agent_kwargs (Optional[Dict]): The keyword arguments to
218
+ initialize the user agent in the role playing, like the
219
+ model name, etc. (default: :obj:`None`)
220
+ summarize_agent_kwargs (Optional[Dict]): The keyword arguments to
221
+ initialize the summarize agent, like the model name, etc.
222
+ (default: :obj:`None`)
223
+ chat_turn_limit (int): The maximum number of chat turns in the
224
+ role playing. (default: :obj:`3`)
221
225
 
222
226
  Returns:
223
227
  Workforce: The workforce node itself.
224
228
  """
225
229
  worker_node = RolePlayingWorker(
226
- description,
227
- assistant_role_name,
228
- user_role_name,
229
- assistant_agent_kwargs,
230
- user_agent_kwargs,
231
- chat_turn_limit,
230
+ description=description,
231
+ assistant_role_name=assistant_role_name,
232
+ user_role_name=user_role_name,
233
+ assistant_agent_kwargs=assistant_agent_kwargs,
234
+ user_agent_kwargs=user_agent_kwargs,
235
+ summarize_agent_kwargs=summarize_agent_kwargs,
236
+ chat_turn_limit=chat_turn_limit,
232
237
  )
233
238
  self._children.append(worker_node)
234
239
  return self
@@ -501,3 +506,54 @@ class Workforce(BaseNode):
501
506
  for child_task in self._child_listening_tasks:
502
507
  child_task.cancel()
503
508
  self._running = False
509
+
510
+ def clone(self, with_memory: bool = False) -> 'Workforce':
511
+ r"""Creates a new instance of Workforce with the same configuration.
512
+
513
+ Args:
514
+ with_memory (bool, optional): Whether to copy the memory
515
+ (conversation history) to the new instance. If True, the new
516
+ instance will have the same conversation history. If False,
517
+ the new instance will have a fresh memory.
518
+ (default: :obj:`False`)
519
+
520
+ Returns:
521
+ Workforce: A new instance of Workforce with the same configuration.
522
+ """
523
+
524
+ # Create a new instance with the same configuration
525
+ new_instance = Workforce(
526
+ description=self.description,
527
+ coordinator_agent_kwargs={},
528
+ task_agent_kwargs={},
529
+ new_worker_agent_kwargs=self.new_worker_agent_kwargs,
530
+ )
531
+
532
+ new_instance.task_agent = self.task_agent.clone(with_memory)
533
+ new_instance.coordinator_agent = self.coordinator_agent.clone(
534
+ with_memory
535
+ )
536
+
537
+ for child in self._children:
538
+ if isinstance(child, SingleAgentWorker):
539
+ cloned_worker = child.worker.clone(with_memory)
540
+ new_instance.add_single_agent_worker(
541
+ child.description, cloned_worker
542
+ )
543
+ elif isinstance(child, RolePlayingWorker):
544
+ new_instance.add_role_playing_worker(
545
+ child.description,
546
+ child.assistant_role_name,
547
+ child.user_role_name,
548
+ child.assistant_agent_kwargs,
549
+ child.user_agent_kwargs,
550
+ child.summarize_agent_kwargs,
551
+ child.chat_turn_limit,
552
+ )
553
+ elif isinstance(child, Workforce):
554
+ new_instance.add_workforce(child.clone(with_memory))
555
+ else:
556
+ logger.warning(f"{type(child)} is not being cloned.")
557
+ continue
558
+
559
+ return new_instance
camel/toolkits/base.py CHANGED
@@ -53,11 +53,13 @@ class BaseToolkit(metaclass=AgentOpsMeta):
53
53
  """
54
54
  raise NotImplementedError("Subclasses must implement this method.")
55
55
 
56
- def run_mcp_server(self, mode: Literal["stdio", "sse"]) -> None:
56
+ def run_mcp_server(
57
+ self, mode: Literal["stdio", "sse", "streamable-http"]
58
+ ) -> None:
57
59
  r"""Run the MCP server in the specified mode.
58
60
 
59
61
  Args:
60
- mode (Literal["stdio", "sse"]): The mode to run
62
+ mode (Literal["stdio", "sse", "streamable-http"]): The mode to run
61
63
  the MCP server in.
62
64
  """
63
65
  self.mcp.run(mode)
@@ -29,7 +29,9 @@ class ExcelToolkit(BaseToolkit):
29
29
  r"""A class representing a toolkit for extract detailed cell information
30
30
  from an Excel file.
31
31
 
32
- This class provides method for processing excel files.
32
+ This class provides methods extracting detailed content from Excel files
33
+ (including .xls, .xlsx,.csv), and converting the data into
34
+ Markdown formatted table.
33
35
  """
34
36
 
35
37
  def __init__(
@@ -194,8 +194,13 @@ class MCPClient(BaseToolkit):
194
194
 
195
195
  async def disconnect(self):
196
196
  r"""Explicitly disconnect from the MCP server."""
197
+ # If the server is not connected, do nothing
198
+ if not self._is_connected:
199
+ return
197
200
  self._is_connected = False
198
201
  await self._exit_stack.aclose()
202
+ # Reset the exit stack and session for future reuse purposes
203
+ self._exit_stack = AsyncExitStack()
199
204
  self._session = None
200
205
 
201
206
  @asynccontextmanager
@@ -599,7 +604,6 @@ class MCPToolkit(BaseToolkit):
599
604
  if config_dict:
600
605
  self.servers.extend(self._load_servers_from_dict(config_dict))
601
606
 
602
- self._exit_stack = AsyncExitStack()
603
607
  self._connected = False
604
608
 
605
609
  def _load_servers_from_config(
@@ -691,7 +695,6 @@ class MCPToolkit(BaseToolkit):
691
695
  logger.warning("MCPToolkit is already connected")
692
696
  return self
693
697
 
694
- self._exit_stack = AsyncExitStack()
695
698
  try:
696
699
  # Sequentially connect to each server
697
700
  for server in self.servers:
@@ -712,7 +715,6 @@ class MCPToolkit(BaseToolkit):
712
715
  for server in self.servers:
713
716
  await server.disconnect()
714
717
  self._connected = False
715
- await self._exit_stack.aclose()
716
718
 
717
719
  @asynccontextmanager
718
720
  async def connection(self) -> AsyncGenerator["MCPToolkit", None]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: camel-ai
3
- Version: 0.2.58
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
@@ -1,14 +1,14 @@
1
- camel/__init__.py,sha256=slXtHUmxJB_yAYRTcjyIeJDSgncSSNb7LODlJROOh5w,899
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=cSo1o1DrYOAymMvRRzI6gfS4iS4xXNn_QK5f0N3e5-A,59934
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
@@ -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
@@ -256,16 +257,16 @@ camel/schemas/openai_converter.py,sha256=SEnYsYcboZgVmjcC1YP5xke3c0MYPESPRmYQWsD
256
257
  camel/schemas/outlines_converter.py,sha256=OYKPR1fNyrYs9eh5RiXEAccMbnRc9WTwSVJYbh9HkKE,8738
257
258
  camel/societies/__init__.py,sha256=NOHjtlsY-gV9UCF2xXgcbG-xXyuigmbwbpLpNsDgEJ4,826
258
259
  camel/societies/babyagi_playing.py,sha256=KbTdpHfZ2V8AripVck0bNTOyF-RSaMPCRARz3DvzWfQ,11855
259
- camel/societies/role_playing.py,sha256=e4c-mRj---VmdNMD1M9GDBCtAe_w2HWYFYR8aeIXws4,29553
260
+ camel/societies/role_playing.py,sha256=1TsQbGYmN91BeQ0DGM5PpSJ9TMbn1F3maJNuv4fQ5zI,31749
260
261
  camel/societies/workforce/__init__.py,sha256=bkTI-PE-MSK9AQ2V2gR6cR2WY-R7Jqy_NmXRtAoqo8o,920
261
262
  camel/societies/workforce/base.py,sha256=4uSTmBQsWk_UX1xUrEbjo0X7OuYRbGWoroTV71Tvg8U,1947
262
263
  camel/societies/workforce/prompts.py,sha256=4OGp-1-XFYIZ8ZERubSsG-hwXti8fhjtwc3n5-WEgsA,7821
263
- 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
264
265
  camel/societies/workforce/single_agent_worker.py,sha256=2pWmUNv5Ru5pZjcEtejuG062byXv4GnL-FhWIH6Jj_o,3465
265
266
  camel/societies/workforce/task_channel.py,sha256=9t5hoinfGYnbRavX4kx34Jk1FOy05SnJZYbNzb5M-CQ,7140
266
267
  camel/societies/workforce/utils.py,sha256=yPbcLx8lNZStl15C4UXRBl5qsTrGA-hiIGynnGi53WQ,2384
267
268
  camel/societies/workforce/worker.py,sha256=Do6FDpEraICQVptBH-LiG5KDYYQzD83sLoYO9J8NAbc,3933
268
- camel/societies/workforce/workforce.py,sha256=MfI18UgmPVXNgie3PgIUK8jS_N9RO-kyzLu-OeCKka0,19178
269
+ camel/societies/workforce/workforce.py,sha256=jlr7Us6GhVfKh_FTDUN-K5kRBqCOoVBKn0U1hE1bMKs,21599
269
270
  camel/storages/__init__.py,sha256=slOLuoxK45LEmLzogqkSmAfbItwYGa4ytzwZopSvhK0,1840
270
271
  camel/storages/graph_storages/__init__.py,sha256=G29BNn651C0WTOpjCl4QnVM-4B9tcNh8DdmsCiONH8Y,948
271
272
  camel/storages/graph_storages/base.py,sha256=uSe9jWuLudfm5jtfo6E-L_kNzITwK1_Ef-6L4HWw-JM,2852
@@ -302,13 +303,13 @@ camel/toolkits/arxiv_toolkit.py,sha256=Bs2-K1yfmqhEhHoQ0j00KoI8LpOd8M3ApXcvI_-Ap
302
303
  camel/toolkits/ask_news_toolkit.py,sha256=WfWaqwEo1Apbil3-Rb5y65Ws43NU4rAFWZu5VHe4los,23448
303
304
  camel/toolkits/async_browser_toolkit.py,sha256=RNQEExzMXCdLHRgewlDad0jPYbLCFzN3VC0ddFzdDDY,65844
304
305
  camel/toolkits/audio_analysis_toolkit.py,sha256=dnDtQJbztVBwBpamSyCfigPw2GBnDAfi3fOPgql4Y50,8941
305
- camel/toolkits/base.py,sha256=9rp4reJnKLEHgYhas3-jfV8J6JTU4gOfoQN5nxRJ1vc,2334
306
+ camel/toolkits/base.py,sha256=7vW2Je9HZqsA1yKwH3aXEGAsjRN1cqeCnsIWfHp6yfE,2386
306
307
  camel/toolkits/browser_toolkit.py,sha256=AKm44-xk4ssL5AxSFMjgrjmZcR7Yss9xYBp1BtjokGs,55977
307
308
  camel/toolkits/code_execution.py,sha256=6nI5wSBE6W8Ha05UfoPRoe7dtyszGUZ7W55_3HUgUoY,4626
308
309
  camel/toolkits/dalle_toolkit.py,sha256=WqQiFYer686awAIc9p4o7CQyA0mJ0G7lH6-nxiF6zpE,6040
309
310
  camel/toolkits/dappier_toolkit.py,sha256=ewhXeeUj7e4DiTzuWDA-gHGhrLdyoZ4l9pbijvF3py0,8199
310
311
  camel/toolkits/data_commons_toolkit.py,sha256=aHZUSL1ACpnYGaf1rE2csVKTmXTmN8lMGRUBYhZ_YEk,14168
311
- camel/toolkits/excel_toolkit.py,sha256=5KI4jW3uEt2yFPNfGTtHpyMq793PIFqukIX2Xibv84U,6310
312
+ camel/toolkits/excel_toolkit.py,sha256=8SuK5lTVQF990rR-EvjnXrJ2oocy0eC3Y41PsYwTRYQ,6421
312
313
  camel/toolkits/file_write_toolkit.py,sha256=UiN5G7hX3dqSkktqvpMq0WhQQJW_fKbiPiOhUeuSWYU,14351
313
314
  camel/toolkits/function_tool.py,sha256=3y0snbYnHHijz4WYkS0xs6GInuTCRJAPACLjR7iutX4,30365
314
315
  camel/toolkits/github_toolkit.py,sha256=x9QBsnZbLqAng4eGmnJrGxMSScrGzIA9yri9zAqfuwQ,12242
@@ -321,7 +322,7 @@ camel/toolkits/jina_reranker_toolkit.py,sha256=U-V9qZ7SKP3SPTh_0CsE7ZKNqS9jNkmKY
321
322
  camel/toolkits/klavis_toolkit.py,sha256=ZKerhgz5e-AV-iv0ftf07HgWikknIHjB3EOQswfuR80,9864
322
323
  camel/toolkits/linkedin_toolkit.py,sha256=wn4eXwYYlVA7doTna7k7WYhUqTBF83W79S-UJs_IQr0,8065
323
324
  camel/toolkits/math_toolkit.py,sha256=KdI8AJ9Dbq5cfWboAYJUYgSkmADMCO5eZ6yqYkWuiIQ,3686
324
- camel/toolkits/mcp_toolkit.py,sha256=JxbKJ1IuqjO6kMAP9gMJgIBj7hFrjr4pEoiS8rt2_XA,26394
325
+ camel/toolkits/mcp_toolkit.py,sha256=MU0Z7OOnrONLYGVwFnOReX-C9DfLD-jcNzI71Buq_DE,26486
325
326
  camel/toolkits/memory_toolkit.py,sha256=TeKYd5UMwgjVpuS2orb-ocFL13eUNKujvrFOruDCpm8,4436
326
327
  camel/toolkits/meshy_toolkit.py,sha256=NbgdOBD3FYLtZf-AfonIv6-Q8-8DW129jsaP1PqI2rs,7126
327
328
  camel/toolkits/mineru_toolkit.py,sha256=vRX9LholLNkpbJ6axfEN4pTG85aWb0PDmlVy3rAAXhg,6868
@@ -403,7 +404,7 @@ camel/verifiers/math_verifier.py,sha256=tA1D4S0sm8nsWISevxSN0hvSVtIUpqmJhzqfbuMo
403
404
  camel/verifiers/models.py,sha256=GdxYPr7UxNrR1577yW4kyroRcLGfd-H1GXgv8potDWU,2471
404
405
  camel/verifiers/physics_verifier.py,sha256=c1grrRddcrVN7szkxhv2QirwY9viIRSITWeWFF5HmLs,30187
405
406
  camel/verifiers/python_verifier.py,sha256=ogTz77wODfEcDN4tMVtiSkRQyoiZbHPY2fKybn59lHw,20558
406
- camel_ai-0.2.58.dist-info/METADATA,sha256=hnXLXvuaQo0gEeM12pUjTg6DbKRyEA5f9X6sCPvlhso,44399
407
- camel_ai-0.2.58.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
408
- camel_ai-0.2.58.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
409
- camel_ai-0.2.58.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,,