camel-ai 0.2.76a0__py3-none-any.whl → 0.2.76a1__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.

Files changed (30) hide show
  1. camel/__init__.py +1 -1
  2. camel/agents/chat_agent.py +8 -1
  3. camel/memories/__init__.py +2 -1
  4. camel/memories/agent_memories.py +3 -1
  5. camel/memories/blocks/chat_history_block.py +17 -2
  6. camel/societies/workforce/single_agent_worker.py +44 -38
  7. camel/storages/object_storages/google_cloud.py +1 -1
  8. camel/toolkits/__init__.py +9 -2
  9. camel/toolkits/aci_toolkit.py +45 -0
  10. camel/toolkits/context_summarizer_toolkit.py +683 -0
  11. camel/toolkits/{file_write_toolkit.py → file_toolkit.py} +194 -34
  12. camel/toolkits/hybrid_browser_toolkit/config_loader.py +4 -0
  13. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +7 -2
  14. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +62 -45
  15. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +489 -60
  16. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +5 -2
  17. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +72 -12
  18. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +2 -14
  19. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +1 -0
  20. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +196 -60
  21. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +4 -4
  22. camel/toolkits/markitdown_toolkit.py +27 -1
  23. camel/toolkits/note_taking_toolkit.py +18 -8
  24. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  25. camel/toolkits/wechat_official_toolkit.py +483 -0
  26. camel/utils/context_utils.py +395 -0
  27. {camel_ai-0.2.76a0.dist-info → camel_ai-0.2.76a1.dist-info}/METADATA +2 -1
  28. {camel_ai-0.2.76a0.dist-info → camel_ai-0.2.76a1.dist-info}/RECORD +30 -26
  29. {camel_ai-0.2.76a0.dist-info → camel_ai-0.2.76a1.dist-info}/WHEEL +0 -0
  30. {camel_ai-0.2.76a0.dist-info → camel_ai-0.2.76a1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,395 @@
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
+
15
+ import os
16
+ from datetime import datetime
17
+ from pathlib import Path
18
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional
19
+
20
+ from camel.logger import get_logger
21
+
22
+ if TYPE_CHECKING:
23
+ from camel.agents import ChatAgent
24
+ from camel.memories.records import MemoryRecord
25
+
26
+ logger = get_logger(__name__)
27
+
28
+
29
+ class ContextUtility:
30
+ r"""Utility class for context management and file operations.
31
+
32
+ This utility provides generic functionality for managing context files,
33
+ markdown generation, and session management that can be used by
34
+ context-related features.
35
+
36
+ Key features:
37
+ - Session-based directory management
38
+ - Generic markdown file operations
39
+ - Text-based search through files
40
+ - File metadata handling
41
+ - Agent memory record retrieval
42
+ """
43
+
44
+ def __init__(self, working_directory: Optional[str] = None):
45
+ r"""Initialize the ContextUtility.
46
+
47
+ Args:
48
+ working_directory (str, optional): The directory path where files
49
+ will be stored. If not provided, a default directory will be
50
+ used.
51
+ """
52
+ self.working_directory_param = working_directory
53
+ self._setup_storage(working_directory)
54
+
55
+ def _setup_storage(self, working_directory: Optional[str]) -> None:
56
+ r"""Initialize session-specific storage paths and create directory
57
+ structure for context file management."""
58
+ self.session_id = self._generate_session_id()
59
+
60
+ if working_directory:
61
+ self.working_directory = Path(working_directory).resolve()
62
+ else:
63
+ camel_workdir = os.environ.get("CAMEL_WORKDIR")
64
+ if camel_workdir:
65
+ self.working_directory = Path(camel_workdir) / "context_files"
66
+ else:
67
+ self.working_directory = Path("context_files")
68
+
69
+ # Create session-specific directory
70
+ self.working_directory = self.working_directory / self.session_id
71
+ self.working_directory.mkdir(parents=True, exist_ok=True)
72
+
73
+ def _generate_session_id(self) -> str:
74
+ r"""Create timestamp-based unique identifier for isolating
75
+ current session files from other sessions."""
76
+ timestamp = datetime.now().strftime('%Y%m%d_%H%M%S_%f')
77
+ return f"session_{timestamp}"
78
+
79
+ # ========= GENERIC FILE MANAGEMENT METHODS =========
80
+
81
+ def _create_or_update_note(self, note_name: str, content: str) -> str:
82
+ r"""Write content to markdown file, creating new file or
83
+ overwriting existing one with UTF-8 encoding.
84
+
85
+ Args:
86
+ note_name (str): Name of the note (without .md extension).
87
+ content (str): Content to write to the note.
88
+
89
+ Returns:
90
+ str: Success message.
91
+ """
92
+ try:
93
+ file_path = self.working_directory / f"{note_name}.md"
94
+ with open(file_path, 'w', encoding='utf-8') as f:
95
+ f.write(content)
96
+ return f"Note '{note_name}.md' created successfully"
97
+ except Exception as e:
98
+ logger.error(f"Error creating note {note_name}: {e}")
99
+ return f"Error creating note: {e}"
100
+
101
+ def save_markdown_file(
102
+ self,
103
+ filename: str,
104
+ content: str,
105
+ title: Optional[str] = None,
106
+ metadata: Optional[Dict[str, Any]] = None,
107
+ ) -> str:
108
+ r"""Generic method to save any markdown content to a file.
109
+
110
+ Args:
111
+ filename (str): Name without .md extension.
112
+ content (str): Main content to save.
113
+ title (str, optional): Title for the markdown file.
114
+ metadata (Dict, optional): Additional metadata to include.
115
+
116
+ Returns:
117
+ str: Success message or error message.
118
+ """
119
+ try:
120
+ markdown_content = ""
121
+
122
+ # Add title if provided
123
+ if title:
124
+ markdown_content += f"# {title}\n\n"
125
+
126
+ # Add metadata section if provided
127
+ if metadata:
128
+ markdown_content += "## Metadata\n\n"
129
+ for key, value in metadata.items():
130
+ markdown_content += f"- {key}: {value}\n"
131
+ markdown_content += "\n"
132
+
133
+ # Add main content
134
+ markdown_content += content
135
+
136
+ self._create_or_update_note(filename, markdown_content)
137
+ logger.info(
138
+ f"Markdown file saved to "
139
+ f"{self.working_directory / f'{filename}.md'}"
140
+ )
141
+ return f"Markdown file '{filename}.md' saved successfully"
142
+
143
+ except Exception as e:
144
+ logger.error(f"Error saving markdown file {filename}: {e}")
145
+ return f"Error saving markdown file: {e}"
146
+
147
+ def load_markdown_file(self, filename: str) -> str:
148
+ r"""Generic method to load any markdown file.
149
+
150
+ Args:
151
+ filename (str): Name without .md extension.
152
+
153
+ Returns:
154
+ str: File content or empty string if not found.
155
+ """
156
+ try:
157
+ file_path = self.working_directory / f"{filename}.md"
158
+ if file_path.exists():
159
+ return file_path.read_text(encoding="utf-8")
160
+ return ""
161
+ except Exception as e:
162
+ logger.error(f"Error loading markdown file {filename}: {e}")
163
+ return ""
164
+
165
+ def file_exists(self, filename: str) -> bool:
166
+ r"""Verify presence of markdown file in current session directory.
167
+
168
+ Args:
169
+ filename (str): Name without .md extension.
170
+
171
+ Returns:
172
+ bool: True if file exists, False otherwise.
173
+ """
174
+ file_path = self.working_directory / f"{filename}.md"
175
+ return file_path.exists()
176
+
177
+ def list_markdown_files(self) -> List[str]:
178
+ r"""Discover all markdown files in current session directory
179
+ and return their base names for reference.
180
+
181
+ Returns:
182
+ List[str]: List of filenames without .md extension.
183
+ """
184
+ try:
185
+ md_files = list(self.working_directory.glob("*.md"))
186
+ return [f.stem for f in md_files]
187
+ except Exception as e:
188
+ logger.error(f"Error listing markdown files: {e}")
189
+ return []
190
+
191
+ # ========= GENERIC AGENT MEMORY METHODS =========
192
+
193
+ def get_agent_memory_records(
194
+ self, agent: "ChatAgent"
195
+ ) -> List["MemoryRecord"]:
196
+ r"""Retrieve conversation history from agent's memory system.
197
+
198
+ Args:
199
+ agent (ChatAgent): The agent to extract memory records from.
200
+
201
+ Returns:
202
+ List[MemoryRecord]: List of memory records from the agent.
203
+ """
204
+ try:
205
+ context_records = agent.memory.retrieve()
206
+ return [cr.memory_record for cr in context_records]
207
+ except Exception as e:
208
+ logger.error(f"Error extracting memory records: {e}")
209
+ return []
210
+
211
+ def format_memory_as_conversation(
212
+ self, memory_records: List["MemoryRecord"]
213
+ ) -> str:
214
+ r"""Transform structured memory records into human-readable
215
+ conversation format with role labels and message content.
216
+
217
+ Args:
218
+ memory_records (List[MemoryRecord]): Memory records to format.
219
+
220
+ Returns:
221
+ str: Formatted conversation text.
222
+ """
223
+ conversation_lines = []
224
+
225
+ for record in memory_records:
226
+ role = (
227
+ record.role_at_backend.value
228
+ if hasattr(record.role_at_backend, 'value')
229
+ else str(record.role_at_backend)
230
+ )
231
+ content = record.message.content
232
+ conversation_lines.append(f"{role}: {content}")
233
+
234
+ return "\n".join(conversation_lines)
235
+
236
+ # ========= SESSION MANAGEMENT METHODS =========
237
+
238
+ def create_session_directory(
239
+ self, base_dir: Optional[str] = None, session_id: Optional[str] = None
240
+ ) -> Path:
241
+ r"""Create a session-specific directory.
242
+
243
+ Args:
244
+ base_dir (str, optional): Base directory. If None, uses current
245
+ working directory.
246
+ session_id (str, optional): Custom session ID. If None, generates
247
+ new one.
248
+
249
+ Returns:
250
+ Path: The created session directory path.
251
+ """
252
+ if session_id is None:
253
+ session_id = self._generate_session_id()
254
+
255
+ if base_dir:
256
+ base_path = Path(base_dir).resolve()
257
+ else:
258
+ base_path = self.working_directory.parent
259
+
260
+ session_dir = base_path / session_id
261
+ session_dir.mkdir(parents=True, exist_ok=True)
262
+ return session_dir
263
+
264
+ def get_session_metadata(self) -> Dict[str, Any]:
265
+ r"""Collect comprehensive session information including identifiers,
266
+ timestamps, and directory paths for tracking and reference.
267
+
268
+ Returns:
269
+ Dict[str, Any]: Session metadata including ID, timestamp,
270
+ directory.
271
+ """
272
+ return {
273
+ 'session_id': self.session_id,
274
+ 'working_directory': str(self.working_directory),
275
+ 'created_at': datetime.now().isoformat(),
276
+ 'base_directory': str(self.working_directory.parent),
277
+ }
278
+
279
+ def list_sessions(self, base_dir: Optional[str] = None) -> List[str]:
280
+ r"""Discover all available session directories for browsing
281
+ historical conversations and context files.
282
+
283
+ Args:
284
+ base_dir (str, optional): Base directory to search. If None, uses
285
+ parent of working directory.
286
+
287
+ Returns:
288
+ List[str]: List of session directory names.
289
+ """
290
+ try:
291
+ if base_dir:
292
+ search_dir = Path(base_dir)
293
+ else:
294
+ search_dir = self.working_directory.parent
295
+
296
+ session_dirs = [
297
+ d.name
298
+ for d in search_dir.iterdir()
299
+ if d.is_dir() and d.name.startswith('session_')
300
+ ]
301
+ return sorted(session_dirs)
302
+ except Exception as e:
303
+ logger.error(f"Error listing sessions: {e}")
304
+ return []
305
+
306
+ # ========= GENERIC SEARCH METHODS =========
307
+
308
+ def search_in_file(
309
+ self, file_path: Path, keywords: List[str], top_k: int = 4
310
+ ) -> str:
311
+ r"""Perform keyword-based search through file sections,
312
+ ranking results by keyword frequency and returning top matches.
313
+
314
+ Args:
315
+ file_path (Path): Path to the file to search.
316
+ keywords (List[str]): Keywords to search for.
317
+ top_k (int): Maximum number of results to return.
318
+
319
+ Returns:
320
+ str: Formatted search results.
321
+ """
322
+ results: List[Dict[str, Any]] = []
323
+ keyword_terms = [keyword.lower() for keyword in keywords]
324
+
325
+ try:
326
+ if not file_path.exists():
327
+ return ""
328
+
329
+ with open(file_path, 'r', encoding='utf-8') as f:
330
+ content = f.read()
331
+
332
+ # Split content into sections (assuming ### headers)
333
+ sections = content.split('### ')[1:] # Skip the header part
334
+
335
+ for i, section in enumerate(sections):
336
+ if not section.strip():
337
+ continue
338
+
339
+ section_lower = section.lower()
340
+
341
+ # count how many keywords appear in this section
342
+ keyword_matches = sum(
343
+ 1 for keyword in keyword_terms if keyword in section_lower
344
+ )
345
+
346
+ if keyword_matches > 0:
347
+ results.append(
348
+ {
349
+ 'content': f"### {section.strip()}",
350
+ 'keyword_count': keyword_matches,
351
+ 'section_num': i + 1,
352
+ }
353
+ )
354
+
355
+ except Exception as e:
356
+ logger.warning(f"Error reading file {file_path}: {e}")
357
+ return ""
358
+
359
+ # sort by keyword count and limit results
360
+ results.sort(key=lambda x: x['keyword_count'], reverse=True)
361
+ results = results[:top_k]
362
+
363
+ if not results:
364
+ return ""
365
+
366
+ # format results
367
+ formatted_sections = []
368
+ for result in results:
369
+ formatted_sections.append(
370
+ f"Section {result['section_num']} "
371
+ f"(keyword matches: {result['keyword_count']}):\n"
372
+ f"{result['content']}\n"
373
+ )
374
+
375
+ return "\n---\n".join(formatted_sections)
376
+
377
+ # ========= UTILITY METHODS =========
378
+
379
+ def get_working_directory(self) -> Path:
380
+ r"""Retrieve the session-specific directory path where
381
+ all context files are stored.
382
+
383
+ Returns:
384
+ Path: The working directory path.
385
+ """
386
+ return self.working_directory
387
+
388
+ def get_session_id(self) -> str:
389
+ r"""Retrieve the unique identifier for the current session
390
+ used for file organization and tracking.
391
+
392
+ Returns:
393
+ str: The session ID.
394
+ """
395
+ return self.session_id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: camel-ai
3
- Version: 0.2.76a0
3
+ Version: 0.2.76a1
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
@@ -57,6 +57,7 @@ Requires-Dist: flask>=2.0; extra == 'all'
57
57
  Requires-Dist: google-api-python-client==2.166.0; extra == 'all'
58
58
  Requires-Dist: google-auth-httplib2==0.2.0; extra == 'all'
59
59
  Requires-Dist: google-auth-oauthlib==1.2.1; extra == 'all'
60
+ Requires-Dist: google-cloud-aiplatform>=1.111.0; extra == 'all'
60
61
  Requires-Dist: google-cloud-storage<3,>=2.18.0; extra == 'all'
61
62
  Requires-Dist: google-genai>=1.13.0; extra == 'all'
62
63
  Requires-Dist: googlemaps<5,>=4.10.0; extra == 'all'
@@ -1,4 +1,4 @@
1
- camel/__init__.py,sha256=z7lgc8zesIrYddQQIALrRlGAW0RYJn8IayrNQHvc3DQ,901
1
+ camel/__init__.py,sha256=6I-bm5fZpPWlOpBZ5pxXypAQXhzfcXQx0Ah3FJJSZVk,901
2
2
  camel/generators.py,sha256=JRqj9_m1PF4qT6UtybzTQ-KBT9MJQt18OAAYvQ_fr2o,13844
3
3
  camel/human.py,sha256=Xg8x1cS5KK4bQ1SDByiHZnzsRpvRP-KZViNvmu38xo4,5475
4
4
  camel/logger.py,sha256=WgEwael_eT6D-lVAKHpKIpwXSTjvLbny5jbV1Ab8lnA,5760
@@ -7,7 +7,7 @@ camel/agents/__init__.py,sha256=64weKqdvmpZcGWyVkO-OKASAmVUdrQjv60JApgPk_SA,1644
7
7
  camel/agents/_types.py,sha256=MeFZzay2kJA6evALQ-MbBTKW-0lu_0wBuKsxzH_4gWI,1552
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=h8ZmbZu18dXZmckcWxQcppA4X4rhTgPhCLntJVlJoSY,158619
10
+ camel/agents/chat_agent.py,sha256=GJZTjSSZf_xceq6LaM9arOuJKXaoqCPIMXuFVUq85iY,158849
11
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
@@ -156,12 +156,12 @@ camel/loaders/mistral_reader.py,sha256=N9y6mqxPri9w4wE3nfQ2Ch4ph9oxeMR5yJo2oOcQl
156
156
  camel/loaders/pandas_reader.py,sha256=zTVrUWsnR6oeOqeL8KLlnapJeaB4El0wyIrEPY1aLus,11922
157
157
  camel/loaders/scrapegraph_reader.py,sha256=k8EOV5-p41DHDr2ITV8BR1sMqBsvN41CN8Byj2cf5kY,3120
158
158
  camel/loaders/unstructured_io.py,sha256=wA3fkDeS4mSPFkMDnWZzJYKDltio7l72BU9D3EGfoUs,17423
159
- camel/memories/__init__.py,sha256=JQbs-_7VkcVTjE8y9J0DWI3btDyMRZilTZNVuy_RxZM,1358
160
- camel/memories/agent_memories.py,sha256=c8HwmgNwhtp8F4Wz9f5ekPXLA7DF8TEHhNYCutF1L9U,10872
159
+ camel/memories/__init__.py,sha256=vaStmUZNcHI884Fg9IQTezd50x4Me5fhDej0uK0O5fk,1404
160
+ camel/memories/agent_memories.py,sha256=M8L4WyFqrT1Ec-uBjZXa4puHnKFMBcU6a3AXneOJb2I,10895
161
161
  camel/memories/base.py,sha256=LRhCmPwQl7ADBb8bE0Izd0vmo5VhOSymtR8Q58fvrYA,5971
162
162
  camel/memories/records.py,sha256=NoiwDuwnKYObhrXPHSRGw8xdxAqyZDDiarOAN6-d17I,4451
163
163
  camel/memories/blocks/__init__.py,sha256=ci7_WU11222cNd1Zkv-a0z5E2ux95NMjAYm_cDzF0pE,854
164
- camel/memories/blocks/chat_history_block.py,sha256=ZAQZ9NqbwZ_w8XebQ3vVPSTA2sfUNooOfI4oNrGxdDo,6679
164
+ camel/memories/blocks/chat_history_block.py,sha256=JGdCZkMIiKs8Qa6HEDtlXcNfKbsDbegK8xCddgD6vCg,7107
165
165
  camel/memories/blocks/vectordb_block.py,sha256=r0mRGLV14YUr8aruLdylBjKdSm11oprsiNEWl0EJJhQ,4166
166
166
  camel/memories/context_creators/__init__.py,sha256=pqzkBM2ro5JZD7RhWg05TjinphhCq0QTIqBJlIL1sJ0,800
167
167
  camel/memories/context_creators/score_based.py,sha256=OQ7eEECkzu4Op5sS9qS1dVgZl-cchSkUZj8Puh8C024,16488
@@ -280,7 +280,7 @@ camel/societies/workforce/__init__.py,sha256=bkTI-PE-MSK9AQ2V2gR6cR2WY-R7Jqy_NmX
280
280
  camel/societies/workforce/base.py,sha256=z2DmbTP5LL5-aCAAqglznQqCLfPmnyM5zD3w6jjtsb8,2175
281
281
  camel/societies/workforce/prompts.py,sha256=WetbTS0x_vb2XZ8AsotxhGXUhnPHJ6ndeR9Z_jQuJtI,19058
282
282
  camel/societies/workforce/role_playing_worker.py,sha256=Zm89lZTlV0T3o9C-DJ0HAV68Iq2Kdg8QqJRWs1TV9_A,10320
283
- camel/societies/workforce/single_agent_worker.py,sha256=c7gXxeTGofYWfnQdv3id1c4G2B2jqAakYN-BaSw3BwY,19396
283
+ camel/societies/workforce/single_agent_worker.py,sha256=STgGJ_nPM6OjraZHTXKl26jFBXvU6npzfeY1HaL2CoI,19584
284
284
  camel/societies/workforce/structured_output_handler.py,sha256=xr8szFN86hg3jQ825aEkJTjkSFQnTlbinVg4j1vZJVI,17870
285
285
  camel/societies/workforce/task_channel.py,sha256=TXRwiqtmRPdelEmFCVN3jhd5XpgaSLwy9uHPtGecujA,11418
286
286
  camel/societies/workforce/utils.py,sha256=THgNHSeZsNVnjTzQTur3qCJhi72MrDS8X2gPET174cI,8434
@@ -303,7 +303,7 @@ camel/storages/object_storages/__init__.py,sha256=26yATVTD9yVH-p9KueD30JakstTGiD
303
303
  camel/storages/object_storages/amazon_s3.py,sha256=9Yvyyyb1LGHxr8REEza7oGopbVtLEfOyXWJc18ZwgqA,7418
304
304
  camel/storages/object_storages/azure_blob.py,sha256=66dHcvjE2ZNdb339oBU6LbFiKzPYrnlb4tQ_3m2Yazc,5992
305
305
  camel/storages/object_storages/base.py,sha256=pImWylYJm7Wt8q87lBE1Cxk26IJ9sRtXq_OJmV6bJlg,3796
306
- camel/storages/object_storages/google_cloud.py,sha256=59AvGar_GDoGYHhzUi5KBtInv2KaUVnw8SalsL43410,5332
306
+ camel/storages/object_storages/google_cloud.py,sha256=YxkrBgXK7GgZC5b4qitkvzaRGcCzWajh8PSzSJA4Arg,5362
307
307
  camel/storages/vectordb_storages/__init__.py,sha256=Nztyo6ZvEYJ7yWz6Id4ImCpTvGaMTM0v8wFM2dMjOBg,1470
308
308
  camel/storages/vectordb_storages/base.py,sha256=EP_WbEtI3SJPHro9rjNkIq9UDUP1AAHmxZgeya94Lgk,6738
309
309
  camel/storages/vectordb_storages/chroma.py,sha256=wXuLUYsgkC2VvdyLrlL5VqEDVzJDBUo7OdimK8hBLmg,27553
@@ -322,8 +322,8 @@ camel/terminators/__init__.py,sha256=t8uqrkUnXEOYMXQDgaBkMFJ0EXFKI0kmx4cUimli3Ls
322
322
  camel/terminators/base.py,sha256=xmJzERX7GdSXcxZjAHHODa0rOxRChMSRboDCNHWSscs,1511
323
323
  camel/terminators/response_terminator.py,sha256=n3G5KP6Oj7-7WlRN0yFcrtLpqAJKaKS0bmhrWlFfCgQ,4982
324
324
  camel/terminators/token_limit_terminator.py,sha256=YWv6ZR8R9yI2Qnf_3xES5bEE_O5bb2CxQ0EUXfMh34c,2118
325
- camel/toolkits/__init__.py,sha256=-lPyxsHNQb3Cw0Wm2oizVSwh_zvLH2lIgnlzEpWlkHI,6127
326
- camel/toolkits/aci_toolkit.py,sha256=39AsXloBb16hHB7DKi6mFU6NPZ3iVpM2FZgaP4o4eLE,16060
325
+ camel/toolkits/__init__.py,sha256=MOAc1RizrBhwMkkJ2DdZNabRb51ij8OyDUVMO_oZu-M,6457
326
+ camel/toolkits/aci_toolkit.py,sha256=0rRvj5fzcBsd-TU9cxOzk4lFxZvyWGEhY8BwOtWkM4g,17900
327
327
  camel/toolkits/arxiv_toolkit.py,sha256=mw629nIN_ozaAxNv3nbvhonJKNI2-97ScRCBS3gVqNo,6297
328
328
  camel/toolkits/ask_news_toolkit.py,sha256=WfWaqwEo1Apbil3-Rb5y65Ws43NU4rAFWZu5VHe4los,23448
329
329
  camel/toolkits/async_browser_toolkit.py,sha256=dHXV8uCDetLKN7no5otyP3hHDnQIRhGY0msJRJrFbIY,50436
@@ -333,12 +333,13 @@ camel/toolkits/bohrium_toolkit.py,sha256=453t-m0h0IGjurG6tCHUejGzfRAN2SAkhIoY8V-
333
333
  camel/toolkits/browser_toolkit.py,sha256=Ntn_LmCrhqqIBWq9HtiIKw-M0cL5ebn74Ej1GBoZiC8,44400
334
334
  camel/toolkits/browser_toolkit_commons.py,sha256=uuc1V5tN3YJmTSe6NHAVJqwsL4iYD7IiSZWxPLYW67A,22196
335
335
  camel/toolkits/code_execution.py,sha256=3LoSgKdIMlB3fMr7qFuFXt_9QXnTXS8pBfcld580N-k,6785
336
+ camel/toolkits/context_summarizer_toolkit.py,sha256=PD3Mq8ZtsaLMpFkVDmOcrY8H853FdxT6FI7RBGgPl28,25687
336
337
  camel/toolkits/craw4ai_toolkit.py,sha256=av8mqY68QgMSm27htnSdq0aqE6z3yWMVDSrNafQ6ORw,3298
337
338
  camel/toolkits/dappier_toolkit.py,sha256=OEHOYXX_oXhgbVtWYAy13nO9uXf9i5qEXSwY4PexNFg,8194
338
339
  camel/toolkits/data_commons_toolkit.py,sha256=aHZUSL1ACpnYGaf1rE2csVKTmXTmN8lMGRUBYhZ_YEk,14168
339
340
  camel/toolkits/edgeone_pages_mcp_toolkit.py,sha256=1TFpAGHUNLggFQeN1OEw7P5laijwnlrCkfxBtgxFuUY,2331
340
341
  camel/toolkits/excel_toolkit.py,sha256=tQaonygk0yDTPZHWWQKG5osTN-R_EawR0bJIKLsLg08,35768
341
- camel/toolkits/file_write_toolkit.py,sha256=BIN4c_Tw_24iBu7vDFxVV401UTNqKZkP5p_eOOL_Hmk,39389
342
+ camel/toolkits/file_toolkit.py,sha256=NV6NBcx2vEYQlIa3IiS-ScKNPzC7Cqa8CdQ508z_t_Y,45518
342
343
  camel/toolkits/function_tool.py,sha256=ke02awKhiHJo2FBHLewvimcJKf4DaAzgJ-fdA5RmrDo,34542
343
344
  camel/toolkits/github_toolkit.py,sha256=TYkrAiQuLgAolatTKSMZQkI9wKuV85B26HcLao1CCWw,16380
344
345
  camel/toolkits/google_calendar_toolkit.py,sha256=E-sdgdbtNBs_CXbhht9t1dsVr4DsTr5NguHkx4fvSmc,15410
@@ -351,7 +352,7 @@ camel/toolkits/image_generation_toolkit.py,sha256=n70inKbGLy0vjKS5Fhdl4nmrw8_Fmn
351
352
  camel/toolkits/jina_reranker_toolkit.py,sha256=koTjToI5aPeyQQMJ60a3ikGQJNUQLD834wrg7D2rtK8,11911
352
353
  camel/toolkits/klavis_toolkit.py,sha256=ZKerhgz5e-AV-iv0ftf07HgWikknIHjB3EOQswfuR80,9864
353
354
  camel/toolkits/linkedin_toolkit.py,sha256=wn4eXwYYlVA7doTna7k7WYhUqTBF83W79S-UJs_IQr0,8065
354
- camel/toolkits/markitdown_toolkit.py,sha256=Cwga4sOTT1HO51CjmXubD6ieRMhumtqEN6jlsgL1nq0,2867
355
+ camel/toolkits/markitdown_toolkit.py,sha256=lwN6qQY8TLZkNWOqzeKZG3Fku-HMpGFrdRwhtPaJSlw,3844
355
356
  camel/toolkits/math_toolkit.py,sha256=SJbzT6akHRlmqo1QwCj1f7-6pEv0sNKJbcYvYAylHQw,5439
356
357
  camel/toolkits/mcp_toolkit.py,sha256=FbBKyz7f6y2hA-lBVsh3K-_gyz2rVDwe3uvaK8OsuRc,41442
357
358
  camel/toolkits/memory_toolkit.py,sha256=TeKYd5UMwgjVpuS2orb-ocFL13eUNKujvrFOruDCpm8,4436
@@ -361,7 +362,7 @@ camel/toolkits/message_integration.py,sha256=-dcf91DJzj8asXP2cc7mMy1BH2xzifhH-MM
361
362
  camel/toolkits/mineru_toolkit.py,sha256=vRX9LholLNkpbJ6axfEN4pTG85aWb0PDmlVy3rAAXhg,6868
362
363
  camel/toolkits/minimax_mcp_toolkit.py,sha256=fazHJGeH4l-A--s5lQYVxqSBr9fUGJUfJz3KpqK1yJc,6846
363
364
  camel/toolkits/networkx_toolkit.py,sha256=C7pUCZTzzGkFyqdkrmhRKpAHmHWfLKeuzYHC_BHPtbk,8826
364
- camel/toolkits/note_taking_toolkit.py,sha256=FWnkKdPyTENzHDPSFKo9zOrhhONfJkFpRvnBV3aMX7s,10591
365
+ camel/toolkits/note_taking_toolkit.py,sha256=dT9eWSOnhcw5TI-7PhQHlGWBFJl_sWJ1_x9ppMX3eIk,11086
365
366
  camel/toolkits/notion_mcp_toolkit.py,sha256=ie_6Z-7DqDhgTiwYX8L3X47rfWGwzgwQH_s2DaK1ckc,8362
366
367
  camel/toolkits/notion_toolkit.py,sha256=jmmVWk_WazRNWnx4r9DAvhFTAL-n_ige0tb32UHJ_ik,9752
367
368
  camel/toolkits/open_api_toolkit.py,sha256=Venfq8JwTMQfzRzzB7AYmYUMEX35hW0BjIv_ozFMiNk,23316
@@ -386,37 +387,39 @@ camel/toolkits/task_planning_toolkit.py,sha256=Ttw9fHae4omGC1SA-6uaeXVHJ1YkwiVlo
386
387
  camel/toolkits/terminal_toolkit.py,sha256=COhtGmE4So8nAciGJYmsx3PrvzDf1Y3pal5YWmjIoZc,69154
387
388
  camel/toolkits/thinking_toolkit.py,sha256=nZYLvKWIx2BM1DYu69I9B5EISAG7aYcLYXKv9663BVk,8000
388
389
  camel/toolkits/twitter_toolkit.py,sha256=Px4N8aUxUzy01LhGSWkdrC2JgwKkrY3cvxgMeJ2XYfU,15939
390
+ camel/toolkits/vertex_ai_veo_toolkit.py,sha256=RFLUSG3pJxxDQq64EgcG43f7dmCpwPuecdTGwABaaZ0,21971
389
391
  camel/toolkits/video_analysis_toolkit.py,sha256=nTV1XxY8dcq8Ef7elbGXYGuSLBfrujU8tE4NhVGP-rE,23568
390
392
  camel/toolkits/video_download_toolkit.py,sha256=0dOzsG9vpCHr31bW4Iiqz4iMkQ7uxkAyTMgiculvenk,7567
391
393
  camel/toolkits/weather_toolkit.py,sha256=fs9x9aC38Wsvni6A4PPpbRX6-aBnZiqs2Jix39yoULU,7413
392
394
  camel/toolkits/web_deploy_toolkit.py,sha256=jUiU8ur759Q0Aiw5TUcvhu7Iv10W36Y1RS0hEHZIb4U,46154
395
+ camel/toolkits/wechat_official_toolkit.py,sha256=hCpGo4CtQp4ZjRYUrZTJcboJBMZFiCFsExTTMz6SmMo,16202
393
396
  camel/toolkits/whatsapp_toolkit.py,sha256=udUQXkXyeWsmrUlOJZsGBhHtc_jhB05Axe_TchhibsU,5760
394
397
  camel/toolkits/wolfram_alpha_toolkit.py,sha256=qeIM8ySn5ilcExBWtx-hDOc35bNcebLVnZ67kt1H3mQ,9295
395
398
  camel/toolkits/zapier_toolkit.py,sha256=A83y1UcfuopH7Fx82pORzypl1StbhBjB2HhyOqYa300,7124
396
399
  camel/toolkits/hybrid_browser_toolkit/__init__.py,sha256=vxjWhq7GjUKE5I9RGQU_GoikZJ-AVK4ertdvEqp9pd0,802
397
- camel/toolkits/hybrid_browser_toolkit/config_loader.py,sha256=N5kIWJIGpvX_vvTh7oCRhTkEu9DMOQQ4ZSM6rs0wChs,7368
398
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py,sha256=Pqd5Eh92F__aZLk4q5RSWjjcV3_vw-6NnYwHIXGJL44,8619
399
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py,sha256=nVE1sN9rsXq15Y1b-beWqsCMYPkrnAIaXHNyKcDRwy4,55777
400
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py,sha256=aLGLQrZyLN8AHXoX5UCthO7aKeCU-q2xnIpbtx8H8fg,32372
400
+ camel/toolkits/hybrid_browser_toolkit/config_loader.py,sha256=1FVZzDucDsC9IB6EcfP9TMgD3Z60vOniY4dk5TB1dsg,7595
401
+ camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py,sha256=lKZqDiRPVi07flrACCjFtANDsp-n6kstE1iF7OOhDa4,8930
402
+ camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py,sha256=KGvtdJdUJ86VacPmL4BYd0EZjscH6Z2wXtraXAQud1Y,56214
403
+ camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py,sha256=Ts30Ue9MEcwJU4C0KSYANvEw_YZmjeGe3quzZJ8O5Ek,37160
401
404
  camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json,sha256=_-YE9S_C1XT59A6upQp9lLuZcC67cV9QlbwAsEKkfyw,156337
402
405
  camel/toolkits/hybrid_browser_toolkit/ts/package.json,sha256=pUQm0xwXR7ZyWNv6O2QtHW00agnfAoX9F_XGXZlAxl4,745
403
406
  camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json,sha256=SwpQnq4Q-rwRobF2iWrP96mgmgwaVPZEv-nii5QIYEU,523
404
407
  camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js,sha256=lh-j0zkPS8WLUMRysVp2vPQ9lgnImw2ELMYgXGYyaek,10954
405
408
  camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js,sha256=NNwM_H2xaDrlrdac0PJK1iUBwdiuQsg9qKaMhHAvZuI,3160
406
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts,sha256=9Kx8lZfzCN5yywu72egW4OjBcQ4oSv2X76wHnmOZ_F4,46323
407
- camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts,sha256=HO4nyG8nItEfqUyXHAcE3XJpGmCYySXhro4sqLEr6J4,6340
408
- camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts,sha256=Mhh5c6lsu-gKtdSJh_95npbwToOBN4TjBsTnVX7l4yE,15943
409
+ camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts,sha256=jXYVb0UMneY1ee2_Ck68surynC8oRVbcCw3COaFbYlw,65903
410
+ camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts,sha256=80W5K5NTWzGF8sJdbP6MmwQDndT5EW1G8ENVa5xisis,6575
411
+ camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts,sha256=2I4gJdzHP6YP2rL4rZDH0_QHhxtU8v_pzkbJ7T5A5wQ,18221
409
412
  camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts,sha256=uJGHmGs640iCrjllqXDXwDE4hGW1VJA2YL6BkFkzYNs,353
410
413
  camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts,sha256=tQIy5Vw8BGRU861lJ8e47lMjA4NsW5nsy2VwS12kXHY,6820
411
- camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts,sha256=EEXSyoVkAVBO4hmfCsj0x9NZ57nXigRUa59Zb7D8kwg,8784
414
+ camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts,sha256=6PDTGbOJyPsc3Nt7AyPgctlDST0Lh1pqP9aE4yxQAb8,8233
412
415
  camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts,sha256=I1jhVoZn3fchsNXrMJI9b4g93rgqPbeM9wGyxNcpRQc,22503
413
- camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts,sha256=NFOJKROXYDHSXxcr15LHm36rPfRpVS2hsIobXcZgTRU,2964
416
+ camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts,sha256=WvWW06BX1HgrEbK_JAMGFogWnv5NNHe54XO4d7JQXgw,3074
414
417
  camel/toolkits/hybrid_browser_toolkit_py/__init__.py,sha256=tPQloCw-Ayl1lPfyvzGJkMFa1ze3ilXJq_1Oz5jg5s4,796
415
418
  camel/toolkits/hybrid_browser_toolkit_py/actions.py,sha256=S77VLL9hOq5M2RdPQrIAgjxinwS2ETd6kH6m6vtub5o,20935
416
419
  camel/toolkits/hybrid_browser_toolkit_py/agent.py,sha256=0ifwhYUDJ5GLxfdpC5KquPaW1a0QBAutp2Y9y0YFujw,11685
417
420
  camel/toolkits/hybrid_browser_toolkit_py/browser_session.py,sha256=BZrbUrGcbLbI2TjaS5WSCn2SIMFW1k0bK_53A4cZYI4,28687
418
421
  camel/toolkits/hybrid_browser_toolkit_py/config_loader.py,sha256=wFiEJhCBlDTQvl6FxXONX8kvJz5EzzGht2gQEk0RY6g,16723
419
- camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py,sha256=kGkM4V8AN8GaR0sIOatKJ0-IYgVo6JRDaKuy38u6Hmg,92008
422
+ camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py,sha256=pxycYHuV2dQwmXa0ksrmFmOhOYY2oREahx-MYizN6sA,92044
420
423
  camel/toolkits/hybrid_browser_toolkit_py/snapshot.py,sha256=zVd8FVeF_H-2z3d2xOMandylT6N421yfRmxUZegLYaQ,8706
421
424
  camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js,sha256=z4XRSVUpAS87Sj36s3bY8XXhvRcHBlgsUOyMxV2HI80,27650
422
425
  camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js,sha256=1FFw0J1h65_WZ3IqMhiuzcLG-qJ2BKlAMcBQdJi6fxI,42285
@@ -456,6 +459,7 @@ camel/utils/__init__.py,sha256=qQeMHZJ8Bbgpm4tBu-LWc_P3iFjXBlVfALdKTiD_s8I,3305
456
459
  camel/utils/async_func.py,sha256=KqoktGSWjZBuAMQ2CV0X6FRgHGlzCKLfeaWvp-f1Qz8,1568
457
460
  camel/utils/commons.py,sha256=xEhN__xkM1AT0dvvlAHZiPkGvfpwpj9BhCAWD51qJQ0,37163
458
461
  camel/utils/constants.py,sha256=cqnxmpUeOwrtsR-tRO4bbOc6ZP19TLj7avjm3FONMJs,1410
462
+ camel/utils/context_utils.py,sha256=PIYCAAb9WGJo9GGC644rVuPDmRMlqEoeDAuQayr4a9E,13609
459
463
  camel/utils/deduplication.py,sha256=UHikAtOW1TTDunf2t_wa2kFbmkrXWf7HfOKwLvwCxzo,8958
460
464
  camel/utils/filename.py,sha256=HYNc1wbSCgNR1CN21cwHxdAhpnsf5ySJ6jUDfeqOK20,2532
461
465
  camel/utils/langfuse.py,sha256=OowR6A790XG-b0UHiTYduYvS18PvSGFdmqki2Poogo0,8578
@@ -475,7 +479,7 @@ camel/verifiers/math_verifier.py,sha256=tA1D4S0sm8nsWISevxSN0hvSVtIUpqmJhzqfbuMo
475
479
  camel/verifiers/models.py,sha256=GdxYPr7UxNrR1577yW4kyroRcLGfd-H1GXgv8potDWU,2471
476
480
  camel/verifiers/physics_verifier.py,sha256=c1grrRddcrVN7szkxhv2QirwY9viIRSITWeWFF5HmLs,30187
477
481
  camel/verifiers/python_verifier.py,sha256=ogTz77wODfEcDN4tMVtiSkRQyoiZbHPY2fKybn59lHw,20558
478
- camel_ai-0.2.76a0.dist-info/METADATA,sha256=jEFN-GsilTsIwHVVArNfnaxmKcQlfkyQTCJwxsLll10,51994
479
- camel_ai-0.2.76a0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
480
- camel_ai-0.2.76a0.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
481
- camel_ai-0.2.76a0.dist-info/RECORD,,
482
+ camel_ai-0.2.76a1.dist-info/METADATA,sha256=_UR_r1rpykgqO_LbYlG7VBIkWS_uGEJqqRJYUQ0e5T4,52058
483
+ camel_ai-0.2.76a1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
484
+ camel_ai-0.2.76a1.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
485
+ camel_ai-0.2.76a1.dist-info/RECORD,,