camel-ai 0.2.25__py3-none-any.whl → 0.2.27__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 +4 -4
- camel/agents/knowledge_graph_agent.py +15 -3
- camel/configs/anthropic_config.py +0 -1
- camel/datasets/base.py +219 -17
- camel/environments/base.py +16 -8
- camel/extractors/__init__.py +2 -2
- camel/extractors/base.py +86 -64
- camel/extractors/python_strategies.py +226 -0
- camel/models/__init__.py +4 -0
- camel/models/anthropic_model.py +19 -55
- camel/models/azure_openai_model.py +88 -8
- camel/models/model_factory.py +3 -0
- camel/models/openai_compatible_model.py +88 -8
- camel/models/volcano_model.py +100 -0
- camel/py.typed +0 -0
- camel/storages/graph_storages/graph_element.py +3 -1
- camel/storages/graph_storages/neo4j_graph.py +78 -4
- camel/toolkits/__init__.py +4 -2
- camel/toolkits/{web_toolkit.py → browser_toolkit.py} +143 -76
- camel/toolkits/pubmed_toolkit.py +346 -0
- camel/toolkits/search_toolkit.py +63 -0
- camel/toolkits/terminal_toolkit.py +2 -2
- camel/types/enums.py +7 -0
- {camel_ai-0.2.25.dist-info → camel_ai-0.2.27.dist-info}/METADATA +2 -1
- {camel_ai-0.2.25.dist-info → camel_ai-0.2.27.dist-info}/RECORD +28 -24
- {camel_ai-0.2.25.dist-info → camel_ai-0.2.27.dist-info}/WHEEL +0 -0
- {camel_ai-0.2.25.dist-info → camel_ai-0.2.27.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,346 @@
|
|
|
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
|
+
from typing import Any, Dict, List, Optional, Union, cast
|
|
16
|
+
|
|
17
|
+
import requests
|
|
18
|
+
|
|
19
|
+
from camel.logger import get_logger
|
|
20
|
+
from camel.toolkits import BaseToolkit, FunctionTool
|
|
21
|
+
|
|
22
|
+
logger = get_logger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class PubMedToolkit(BaseToolkit):
|
|
26
|
+
r"""A toolkit for interacting with PubMed's E-utilities API to access
|
|
27
|
+
MEDLINE data.
|
|
28
|
+
|
|
29
|
+
This toolkit provides functionality to search and retrieve papers from the
|
|
30
|
+
PubMed database, including abstracts, citations, and other metadata.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
timeout (Optional[float]): The timeout for API requests in seconds.
|
|
34
|
+
(default: :obj:`None`)
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
BASE_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils"
|
|
38
|
+
|
|
39
|
+
def __init__(self, timeout: Optional[float] = None) -> None:
|
|
40
|
+
r"""Initializes the PubMedToolkit."""
|
|
41
|
+
super().__init__(timeout=timeout)
|
|
42
|
+
|
|
43
|
+
def _make_request(
|
|
44
|
+
self,
|
|
45
|
+
endpoint: str,
|
|
46
|
+
params: Dict[str, Union[str, int]],
|
|
47
|
+
retries: int = 3,
|
|
48
|
+
) -> Optional[Dict[str, Any]]:
|
|
49
|
+
r"""Makes a request to the PubMed/MEDLINE API with error handling and
|
|
50
|
+
retries.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
endpoint (str): The API endpoint to call.
|
|
54
|
+
params (Dict[str, Union[str, int]]): Query parameters.
|
|
55
|
+
retries (int, optional): Number of retry attempts.
|
|
56
|
+
(default: :obj:`3`)
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
Optional[Dict[str, Any]]: JSON response if successful, else None.
|
|
60
|
+
"""
|
|
61
|
+
url = f"{self.BASE_URL}/{endpoint}"
|
|
62
|
+
request_params = cast(Dict[str, Union[str, int]], params)
|
|
63
|
+
|
|
64
|
+
for attempt in range(retries):
|
|
65
|
+
try:
|
|
66
|
+
response = requests.get(
|
|
67
|
+
url, params=request_params, timeout=self.timeout
|
|
68
|
+
)
|
|
69
|
+
response.raise_for_status()
|
|
70
|
+
|
|
71
|
+
if not response.text:
|
|
72
|
+
logger.warning(
|
|
73
|
+
f"Empty response from PubMed API: {endpoint}"
|
|
74
|
+
)
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
return response.json()
|
|
78
|
+
except requests.RequestException as e:
|
|
79
|
+
if attempt == retries - 1:
|
|
80
|
+
logger.error(f"Failed to fetch data from PubMed: {e!s}")
|
|
81
|
+
return None
|
|
82
|
+
logger.warning(f"Request attempt {attempt + 1} failed: {e!s}")
|
|
83
|
+
except ValueError as e:
|
|
84
|
+
logger.error(f"Failed to parse JSON response: {e!s}")
|
|
85
|
+
return None
|
|
86
|
+
return None
|
|
87
|
+
|
|
88
|
+
def search_papers(
|
|
89
|
+
self,
|
|
90
|
+
query: str,
|
|
91
|
+
max_results: int = 10,
|
|
92
|
+
sort: str = "relevance",
|
|
93
|
+
date_range: Optional[Dict[str, str]] = None,
|
|
94
|
+
publication_type: Optional[List[str]] = None,
|
|
95
|
+
) -> List[Dict[str, str]]:
|
|
96
|
+
r"""Search for biomedical papers in MEDLINE via PubMed with advanced
|
|
97
|
+
filtering options.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
query (str): The search query string.
|
|
101
|
+
max_results (int, optional): Maximum number of results to return.
|
|
102
|
+
(default: :obj:`10`)
|
|
103
|
+
sort (str, optional): Sort order - 'relevance' or 'date'.
|
|
104
|
+
(default: :obj:`"relevance"`)
|
|
105
|
+
date_range (Optional[Dict[str, str]], optional): Date range filter
|
|
106
|
+
with 'from' and 'to' dates in YYYY/MM/DD format.
|
|
107
|
+
(default: :obj:`None`)
|
|
108
|
+
publication_type (Optional[List[str]], optional): Filter by
|
|
109
|
+
publication types (e.g., ["Journal Article", "Review"]).
|
|
110
|
+
(default: :obj:`None`)
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
List[Dict[str, str]]: List of papers with their metadata.
|
|
114
|
+
"""
|
|
115
|
+
# Build query with filters
|
|
116
|
+
filtered_query = query
|
|
117
|
+
if publication_type:
|
|
118
|
+
type_filter = " OR ".join(
|
|
119
|
+
[f'"{pt}"[Publication Type]' for pt in publication_type]
|
|
120
|
+
)
|
|
121
|
+
filtered_query = f"({query}) AND ({type_filter})"
|
|
122
|
+
if date_range:
|
|
123
|
+
date_filter = (
|
|
124
|
+
f"{date_range.get('from', '')}:"
|
|
125
|
+
f"{date_range.get('to', '')}[Date - Publication]"
|
|
126
|
+
)
|
|
127
|
+
filtered_query = f"({filtered_query}) AND ({date_filter})"
|
|
128
|
+
|
|
129
|
+
# Search for paper IDs
|
|
130
|
+
search_params: Dict[str, Union[str, int]] = {
|
|
131
|
+
"db": "pubmed",
|
|
132
|
+
"term": filtered_query,
|
|
133
|
+
"retmax": max_results,
|
|
134
|
+
"sort": "relevance" if sort == "relevance" else "pub+date",
|
|
135
|
+
"retmode": "json",
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
search_data = self._make_request("esearch.fcgi", search_params)
|
|
139
|
+
if not search_data or "esearchresult" not in search_data:
|
|
140
|
+
logger.error("Failed to retrieve search results")
|
|
141
|
+
return []
|
|
142
|
+
|
|
143
|
+
paper_ids = search_data["esearchresult"].get("idlist", [])
|
|
144
|
+
if not paper_ids:
|
|
145
|
+
return []
|
|
146
|
+
|
|
147
|
+
# Fetch details for papers
|
|
148
|
+
results = []
|
|
149
|
+
for paper_id in paper_ids:
|
|
150
|
+
paper_details = self.get_paper_details(paper_id)
|
|
151
|
+
if paper_details:
|
|
152
|
+
results.append(paper_details)
|
|
153
|
+
|
|
154
|
+
return results
|
|
155
|
+
|
|
156
|
+
def get_paper_details(
|
|
157
|
+
self,
|
|
158
|
+
paper_id: Union[str, int],
|
|
159
|
+
include_references: bool = False,
|
|
160
|
+
) -> Optional[Dict[str, Any]]:
|
|
161
|
+
r"""Get detailed information about a specific biomedical paper from
|
|
162
|
+
MEDLINE/PubMed.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
paper_id (Union[str, int]): PubMed ID of the paper.
|
|
166
|
+
include_references (bool, optional): Whether to include referenced
|
|
167
|
+
papers. (default: :obj:`False`)
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
Optional[Dict[str, Any]]: Paper details including title, authors,
|
|
171
|
+
abstract, etc., or None if retrieval fails.
|
|
172
|
+
"""
|
|
173
|
+
# Fetch summary
|
|
174
|
+
summary_params: Dict[str, Union[str, int]] = {
|
|
175
|
+
"db": "pubmed",
|
|
176
|
+
"id": str(paper_id),
|
|
177
|
+
"retmode": "json",
|
|
178
|
+
}
|
|
179
|
+
summary_data = self._make_request("esummary.fcgi", summary_params)
|
|
180
|
+
|
|
181
|
+
if not summary_data or "result" not in summary_data:
|
|
182
|
+
logger.error(
|
|
183
|
+
f"Failed to retrieve paper details for ID: {paper_id}"
|
|
184
|
+
)
|
|
185
|
+
return None
|
|
186
|
+
|
|
187
|
+
paper_data = summary_data["result"][str(paper_id)]
|
|
188
|
+
|
|
189
|
+
# Handle authors - they come as a list of dicts with 'name' key
|
|
190
|
+
authors = paper_data.get("authors", [])
|
|
191
|
+
author_names = []
|
|
192
|
+
for author in authors:
|
|
193
|
+
if isinstance(author, dict) and "name" in author:
|
|
194
|
+
author_names.append(author["name"])
|
|
195
|
+
elif isinstance(author, str):
|
|
196
|
+
author_names.append(author)
|
|
197
|
+
|
|
198
|
+
# Get abstract
|
|
199
|
+
abstract = self.get_abstract(paper_id)
|
|
200
|
+
|
|
201
|
+
# Get references if requested
|
|
202
|
+
references = []
|
|
203
|
+
if include_references:
|
|
204
|
+
ref_params: Dict[str, Union[str, int]] = {
|
|
205
|
+
"db": "pubmed",
|
|
206
|
+
"id": str(paper_id),
|
|
207
|
+
"linkname": "pubmed_pubmed_refs",
|
|
208
|
+
"retmode": "json",
|
|
209
|
+
}
|
|
210
|
+
ref_data = self._make_request("elink.fcgi", ref_params)
|
|
211
|
+
if ref_data and "linksets" in ref_data:
|
|
212
|
+
try:
|
|
213
|
+
references = ref_data["linksets"][0]["linksetdbs"][0][
|
|
214
|
+
"links"
|
|
215
|
+
]
|
|
216
|
+
except (KeyError, IndexError):
|
|
217
|
+
logger.warning(
|
|
218
|
+
f"No references found for paper ID: {paper_id}"
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
return cast(
|
|
222
|
+
Dict[str, Any],
|
|
223
|
+
{
|
|
224
|
+
"id": str(paper_id),
|
|
225
|
+
"title": paper_data.get("title", ""),
|
|
226
|
+
"authors": ", ".join(author_names),
|
|
227
|
+
"journal": paper_data.get("source", ""),
|
|
228
|
+
"pub_date": paper_data.get("pubdate", ""),
|
|
229
|
+
"abstract": abstract,
|
|
230
|
+
"doi": paper_data.get("elocationid", ""),
|
|
231
|
+
"keywords": paper_data.get("keywords", []),
|
|
232
|
+
"mesh_terms": paper_data.get("mesh", []),
|
|
233
|
+
"publication_types": paper_data.get("pubtype", []),
|
|
234
|
+
"references": references if include_references else None,
|
|
235
|
+
},
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
def get_abstract(self, paper_id: Union[str, int]) -> str:
|
|
239
|
+
r"""Get the abstract of a specific biomedical paper from MEDLINE/
|
|
240
|
+
PubMed.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
paper_id (Union[str, int]): PubMed ID of the paper.
|
|
244
|
+
|
|
245
|
+
Returns:
|
|
246
|
+
str: The abstract text.
|
|
247
|
+
"""
|
|
248
|
+
params: Dict[str, Union[str, int]] = {
|
|
249
|
+
"db": "pubmed",
|
|
250
|
+
"id": str(paper_id),
|
|
251
|
+
"rettype": "abstract",
|
|
252
|
+
"retmode": "text",
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
try:
|
|
256
|
+
response = requests.get(
|
|
257
|
+
f"{self.BASE_URL}/efetch.fcgi", params=params
|
|
258
|
+
)
|
|
259
|
+
response.raise_for_status()
|
|
260
|
+
return response.text.strip()
|
|
261
|
+
except requests.exceptions.RequestException as e:
|
|
262
|
+
logger.error(
|
|
263
|
+
f"Failed to retrieve abstract for ID {paper_id}: {e!s}"
|
|
264
|
+
)
|
|
265
|
+
return ""
|
|
266
|
+
|
|
267
|
+
def get_citation_count(self, paper_id: Union[str, int]) -> int:
|
|
268
|
+
r"""Get the number of citations for a biomedical paper in MEDLINE/
|
|
269
|
+
PubMed.
|
|
270
|
+
|
|
271
|
+
Args:
|
|
272
|
+
paper_id (Union[str, int]): PubMed ID of the paper.
|
|
273
|
+
|
|
274
|
+
Returns:
|
|
275
|
+
int: Number of citations, or 0 if retrieval fails.
|
|
276
|
+
"""
|
|
277
|
+
params: Dict[str, Union[str, int]] = {
|
|
278
|
+
"db": "pubmed",
|
|
279
|
+
"id": str(paper_id),
|
|
280
|
+
"linkname": "pubmed_pubmed_citedin",
|
|
281
|
+
"retmode": "json",
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
data = self._make_request("elink.fcgi", params)
|
|
285
|
+
if not data or "linksets" not in data:
|
|
286
|
+
return 0
|
|
287
|
+
|
|
288
|
+
try:
|
|
289
|
+
return len(data["linksets"][0]["linksetdbs"][0]["links"])
|
|
290
|
+
except (KeyError, IndexError):
|
|
291
|
+
return 0
|
|
292
|
+
|
|
293
|
+
def get_related_papers(
|
|
294
|
+
self,
|
|
295
|
+
paper_id: Union[str, int],
|
|
296
|
+
max_results: int = 10,
|
|
297
|
+
) -> List[Dict[str, Any]]:
|
|
298
|
+
r"""Get biomedical papers related to a specific paper in MEDLINE/
|
|
299
|
+
PubMed.
|
|
300
|
+
|
|
301
|
+
Args:
|
|
302
|
+
paper_id (Union[str, int]): PubMed ID of the paper.
|
|
303
|
+
max_results (int, optional): Maximum number of results to return.
|
|
304
|
+
(default: :obj:`10`)
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
List[Dict[str, Any]]: List of related papers with their metadata.
|
|
308
|
+
"""
|
|
309
|
+
params: Dict[str, Union[str, int]] = {
|
|
310
|
+
"db": "pubmed",
|
|
311
|
+
"id": str(paper_id),
|
|
312
|
+
"linkname": "pubmed_pubmed",
|
|
313
|
+
"retmode": "json",
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
data = self._make_request("elink.fcgi", params)
|
|
317
|
+
if not data or "linksets" not in data:
|
|
318
|
+
return []
|
|
319
|
+
|
|
320
|
+
try:
|
|
321
|
+
related_ids = data["linksets"][0]["linksetdbs"][0]["links"][
|
|
322
|
+
:max_results
|
|
323
|
+
]
|
|
324
|
+
related_papers: List[Dict[str, Any]] = []
|
|
325
|
+
|
|
326
|
+
for pid in related_ids:
|
|
327
|
+
if paper := self.get_paper_details(pid):
|
|
328
|
+
related_papers.append(paper)
|
|
329
|
+
|
|
330
|
+
return related_papers
|
|
331
|
+
except (KeyError, IndexError):
|
|
332
|
+
return []
|
|
333
|
+
|
|
334
|
+
def get_tools(self) -> List[FunctionTool]:
|
|
335
|
+
r"""Returns a list of tools provided by the PubMed toolkit.
|
|
336
|
+
|
|
337
|
+
Returns:
|
|
338
|
+
List[FunctionTool]: List of available tools.
|
|
339
|
+
"""
|
|
340
|
+
return [
|
|
341
|
+
FunctionTool(self.search_papers),
|
|
342
|
+
FunctionTool(self.get_paper_details),
|
|
343
|
+
FunctionTool(self.get_abstract),
|
|
344
|
+
FunctionTool(self.get_citation_count),
|
|
345
|
+
FunctionTool(self.get_related_papers),
|
|
346
|
+
]
|
camel/toolkits/search_toolkit.py
CHANGED
|
@@ -704,6 +704,68 @@ class SearchToolkit(BaseToolkit):
|
|
|
704
704
|
except Exception as e:
|
|
705
705
|
return [{"error": f"An unexpected error occurred: {e!s}"}]
|
|
706
706
|
|
|
707
|
+
@api_keys_required([(None, 'BOCHA_API_KEY')])
|
|
708
|
+
def search_bocha(
|
|
709
|
+
self,
|
|
710
|
+
query: str,
|
|
711
|
+
freshness: str = "noLimit",
|
|
712
|
+
summary: bool = False,
|
|
713
|
+
count: int = 10,
|
|
714
|
+
page: int = 1,
|
|
715
|
+
) -> Dict[str, Any]:
|
|
716
|
+
r"""Query the Bocha AI search API and return search results.
|
|
717
|
+
|
|
718
|
+
Args:
|
|
719
|
+
query (str): The search query.
|
|
720
|
+
freshness (str): Time frame filter for search results. Default
|
|
721
|
+
is "noLimit". Options include:
|
|
722
|
+
- 'noLimit': no limit (default).
|
|
723
|
+
- 'oneDay': past day.
|
|
724
|
+
- 'oneWeek': past week.
|
|
725
|
+
- 'oneMonth': past month.
|
|
726
|
+
- 'oneYear': past year.
|
|
727
|
+
summary (bool): Whether to include text summaries in results.
|
|
728
|
+
Default is False.
|
|
729
|
+
count (int): Number of results to return (1-50). Default is 10.
|
|
730
|
+
page (int): Page number of results. Default is 1.
|
|
731
|
+
|
|
732
|
+
Returns:
|
|
733
|
+
Dict[str, Any]: A dictionary containing search results, including
|
|
734
|
+
web pages, images, and videos if available. The structure
|
|
735
|
+
follows the Bocha AI search API response format.
|
|
736
|
+
"""
|
|
737
|
+
import json
|
|
738
|
+
|
|
739
|
+
BOCHA_API_KEY = os.getenv("BOCHA_API_KEY")
|
|
740
|
+
|
|
741
|
+
url = "https://api.bochaai.com/v1/web-search"
|
|
742
|
+
headers = {
|
|
743
|
+
"Authorization": f"Bearer {BOCHA_API_KEY}",
|
|
744
|
+
"Content-Type": "application/json",
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
payload = json.dumps(
|
|
748
|
+
{
|
|
749
|
+
"query": query,
|
|
750
|
+
"freshness": freshness,
|
|
751
|
+
"summary": summary,
|
|
752
|
+
"count": count,
|
|
753
|
+
"page": page,
|
|
754
|
+
}
|
|
755
|
+
)
|
|
756
|
+
try:
|
|
757
|
+
response = requests.post(url, headers=headers, data=payload)
|
|
758
|
+
if response.status_code != 200:
|
|
759
|
+
return {
|
|
760
|
+
"error": (
|
|
761
|
+
f"Bocha API failed with {response.status_code}: "
|
|
762
|
+
f"{response.text}"
|
|
763
|
+
)
|
|
764
|
+
}
|
|
765
|
+
return response.json()["data"]
|
|
766
|
+
except requests.exceptions.RequestException as e:
|
|
767
|
+
return {"error": f"Bocha AI search failed: {e!s}"}
|
|
768
|
+
|
|
707
769
|
def get_tools(self) -> List[FunctionTool]:
|
|
708
770
|
r"""Returns a list of FunctionTool objects representing the
|
|
709
771
|
functions in the toolkit.
|
|
@@ -720,4 +782,5 @@ class SearchToolkit(BaseToolkit):
|
|
|
720
782
|
FunctionTool(self.query_wolfram_alpha),
|
|
721
783
|
FunctionTool(self.tavily_search),
|
|
722
784
|
FunctionTool(self.search_brave),
|
|
785
|
+
FunctionTool(self.search_bocha),
|
|
723
786
|
]
|
|
@@ -117,9 +117,9 @@ class TerminalToolkit(BaseToolkit):
|
|
|
117
117
|
else: # Windows
|
|
118
118
|
# For Windows, we use dir command with /s for recursive search
|
|
119
119
|
# and /b for bare format
|
|
120
|
-
|
|
121
120
|
pattern = glob
|
|
122
|
-
|
|
121
|
+
file_path = os.path.join(path, pattern).replace('/', '\\')
|
|
122
|
+
command.extend(["cmd", "/c", "dir", "/s", "/b", file_path])
|
|
123
123
|
|
|
124
124
|
try:
|
|
125
125
|
result = subprocess.run(
|
camel/types/enums.py
CHANGED
|
@@ -249,6 +249,7 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
249
249
|
self.is_siliconflow,
|
|
250
250
|
self.is_zhipuai,
|
|
251
251
|
self.is_aiml,
|
|
252
|
+
self.is_azure_openai,
|
|
252
253
|
]
|
|
253
254
|
)
|
|
254
255
|
|
|
@@ -889,6 +890,7 @@ class ModelPlatformType(Enum):
|
|
|
889
890
|
MOONSHOT = "moonshot"
|
|
890
891
|
SILICONFLOW = "siliconflow"
|
|
891
892
|
AIML = "aiml"
|
|
893
|
+
VOLCANO = "volcano"
|
|
892
894
|
|
|
893
895
|
@property
|
|
894
896
|
def is_openai(self) -> bool:
|
|
@@ -1011,6 +1013,11 @@ class ModelPlatformType(Enum):
|
|
|
1011
1013
|
r"""Returns whether this platform is AIML."""
|
|
1012
1014
|
return self is ModelPlatformType.AIML
|
|
1013
1015
|
|
|
1016
|
+
@property
|
|
1017
|
+
def is_volcano(self) -> bool:
|
|
1018
|
+
r"""Returns whether this platform is volcano."""
|
|
1019
|
+
return self is ModelPlatformType.VOLCANO
|
|
1020
|
+
|
|
1014
1021
|
|
|
1015
1022
|
class AudioModelType(Enum):
|
|
1016
1023
|
TTS_1 = "tts-1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: camel-ai
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.27
|
|
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
|
|
@@ -593,6 +593,7 @@ Practical guides and tutorials for implementing specific functionalities in CAME
|
|
|
593
593
|
|:---|:---|
|
|
594
594
|
| **[Role-Playing Scraper for Report & Knowledge Graph Generation](https://docs.camel-ai.org/cookbooks/applications/roleplaying_scraper.html)** | Create role-playing agents for data scraping and reporting. |
|
|
595
595
|
| **[Create A Hackathon Judge Committee with Workforce](https://docs.camel-ai.org/cookbooks/multi_agent_society/workforce_judge_committee.html)** | Building a team of agents for collaborative judging. |
|
|
596
|
+
| **[Dynamic Knowledge Graph Role-Playing: Multi-Agent System with dynamic, temporally-aware knowledge graphs](https://docs.camel-ai.org/cookbooks/applications/dyamic_knowledge_graph.html)** | Builds dynamic, temporally-aware knowledge graphs for financial applications using a multi-agent system. It processes financial reports, news articles, and research papers to help traders analyze data, identify relationships, and uncover market insights. The system also utilizes diverse and optional element node deduplication techniques to ensure data integrity and optimize graph structure for financial decision-making. |
|
|
596
597
|
| **[Customer Service Discord Bot with Agentic RAG](https://docs.camel-ai.org/cookbooks/applications/customer_service_Discord_bot_using_SambaNova_with_agentic_RAG.html)** | Learn how to build a robust customer service bot for Discord using Agentic RAG. |
|
|
597
598
|
| **[Customer Service Discord Bot with Local Model](https://docs.camel-ai.org/cookbooks/applications/customer_service_Discord_bot_using_local_model_with_agentic_RAG.html)** | Learn how to build a robust customer service bot for Discord using Agentic RAG which supports local deployment. |
|
|
598
599
|
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
camel/__init__.py,sha256=
|
|
1
|
+
camel/__init__.py,sha256=6XPf3TQFxgCHXxPaRb-Lda_NJ-gHT1IsrHIeYeMzGGA,912
|
|
2
2
|
camel/generators.py,sha256=JRqj9_m1PF4qT6UtybzTQ-KBT9MJQt18OAAYvQ_fr2o,13844
|
|
3
3
|
camel/human.py,sha256=9X09UmxI2JqQnhrFfnZ3B9EzFmVfdSWQcjLWTIXKXe0,4962
|
|
4
4
|
camel/logger.py,sha256=j6mPsLJyKOn16o6Um57882mHsURQ8h-jia6Jd_34wRA,4239
|
|
5
|
+
camel/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
6
|
camel/agents/__init__.py,sha256=LcS4m8s97-yADfznvcaAdUe9W0E9h3m6zrSc9H6m9so,1545
|
|
6
7
|
camel/agents/_types.py,sha256=GGpZ9FGq_SGla_Vz-YcYW7KMQzwE8lfM4Ga0QaGzKxk,1423
|
|
7
8
|
camel/agents/_utils.py,sha256=Nw63FXGoyshllqcTmSTNjIFO7hi4rfENGn-gfne4yOo,6228
|
|
8
9
|
camel/agents/base.py,sha256=c4bJYL3G3Z41SaFdMPMn8ZjLdFiFaVOFO6EQIfuCVR8,1124
|
|
9
|
-
camel/agents/chat_agent.py,sha256=
|
|
10
|
+
camel/agents/chat_agent.py,sha256=_y_7QKPuphm3NLfU4y8dmMr7SiFbbW-kqgmQSrhvqlY,40848
|
|
10
11
|
camel/agents/critic_agent.py,sha256=qFVlHlQo0CVgmPWfWYLT8_oP_KyzCLFsQw_nN_vu5Bs,7487
|
|
11
12
|
camel/agents/deductive_reasoner_agent.py,sha256=6BZGaq1hR6hKJuQtOfoYQnk_AkZpw_Mr7mUy2MspQgs,13540
|
|
12
13
|
camel/agents/embodied_agent.py,sha256=XBxBu5ZMmSJ4B2U3Z7SMwvLlgp6yNpaBe8HNQmY9CZA,7536
|
|
13
|
-
camel/agents/knowledge_graph_agent.py,sha256=
|
|
14
|
+
camel/agents/knowledge_graph_agent.py,sha256=mmnjgvY9gRcFKTWtH-M4ORC1AEIMRW4VOwmrmxog1Os,9472
|
|
14
15
|
camel/agents/multi_hop_generator_agent.py,sha256=aYsZNsEFHxIq8_wDN8lZRkvRbfhlOYGBKezWr87y8Bs,4325
|
|
15
16
|
camel/agents/programmed_agent_instruction.py,sha256=99fLe41che3X6wPpNPJXRwl4If6EoQqQVWIoT3DKE1s,7124
|
|
16
17
|
camel/agents/role_assignment_agent.py,sha256=8bkTc14XToFHkP-ZOef5KP0P4hTlCDv0eNsDZPYuukA,5088
|
|
@@ -37,7 +38,7 @@ camel/bots/slack/models.py,sha256=xMz3RO-88yrxPRrbBDjiabpbZIlpEHCvU-1CvASKARc,51
|
|
|
37
38
|
camel/bots/slack/slack_app.py,sha256=SoSRZZnuTJ0aiLUBZqdG8cUFJzYpfpZh7304t0a_7Dg,9944
|
|
38
39
|
camel/configs/__init__.py,sha256=IWfwy2Q8O3uHi9q4NKcYaDwRV0npx3DqJdg050LDvjc,3242
|
|
39
40
|
camel/configs/aiml_config.py,sha256=jMgNTvPM9mJ_blm-fM8jmnnI7Os_1vQTE6DPlkwR3ps,4197
|
|
40
|
-
camel/configs/anthropic_config.py,sha256=
|
|
41
|
+
camel/configs/anthropic_config.py,sha256=qrGCVRhpGxUZeM3tLDlP-JDDI4aOsxMmUUl3Z56-iYg,4955
|
|
41
42
|
camel/configs/base_config.py,sha256=2nEIRQoY6tIMeBIcxcBtCadmpsd8bSQj9rzewQsgfXo,3188
|
|
42
43
|
camel/configs/cohere_config.py,sha256=joF4GHqoTIRuEDlyTmxW5Ud23psE0xP1VCcEvKychko,3997
|
|
43
44
|
camel/configs/deepseek_config.py,sha256=gZk-xRRNt_k3G5aI1wKsFT-InWKX1X79AzTi9Kt4hXM,5676
|
|
@@ -82,7 +83,7 @@ camel/datahubs/base.py,sha256=4QKWiJaeL5ReQpyTAbOtzHs-2CzAYbVyoMngYwdpZGU,4357
|
|
|
82
83
|
camel/datahubs/huggingface.py,sha256=m1LDBv9ESNQINfiZdBpuVD5Zr1_iZqo-5LBYHXHhXw8,14853
|
|
83
84
|
camel/datahubs/models.py,sha256=tGb9OP_aomIhnwc0VapJjTg9PmyV_QCp5to9sABXF0Y,978
|
|
84
85
|
camel/datasets/__init__.py,sha256=6unKCxcm0wxnohyJuzr3BEi_CQMwnExadUWST9egVB0,937
|
|
85
|
-
camel/datasets/base.py,sha256=
|
|
86
|
+
camel/datasets/base.py,sha256=W3Qc5lCi7U6tdDleLQbYkcXRIr-zqwukWIQQjPFc0S8,41052
|
|
86
87
|
camel/embeddings/__init__.py,sha256=YKCFO_YVY-x4A4uWmRuoIEtltrilBmC17DkCcK4zSj8,1263
|
|
87
88
|
camel/embeddings/base.py,sha256=mxqFkWh2AfbxuVKPOqVx16fCznmuSh9QXGjaEeZHvoY,2190
|
|
88
89
|
camel/embeddings/jina_embedding.py,sha256=6aakojtsJ6KLp3nqYLhEOtoFm2shoXlRzxb1YYN_uwo,6623
|
|
@@ -92,9 +93,10 @@ camel/embeddings/openai_embedding.py,sha256=9kJBKUWkjEyxtn50V4MDjuOT2syIwWEnZeEH
|
|
|
92
93
|
camel/embeddings/sentence_transformers_embeddings.py,sha256=E7a8lN50CtDBsFO-NOFQ6qfCnbH41O0_kTTg7dG3sOo,2724
|
|
93
94
|
camel/embeddings/vlm_embedding.py,sha256=HZFdcz1YzkFPzMj45_jaCVmDQJyccoXN561aLWlrYmo,5497
|
|
94
95
|
camel/environments/__init__.py,sha256=c2NsLuRbuqDftBSfw9pHMPQW98E0-py2n5AvTZvS74E,767
|
|
95
|
-
camel/environments/base.py,sha256=
|
|
96
|
-
camel/extractors/__init__.py,sha256=
|
|
97
|
-
camel/extractors/base.py,sha256=
|
|
96
|
+
camel/environments/base.py,sha256=Egj-T1IAVhJl7oqEA1s1vRxgJFmBdjqPliy0W3GtJWA,18013
|
|
97
|
+
camel/extractors/__init__.py,sha256=nrEI35-70NGHk-Y7jvyc4i0f1NlpJArVBqAmcfpaBng,811
|
|
98
|
+
camel/extractors/base.py,sha256=3jvuZpq27nlADDCX3GfubOpeb_zt-E9rzxF3x4lYm8s,10404
|
|
99
|
+
camel/extractors/python_strategies.py,sha256=k8q4BIAhPZnCSN2LqPaZVrhF56y3Y4cZ6ddn79jcIXE,7825
|
|
98
100
|
camel/interpreters/__init__.py,sha256=NOQUsg7gR84zO8nBXu4JGUatsxSDJqZS6otltjXfop4,1265
|
|
99
101
|
camel/interpreters/base.py,sha256=F026f2ZnvHwikSMbk6APYNvB9qP4Ye5quSkTbFKV3O0,1898
|
|
100
102
|
camel/interpreters/docker_interpreter.py,sha256=K4J49oc-GnMtEKbvn3wNokWgWU97-vRgSfWSNadO9LU,9249
|
|
@@ -132,11 +134,11 @@ camel/messages/conversion/sharegpt/__init__.py,sha256=oWUuHV5w85kxqhz_hoElLmCfzL
|
|
|
132
134
|
camel/messages/conversion/sharegpt/function_call_formatter.py,sha256=cn7e7CfmxEVFlfOqhjhNuA8nuWvWD6hXYn-3okXNxxQ,1832
|
|
133
135
|
camel/messages/conversion/sharegpt/hermes/__init__.py,sha256=mxuMSm-neaTgInIjYXuIVdC310E6jKJzM3IdtaJ4qY4,812
|
|
134
136
|
camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py,sha256=-9TT8iOQ-ieKSKR_PmJSA5Bi0uBx-qR7WQ6vxuFkorM,4639
|
|
135
|
-
camel/models/__init__.py,sha256=
|
|
137
|
+
camel/models/__init__.py,sha256=iNZ1LcesJ3YaAbNRxHTA-sUaxfjn6gUQ-EQArll21KQ,2769
|
|
136
138
|
camel/models/_utils.py,sha256=hob1ehnS5xZitMCdYToHVgaTB55JnaP4_DSWnTEfVsg,2045
|
|
137
139
|
camel/models/aiml_model.py,sha256=4FW66DxmVMPWAJckh4UjMM6eD1QNyrAPAPtrpmWxzjc,6524
|
|
138
|
-
camel/models/anthropic_model.py,sha256=
|
|
139
|
-
camel/models/azure_openai_model.py,sha256=
|
|
140
|
+
camel/models/anthropic_model.py,sha256=8XAj9sVaN1X0hvrL9a-qsmkAFWoGe1Ozj5XZsXYe1UI,5894
|
|
141
|
+
camel/models/azure_openai_model.py,sha256=AblW2scYp12_odI1GG0ATHI8-Tn7d6SCsxHe7g66rWs,10386
|
|
140
142
|
camel/models/base_audio_model.py,sha256=QkLqh0v-5kcE_jwFB5xAgvztAqB2Bot4_iG9sZdcl8A,2986
|
|
141
143
|
camel/models/base_model.py,sha256=RolL8fRwVpfz8g9lpb_71h0mYTNl-U63f8KBy6hc3E0,10679
|
|
142
144
|
camel/models/cohere_model.py,sha256=RAYHCyppDQxQ7BOR-e314AagB09vRxoScoHc-FtL6Bc,13355
|
|
@@ -147,14 +149,14 @@ camel/models/groq_model.py,sha256=FgXOHmIKAxGFASUmmk5tK49bPcXsr7diB3zRFGg9XDA,73
|
|
|
147
149
|
camel/models/internlm_model.py,sha256=4nr5LXhxBfOjm-0i65pXyaS0_sT5oAXKXaUfkijAGmQ,5612
|
|
148
150
|
camel/models/litellm_model.py,sha256=xi4kDd0FKuznKtox8ArsB39u40ueOhcb-CpWv4bcbXw,5544
|
|
149
151
|
camel/models/mistral_model.py,sha256=OB948fRVnXikVIDO3PqxV0zb_qpwwta0DIW1bbX3SYI,11666
|
|
150
|
-
camel/models/model_factory.py,sha256=
|
|
152
|
+
camel/models/model_factory.py,sha256=GdjGCxslqe04oWvpfiOdPl0ZGzuGooeA9M8ppby6hFo,6863
|
|
151
153
|
camel/models/model_manager.py,sha256=gfpL-WUxuTXgNeCkIVg8Y0zRvxMqRLX8JGt0XEAPQ8Y,9214
|
|
152
154
|
camel/models/moonshot_model.py,sha256=DNZzDYz0AWU1q6pIvbPALqesejoawwuKzeP0_ZbjDSg,6149
|
|
153
155
|
camel/models/nemotron_model.py,sha256=jJrW8tpTlEJDT1FjflB9krhgEQhD5KBeLmyUIcZvWPk,3886
|
|
154
156
|
camel/models/nvidia_model.py,sha256=lqp1iPwVDq6zSQ9B0SyBZ48Z3J5WbXwPshwlhj1ogZ8,6711
|
|
155
157
|
camel/models/ollama_model.py,sha256=byJ0YbMlilEFRKJZIot-MPUcojwMHLIaBES0a1SURtg,10604
|
|
156
158
|
camel/models/openai_audio_models.py,sha256=fYpxFvxT8p93KVb5BYODTuI5wdNXV9pu_bvxfARgVYk,13193
|
|
157
|
-
camel/models/openai_compatible_model.py,sha256=
|
|
159
|
+
camel/models/openai_compatible_model.py,sha256=Nmps04Fo0ILmynE8wbKVzTrQ0VDyOrDR1ICD1nGrjd0,8142
|
|
158
160
|
camel/models/openai_model.py,sha256=CbfD9yVtAltyqdFpjnLXncFnmaGPDZq8JhJDaSfG0pc,10186
|
|
159
161
|
camel/models/qwen_model.py,sha256=_LeeB0yrXRMI-gZOEEOHg0bWNOJpuQHf2G7u40--3r8,7064
|
|
160
162
|
camel/models/reka_model.py,sha256=15DscZf3lbqsIzm6kzjzDrhblBt1_0xlphT4isuQMu0,10146
|
|
@@ -164,6 +166,7 @@ camel/models/siliconflow_model.py,sha256=c5vk4zAhZVf8pDF1uh-iSa_v8d0QoPLuIN27Eem
|
|
|
164
166
|
camel/models/stub_model.py,sha256=dygYoxemnWWaxEX21L8QyKe-c75ti2CK9HnTuyHL5vs,5160
|
|
165
167
|
camel/models/togetherai_model.py,sha256=-YwZV1S1bkrX8jGguQI5dbtIHVuqhv96MoAcl33ptPo,6657
|
|
166
168
|
camel/models/vllm_model.py,sha256=dzH4rYr2Se7cejk2hobblaW-s483uxPxb8976RQE8x0,6884
|
|
169
|
+
camel/models/volcano_model.py,sha256=inYDiKOfGvq8o3XW4KVQIrXiZOhXQfB4HfCHGCWHPKs,3792
|
|
167
170
|
camel/models/yi_model.py,sha256=V4sc9n8MAKVfjGO-NU0I8W4lGKdORSCbMV020SHT3R0,6180
|
|
168
171
|
camel/models/zhipuai_model.py,sha256=o3uoTY30p1yUIklvoRMyr8JX39xZ5mLVKSTtUknW8nE,6517
|
|
169
172
|
camel/models/reward/__init__.py,sha256=MqPN6wXh7Y1SoeNoFlYaMG6xHzLG0CYsv_3kB2atIQk,984
|
|
@@ -229,9 +232,9 @@ camel/societies/workforce/workforce.py,sha256=lflBJO4vBPg_uY7U-O8STxo90c8iwLN9r-
|
|
|
229
232
|
camel/storages/__init__.py,sha256=jXff0PfC9VzAlSAgwlPv3uzZQlhuc82Did_OPNLJJuY,1617
|
|
230
233
|
camel/storages/graph_storages/__init__.py,sha256=G29BNn651C0WTOpjCl4QnVM-4B9tcNh8DdmsCiONH8Y,948
|
|
231
234
|
camel/storages/graph_storages/base.py,sha256=uSe9jWuLudfm5jtfo6E-L_kNzITwK1_Ef-6L4HWw-JM,2852
|
|
232
|
-
camel/storages/graph_storages/graph_element.py,sha256=
|
|
235
|
+
camel/storages/graph_storages/graph_element.py,sha256=X_2orbQOMaQd00xxzAoJLfEcrVNE1mgCqMJv0orMAKA,2733
|
|
233
236
|
camel/storages/graph_storages/nebula_graph.py,sha256=iLcHrIgd5U59GXlcLtLBAI8vNFpqHHLHHFmHTceVVLc,22816
|
|
234
|
-
camel/storages/graph_storages/neo4j_graph.py,sha256=
|
|
237
|
+
camel/storages/graph_storages/neo4j_graph.py,sha256=FBOH19VvEU3vXcM1Kuel88hVb2v1K_AKAZob4NmG9m0,30713
|
|
235
238
|
camel/storages/key_value_storages/__init__.py,sha256=le_hl7MYoQvaiYaJHwomy8c0cvTemicZbmwxgCJUpOs,962
|
|
236
239
|
camel/storages/key_value_storages/base.py,sha256=FSfxeLuG7SPvn-Mg-OQxtRKPtQBnRkB7lYeDaFOefpk,2177
|
|
237
240
|
camel/storages/key_value_storages/in_memory.py,sha256=k04Nx53lYxD5MoqDtBEgZrQYkAQ-zIuU6tqnoNqiHws,1949
|
|
@@ -253,11 +256,12 @@ camel/terminators/__init__.py,sha256=t8uqrkUnXEOYMXQDgaBkMFJ0EXFKI0kmx4cUimli3Ls
|
|
|
253
256
|
camel/terminators/base.py,sha256=xmJzERX7GdSXcxZjAHHODa0rOxRChMSRboDCNHWSscs,1511
|
|
254
257
|
camel/terminators/response_terminator.py,sha256=n3G5KP6Oj7-7WlRN0yFcrtLpqAJKaKS0bmhrWlFfCgQ,4982
|
|
255
258
|
camel/terminators/token_limit_terminator.py,sha256=YWv6ZR8R9yI2Qnf_3xES5bEE_O5bb2CxQ0EUXfMh34c,2118
|
|
256
|
-
camel/toolkits/__init__.py,sha256=
|
|
259
|
+
camel/toolkits/__init__.py,sha256=SJ1Agk9YI_qH4gKX-pcvhl-m2t0Nori6R9Fs0gXReDs,3699
|
|
257
260
|
camel/toolkits/arxiv_toolkit.py,sha256=d0Zn8LQGENhtlZ0BHlDr1pUV8xHOc6TOenAaKgbelu8,6279
|
|
258
261
|
camel/toolkits/ask_news_toolkit.py,sha256=PAxio8I2eTau9TgOu1jyFC9fsHhvGb-aLIkroWPtwx4,23268
|
|
259
262
|
camel/toolkits/audio_analysis_toolkit.py,sha256=LC0C6SEIwko8HqkT-C3ub6Ila2PfuIbKLBOEjrrF6BE,8552
|
|
260
263
|
camel/toolkits/base.py,sha256=7WRovKrz380b25lYdwT-2FCXzS3dkllOjT53hmmCg_I,1999
|
|
264
|
+
camel/toolkits/browser_toolkit.py,sha256=Pbw7CoiHPtbFQagmXvCUiVHihCXwaN6uUbwCAfC-jso,51016
|
|
261
265
|
camel/toolkits/code_execution.py,sha256=seqTtjulBZXH4qd5m2YAXQaxyL2_n2ekmqsYB-wBxvw,4547
|
|
262
266
|
camel/toolkits/dalle_toolkit.py,sha256=Usmw3JiJErLQgWSB1qKq_bOACNwbUTQPFc_EsVzTrGo,5115
|
|
263
267
|
camel/toolkits/dappier_toolkit.py,sha256=_69IAmXE2QSbwGxnSEycaV2XrrkiM5wKI6heM7-4MfU,8175
|
|
@@ -280,19 +284,19 @@ camel/toolkits/notion_toolkit.py,sha256=44TYy_51RhIQVfCuLKMH9U5cmRCzpQNSEN9IbrZl
|
|
|
280
284
|
camel/toolkits/open_api_toolkit.py,sha256=Venfq8JwTMQfzRzzB7AYmYUMEX35hW0BjIv_ozFMiNk,23316
|
|
281
285
|
camel/toolkits/openbb_toolkit.py,sha256=_13onVlXnUz9SZQHkeqQlZpXf1GVWp8BzrCFSK8aCMY,28911
|
|
282
286
|
camel/toolkits/page_script.js,sha256=gypbuQ_gn_oa3rQDoCN_q-kJ0jND1eSvY-30PufPZmQ,12613
|
|
287
|
+
camel/toolkits/pubmed_toolkit.py,sha256=vrd5GIhSYt9Z8EHaWkFb0x9i6_TP7pQZc7jlLHSol04,12180
|
|
283
288
|
camel/toolkits/reddit_toolkit.py,sha256=cTqEq1CRaLq9XxUHkHCmd09tRzb5Mz_bUs2JV58ewrs,8012
|
|
284
289
|
camel/toolkits/retrieval_toolkit.py,sha256=y_mQtknrSIDDXSyQb-4FY6ahV_mOxkBhDkA2eMIVnz0,3801
|
|
285
|
-
camel/toolkits/search_toolkit.py,sha256=
|
|
290
|
+
camel/toolkits/search_toolkit.py,sha256=KxJMB8tz37uyqlzHSK9X28hSZZMK793aOwkYT8jBnGc,32131
|
|
286
291
|
camel/toolkits/semantic_scholar_toolkit.py,sha256=Kp-5rz99rkeUsUmk5ShQdNKJRGVs78hQvCNg-NQMFDk,11547
|
|
287
292
|
camel/toolkits/slack_toolkit.py,sha256=n8cn3kZIc27B-2KMTRK6Nsdan37SwMqBiBi1PMtuUvQ,10744
|
|
288
293
|
camel/toolkits/stripe_toolkit.py,sha256=1sCywkpo8mh4E_KwxFKLhAb-G5uZ47NXXQvcddThjqg,9781
|
|
289
294
|
camel/toolkits/sympy_toolkit.py,sha256=TZzvBAr1tlk9p8jMnhAapg02ep9k9eIxSdybXEZDqeU,32760
|
|
290
|
-
camel/toolkits/terminal_toolkit.py,sha256=
|
|
295
|
+
camel/toolkits/terminal_toolkit.py,sha256=y-6Spdn_58Yrj3Rc5rhCX4vVgZsfm80lnI3fv9kPVUA,15181
|
|
291
296
|
camel/toolkits/twitter_toolkit.py,sha256=a2OLSJSW2wY7pOwOApb1qchZPXzH22Rbgm9Yd7-7vrA,15826
|
|
292
297
|
camel/toolkits/video_analysis_toolkit.py,sha256=lDAY6YP1zXykSxt8Qanf0WZR3l1p8c4akKPkaF5R3wU,15064
|
|
293
298
|
camel/toolkits/video_download_toolkit.py,sha256=XjZICJTOG4dmKxfkHxYxmBMFESsOX51GvTeQXAQslMU,7104
|
|
294
299
|
camel/toolkits/weather_toolkit.py,sha256=qHAMD56zqd5GWnEWiaA_0aBDwvgacdx0pAHScinY4GY,6965
|
|
295
|
-
camel/toolkits/web_toolkit.py,sha256=DapiYYP95EFMVB1hU38a052nUPs4L5WdE25o_74h1Cw,48407
|
|
296
300
|
camel/toolkits/whatsapp_toolkit.py,sha256=MBY92WLLptkXxnl4Ky5erGwI415XLFFGu9i2q6_b0oQ,5736
|
|
297
301
|
camel/toolkits/zapier_toolkit.py,sha256=mgYxRGPw7_VZVj0xU9XwHewqFcV49eUjvuum_IHfuNs,6854
|
|
298
302
|
camel/toolkits/open_api_specs/security_config.py,sha256=ZVnBa_zEifaE_ao2xsvV5majuJHpn2Tn7feMDOnj-eo,898
|
|
@@ -321,7 +325,7 @@ camel/toolkits/open_api_specs/web_scraper/openapi.yaml,sha256=u_WalQ01e8W1D27VnZ
|
|
|
321
325
|
camel/toolkits/open_api_specs/web_scraper/paths/__init__.py,sha256=OKCZrQCDwaWtXIN_2rA9FSqEvgpQRieRoHh7Ek6N16A,702
|
|
322
326
|
camel/toolkits/open_api_specs/web_scraper/paths/scraper.py,sha256=aWy1_ppV4NVVEZfnbN3tu9XA9yAPAC9bRStJ5JuXMRU,1117
|
|
323
327
|
camel/types/__init__.py,sha256=VLWhAt857IFct3XepY5BNOIhyhDhfmODTezr9jhO_TI,2251
|
|
324
|
-
camel/types/enums.py,sha256=
|
|
328
|
+
camel/types/enums.py,sha256=b3KZqTbenkWSxC7QrgR_rYO1bV8tpcmTczwofOiByJA,34343
|
|
325
329
|
camel/types/openai_types.py,sha256=8ZFzLe-zGmKNPfuVZFzxlxAX98lGf18gtrPhOgMmzus,2104
|
|
326
330
|
camel/types/unified_model_type.py,sha256=GP5GYtA3RfvLsqnk1c4UcOaRKMFhjDgZrLr0ln6JFw8,4253
|
|
327
331
|
camel/types/agents/__init__.py,sha256=cbvVkogPoZgcwZrgxLH6EtpGXk0kavF79nOic0Dc1vg,786
|
|
@@ -337,7 +341,7 @@ camel/verifiers/__init__.py,sha256=p6UEyvaOlwUQaFACGB4C07fL1xSnpTouElt19YRuneQ,9
|
|
|
337
341
|
camel/verifiers/base.py,sha256=efWZV9g58IHzJ24U4zr109y34CaAi8tV9WZPMCzP3YI,12017
|
|
338
342
|
camel/verifiers/models.py,sha256=hC6m_YxEX-mqi_tkCNZHZWLBWf04ZTyv5vfKR-BEyU4,2818
|
|
339
343
|
camel/verifiers/python_verifier.py,sha256=bj-UGxeJTZzxVVa3a8IEQ1lNOpSaaW3JdGnUEoPeQD0,7519
|
|
340
|
-
camel_ai-0.2.
|
|
341
|
-
camel_ai-0.2.
|
|
342
|
-
camel_ai-0.2.
|
|
343
|
-
camel_ai-0.2.
|
|
344
|
+
camel_ai-0.2.27.dist-info/METADATA,sha256=B4jItSRHDPybZtfm-i0xxUq3z4HWUQ99OEdaRJ33Mfw,37992
|
|
345
|
+
camel_ai-0.2.27.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
346
|
+
camel_ai-0.2.27.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
|
|
347
|
+
camel_ai-0.2.27.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|