camel-ai 0.2.72a10__py3-none-any.whl → 0.2.73a0__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/__init__.py +1 -1
- camel/agents/chat_agent.py +113 -338
- camel/memories/agent_memories.py +18 -17
- camel/societies/workforce/prompts.py +10 -4
- camel/societies/workforce/single_agent_worker.py +7 -5
- camel/toolkits/__init__.py +4 -1
- camel/toolkits/base.py +57 -1
- camel/toolkits/hybrid_browser_toolkit/config_loader.py +136 -413
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +796 -1631
- camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4356 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +916 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +226 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +522 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +110 -0
- camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +26 -0
- camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +210 -0
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +533 -0
- camel/toolkits/message_integration.py +592 -0
- camel/toolkits/screenshot_toolkit.py +116 -31
- camel/toolkits/search_toolkit.py +20 -2
- camel/toolkits/terminal_toolkit.py +16 -2
- camel/toolkits/video_analysis_toolkit.py +13 -13
- camel/toolkits/video_download_toolkit.py +11 -11
- {camel_ai-0.2.72a10.dist-info → camel_ai-0.2.73a0.dist-info}/METADATA +10 -4
- {camel_ai-0.2.72a10.dist-info → camel_ai-0.2.73a0.dist-info}/RECORD +30 -24
- camel/toolkits/hybrid_browser_toolkit/actions.py +0 -417
- camel/toolkits/hybrid_browser_toolkit/agent.py +0 -311
- camel/toolkits/hybrid_browser_toolkit/browser_session.py +0 -740
- camel/toolkits/hybrid_browser_toolkit/snapshot.py +0 -227
- camel/toolkits/hybrid_browser_toolkit/stealth_script.js +0 -0
- camel/toolkits/hybrid_browser_toolkit/unified_analyzer.js +0 -1002
- {camel_ai-0.2.72a10.dist-info → camel_ai-0.2.73a0.dist-info}/WHEEL +0 -0
- {camel_ai-0.2.72a10.dist-info → camel_ai-0.2.73a0.dist-info}/licenses/LICENSE +0 -0
|
@@ -12,22 +12,22 @@
|
|
|
12
12
|
# limitations under the License.
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
|
-
import base64
|
|
16
|
-
import io
|
|
17
15
|
import os
|
|
18
|
-
import time
|
|
19
16
|
from pathlib import Path
|
|
20
17
|
from typing import List, Optional
|
|
21
18
|
|
|
19
|
+
from PIL import Image
|
|
20
|
+
|
|
22
21
|
from camel.logger import get_logger
|
|
22
|
+
from camel.messages import BaseMessage
|
|
23
23
|
from camel.toolkits import BaseToolkit, FunctionTool
|
|
24
|
+
from camel.toolkits.base import RegisteredAgentToolkit
|
|
24
25
|
from camel.utils import dependencies_required
|
|
25
|
-
from camel.utils.tool_result import ToolResult
|
|
26
26
|
|
|
27
27
|
logger = get_logger(__name__)
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
class ScreenshotToolkit(BaseToolkit):
|
|
30
|
+
class ScreenshotToolkit(BaseToolkit, RegisteredAgentToolkit):
|
|
31
31
|
r"""A toolkit for taking screenshots."""
|
|
32
32
|
|
|
33
33
|
@dependencies_required('PIL')
|
|
@@ -50,6 +50,7 @@ class ScreenshotToolkit(BaseToolkit):
|
|
|
50
50
|
from PIL import ImageGrab
|
|
51
51
|
|
|
52
52
|
super().__init__(timeout=timeout)
|
|
53
|
+
RegisteredAgentToolkit.__init__(self)
|
|
53
54
|
|
|
54
55
|
camel_workdir = os.environ.get("CAMEL_WORKDIR")
|
|
55
56
|
if working_directory:
|
|
@@ -60,25 +61,101 @@ class ScreenshotToolkit(BaseToolkit):
|
|
|
60
61
|
path = Path("camel_working_dir")
|
|
61
62
|
|
|
62
63
|
self.ImageGrab = ImageGrab
|
|
63
|
-
self.screenshots_dir = path
|
|
64
|
+
self.screenshots_dir = path
|
|
64
65
|
self.screenshots_dir.mkdir(parents=True, exist_ok=True)
|
|
65
66
|
|
|
66
|
-
def
|
|
67
|
+
def read_image(
|
|
68
|
+
self,
|
|
69
|
+
image_path: str,
|
|
70
|
+
instruction: str = "",
|
|
71
|
+
) -> str:
|
|
72
|
+
r"""Analyzes an image from a local file path.
|
|
73
|
+
|
|
74
|
+
This function enables you to "see" and interpret an image from a
|
|
75
|
+
file. It's useful for tasks where you need to understand visual
|
|
76
|
+
information, such as reading a screenshot of a webpage or a diagram.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
image_path (str): The local file path to the image.
|
|
80
|
+
For example: 'screenshots/login_page.png'.
|
|
81
|
+
instruction (str, optional): Specific instructions for what to look
|
|
82
|
+
for or what to do with the image. For example: "What is the
|
|
83
|
+
main headline on this page?" or "Find the 'Submit' button.".
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
str: The response after analyzing the image, which could be a
|
|
87
|
+
description, an answer, or a confirmation of an action.
|
|
88
|
+
"""
|
|
89
|
+
if self.agent is None:
|
|
90
|
+
logger.error(
|
|
91
|
+
"Cannot record screenshot in memory: No agent registered. "
|
|
92
|
+
"Please pass this toolkit to ChatAgent via "
|
|
93
|
+
"toolkits_to_register_agent parameter."
|
|
94
|
+
)
|
|
95
|
+
return (
|
|
96
|
+
"Error: No agent registered. Please pass this toolkit to "
|
|
97
|
+
"ChatAgent via toolkits_to_register_agent parameter."
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
image_path = str(Path(image_path).absolute())
|
|
102
|
+
|
|
103
|
+
# Check if file exists before trying to open
|
|
104
|
+
if not os.path.exists(image_path):
|
|
105
|
+
error_msg = f"Screenshot file not found: {image_path}"
|
|
106
|
+
logger.error(error_msg)
|
|
107
|
+
return f"Error: {error_msg}"
|
|
108
|
+
|
|
109
|
+
# Load the image from the path
|
|
110
|
+
img = Image.open(image_path)
|
|
111
|
+
|
|
112
|
+
# Create a message with the screenshot image
|
|
113
|
+
message = BaseMessage.make_user_message(
|
|
114
|
+
role_name="User",
|
|
115
|
+
content=instruction,
|
|
116
|
+
image_list=[img],
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# Record the message in agent's memory
|
|
120
|
+
response = self.agent.step(message)
|
|
121
|
+
return response.msgs[0].content
|
|
122
|
+
|
|
123
|
+
except Exception as e:
|
|
124
|
+
logger.error(f"Error reading screenshot: {e}")
|
|
125
|
+
return f"Error reading screenshot: {e}"
|
|
126
|
+
|
|
127
|
+
def take_screenshot_and_read_image(
|
|
67
128
|
self,
|
|
129
|
+
filename: str,
|
|
68
130
|
save_to_file: bool = True,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
131
|
+
read_image: bool = True,
|
|
132
|
+
instruction: Optional[str] = None,
|
|
133
|
+
) -> str:
|
|
134
|
+
r"""Captures a screenshot of the entire screen.
|
|
135
|
+
|
|
136
|
+
This function can save the screenshot to a file and optionally analyze
|
|
137
|
+
it. It's useful for capturing the current state of the UI for
|
|
138
|
+
documentation, analysis, or to guide subsequent actions.
|
|
72
139
|
|
|
73
140
|
Args:
|
|
74
|
-
|
|
141
|
+
filename (str): The name for the screenshot file (e.g.,
|
|
142
|
+
"homepage.png"). The file is saved in a `screenshots`
|
|
143
|
+
subdirectory within the working directory. Must end with
|
|
144
|
+
`.png`. (default: :obj:`None`)
|
|
145
|
+
save_to_file (bool, optional): If `True`, saves the screenshot to
|
|
146
|
+
a file. (default: :obj:`True`)
|
|
147
|
+
read_image (bool, optional): If `True`, the agent will analyze
|
|
148
|
+
the screenshot. `save_to_file` must also be `True`.
|
|
75
149
|
(default: :obj:`True`)
|
|
150
|
+
instruction (Optional[str], optional): A specific question or
|
|
151
|
+
command for the agent regarding the screenshot, used only if
|
|
152
|
+
`read_image` is `True`. For example: "Confirm that the
|
|
153
|
+
user is logged in.".
|
|
76
154
|
|
|
77
155
|
Returns:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
PNG image data URL.
|
|
156
|
+
str: A confirmation message indicating success or failure,
|
|
157
|
+
including the file path if saved, and the agent's response
|
|
158
|
+
if `read_image` is `True`.
|
|
82
159
|
"""
|
|
83
160
|
try:
|
|
84
161
|
# Take screenshot of entire screen
|
|
@@ -90,32 +167,39 @@ class ScreenshotToolkit(BaseToolkit):
|
|
|
90
167
|
# Create directory if it doesn't exist
|
|
91
168
|
os.makedirs(self.screenshots_dir, exist_ok=True)
|
|
92
169
|
|
|
93
|
-
#
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
170
|
+
# Create unique filename if file already exists
|
|
171
|
+
base_path = os.path.join(self.screenshots_dir, filename)
|
|
172
|
+
file_path = base_path
|
|
173
|
+
counter = 1
|
|
174
|
+
while os.path.exists(file_path):
|
|
175
|
+
name, ext = os.path.splitext(filename)
|
|
176
|
+
unique_filename = f"{name}_{counter}{ext}"
|
|
177
|
+
file_path = os.path.join(
|
|
178
|
+
self.screenshots_dir, unique_filename
|
|
179
|
+
)
|
|
180
|
+
counter += 1
|
|
181
|
+
|
|
97
182
|
screenshot.save(file_path)
|
|
98
183
|
logger.info(f"Screenshot saved to {file_path}")
|
|
99
184
|
|
|
100
|
-
# Convert to base64
|
|
101
|
-
img_buffer = io.BytesIO()
|
|
102
|
-
screenshot.save(img_buffer, format="PNG")
|
|
103
|
-
img_buffer.seek(0)
|
|
104
|
-
img_base64 = base64.b64encode(img_buffer.getvalue()).decode(
|
|
105
|
-
'utf-8'
|
|
106
|
-
)
|
|
107
|
-
img_data_url = f"data:image/png;base64,{img_base64}"
|
|
108
|
-
|
|
109
185
|
# Create result text
|
|
110
186
|
result_text = "Screenshot captured successfully"
|
|
111
187
|
if file_path:
|
|
112
188
|
result_text += f" and saved to {file_path}"
|
|
113
189
|
|
|
114
|
-
|
|
190
|
+
# Record in agent memory if requested
|
|
191
|
+
if read_image and file_path is not None:
|
|
192
|
+
inst = instruction if instruction is not None else ""
|
|
193
|
+
response = self.read_image(
|
|
194
|
+
str(Path(file_path).absolute()), inst
|
|
195
|
+
)
|
|
196
|
+
result_text += f". Agent response: {response}"
|
|
197
|
+
|
|
198
|
+
return result_text
|
|
115
199
|
|
|
116
200
|
except Exception as e:
|
|
117
201
|
logger.error(f"Error taking screenshot: {e}")
|
|
118
|
-
return
|
|
202
|
+
return f"Error taking screenshot: {e}"
|
|
119
203
|
|
|
120
204
|
def get_tools(self) -> List[FunctionTool]:
|
|
121
205
|
r"""Returns a list of FunctionTool objects for screenshot operations.
|
|
@@ -124,5 +208,6 @@ class ScreenshotToolkit(BaseToolkit):
|
|
|
124
208
|
List[FunctionTool]: List of screenshot functions.
|
|
125
209
|
"""
|
|
126
210
|
return [
|
|
127
|
-
FunctionTool(self.
|
|
211
|
+
FunctionTool(self.take_screenshot_and_read_image),
|
|
212
|
+
FunctionTool(self.read_image),
|
|
128
213
|
]
|
camel/toolkits/search_toolkit.py
CHANGED
|
@@ -36,6 +36,7 @@ class SearchToolkit(BaseToolkit):
|
|
|
36
36
|
self,
|
|
37
37
|
timeout: Optional[float] = None,
|
|
38
38
|
number_of_result_pages: int = 10,
|
|
39
|
+
exclude_domains: Optional[List[str]] = None,
|
|
39
40
|
):
|
|
40
41
|
r"""Initializes the RedditToolkit with the specified number of retries
|
|
41
42
|
and delay.
|
|
@@ -45,9 +46,14 @@ class SearchToolkit(BaseToolkit):
|
|
|
45
46
|
(default: :obj:`None`)
|
|
46
47
|
number_of_result_pages (int): The number of result pages to
|
|
47
48
|
retrieve. (default: :obj:`10`)
|
|
49
|
+
exclude_domains (Optional[List[str]]): List of domains to
|
|
50
|
+
exclude from search results. Currently only supported
|
|
51
|
+
by the `search_google` function.
|
|
52
|
+
(default: :obj:`None`)
|
|
48
53
|
"""
|
|
49
54
|
super().__init__(timeout=timeout)
|
|
50
55
|
self.number_of_result_pages = number_of_result_pages
|
|
56
|
+
self.exclude_domains = exclude_domains
|
|
51
57
|
|
|
52
58
|
@dependencies_required("wikipedia")
|
|
53
59
|
def search_wiki(self, entity: str) -> str:
|
|
@@ -435,7 +441,9 @@ class SearchToolkit(BaseToolkit):
|
|
|
435
441
|
]
|
|
436
442
|
)
|
|
437
443
|
def search_google(
|
|
438
|
-
self,
|
|
444
|
+
self,
|
|
445
|
+
query: str,
|
|
446
|
+
search_type: str = "web",
|
|
439
447
|
) -> List[Dict[str, Any]]:
|
|
440
448
|
r"""Use Google search engine to search information for the given query.
|
|
441
449
|
|
|
@@ -499,11 +507,21 @@ class SearchToolkit(BaseToolkit):
|
|
|
499
507
|
start_page_idx = 1
|
|
500
508
|
# Different language may get different result
|
|
501
509
|
search_language = "en"
|
|
510
|
+
|
|
511
|
+
modified_query = query
|
|
512
|
+
if self.exclude_domains:
|
|
513
|
+
# Use Google's -site: operator to exclude domains
|
|
514
|
+
exclusion_terms = " ".join(
|
|
515
|
+
[f"-site:{domain}" for domain in self.exclude_domains]
|
|
516
|
+
)
|
|
517
|
+
modified_query = f"{query} {exclusion_terms}"
|
|
518
|
+
logger.debug(f"Excluded domains, modified query: {modified_query}")
|
|
519
|
+
|
|
502
520
|
# Constructing the URL
|
|
503
521
|
# Doc: https://developers.google.com/custom-search/v1/using_rest
|
|
504
522
|
base_url = (
|
|
505
523
|
f"https://www.googleapis.com/customsearch/v1?"
|
|
506
|
-
f"key={GOOGLE_API_KEY}&cx={SEARCH_ENGINE_ID}&q={
|
|
524
|
+
f"key={GOOGLE_API_KEY}&cx={SEARCH_ENGINE_ID}&q={modified_query}&start="
|
|
507
525
|
f"{start_page_idx}&lr={search_language}&num={self.number_of_result_pages}"
|
|
508
526
|
)
|
|
509
527
|
|
|
@@ -319,7 +319,14 @@ class TerminalToolkit(BaseToolkit):
|
|
|
319
319
|
)
|
|
320
320
|
|
|
321
321
|
# Install essential packages using uv
|
|
322
|
-
essential_packages = [
|
|
322
|
+
essential_packages = [
|
|
323
|
+
"pip",
|
|
324
|
+
"setuptools",
|
|
325
|
+
"wheel",
|
|
326
|
+
"pyautogui",
|
|
327
|
+
"plotly",
|
|
328
|
+
"ffmpeg",
|
|
329
|
+
]
|
|
323
330
|
subprocess.run(
|
|
324
331
|
[
|
|
325
332
|
"uv",
|
|
@@ -371,7 +378,14 @@ class TerminalToolkit(BaseToolkit):
|
|
|
371
378
|
pip_path = os.path.join(self.initial_env_path, "bin", "pip")
|
|
372
379
|
|
|
373
380
|
# Upgrade pip and install essential packages
|
|
374
|
-
essential_packages = [
|
|
381
|
+
essential_packages = [
|
|
382
|
+
"pip",
|
|
383
|
+
"setuptools",
|
|
384
|
+
"wheel",
|
|
385
|
+
"pyautogui",
|
|
386
|
+
"plotly",
|
|
387
|
+
"ffmpeg",
|
|
388
|
+
]
|
|
375
389
|
subprocess.run(
|
|
376
390
|
[pip_path, "install", "--upgrade", *essential_packages],
|
|
377
391
|
check=True,
|
|
@@ -97,7 +97,7 @@ class VideoAnalysisToolkit(BaseToolkit):
|
|
|
97
97
|
r"""A class for analysing videos with vision-language model.
|
|
98
98
|
|
|
99
99
|
Args:
|
|
100
|
-
|
|
100
|
+
working_directory (Optional[str], optional): The directory where the
|
|
101
101
|
video will be downloaded to. If not provided, video will be stored
|
|
102
102
|
in a temporary directory and will be cleaned up after use.
|
|
103
103
|
(default: :obj:`None`)
|
|
@@ -123,7 +123,7 @@ class VideoAnalysisToolkit(BaseToolkit):
|
|
|
123
123
|
@dependencies_required("ffmpeg", "scenedetect")
|
|
124
124
|
def __init__(
|
|
125
125
|
self,
|
|
126
|
-
|
|
126
|
+
working_directory: Optional[str] = None,
|
|
127
127
|
model: Optional[BaseModelBackend] = None,
|
|
128
128
|
use_audio_transcription: bool = False,
|
|
129
129
|
use_ocr: bool = False,
|
|
@@ -133,30 +133,30 @@ class VideoAnalysisToolkit(BaseToolkit):
|
|
|
133
133
|
timeout: Optional[float] = None,
|
|
134
134
|
) -> None:
|
|
135
135
|
super().__init__(timeout=timeout)
|
|
136
|
-
self._cleanup =
|
|
136
|
+
self._cleanup = working_directory is None
|
|
137
137
|
self._temp_files: list[str] = [] # Track temporary files for cleanup
|
|
138
138
|
self._use_audio_transcription = use_audio_transcription
|
|
139
139
|
self._use_ocr = use_ocr
|
|
140
140
|
self.output_language = output_language
|
|
141
141
|
self.frame_interval = frame_interval
|
|
142
142
|
|
|
143
|
-
self.
|
|
144
|
-
|
|
143
|
+
self._working_directory = Path(
|
|
144
|
+
working_directory or tempfile.mkdtemp()
|
|
145
145
|
).resolve()
|
|
146
146
|
|
|
147
147
|
self.video_downloader_toolkit = VideoDownloaderToolkit(
|
|
148
|
-
|
|
148
|
+
working_directory=str(self._working_directory),
|
|
149
149
|
cookies_path=cookies_path,
|
|
150
150
|
)
|
|
151
151
|
|
|
152
152
|
try:
|
|
153
|
-
self.
|
|
153
|
+
self._working_directory.mkdir(parents=True, exist_ok=True)
|
|
154
154
|
except OSError as e:
|
|
155
155
|
raise ValueError(
|
|
156
|
-
f"Error creating directory {self.
|
|
156
|
+
f"Error creating directory {self._working_directory}: {e}"
|
|
157
157
|
)
|
|
158
158
|
|
|
159
|
-
logger.info(f"Video will be downloaded to {self.
|
|
159
|
+
logger.info(f"Video will be downloaded to {self._working_directory}")
|
|
160
160
|
|
|
161
161
|
self.vl_model = model
|
|
162
162
|
# Ensure ChatAgent is initialized with a model if provided
|
|
@@ -206,16 +206,16 @@ class VideoAnalysisToolkit(BaseToolkit):
|
|
|
206
206
|
)
|
|
207
207
|
|
|
208
208
|
# Clean up temporary directory if needed
|
|
209
|
-
if self._cleanup and os.path.exists(self.
|
|
209
|
+
if self._cleanup and os.path.exists(self._working_directory):
|
|
210
210
|
try:
|
|
211
211
|
import sys
|
|
212
212
|
|
|
213
213
|
if getattr(sys, 'modules', None) is not None:
|
|
214
214
|
import shutil
|
|
215
215
|
|
|
216
|
-
shutil.rmtree(self.
|
|
216
|
+
shutil.rmtree(self._working_directory)
|
|
217
217
|
logger.debug(
|
|
218
|
-
f"Removed temp directory: {self.
|
|
218
|
+
f"Removed temp directory: {self._working_directory}"
|
|
219
219
|
)
|
|
220
220
|
except (ImportError, AttributeError):
|
|
221
221
|
# Skip cleanup if interpreter is shutting down
|
|
@@ -223,7 +223,7 @@ class VideoAnalysisToolkit(BaseToolkit):
|
|
|
223
223
|
except OSError as e:
|
|
224
224
|
logger.warning(
|
|
225
225
|
f"Failed to remove temporary directory "
|
|
226
|
-
f"{self.
|
|
226
|
+
f"{self._working_directory}: {e}"
|
|
227
227
|
)
|
|
228
228
|
|
|
229
229
|
@dependencies_required("pytesseract", "cv2", "numpy")
|
|
@@ -62,7 +62,7 @@ class VideoDownloaderToolkit(BaseToolkit):
|
|
|
62
62
|
chunks.
|
|
63
63
|
|
|
64
64
|
Args:
|
|
65
|
-
|
|
65
|
+
working_directory (Optional[str], optional): The directory where the
|
|
66
66
|
video will be downloaded to. If not provided, video will be stored
|
|
67
67
|
in a temporary directory and will be cleaned up after use.
|
|
68
68
|
(default: :obj:`None`)
|
|
@@ -73,30 +73,30 @@ class VideoDownloaderToolkit(BaseToolkit):
|
|
|
73
73
|
@dependencies_required("yt_dlp", "ffmpeg")
|
|
74
74
|
def __init__(
|
|
75
75
|
self,
|
|
76
|
-
|
|
76
|
+
working_directory: Optional[str] = None,
|
|
77
77
|
cookies_path: Optional[str] = None,
|
|
78
78
|
timeout: Optional[float] = None,
|
|
79
79
|
) -> None:
|
|
80
80
|
super().__init__(timeout=timeout)
|
|
81
|
-
self._cleanup =
|
|
81
|
+
self._cleanup = working_directory is None
|
|
82
82
|
self._cookies_path = cookies_path
|
|
83
83
|
|
|
84
|
-
self.
|
|
85
|
-
|
|
84
|
+
self._working_directory = Path(
|
|
85
|
+
working_directory or tempfile.mkdtemp()
|
|
86
86
|
).resolve()
|
|
87
87
|
|
|
88
88
|
try:
|
|
89
|
-
self.
|
|
89
|
+
self._working_directory.mkdir(parents=True, exist_ok=True)
|
|
90
90
|
except FileExistsError:
|
|
91
91
|
raise ValueError(
|
|
92
|
-
f"{self.
|
|
92
|
+
f"{self._working_directory} is not a valid directory."
|
|
93
93
|
)
|
|
94
94
|
except OSError as e:
|
|
95
95
|
raise ValueError(
|
|
96
|
-
f"Error creating directory {self.
|
|
96
|
+
f"Error creating directory {self._working_directory}: {e}"
|
|
97
97
|
)
|
|
98
98
|
|
|
99
|
-
logger.info(f"Video will be downloaded to {self.
|
|
99
|
+
logger.info(f"Video will be downloaded to {self._working_directory}")
|
|
100
100
|
|
|
101
101
|
def __del__(self) -> None:
|
|
102
102
|
r"""Deconstructor for the VideoDownloaderToolkit class.
|
|
@@ -111,7 +111,7 @@ class VideoDownloaderToolkit(BaseToolkit):
|
|
|
111
111
|
if getattr(sys, 'modules', None) is not None:
|
|
112
112
|
import shutil
|
|
113
113
|
|
|
114
|
-
shutil.rmtree(self.
|
|
114
|
+
shutil.rmtree(self._working_directory, ignore_errors=True)
|
|
115
115
|
except (ImportError, AttributeError):
|
|
116
116
|
# Skip cleanup if interpreter is shutting down
|
|
117
117
|
pass
|
|
@@ -130,7 +130,7 @@ class VideoDownloaderToolkit(BaseToolkit):
|
|
|
130
130
|
"""
|
|
131
131
|
import yt_dlp
|
|
132
132
|
|
|
133
|
-
video_template = self.
|
|
133
|
+
video_template = self._working_directory / "%(title)s.%(ext)s"
|
|
134
134
|
ydl_opts = {
|
|
135
135
|
'format': 'bestvideo+bestaudio/best',
|
|
136
136
|
'outtmpl': str(video_template),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: camel-ai
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.73a0
|
|
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
|
|
@@ -69,7 +69,7 @@ Requires-Dist: jupyter-client<9,>=8.6.2; extra == 'all'
|
|
|
69
69
|
Requires-Dist: langfuse>=2.60.5; extra == 'all'
|
|
70
70
|
Requires-Dist: linkup-sdk<0.3,>=0.2.1; extra == 'all'
|
|
71
71
|
Requires-Dist: litellm<2,>=1.38.1; extra == 'all'
|
|
72
|
-
Requires-Dist: markitdown
|
|
72
|
+
Requires-Dist: markitdown>=0.1.1; extra == 'all'
|
|
73
73
|
Requires-Dist: math-verify<0.8,>=0.7.0; extra == 'all'
|
|
74
74
|
Requires-Dist: mcp>=1.3.0; extra == 'all'
|
|
75
75
|
Requires-Dist: mem0ai>=0.1.67; extra == 'all'
|
|
@@ -82,6 +82,7 @@ Requires-Dist: networkx<4,>=3.4.2; extra == 'all'
|
|
|
82
82
|
Requires-Dist: newspaper3k<0.3,>=0.2.8; extra == 'all'
|
|
83
83
|
Requires-Dist: notion-client<3,>=2.2.1; extra == 'all'
|
|
84
84
|
Requires-Dist: numpy<=2.2,>=1.2; extra == 'all'
|
|
85
|
+
Requires-Dist: onnxruntime<=1.20.1; extra == 'all'
|
|
85
86
|
Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'all'
|
|
86
87
|
Requires-Dist: openpyxl>=3.1.5; extra == 'all'
|
|
87
88
|
Requires-Dist: pandas<2,>=1.5.3; extra == 'all'
|
|
@@ -140,6 +141,7 @@ Requires-Dist: types-setuptools<70,>=69.2.0; extra == 'all'
|
|
|
140
141
|
Requires-Dist: types-tqdm<5,>=4.66.0; extra == 'all'
|
|
141
142
|
Requires-Dist: unstructured==0.16.20; extra == 'all'
|
|
142
143
|
Requires-Dist: weaviate-client>=4.15.0; extra == 'all'
|
|
144
|
+
Requires-Dist: websockets<15.1,>=13.0; extra == 'all'
|
|
143
145
|
Requires-Dist: wikipedia<2,>=1; extra == 'all'
|
|
144
146
|
Requires-Dist: wolframalpha<6,>=5.0.0; extra == 'all'
|
|
145
147
|
Requires-Dist: xls2xlsx>=0.2.0; extra == 'all'
|
|
@@ -208,8 +210,9 @@ Requires-Dist: chunkr-ai>=0.0.50; extra == 'document-tools'
|
|
|
208
210
|
Requires-Dist: crawl4ai>=0.3.745; extra == 'document-tools'
|
|
209
211
|
Requires-Dist: docx2txt<0.9,>=0.8; extra == 'document-tools'
|
|
210
212
|
Requires-Dist: docx>=0.2.4; extra == 'document-tools'
|
|
211
|
-
Requires-Dist: markitdown
|
|
213
|
+
Requires-Dist: markitdown>=0.1.1; extra == 'document-tools'
|
|
212
214
|
Requires-Dist: numpy<=2.2,>=1.2; extra == 'document-tools'
|
|
215
|
+
Requires-Dist: onnxruntime<=1.20.1; extra == 'document-tools'
|
|
213
216
|
Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'document-tools'
|
|
214
217
|
Requires-Dist: openpyxl>=3.1.5; extra == 'document-tools'
|
|
215
218
|
Requires-Dist: pandasai<3,>=2.3.0; extra == 'document-tools'
|
|
@@ -259,11 +262,12 @@ Requires-Dist: exa-py<2,>=1.10.0; extra == 'owl'
|
|
|
259
262
|
Requires-Dist: ffmpeg-python<0.3,>=0.2.0; extra == 'owl'
|
|
260
263
|
Requires-Dist: html2text>=2024.2.26; extra == 'owl'
|
|
261
264
|
Requires-Dist: imageio[pyav]<3,>=2.34.2; extra == 'owl'
|
|
262
|
-
Requires-Dist: markitdown
|
|
265
|
+
Requires-Dist: markitdown>=0.1.1; extra == 'owl'
|
|
263
266
|
Requires-Dist: mcp-server-fetch==2025.1.17; extra == 'owl'
|
|
264
267
|
Requires-Dist: mcp-simple-arxiv==0.2.2; extra == 'owl'
|
|
265
268
|
Requires-Dist: newspaper3k<0.3,>=0.2.8; extra == 'owl'
|
|
266
269
|
Requires-Dist: numpy<=2.2,>=1.2; extra == 'owl'
|
|
270
|
+
Requires-Dist: onnxruntime<=1.20.1; extra == 'owl'
|
|
267
271
|
Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'owl'
|
|
268
272
|
Requires-Dist: openpyxl>=3.1.5; extra == 'owl'
|
|
269
273
|
Requires-Dist: pandas<2,>=1.5.3; extra == 'owl'
|
|
@@ -290,6 +294,7 @@ Requires-Dist: tree-sitter-python<0.24,>=0.23.6; extra == 'owl'
|
|
|
290
294
|
Requires-Dist: tree-sitter<0.24,>=0.23.2; extra == 'owl'
|
|
291
295
|
Requires-Dist: typer>=0.15.2; extra == 'owl'
|
|
292
296
|
Requires-Dist: unstructured==0.16.20; extra == 'owl'
|
|
297
|
+
Requires-Dist: websockets<15.1,>=13.0; extra == 'owl'
|
|
293
298
|
Requires-Dist: wikipedia<2,>=1; extra == 'owl'
|
|
294
299
|
Requires-Dist: xls2xlsx>=0.2.0; extra == 'owl'
|
|
295
300
|
Requires-Dist: yt-dlp<2025,>=2024.11.4; extra == 'owl'
|
|
@@ -353,6 +358,7 @@ Requires-Dist: requests-oauthlib<2,>=1.3.1; extra == 'web-tools'
|
|
|
353
358
|
Requires-Dist: scrapegraph-py<2,>=1.12.0; extra == 'web-tools'
|
|
354
359
|
Requires-Dist: sympy<2,>=1.13.3; extra == 'web-tools'
|
|
355
360
|
Requires-Dist: tavily-python<0.6,>=0.5.0; extra == 'web-tools'
|
|
361
|
+
Requires-Dist: websockets<15.1,>=13.0; extra == 'web-tools'
|
|
356
362
|
Requires-Dist: wikipedia<2,>=1; extra == 'web-tools'
|
|
357
363
|
Requires-Dist: wolframalpha<6,>=5.0.0; extra == 'web-tools'
|
|
358
364
|
Description-Content-Type: text/markdown
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
camel/__init__.py,sha256=
|
|
1
|
+
camel/__init__.py,sha256=LTkqY9-7B4fjQ79FR9WNMAnmrvxJWu3XOfTRTpz2fcU,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=
|
|
10
|
+
camel/agents/chat_agent.py,sha256=1vypUj36VlAHRSb9U-jzJPq3TqA4dS6b8kZAPIaqJ0c,150855
|
|
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
|
|
@@ -154,7 +154,7 @@ camel/loaders/pandas_reader.py,sha256=zTVrUWsnR6oeOqeL8KLlnapJeaB4El0wyIrEPY1aLu
|
|
|
154
154
|
camel/loaders/scrapegraph_reader.py,sha256=k8EOV5-p41DHDr2ITV8BR1sMqBsvN41CN8Byj2cf5kY,3120
|
|
155
155
|
camel/loaders/unstructured_io.py,sha256=wA3fkDeS4mSPFkMDnWZzJYKDltio7l72BU9D3EGfoUs,17423
|
|
156
156
|
camel/memories/__init__.py,sha256=JQbs-_7VkcVTjE8y9J0DWI3btDyMRZilTZNVuy_RxZM,1358
|
|
157
|
-
camel/memories/agent_memories.py,sha256=
|
|
157
|
+
camel/memories/agent_memories.py,sha256=c8HwmgNwhtp8F4Wz9f5ekPXLA7DF8TEHhNYCutF1L9U,10872
|
|
158
158
|
camel/memories/base.py,sha256=LRhCmPwQl7ADBb8bE0Izd0vmo5VhOSymtR8Q58fvrYA,5971
|
|
159
159
|
camel/memories/records.py,sha256=NoiwDuwnKYObhrXPHSRGw8xdxAqyZDDiarOAN6-d17I,4451
|
|
160
160
|
camel/memories/blocks/__init__.py,sha256=ci7_WU11222cNd1Zkv-a0z5E2ux95NMjAYm_cDzF0pE,854
|
|
@@ -273,9 +273,9 @@ camel/societies/babyagi_playing.py,sha256=KbTdpHfZ2V8AripVck0bNTOyF-RSaMPCRARz3D
|
|
|
273
273
|
camel/societies/role_playing.py,sha256=0XScr3WfxX1QOC71RhBLmrcS5y2c7DMQB_mAFOHU34M,31421
|
|
274
274
|
camel/societies/workforce/__init__.py,sha256=bkTI-PE-MSK9AQ2V2gR6cR2WY-R7Jqy_NmXRtAoqo8o,920
|
|
275
275
|
camel/societies/workforce/base.py,sha256=z2DmbTP5LL5-aCAAqglznQqCLfPmnyM5zD3w6jjtsb8,2175
|
|
276
|
-
camel/societies/workforce/prompts.py,sha256=
|
|
276
|
+
camel/societies/workforce/prompts.py,sha256=V51MWETPDkUZiwDv8t3aEF8-v3sFV8J8d64NBZaiLqc,18462
|
|
277
277
|
camel/societies/workforce/role_playing_worker.py,sha256=Zm89lZTlV0T3o9C-DJ0HAV68Iq2Kdg8QqJRWs1TV9_A,10320
|
|
278
|
-
camel/societies/workforce/single_agent_worker.py,sha256=
|
|
278
|
+
camel/societies/workforce/single_agent_worker.py,sha256=c7gXxeTGofYWfnQdv3id1c4G2B2jqAakYN-BaSw3BwY,19396
|
|
279
279
|
camel/societies/workforce/structured_output_handler.py,sha256=xr8szFN86hg3jQ825aEkJTjkSFQnTlbinVg4j1vZJVI,17870
|
|
280
280
|
camel/societies/workforce/task_channel.py,sha256=GWHaGQBpjTzdKbWoBYAQzzAiLKRKRXa6beqtc4cg-Is,7611
|
|
281
281
|
camel/societies/workforce/utils.py,sha256=THgNHSeZsNVnjTzQTur3qCJhi72MrDS8X2gPET174cI,8434
|
|
@@ -317,13 +317,13 @@ camel/terminators/__init__.py,sha256=t8uqrkUnXEOYMXQDgaBkMFJ0EXFKI0kmx4cUimli3Ls
|
|
|
317
317
|
camel/terminators/base.py,sha256=xmJzERX7GdSXcxZjAHHODa0rOxRChMSRboDCNHWSscs,1511
|
|
318
318
|
camel/terminators/response_terminator.py,sha256=n3G5KP6Oj7-7WlRN0yFcrtLpqAJKaKS0bmhrWlFfCgQ,4982
|
|
319
319
|
camel/terminators/token_limit_terminator.py,sha256=YWv6ZR8R9yI2Qnf_3xES5bEE_O5bb2CxQ0EUXfMh34c,2118
|
|
320
|
-
camel/toolkits/__init__.py,sha256=
|
|
320
|
+
camel/toolkits/__init__.py,sha256=ywXaXZJD8a3lyjNVV6ntVCpBYvgbSMK3N5ULJet-xKw,6013
|
|
321
321
|
camel/toolkits/aci_toolkit.py,sha256=39AsXloBb16hHB7DKi6mFU6NPZ3iVpM2FZgaP4o4eLE,16060
|
|
322
322
|
camel/toolkits/arxiv_toolkit.py,sha256=mw629nIN_ozaAxNv3nbvhonJKNI2-97ScRCBS3gVqNo,6297
|
|
323
323
|
camel/toolkits/ask_news_toolkit.py,sha256=WfWaqwEo1Apbil3-Rb5y65Ws43NU4rAFWZu5VHe4los,23448
|
|
324
324
|
camel/toolkits/async_browser_toolkit.py,sha256=dHXV8uCDetLKN7no5otyP3hHDnQIRhGY0msJRJrFbIY,50436
|
|
325
325
|
camel/toolkits/audio_analysis_toolkit.py,sha256=dnDtQJbztVBwBpamSyCfigPw2GBnDAfi3fOPgql4Y50,8941
|
|
326
|
-
camel/toolkits/base.py,sha256=
|
|
326
|
+
camel/toolkits/base.py,sha256=RuqpAvs4dM070tv_L-9vSevQn5Q46TpQpyx5k6yKYVI,4374
|
|
327
327
|
camel/toolkits/bohrium_toolkit.py,sha256=453t-m0h0IGjurG6tCHUejGzfRAN2SAkhIoY8V-WJpw,11396
|
|
328
328
|
camel/toolkits/browser_toolkit.py,sha256=Ntn_LmCrhqqIBWq9HtiIKw-M0cL5ebn74Ej1GBoZiC8,44400
|
|
329
329
|
camel/toolkits/browser_toolkit_commons.py,sha256=uuc1V5tN3YJmTSe6NHAVJqwsL4iYD7IiSZWxPLYW67A,22196
|
|
@@ -351,6 +351,7 @@ camel/toolkits/mcp_toolkit.py,sha256=da7QLwGKIKnKvMx5mOOiC56w0hKV1bvD1Z9PgrSHOtA
|
|
|
351
351
|
camel/toolkits/memory_toolkit.py,sha256=TeKYd5UMwgjVpuS2orb-ocFL13eUNKujvrFOruDCpm8,4436
|
|
352
352
|
camel/toolkits/meshy_toolkit.py,sha256=NbgdOBD3FYLtZf-AfonIv6-Q8-8DW129jsaP1PqI2rs,7126
|
|
353
353
|
camel/toolkits/message_agent_toolkit.py,sha256=yWvAaxoxAvDEtD7NH7IkkHIyfWIYK47WZhn5E_RaxKo,22661
|
|
354
|
+
camel/toolkits/message_integration.py,sha256=WdcoVoDAPwlvfXK26wHBf2q_IQCH4PQ_gJtyqUViVvE,23213
|
|
354
355
|
camel/toolkits/mineru_toolkit.py,sha256=vRX9LholLNkpbJ6axfEN4pTG85aWb0PDmlVy3rAAXhg,6868
|
|
355
356
|
camel/toolkits/networkx_toolkit.py,sha256=C7pUCZTzzGkFyqdkrmhRKpAHmHWfLKeuzYHC_BHPtbk,8826
|
|
356
357
|
camel/toolkits/note_taking_toolkit.py,sha256=cp7uoSBMjiGy331Tdk2Bl6yqKSMGwws7rQJkq8tfTQs,10687
|
|
@@ -368,33 +369,38 @@ camel/toolkits/pulse_mcp_search_toolkit.py,sha256=uLUpm19uC_4xLJow0gGVS9f-5T5EW2
|
|
|
368
369
|
camel/toolkits/pyautogui_toolkit.py,sha256=Q810fm8cFvElRory7B74aqS2YV6BOpdRE6jkewoM8xc,16093
|
|
369
370
|
camel/toolkits/reddit_toolkit.py,sha256=x0XAT1zQJVNHUr1R1HwWCgIlkamU-kPmbfb_H1WIv-w,8036
|
|
370
371
|
camel/toolkits/retrieval_toolkit.py,sha256=BKjEyOqW3cGEPTS5yHPYb-Qg795iNNPIs1wjowfuq3U,3825
|
|
371
|
-
camel/toolkits/screenshot_toolkit.py,sha256=
|
|
372
|
-
camel/toolkits/search_toolkit.py,sha256=
|
|
372
|
+
camel/toolkits/screenshot_toolkit.py,sha256=IwfvfLSfqrEywvPlDbtYJe1qcbrO5uC3Mxxv87VYveo,8237
|
|
373
|
+
camel/toolkits/search_toolkit.py,sha256=2zKclYTQi5ThjPLiwKV7qX8GxuvgtgSLBHipTz-ZgWY,48360
|
|
373
374
|
camel/toolkits/searxng_toolkit.py,sha256=a2GtE4FGSrmaIVvX6Yide-abBYD1wsHqitnDlx9fdVg,7664
|
|
374
375
|
camel/toolkits/semantic_scholar_toolkit.py,sha256=Rh7eA_YPxV5pvPIzhjjvpr3vtlaCniJicrqzkPWW9_I,11634
|
|
375
376
|
camel/toolkits/slack_toolkit.py,sha256=ZT6Ndlce2qjGsyZaNMfQ54nSEi7DOC9Ro7YqtK-u5O4,11651
|
|
376
377
|
camel/toolkits/stripe_toolkit.py,sha256=07swo5znGTnorafC1uYLKB4NRcJIOPOx19J7tkpLYWk,10102
|
|
377
378
|
camel/toolkits/sympy_toolkit.py,sha256=BAQnI8EFJydNUpKQWXBdleQ1Cm-srDBhFlqp9V9pbPQ,33757
|
|
378
379
|
camel/toolkits/task_planning_toolkit.py,sha256=Ttw9fHae4omGC1SA-6uaeXVHJ1YkwiVloz_hO-fm1gw,4855
|
|
379
|
-
camel/toolkits/terminal_toolkit.py,sha256=
|
|
380
|
+
camel/toolkits/terminal_toolkit.py,sha256=_A6_cXVUEodaiLnC-1r-PrsNNVtDQk7vl942GrbkHzQ,58847
|
|
380
381
|
camel/toolkits/thinking_toolkit.py,sha256=nZYLvKWIx2BM1DYu69I9B5EISAG7aYcLYXKv9663BVk,8000
|
|
381
382
|
camel/toolkits/twitter_toolkit.py,sha256=Px4N8aUxUzy01LhGSWkdrC2JgwKkrY3cvxgMeJ2XYfU,15939
|
|
382
|
-
camel/toolkits/video_analysis_toolkit.py,sha256=
|
|
383
|
-
camel/toolkits/video_download_toolkit.py,sha256=
|
|
383
|
+
camel/toolkits/video_analysis_toolkit.py,sha256=h6D7b1MAAzaHn222n_YKtwG-EGEGgMt7mBrNNVipYZc,23361
|
|
384
|
+
camel/toolkits/video_download_toolkit.py,sha256=0dOzsG9vpCHr31bW4Iiqz4iMkQ7uxkAyTMgiculvenk,7567
|
|
384
385
|
camel/toolkits/weather_toolkit.py,sha256=fs9x9aC38Wsvni6A4PPpbRX6-aBnZiqs2Jix39yoULU,7413
|
|
385
386
|
camel/toolkits/web_deploy_toolkit.py,sha256=8dhbYmx5opmimDRdXwEU7LPeG8Z17TWUEURbEneyIPg,38847
|
|
386
387
|
camel/toolkits/whatsapp_toolkit.py,sha256=udUQXkXyeWsmrUlOJZsGBhHtc_jhB05Axe_TchhibsU,5760
|
|
387
388
|
camel/toolkits/wolfram_alpha_toolkit.py,sha256=qeIM8ySn5ilcExBWtx-hDOc35bNcebLVnZ67kt1H3mQ,9295
|
|
388
389
|
camel/toolkits/zapier_toolkit.py,sha256=A83y1UcfuopH7Fx82pORzypl1StbhBjB2HhyOqYa300,7124
|
|
389
390
|
camel/toolkits/hybrid_browser_toolkit/__init__.py,sha256=vxjWhq7GjUKE5I9RGQU_GoikZJ-AVK4ertdvEqp9pd0,802
|
|
390
|
-
camel/toolkits/hybrid_browser_toolkit/
|
|
391
|
-
camel/toolkits/hybrid_browser_toolkit/
|
|
392
|
-
camel/toolkits/hybrid_browser_toolkit/
|
|
393
|
-
camel/toolkits/hybrid_browser_toolkit/
|
|
394
|
-
camel/toolkits/hybrid_browser_toolkit/
|
|
395
|
-
camel/toolkits/hybrid_browser_toolkit/
|
|
396
|
-
camel/toolkits/hybrid_browser_toolkit/
|
|
397
|
-
camel/toolkits/hybrid_browser_toolkit/
|
|
391
|
+
camel/toolkits/hybrid_browser_toolkit/config_loader.py,sha256=UwBh7wG4-owoI2VfiNMum0O7dPWMYiEDxQKtq_GazU4,6903
|
|
392
|
+
camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py,sha256=riORnWhjhqdzYNNKEwANHVxf8WgpIMYK6q7pS7qsav0,45270
|
|
393
|
+
camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py,sha256=5wssGj2LvREtyl91lC5pTIb0G7DZlFvLT_Pn-7XPESY,18460
|
|
394
|
+
camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json,sha256=_-YE9S_C1XT59A6upQp9lLuZcC67cV9QlbwAsEKkfyw,156337
|
|
395
|
+
camel/toolkits/hybrid_browser_toolkit/ts/package.json,sha256=pUQm0xwXR7ZyWNv6O2QtHW00agnfAoX9F_XGXZlAxl4,745
|
|
396
|
+
camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json,sha256=SwpQnq4Q-rwRobF2iWrP96mgmgwaVPZEv-nii5QIYEU,523
|
|
397
|
+
camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js,sha256=mLjufus1_ugzRtWMTMQmn5xqsph-RNW55jkWrXbGxrg,6752
|
|
398
|
+
camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js,sha256=NNwM_H2xaDrlrdac0PJK1iUBwdiuQsg9qKaMhHAvZuI,3160
|
|
399
|
+
camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts,sha256=NNjStas8xzOONI1yJIMkeQeSYGZHPRK19ksEu665hwo,31711
|
|
400
|
+
camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts,sha256=jYsu9qFuwpFIS5y8rQ5R6aX_HDlDEh2YsvFH6CQLhmg,6181
|
|
401
|
+
camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts,sha256=VLhaKGQ2rz9OMRTluQ4h9kC0MMJz6-y29WxR-DQEu-c,16551
|
|
402
|
+
camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts,sha256=uJGHmGs640iCrjllqXDXwDE4hGW1VJA2YL6BkFkzYNs,353
|
|
403
|
+
camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts,sha256=Soid_nh1Ft829pKe_Xt1wxGf3pMSY2vDx4MJHGlhzaA,2442
|
|
398
404
|
camel/toolkits/open_api_specs/security_config.py,sha256=ZVnBa_zEifaE_ao2xsvV5majuJHpn2Tn7feMDOnj-eo,898
|
|
399
405
|
camel/toolkits/open_api_specs/biztoc/__init__.py,sha256=OKCZrQCDwaWtXIN_2rA9FSqEvgpQRieRoHh7Ek6N16A,702
|
|
400
406
|
camel/toolkits/open_api_specs/biztoc/ai-plugin.json,sha256=IJinQbLv5MFPGFwdN7PbOhwArFVExSEZdJspe-mOBIo,866
|
|
@@ -450,7 +456,7 @@ camel/verifiers/math_verifier.py,sha256=tA1D4S0sm8nsWISevxSN0hvSVtIUpqmJhzqfbuMo
|
|
|
450
456
|
camel/verifiers/models.py,sha256=GdxYPr7UxNrR1577yW4kyroRcLGfd-H1GXgv8potDWU,2471
|
|
451
457
|
camel/verifiers/physics_verifier.py,sha256=c1grrRddcrVN7szkxhv2QirwY9viIRSITWeWFF5HmLs,30187
|
|
452
458
|
camel/verifiers/python_verifier.py,sha256=ogTz77wODfEcDN4tMVtiSkRQyoiZbHPY2fKybn59lHw,20558
|
|
453
|
-
camel_ai-0.2.
|
|
454
|
-
camel_ai-0.2.
|
|
455
|
-
camel_ai-0.2.
|
|
456
|
-
camel_ai-0.2.
|
|
459
|
+
camel_ai-0.2.73a0.dist-info/METADATA,sha256=Xl3A8teMGBqoMuxICxwUID9PodwgAwsuCvAE_kkgwjE,50334
|
|
460
|
+
camel_ai-0.2.73a0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
461
|
+
camel_ai-0.2.73a0.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
|
|
462
|
+
camel_ai-0.2.73a0.dist-info/RECORD,,
|