camel-ai 0.2.59__py3-none-any.whl → 0.2.61__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 +158 -7
- camel/configs/anthropic_config.py +6 -5
- camel/configs/cohere_config.py +1 -1
- camel/configs/mistral_config.py +1 -1
- camel/configs/openai_config.py +3 -0
- camel/configs/reka_config.py +1 -1
- camel/configs/samba_config.py +2 -2
- camel/datagen/cot_datagen.py +29 -34
- camel/datagen/evol_instruct/scorer.py +22 -23
- camel/datagen/evol_instruct/templates.py +46 -46
- camel/datasets/static_dataset.py +144 -0
- camel/embeddings/jina_embedding.py +8 -1
- camel/embeddings/sentence_transformers_embeddings.py +2 -2
- camel/embeddings/vlm_embedding.py +9 -2
- camel/loaders/__init__.py +5 -2
- camel/loaders/chunkr_reader.py +117 -91
- camel/loaders/mistral_reader.py +148 -0
- camel/memories/blocks/chat_history_block.py +1 -2
- camel/memories/records.py +3 -0
- camel/messages/base.py +15 -3
- camel/models/azure_openai_model.py +1 -0
- camel/models/model_factory.py +2 -2
- camel/models/model_manager.py +7 -3
- camel/retrievers/bm25_retriever.py +1 -2
- camel/retrievers/hybrid_retrival.py +2 -2
- camel/societies/workforce/workforce.py +65 -24
- camel/storages/__init__.py +2 -0
- camel/storages/vectordb_storages/__init__.py +2 -0
- camel/storages/vectordb_storages/faiss.py +712 -0
- camel/storages/vectordb_storages/oceanbase.py +1 -2
- camel/toolkits/__init__.py +2 -0
- camel/toolkits/async_browser_toolkit.py +80 -524
- camel/toolkits/bohrium_toolkit.py +318 -0
- camel/toolkits/browser_toolkit.py +221 -541
- camel/toolkits/browser_toolkit_commons.py +568 -0
- camel/toolkits/dalle_toolkit.py +4 -0
- camel/toolkits/excel_toolkit.py +8 -2
- camel/toolkits/file_write_toolkit.py +76 -29
- camel/toolkits/github_toolkit.py +43 -25
- camel/toolkits/image_analysis_toolkit.py +3 -0
- camel/toolkits/jina_reranker_toolkit.py +194 -77
- camel/toolkits/mcp_toolkit.py +134 -16
- camel/toolkits/page_script.js +40 -28
- camel/toolkits/twitter_toolkit.py +6 -1
- camel/toolkits/video_analysis_toolkit.py +3 -0
- camel/toolkits/video_download_toolkit.py +3 -0
- camel/toolkits/wolfram_alpha_toolkit.py +51 -23
- camel/types/enums.py +27 -6
- camel/utils/__init__.py +2 -0
- camel/utils/commons.py +27 -0
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.61.dist-info}/METADATA +17 -9
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.61.dist-info}/RECORD +55 -51
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.61.dist-info}/WHEEL +0 -0
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.61.dist-info}/licenses/LICENSE +0 -0
camel/toolkits/page_script.js
CHANGED
|
@@ -191,35 +191,47 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
191
191
|
labelElements(getInteractiveElements());
|
|
192
192
|
let elements = document.querySelectorAll("[__elementId]");
|
|
193
193
|
let results = {};
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
194
|
+
let scale = window.devicePixelRatio || 1;
|
|
195
|
+
|
|
196
|
+
for (let i = 0; i < elements.length; i++) {
|
|
197
|
+
let key = elements[i].getAttribute("__elementId");
|
|
198
|
+
let rects = elements[i].getClientRects();
|
|
199
|
+
let ariaRole = getApproximateAriaRole(elements[i]);
|
|
200
|
+
let ariaName = getApproximateAriaName(elements[i]);
|
|
201
|
+
let vScrollable = elements[i].scrollHeight - elements[i].clientHeight >= 1;
|
|
202
|
+
|
|
203
|
+
let record = {
|
|
204
|
+
"tag_name": ariaRole[1],
|
|
205
|
+
"role": ariaRole[0],
|
|
206
|
+
"aria-name": ariaName,
|
|
207
|
+
"v-scrollable": vScrollable,
|
|
208
|
+
"rects": []
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
for (const rect of rects) {
|
|
212
|
+
let x = rect.left + rect.width / 2;
|
|
213
|
+
let y = rect.top + rect.height / 2;
|
|
214
|
+
if (isTopmost(elements[i], x, y)) {
|
|
215
|
+
record["rects"].push({
|
|
216
|
+
x: rect.x * scale,
|
|
217
|
+
y: rect.y * scale,
|
|
218
|
+
width: rect.width * scale,
|
|
219
|
+
height: rect.height * scale,
|
|
220
|
+
top: rect.top * scale,
|
|
221
|
+
left: rect.left * scale,
|
|
222
|
+
right: rect.right * scale,
|
|
223
|
+
bottom: rect.bottom * scale
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if (record["rects"].length > 0) {
|
|
229
|
+
results[key] = record;
|
|
230
|
+
}
|
|
220
231
|
}
|
|
232
|
+
|
|
221
233
|
return results;
|
|
222
|
-
};
|
|
234
|
+
};
|
|
223
235
|
|
|
224
236
|
let getVisualViewport = function() {
|
|
225
237
|
let vv = window.visualViewport;
|
|
@@ -373,4 +385,4 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
373
385
|
getFocusedElementId: getFocusedElementId,
|
|
374
386
|
getPageMetadata: getPageMetadata,
|
|
375
387
|
};
|
|
376
|
-
})();
|
|
388
|
+
})();
|
|
@@ -18,7 +18,6 @@ from http.client import responses
|
|
|
18
18
|
from typing import Any, Dict, List, Optional, Union
|
|
19
19
|
|
|
20
20
|
import requests
|
|
21
|
-
from requests_oauthlib import OAuth1
|
|
22
21
|
|
|
23
22
|
from camel.logger import get_logger
|
|
24
23
|
from camel.toolkits import FunctionTool
|
|
@@ -76,6 +75,8 @@ def create_tweet(
|
|
|
76
75
|
Reference:
|
|
77
76
|
https://developer.x.com/en/docs/x-api/tweets/manage-tweets/api-reference/post-tweets
|
|
78
77
|
"""
|
|
78
|
+
from requests_oauthlib import OAuth1
|
|
79
|
+
|
|
79
80
|
auth = OAuth1(
|
|
80
81
|
os.getenv("TWITTER_CONSUMER_KEY"),
|
|
81
82
|
os.getenv("TWITTER_CONSUMER_SECRET"),
|
|
@@ -160,6 +161,8 @@ def delete_tweet(tweet_id: str) -> str:
|
|
|
160
161
|
Reference:
|
|
161
162
|
https://developer.x.com/en/docs/x-api/tweets/manage-tweets/api-reference/delete-tweets-id
|
|
162
163
|
"""
|
|
164
|
+
from requests_oauthlib import OAuth1
|
|
165
|
+
|
|
163
166
|
auth = OAuth1(
|
|
164
167
|
os.getenv("TWITTER_CONSUMER_KEY"),
|
|
165
168
|
os.getenv("TWITTER_CONSUMER_SECRET"),
|
|
@@ -263,6 +266,8 @@ def _get_user_info(username: Optional[str] = None) -> str:
|
|
|
263
266
|
Returns:
|
|
264
267
|
str: A formatted report of the user's Twitter profile information.
|
|
265
268
|
"""
|
|
269
|
+
from requests_oauthlib import OAuth1
|
|
270
|
+
|
|
266
271
|
oauth = OAuth1(
|
|
267
272
|
os.getenv("TWITTER_CONSUMER_KEY"),
|
|
268
273
|
os.getenv("TWITTER_CONSUMER_SECRET"),
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
# limitations under the License.
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
|
+
# Enables postponed evaluation of annotations (for string-based type hints)
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
15
18
|
import io
|
|
16
19
|
import os
|
|
17
20
|
import tempfile
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
# limitations under the License.
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
|
+
# Enables postponed evaluation of annotations (for string-based type hints)
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
15
18
|
import io
|
|
16
19
|
import tempfile
|
|
17
20
|
from pathlib import Path
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
import xml.etree.ElementTree as ET
|
|
16
|
-
from typing import Any, Dict, List
|
|
16
|
+
from typing import Any, Dict, List
|
|
17
17
|
|
|
18
18
|
import requests
|
|
19
19
|
|
|
@@ -37,21 +37,14 @@ class WolframAlphaToolkit(BaseToolkit):
|
|
|
37
37
|
]
|
|
38
38
|
)
|
|
39
39
|
@dependencies_required("wolframalpha")
|
|
40
|
-
def query_wolfram_alpha(
|
|
41
|
-
|
|
42
|
-
) -> Union[str, Dict[str, Any]]:
|
|
43
|
-
r"""Queries Wolfram|Alpha and returns the result.
|
|
40
|
+
def query_wolfram_alpha(self, query: str) -> str:
|
|
41
|
+
r"""Queries Wolfram|Alpha and returns the result as a simple answer.
|
|
44
42
|
|
|
45
43
|
Args:
|
|
46
44
|
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
45
|
|
|
51
46
|
Returns:
|
|
52
|
-
|
|
53
|
-
Returns a string if `is_detailed` is False, otherwise returns
|
|
54
|
-
a dictionary with detailed information.
|
|
47
|
+
str: The result from Wolfram Alpha as a simple answer.
|
|
55
48
|
"""
|
|
56
49
|
import wolframalpha
|
|
57
50
|
|
|
@@ -64,24 +57,54 @@ class WolframAlphaToolkit(BaseToolkit):
|
|
|
64
57
|
except Exception as e:
|
|
65
58
|
return f"Wolfram Alpha wasn't able to answer it. Error: {e}"
|
|
66
59
|
|
|
67
|
-
|
|
60
|
+
parsed_result = self._parse_wolfram_result(res)
|
|
61
|
+
return parsed_result["final_answer"]
|
|
68
62
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
63
|
+
@api_keys_required(
|
|
64
|
+
[
|
|
65
|
+
(None, "WOLFRAMALPHA_APP_ID"),
|
|
66
|
+
]
|
|
67
|
+
)
|
|
68
|
+
@dependencies_required("wolframalpha")
|
|
69
|
+
def query_wolfram_alpha_step_by_step(self, query: str) -> Dict[str, Any]:
|
|
70
|
+
r"""Queries Wolfram|Alpha and returns detailed results with
|
|
71
|
+
step-by-step solution.
|
|
75
72
|
|
|
76
|
-
|
|
73
|
+
Args:
|
|
74
|
+
query (str): The query to send to Wolfram Alpha.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Dict[str, Any]: A dictionary with detailed information including
|
|
78
|
+
step-by-step solution.
|
|
79
|
+
"""
|
|
80
|
+
import wolframalpha
|
|
81
|
+
|
|
82
|
+
WOLFRAMALPHA_APP_ID = os.environ.get("WOLFRAMALPHA_APP_ID", "")
|
|
83
|
+
|
|
84
|
+
try:
|
|
85
|
+
client = wolframalpha.Client(WOLFRAMALPHA_APP_ID)
|
|
86
|
+
res = client.query(query)
|
|
87
|
+
|
|
88
|
+
except Exception as e:
|
|
89
|
+
return {
|
|
90
|
+
"error": f"Wolfram Alpha wasn't able to answer it. Error: {e}"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
parsed_result = self._parse_wolfram_result(res)
|
|
94
|
+
step_info = self._get_wolframalpha_step_by_step_solution(
|
|
95
|
+
WOLFRAMALPHA_APP_ID, query
|
|
96
|
+
)
|
|
97
|
+
parsed_result["steps"] = step_info
|
|
98
|
+
return parsed_result
|
|
77
99
|
|
|
78
100
|
@api_keys_required(
|
|
79
101
|
[
|
|
80
102
|
(None, "WOLFRAMALPHA_APP_ID"),
|
|
81
103
|
]
|
|
82
104
|
)
|
|
83
|
-
def
|
|
84
|
-
r"""
|
|
105
|
+
def query_wolfram_alpha_llm(self, query: str) -> str:
|
|
106
|
+
r"""Sends a query to the Wolfram|Alpha API optimized for language
|
|
107
|
+
model usage.
|
|
85
108
|
|
|
86
109
|
Args:
|
|
87
110
|
query (str): The query to send to Wolfram Alpha LLM.
|
|
@@ -94,7 +117,11 @@ class WolframAlphaToolkit(BaseToolkit):
|
|
|
94
117
|
|
|
95
118
|
try:
|
|
96
119
|
url = "https://www.wolframalpha.com/api/v1/llm-api"
|
|
97
|
-
params = {
|
|
120
|
+
params = {
|
|
121
|
+
"input": query,
|
|
122
|
+
"appid": WOLFRAMALPHA_APP_ID,
|
|
123
|
+
"format": "plaintext",
|
|
124
|
+
}
|
|
98
125
|
|
|
99
126
|
response = requests.get(url, params=params)
|
|
100
127
|
response.raise_for_status()
|
|
@@ -233,5 +260,6 @@ class WolframAlphaToolkit(BaseToolkit):
|
|
|
233
260
|
"""
|
|
234
261
|
return [
|
|
235
262
|
FunctionTool(self.query_wolfram_alpha),
|
|
236
|
-
FunctionTool(self.
|
|
263
|
+
FunctionTool(self.query_wolfram_alpha_step_by_step),
|
|
264
|
+
FunctionTool(self.query_wolfram_alpha_llm),
|
|
237
265
|
]
|
camel/types/enums.py
CHANGED
|
@@ -56,6 +56,8 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
56
56
|
AWS_LLAMA_3_3_70B_INSTRUCT = "us.meta.llama3-3-70b-instruct-v1:0"
|
|
57
57
|
AWS_LLAMA_3_2_90B_INSTRUCT = "us.meta.llama3-2-90b-instruct-v1:0"
|
|
58
58
|
AWS_LLAMA_3_2_11B_INSTRUCT = "us.meta.llama3-2-11b-instruct-v1:0"
|
|
59
|
+
AWS_CLAUDE_SONNET_4 = "anthropic.claude-sonnet-4-20250514-v1:0"
|
|
60
|
+
AWS_CLAUDE_OPUS_4 = "anthropic.claude-opus-4-20250514-v1:0"
|
|
59
61
|
|
|
60
62
|
GLM_4 = "glm-4"
|
|
61
63
|
GLM_4V = "glm-4v"
|
|
@@ -145,13 +147,15 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
145
147
|
CLAUDE_2_0 = "claude-2.0"
|
|
146
148
|
CLAUDE_INSTANT_1_2 = "claude-instant-1.2"
|
|
147
149
|
|
|
148
|
-
#
|
|
150
|
+
# Claude models
|
|
149
151
|
CLAUDE_3_OPUS = "claude-3-opus-latest"
|
|
150
152
|
CLAUDE_3_SONNET = "claude-3-sonnet-20240229"
|
|
151
153
|
CLAUDE_3_HAIKU = "claude-3-haiku-20240307"
|
|
152
154
|
CLAUDE_3_5_SONNET = "claude-3-5-sonnet-latest"
|
|
153
155
|
CLAUDE_3_5_HAIKU = "claude-3-5-haiku-latest"
|
|
154
156
|
CLAUDE_3_7_SONNET = "claude-3-7-sonnet-latest"
|
|
157
|
+
CLAUDE_SONNET_4 = "claude-sonnet-4-20250514"
|
|
158
|
+
CLAUDE_OPUS_4 = "claude-opus-4-20250514"
|
|
155
159
|
|
|
156
160
|
# Netmind models
|
|
157
161
|
NETMIND_LLAMA_4_MAVERICK_17B_128E_INSTRUCT = (
|
|
@@ -180,10 +184,13 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
180
184
|
NVIDIA_LLAMA3_3_70B_INSTRUCT = "meta/llama-3.3-70b-instruct"
|
|
181
185
|
|
|
182
186
|
# Gemini models
|
|
187
|
+
GEMINI_2_5_FLASH_PREVIEW = "gemini-2.5-flash-preview-04-17"
|
|
183
188
|
GEMINI_2_5_PRO_PREVIEW = "gemini-2.5-pro-preview-05-06"
|
|
184
|
-
GEMINI_2_0_FLASH = "gemini-2.0-flash
|
|
189
|
+
GEMINI_2_0_FLASH = "gemini-2.0-flash"
|
|
190
|
+
GEMINI_2_0_FLASH_EXP = "gemini-2.0-flash-exp"
|
|
185
191
|
GEMINI_2_0_FLASH_THINKING = "gemini-2.0-flash-thinking-exp"
|
|
186
192
|
GEMINI_2_0_PRO_EXP = "gemini-2.0-pro-exp-02-05"
|
|
193
|
+
GEMINI_2_0_FLASH_LITE = "gemini-2.0-flash-lite"
|
|
187
194
|
GEMINI_2_0_FLASH_LITE_PREVIEW = "gemini-2.0-flash-lite-preview-02-05"
|
|
188
195
|
GEMINI_1_5_FLASH = "gemini-1.5-flash"
|
|
189
196
|
GEMINI_1_5_PRO = "gemini-1.5-pro"
|
|
@@ -466,6 +473,8 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
466
473
|
ModelType.AWS_LLAMA_3_3_70B_INSTRUCT,
|
|
467
474
|
ModelType.AWS_LLAMA_3_2_90B_INSTRUCT,
|
|
468
475
|
ModelType.AWS_LLAMA_3_2_11B_INSTRUCT,
|
|
476
|
+
ModelType.AWS_CLAUDE_SONNET_4,
|
|
477
|
+
ModelType.AWS_CLAUDE_OPUS_4,
|
|
469
478
|
}
|
|
470
479
|
|
|
471
480
|
@property
|
|
@@ -527,6 +536,8 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
527
536
|
ModelType.CLAUDE_3_5_SONNET,
|
|
528
537
|
ModelType.CLAUDE_3_5_HAIKU,
|
|
529
538
|
ModelType.CLAUDE_3_7_SONNET,
|
|
539
|
+
ModelType.CLAUDE_SONNET_4,
|
|
540
|
+
ModelType.CLAUDE_OPUS_4,
|
|
530
541
|
}
|
|
531
542
|
|
|
532
543
|
@property
|
|
@@ -629,13 +640,16 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
629
640
|
bool: Whether this type of models is gemini.
|
|
630
641
|
"""
|
|
631
642
|
return self in {
|
|
643
|
+
ModelType.GEMINI_2_5_FLASH_PREVIEW,
|
|
632
644
|
ModelType.GEMINI_2_5_PRO_PREVIEW,
|
|
633
645
|
ModelType.GEMINI_2_0_FLASH,
|
|
634
|
-
ModelType.
|
|
635
|
-
ModelType.GEMINI_1_5_PRO,
|
|
646
|
+
ModelType.GEMINI_2_0_FLASH_EXP,
|
|
636
647
|
ModelType.GEMINI_2_0_FLASH_THINKING,
|
|
637
648
|
ModelType.GEMINI_2_0_PRO_EXP,
|
|
649
|
+
ModelType.GEMINI_2_0_FLASH_LITE,
|
|
638
650
|
ModelType.GEMINI_2_0_FLASH_LITE_PREVIEW,
|
|
651
|
+
ModelType.GEMINI_1_5_FLASH,
|
|
652
|
+
ModelType.GEMINI_1_5_PRO,
|
|
639
653
|
}
|
|
640
654
|
|
|
641
655
|
@property
|
|
@@ -1156,11 +1170,15 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
1156
1170
|
ModelType.CLAUDE_3_5_SONNET,
|
|
1157
1171
|
ModelType.CLAUDE_3_5_HAIKU,
|
|
1158
1172
|
ModelType.CLAUDE_3_7_SONNET,
|
|
1173
|
+
ModelType.CLAUDE_SONNET_4,
|
|
1174
|
+
ModelType.CLAUDE_OPUS_4,
|
|
1159
1175
|
ModelType.YI_MEDIUM_200K,
|
|
1160
1176
|
ModelType.AWS_CLAUDE_3_5_SONNET,
|
|
1161
1177
|
ModelType.AWS_CLAUDE_3_HAIKU,
|
|
1162
1178
|
ModelType.AWS_CLAUDE_3_SONNET,
|
|
1163
1179
|
ModelType.AWS_CLAUDE_3_7_SONNET,
|
|
1180
|
+
ModelType.AWS_CLAUDE_SONNET_4,
|
|
1181
|
+
ModelType.AWS_CLAUDE_OPUS_4,
|
|
1164
1182
|
ModelType.O4_MINI,
|
|
1165
1183
|
ModelType.O3,
|
|
1166
1184
|
}:
|
|
@@ -1181,12 +1199,15 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
1181
1199
|
}:
|
|
1182
1200
|
return 512_000
|
|
1183
1201
|
elif self in {
|
|
1202
|
+
ModelType.GEMINI_2_5_FLASH_PREVIEW,
|
|
1184
1203
|
ModelType.GEMINI_2_5_PRO_PREVIEW,
|
|
1185
1204
|
ModelType.GEMINI_2_0_FLASH,
|
|
1186
|
-
ModelType.
|
|
1187
|
-
ModelType.GEMINI_1_5_PRO,
|
|
1205
|
+
ModelType.GEMINI_2_0_FLASH_EXP,
|
|
1188
1206
|
ModelType.GEMINI_2_0_FLASH_THINKING,
|
|
1207
|
+
ModelType.GEMINI_2_0_FLASH_LITE,
|
|
1189
1208
|
ModelType.GEMINI_2_0_FLASH_LITE_PREVIEW,
|
|
1209
|
+
ModelType.GEMINI_1_5_FLASH,
|
|
1210
|
+
ModelType.GEMINI_1_5_PRO,
|
|
1190
1211
|
ModelType.GEMINI_2_0_PRO_EXP, # Not given in doc, assume the same
|
|
1191
1212
|
ModelType.GLM_4_LONG,
|
|
1192
1213
|
ModelType.TOGETHER_LLAMA_4_MAVERICK,
|
camel/utils/__init__.py
CHANGED
|
@@ -35,6 +35,7 @@ from .commons import (
|
|
|
35
35
|
json_to_function_code,
|
|
36
36
|
print_text_animated,
|
|
37
37
|
retry_on_error,
|
|
38
|
+
run_async,
|
|
38
39
|
text_extract_from_web,
|
|
39
40
|
to_pascal,
|
|
40
41
|
track_agent,
|
|
@@ -95,4 +96,5 @@ __all__ = [
|
|
|
95
96
|
"model_from_json_schema",
|
|
96
97
|
"sanitize_filename",
|
|
97
98
|
"browser_toolkit_save_auth_cookie",
|
|
99
|
+
"run_async",
|
|
98
100
|
]
|
camel/utils/commons.py
CHANGED
|
@@ -1103,3 +1103,30 @@ def browser_toolkit_save_auth_cookie(
|
|
|
1103
1103
|
context.storage_state(path=cookie_json_path)
|
|
1104
1104
|
|
|
1105
1105
|
browser.close() # Close the browser when finished
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
def run_async(func: Callable[..., Any]) -> Callable[..., Any]:
|
|
1109
|
+
r"""Helper function to run async functions in synchronous context.
|
|
1110
|
+
|
|
1111
|
+
Args:
|
|
1112
|
+
func (Callable[..., Any]): The async function to wrap.
|
|
1113
|
+
|
|
1114
|
+
Returns:
|
|
1115
|
+
Callable[..., Any]: A synchronous wrapper for the async function.
|
|
1116
|
+
"""
|
|
1117
|
+
|
|
1118
|
+
@wraps(func)
|
|
1119
|
+
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
1120
|
+
try:
|
|
1121
|
+
loop = asyncio.get_event_loop()
|
|
1122
|
+
except RuntimeError:
|
|
1123
|
+
loop = asyncio.new_event_loop()
|
|
1124
|
+
asyncio.set_event_loop(loop)
|
|
1125
|
+
|
|
1126
|
+
if loop.is_closed():
|
|
1127
|
+
loop = asyncio.new_event_loop()
|
|
1128
|
+
asyncio.set_event_loop(loop)
|
|
1129
|
+
|
|
1130
|
+
return loop.run_until_complete(func(*args, **kwargs))
|
|
1131
|
+
|
|
1132
|
+
return wrapper
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: camel-ai
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.61
|
|
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
|
|
@@ -16,6 +16,7 @@ Requires-Dist: httpx<1.0.0dev,>=0.28.0
|
|
|
16
16
|
Requires-Dist: jsonschema<5,>=4
|
|
17
17
|
Requires-Dist: mcp>=1.3.0
|
|
18
18
|
Requires-Dist: openai<2,>=1.68.0
|
|
19
|
+
Requires-Dist: pillow<11.0.0,>=10.1.0
|
|
19
20
|
Requires-Dist: psutil<6,>=5.9.8
|
|
20
21
|
Requires-Dist: pydantic>=2.10.6
|
|
21
22
|
Requires-Dist: tiktoken<0.8,>=0.7.0
|
|
@@ -31,6 +32,7 @@ Requires-Dist: arxiv<3,>=2.1.3; extra == 'all'
|
|
|
31
32
|
Requires-Dist: azure-storage-blob<13,>=12.21.0; extra == 'all'
|
|
32
33
|
Requires-Dist: beautifulsoup4<5,>=4; extra == 'all'
|
|
33
34
|
Requires-Dist: botocore<2,>=1.35.3; extra == 'all'
|
|
35
|
+
Requires-Dist: chunkr-ai>=0.0.50; extra == 'all'
|
|
34
36
|
Requires-Dist: cohere<6,>=5.11.0; extra == 'all'
|
|
35
37
|
Requires-Dist: crawl4ai>=0.3.745; extra == 'all'
|
|
36
38
|
Requires-Dist: dappier<0.4,>=0.3.3; extra == 'all'
|
|
@@ -46,6 +48,7 @@ Requires-Dist: docx>=0.2.4; extra == 'all'
|
|
|
46
48
|
Requires-Dist: duckduckgo-search<7,>=6.3.5; extra == 'all'
|
|
47
49
|
Requires-Dist: e2b-code-interpreter<2,>=1.0.3; extra == 'all'
|
|
48
50
|
Requires-Dist: exa-py<2,>=1.10.0; extra == 'all'
|
|
51
|
+
Requires-Dist: faiss-cpu<2,>=1.7.2; extra == 'all'
|
|
49
52
|
Requires-Dist: fastapi>=0.115.11; extra == 'all'
|
|
50
53
|
Requires-Dist: ffmpeg-python<0.3,>=0.2.0; extra == 'all'
|
|
51
54
|
Requires-Dist: firecrawl-py<2,>=1.0.0; extra == 'all'
|
|
@@ -77,14 +80,13 @@ Requires-Dist: neo4j<6,>=5.18.0; extra == 'all'
|
|
|
77
80
|
Requires-Dist: networkx<4,>=3.4.2; extra == 'all'
|
|
78
81
|
Requires-Dist: newspaper3k<0.3,>=0.2.8; extra == 'all'
|
|
79
82
|
Requires-Dist: notion-client<3,>=2.2.1; extra == 'all'
|
|
80
|
-
Requires-Dist: numpy
|
|
83
|
+
Requires-Dist: numpy<=2.2,>=1.2; extra == 'all'
|
|
81
84
|
Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'all'
|
|
82
85
|
Requires-Dist: opencv-python<5,>=4; extra == 'all'
|
|
83
86
|
Requires-Dist: openpyxl>=3.1.5; extra == 'all'
|
|
84
87
|
Requires-Dist: outlines<0.2,>=0.1.7; extra == 'all'
|
|
85
88
|
Requires-Dist: pandas<2,>=1.5.3; extra == 'all'
|
|
86
89
|
Requires-Dist: pandasai<3,>=2.3.0; extra == 'all'
|
|
87
|
-
Requires-Dist: pillow<11.0.0,>=10.1.0; extra == 'all'
|
|
88
90
|
Requires-Dist: playwright>=1.50.0; extra == 'all'
|
|
89
91
|
Requires-Dist: prance<24,>=23.6.21.0; extra == 'all'
|
|
90
92
|
Requires-Dist: praw<8,>=7.7.1; extra == 'all'
|
|
@@ -92,6 +94,7 @@ Requires-Dist: pre-commit<4,>=3; extra == 'all'
|
|
|
92
94
|
Requires-Dist: pyautogui<0.10,>=0.9.54; extra == 'all'
|
|
93
95
|
Requires-Dist: pydub<0.26,>=0.25.1; extra == 'all'
|
|
94
96
|
Requires-Dist: pygithub<3,>=2.6.0; extra == 'all'
|
|
97
|
+
Requires-Dist: pylatex>=1.4.2; extra == 'all'
|
|
95
98
|
Requires-Dist: pymilvus<3,>=2.4.0; extra == 'all'
|
|
96
99
|
Requires-Dist: pymupdf<2,>=1.22.5; extra == 'all'
|
|
97
100
|
Requires-Dist: pyobvector>=0.1.18; extra == 'all'
|
|
@@ -150,7 +153,7 @@ Requires-Dist: datacommons-pandas<0.0.4,>=0.0.3; extra == 'data-tools'
|
|
|
150
153
|
Requires-Dist: datacommons<2,>=1.4.3; extra == 'data-tools'
|
|
151
154
|
Requires-Dist: math-verify<0.8,>=0.7.0; extra == 'data-tools'
|
|
152
155
|
Requires-Dist: networkx<4,>=3.4.2; extra == 'data-tools'
|
|
153
|
-
Requires-Dist: numpy
|
|
156
|
+
Requires-Dist: numpy<=2.2,>=1.2; extra == 'data-tools'
|
|
154
157
|
Requires-Dist: pandas<2,>=1.5.3; extra == 'data-tools'
|
|
155
158
|
Requires-Dist: rouge<2,>=1.0.1; extra == 'data-tools'
|
|
156
159
|
Requires-Dist: stripe<12,>=11.3.0; extra == 'data-tools'
|
|
@@ -193,16 +196,18 @@ Requires-Dist: sphinx<8,>=7; extra == 'docs'
|
|
|
193
196
|
Requires-Dist: sphinxext-rediraffe<0.3,>=0.2.7; extra == 'docs'
|
|
194
197
|
Provides-Extra: document-tools
|
|
195
198
|
Requires-Dist: beautifulsoup4<5,>=4; extra == 'document-tools'
|
|
199
|
+
Requires-Dist: chunkr-ai>=0.0.50; extra == 'document-tools'
|
|
196
200
|
Requires-Dist: crawl4ai>=0.3.745; extra == 'document-tools'
|
|
197
201
|
Requires-Dist: docx2txt<0.9,>=0.8; extra == 'document-tools'
|
|
198
202
|
Requires-Dist: docx>=0.2.4; extra == 'document-tools'
|
|
199
203
|
Requires-Dist: fpdf>=1.7.2; extra == 'document-tools'
|
|
200
204
|
Requires-Dist: markitdown==0.1.1; extra == 'document-tools'
|
|
201
|
-
Requires-Dist: numpy
|
|
205
|
+
Requires-Dist: numpy<=2.2,>=1.2; extra == 'document-tools'
|
|
202
206
|
Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'document-tools'
|
|
203
207
|
Requires-Dist: openpyxl>=3.1.5; extra == 'document-tools'
|
|
204
208
|
Requires-Dist: pandasai<3,>=2.3.0; extra == 'document-tools'
|
|
205
209
|
Requires-Dist: prance<24,>=23.6.21.0; extra == 'document-tools'
|
|
210
|
+
Requires-Dist: pylatex>=1.4.2; extra == 'document-tools'
|
|
206
211
|
Requires-Dist: pymupdf<2,>=1.22.5; extra == 'document-tools'
|
|
207
212
|
Requires-Dist: tabulate>=0.9.0; extra == 'document-tools'
|
|
208
213
|
Requires-Dist: unstructured==0.16.20; extra == 'document-tools'
|
|
@@ -219,7 +224,6 @@ Requires-Dist: transformers<5,>=4; extra == 'huggingface'
|
|
|
219
224
|
Provides-Extra: media-tools
|
|
220
225
|
Requires-Dist: ffmpeg-python<0.3,>=0.2.0; extra == 'media-tools'
|
|
221
226
|
Requires-Dist: imageio[pyav]<3,>=2.34.2; extra == 'media-tools'
|
|
222
|
-
Requires-Dist: pillow<11.0.0,>=10.1.0; extra == 'media-tools'
|
|
223
227
|
Requires-Dist: pydub<0.26,>=0.25.1; extra == 'media-tools'
|
|
224
228
|
Requires-Dist: scenedetect>=0.6.5.2; extra == 'media-tools'
|
|
225
229
|
Requires-Dist: yt-dlp<2025,>=2024.11.4; extra == 'media-tools'
|
|
@@ -236,6 +240,7 @@ Requires-Dist: aci-sdk>=1.0.0b1; extra == 'owl'
|
|
|
236
240
|
Requires-Dist: anthropic<0.50.0,>=0.47.0; extra == 'owl'
|
|
237
241
|
Requires-Dist: beautifulsoup4<5,>=4; extra == 'owl'
|
|
238
242
|
Requires-Dist: chunkr-ai>=0.0.41; extra == 'owl'
|
|
243
|
+
Requires-Dist: chunkr-ai>=0.0.50; extra == 'owl'
|
|
239
244
|
Requires-Dist: crawl4ai>=0.3.745; extra == 'owl'
|
|
240
245
|
Requires-Dist: datasets<4,>=3; extra == 'owl'
|
|
241
246
|
Requires-Dist: docx2txt<0.9,>=0.8; extra == 'owl'
|
|
@@ -249,18 +254,18 @@ Requires-Dist: imageio[pyav]<3,>=2.34.2; extra == 'owl'
|
|
|
249
254
|
Requires-Dist: mcp-server-fetch==2025.1.17; extra == 'owl'
|
|
250
255
|
Requires-Dist: mcp-simple-arxiv==0.2.2; extra == 'owl'
|
|
251
256
|
Requires-Dist: newspaper3k<0.3,>=0.2.8; extra == 'owl'
|
|
252
|
-
Requires-Dist: numpy
|
|
257
|
+
Requires-Dist: numpy<=2.2,>=1.2; extra == 'owl'
|
|
253
258
|
Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'owl'
|
|
254
259
|
Requires-Dist: opencv-python<5,>=4; extra == 'owl'
|
|
255
260
|
Requires-Dist: openpyxl>=3.1.5; extra == 'owl'
|
|
256
261
|
Requires-Dist: outlines<0.2,>=0.1.7; extra == 'owl'
|
|
257
262
|
Requires-Dist: pandas<2,>=1.5.3; extra == 'owl'
|
|
258
263
|
Requires-Dist: pandasai<3,>=2.3.0; extra == 'owl'
|
|
259
|
-
Requires-Dist: pillow<11.0.0,>=10.1.0; extra == 'owl'
|
|
260
264
|
Requires-Dist: playwright>=1.50.0; extra == 'owl'
|
|
261
265
|
Requires-Dist: prance<24,>=23.6.21.0; extra == 'owl'
|
|
262
266
|
Requires-Dist: pyautogui<0.10,>=0.9.54; extra == 'owl'
|
|
263
267
|
Requires-Dist: pydub<0.26,>=0.25.1; extra == 'owl'
|
|
268
|
+
Requires-Dist: pylatex>=1.4.2; extra == 'owl'
|
|
264
269
|
Requires-Dist: pymupdf<2,>=1.22.5; extra == 'owl'
|
|
265
270
|
Requires-Dist: python-dotenv<2,>=1.0.0; extra == 'owl'
|
|
266
271
|
Requires-Dist: requests-oauthlib<2,>=1.3.1; extra == 'owl'
|
|
@@ -279,12 +284,14 @@ Requires-Dist: wikipedia<2,>=1; extra == 'owl'
|
|
|
279
284
|
Requires-Dist: xls2xlsx>=0.2.0; extra == 'owl'
|
|
280
285
|
Requires-Dist: yt-dlp<2025,>=2024.11.4; extra == 'owl'
|
|
281
286
|
Provides-Extra: rag
|
|
287
|
+
Requires-Dist: chunkr-ai>=0.0.50; extra == 'rag'
|
|
282
288
|
Requires-Dist: cohere<6,>=5.11.0; extra == 'rag'
|
|
283
289
|
Requires-Dist: crawl4ai>=0.3.745; extra == 'rag'
|
|
290
|
+
Requires-Dist: faiss-cpu<2,>=1.7.2; extra == 'rag'
|
|
284
291
|
Requires-Dist: google-genai>=1.13.0; extra == 'rag'
|
|
285
292
|
Requires-Dist: nebula3-python==3.8.2; extra == 'rag'
|
|
286
293
|
Requires-Dist: neo4j<6,>=5.18.0; extra == 'rag'
|
|
287
|
-
Requires-Dist: numpy
|
|
294
|
+
Requires-Dist: numpy<=2.2,>=1.2; extra == 'rag'
|
|
288
295
|
Requires-Dist: pandasai<3,>=2.3.0; extra == 'rag'
|
|
289
296
|
Requires-Dist: pymilvus<3,>=2.4.0; extra == 'rag'
|
|
290
297
|
Requires-Dist: pyobvector>=0.1.18; extra == 'rag'
|
|
@@ -300,6 +307,7 @@ Requires-Dist: scholarly[tor]==1.7.11; extra == 'research-tools'
|
|
|
300
307
|
Provides-Extra: storage
|
|
301
308
|
Requires-Dist: azure-storage-blob<13,>=12.21.0; extra == 'storage'
|
|
302
309
|
Requires-Dist: botocore<2,>=1.35.3; extra == 'storage'
|
|
310
|
+
Requires-Dist: faiss-cpu<2,>=1.7.2; extra == 'storage'
|
|
303
311
|
Requires-Dist: google-cloud-storage<3,>=2.18.0; extra == 'storage'
|
|
304
312
|
Requires-Dist: mem0ai>=0.1.73; extra == 'storage'
|
|
305
313
|
Requires-Dist: nebula3-python==3.8.2; extra == 'storage'
|