camel-ai 0.2.24__py3-none-any.whl → 0.2.26__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/configs/sglang_config.py +7 -5
- 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/interpreters/subprocess_interpreter.py +187 -46
- camel/models/anthropic_model.py +19 -55
- camel/models/sglang_model.py +35 -5
- 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 +2 -0
- camel/toolkits/pubmed_toolkit.py +346 -0
- camel/toolkits/terminal_toolkit.py +2 -2
- {camel_ai-0.2.24.dist-info → camel_ai-0.2.26.dist-info}/METADATA +2 -1
- {camel_ai-0.2.24.dist-info → camel_ai-0.2.26.dist-info}/RECORD +23 -20
- {camel_ai-0.2.24.dist-info → camel_ai-0.2.26.dist-info}/WHEEL +0 -0
- {camel_ai-0.2.24.dist-info → camel_ai-0.2.26.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
|
+
]
|
|
@@ -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(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: camel-ai
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.26
|
|
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=vUQIqmv9Y3SKQSw2mOa58Ppfzinc5zLe5psIFxbYhSI,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
|
|
@@ -53,7 +54,7 @@ camel/configs/openai_config.py,sha256=Qx_RDnnMwXMYcwuMBaZmreIyoLt_ErA0LKnNOsMLqj
|
|
|
53
54
|
camel/configs/qwen_config.py,sha256=qvNGqTuT00aDB2n0MI-YL6GgzbMiH-i6wDy-7lWHHFE,4610
|
|
54
55
|
camel/configs/reka_config.py,sha256=QhTa4hUKz_TF3txTJRNlLSJ391uphEqZOG0zev6bI7w,3498
|
|
55
56
|
camel/configs/samba_config.py,sha256=2__Xj0HIsFWN38rsbZl9a-lXwOO5XHXoo_j7VwiUDpA,8825
|
|
56
|
-
camel/configs/sglang_config.py,sha256=
|
|
57
|
+
camel/configs/sglang_config.py,sha256=xIU7N6j3GJ-5qTK_yThvayAZHc3OOk38z48BNuqTfTI,3909
|
|
57
58
|
camel/configs/siliconflow_config.py,sha256=9SyBKMR_a1Usj6jRkbvk-wXAwllMdKnKNoPEwTaFTU4,4018
|
|
58
59
|
camel/configs/togetherai_config.py,sha256=bzFlDPR78NwvGCIPAhplITiy8WsGrdK4IDBbfQ7xGSw,5655
|
|
59
60
|
camel/configs/vllm_config.py,sha256=9F81FtJGbO8T3aGFggDOVUL5qequPmg882ZSXjIeFW0,6110
|
|
@@ -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
|
|
@@ -102,7 +104,7 @@ camel/interpreters/e2b_interpreter.py,sha256=UC0en39x705cnnMCX4GxN7Tx0gCpu5yuWOF
|
|
|
102
104
|
camel/interpreters/internal_python_interpreter.py,sha256=9psFm8mkN5-5WdTW__VBjDoh_u-PCifJMQYeo0DEoZo,22464
|
|
103
105
|
camel/interpreters/interpreter_error.py,sha256=uEhcmHmmcajt5C9PLeHs21h1fE6cmyt23tCAGie1kTA,880
|
|
104
106
|
camel/interpreters/ipython_interpreter.py,sha256=-erOR6imuh5pUtpbUYky3zoLDr30Y5E7lm59BwwxzNs,5976
|
|
105
|
-
camel/interpreters/subprocess_interpreter.py,sha256=
|
|
107
|
+
camel/interpreters/subprocess_interpreter.py,sha256=8tNbaQ8PQLy8HT3mrQ-vS93mcqn3O5XHXnS_L02yvh8,16638
|
|
106
108
|
camel/interpreters/docker/Dockerfile,sha256=6_k33dlpxgf8V9vfywWmjLuOgHmT2s-a8Lb8VbFRv4s,253
|
|
107
109
|
camel/loaders/__init__.py,sha256=AJnrCWXkD0he3uJDxs7arMGf8nFqNYz3SK0JagMEO7A,1250
|
|
108
110
|
camel/loaders/apify_reader.py,sha256=oaVjKyNhJhG-hTuIwrpZ2hsB4XTL0M-kUksgSL2R0ck,7952
|
|
@@ -135,7 +137,7 @@ camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py,sha256=-9
|
|
|
135
137
|
camel/models/__init__.py,sha256=30gJOmde3TS-j5I4m0hrxI5BJDd2H3UA1hxQD9TQzGE,2637
|
|
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=
|
|
140
|
+
camel/models/anthropic_model.py,sha256=8XAj9sVaN1X0hvrL9a-qsmkAFWoGe1Ozj5XZsXYe1UI,5894
|
|
139
141
|
camel/models/azure_openai_model.py,sha256=WBxnR-UNnBw49zyLxqF_d-7VKWTjBPnNR_xMvhWrggI,7471
|
|
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
|
|
@@ -159,7 +161,7 @@ camel/models/openai_model.py,sha256=CbfD9yVtAltyqdFpjnLXncFnmaGPDZq8JhJDaSfG0pc,
|
|
|
159
161
|
camel/models/qwen_model.py,sha256=_LeeB0yrXRMI-gZOEEOHg0bWNOJpuQHf2G7u40--3r8,7064
|
|
160
162
|
camel/models/reka_model.py,sha256=15DscZf3lbqsIzm6kzjzDrhblBt1_0xlphT4isuQMu0,10146
|
|
161
163
|
camel/models/samba_model.py,sha256=i2k1qEbMMMhYDY5MWG3dqyy2oeDi43o35JZXLvDmvI0,22476
|
|
162
|
-
camel/models/sglang_model.py,sha256=
|
|
164
|
+
camel/models/sglang_model.py,sha256=LsuilXBPCs48pVRW862T3QCiOVcFACBqiFxbWPiHbeg,13750
|
|
163
165
|
camel/models/siliconflow_model.py,sha256=c5vk4zAhZVf8pDF1uh-iSa_v8d0QoPLuIN27EemdMGE,5659
|
|
164
166
|
camel/models/stub_model.py,sha256=dygYoxemnWWaxEX21L8QyKe-c75ti2CK9HnTuyHL5vs,5160
|
|
165
167
|
camel/models/togetherai_model.py,sha256=-YwZV1S1bkrX8jGguQI5dbtIHVuqhv96MoAcl33ptPo,6657
|
|
@@ -229,9 +231,9 @@ camel/societies/workforce/workforce.py,sha256=lflBJO4vBPg_uY7U-O8STxo90c8iwLN9r-
|
|
|
229
231
|
camel/storages/__init__.py,sha256=jXff0PfC9VzAlSAgwlPv3uzZQlhuc82Did_OPNLJJuY,1617
|
|
230
232
|
camel/storages/graph_storages/__init__.py,sha256=G29BNn651C0WTOpjCl4QnVM-4B9tcNh8DdmsCiONH8Y,948
|
|
231
233
|
camel/storages/graph_storages/base.py,sha256=uSe9jWuLudfm5jtfo6E-L_kNzITwK1_Ef-6L4HWw-JM,2852
|
|
232
|
-
camel/storages/graph_storages/graph_element.py,sha256=
|
|
234
|
+
camel/storages/graph_storages/graph_element.py,sha256=X_2orbQOMaQd00xxzAoJLfEcrVNE1mgCqMJv0orMAKA,2733
|
|
233
235
|
camel/storages/graph_storages/nebula_graph.py,sha256=iLcHrIgd5U59GXlcLtLBAI8vNFpqHHLHHFmHTceVVLc,22816
|
|
234
|
-
camel/storages/graph_storages/neo4j_graph.py,sha256=
|
|
236
|
+
camel/storages/graph_storages/neo4j_graph.py,sha256=FBOH19VvEU3vXcM1Kuel88hVb2v1K_AKAZob4NmG9m0,30713
|
|
235
237
|
camel/storages/key_value_storages/__init__.py,sha256=le_hl7MYoQvaiYaJHwomy8c0cvTemicZbmwxgCJUpOs,962
|
|
236
238
|
camel/storages/key_value_storages/base.py,sha256=FSfxeLuG7SPvn-Mg-OQxtRKPtQBnRkB7lYeDaFOefpk,2177
|
|
237
239
|
camel/storages/key_value_storages/in_memory.py,sha256=k04Nx53lYxD5MoqDtBEgZrQYkAQ-zIuU6tqnoNqiHws,1949
|
|
@@ -253,7 +255,7 @@ camel/terminators/__init__.py,sha256=t8uqrkUnXEOYMXQDgaBkMFJ0EXFKI0kmx4cUimli3Ls
|
|
|
253
255
|
camel/terminators/base.py,sha256=xmJzERX7GdSXcxZjAHHODa0rOxRChMSRboDCNHWSscs,1511
|
|
254
256
|
camel/terminators/response_terminator.py,sha256=n3G5KP6Oj7-7WlRN0yFcrtLpqAJKaKS0bmhrWlFfCgQ,4982
|
|
255
257
|
camel/terminators/token_limit_terminator.py,sha256=YWv6ZR8R9yI2Qnf_3xES5bEE_O5bb2CxQ0EUXfMh34c,2118
|
|
256
|
-
camel/toolkits/__init__.py,sha256=
|
|
258
|
+
camel/toolkits/__init__.py,sha256=1MKp0Md0TtpI55l5EjX6vQg6nq7nUa996ARMLh2HEHc,3687
|
|
257
259
|
camel/toolkits/arxiv_toolkit.py,sha256=d0Zn8LQGENhtlZ0BHlDr1pUV8xHOc6TOenAaKgbelu8,6279
|
|
258
260
|
camel/toolkits/ask_news_toolkit.py,sha256=PAxio8I2eTau9TgOu1jyFC9fsHhvGb-aLIkroWPtwx4,23268
|
|
259
261
|
camel/toolkits/audio_analysis_toolkit.py,sha256=LC0C6SEIwko8HqkT-C3ub6Ila2PfuIbKLBOEjrrF6BE,8552
|
|
@@ -280,6 +282,7 @@ camel/toolkits/notion_toolkit.py,sha256=44TYy_51RhIQVfCuLKMH9U5cmRCzpQNSEN9IbrZl
|
|
|
280
282
|
camel/toolkits/open_api_toolkit.py,sha256=Venfq8JwTMQfzRzzB7AYmYUMEX35hW0BjIv_ozFMiNk,23316
|
|
281
283
|
camel/toolkits/openbb_toolkit.py,sha256=_13onVlXnUz9SZQHkeqQlZpXf1GVWp8BzrCFSK8aCMY,28911
|
|
282
284
|
camel/toolkits/page_script.js,sha256=gypbuQ_gn_oa3rQDoCN_q-kJ0jND1eSvY-30PufPZmQ,12613
|
|
285
|
+
camel/toolkits/pubmed_toolkit.py,sha256=vrd5GIhSYt9Z8EHaWkFb0x9i6_TP7pQZc7jlLHSol04,12180
|
|
283
286
|
camel/toolkits/reddit_toolkit.py,sha256=cTqEq1CRaLq9XxUHkHCmd09tRzb5Mz_bUs2JV58ewrs,8012
|
|
284
287
|
camel/toolkits/retrieval_toolkit.py,sha256=y_mQtknrSIDDXSyQb-4FY6ahV_mOxkBhDkA2eMIVnz0,3801
|
|
285
288
|
camel/toolkits/search_toolkit.py,sha256=4yTYkook3E3Yb-EOaio2O6FBcvzIXlVVC4WOvNSaYcw,29881
|
|
@@ -287,7 +290,7 @@ camel/toolkits/semantic_scholar_toolkit.py,sha256=Kp-5rz99rkeUsUmk5ShQdNKJRGVs78
|
|
|
287
290
|
camel/toolkits/slack_toolkit.py,sha256=n8cn3kZIc27B-2KMTRK6Nsdan37SwMqBiBi1PMtuUvQ,10744
|
|
288
291
|
camel/toolkits/stripe_toolkit.py,sha256=1sCywkpo8mh4E_KwxFKLhAb-G5uZ47NXXQvcddThjqg,9781
|
|
289
292
|
camel/toolkits/sympy_toolkit.py,sha256=TZzvBAr1tlk9p8jMnhAapg02ep9k9eIxSdybXEZDqeU,32760
|
|
290
|
-
camel/toolkits/terminal_toolkit.py,sha256=
|
|
293
|
+
camel/toolkits/terminal_toolkit.py,sha256=y-6Spdn_58Yrj3Rc5rhCX4vVgZsfm80lnI3fv9kPVUA,15181
|
|
291
294
|
camel/toolkits/twitter_toolkit.py,sha256=a2OLSJSW2wY7pOwOApb1qchZPXzH22Rbgm9Yd7-7vrA,15826
|
|
292
295
|
camel/toolkits/video_analysis_toolkit.py,sha256=lDAY6YP1zXykSxt8Qanf0WZR3l1p8c4akKPkaF5R3wU,15064
|
|
293
296
|
camel/toolkits/video_download_toolkit.py,sha256=XjZICJTOG4dmKxfkHxYxmBMFESsOX51GvTeQXAQslMU,7104
|
|
@@ -337,7 +340,7 @@ camel/verifiers/__init__.py,sha256=p6UEyvaOlwUQaFACGB4C07fL1xSnpTouElt19YRuneQ,9
|
|
|
337
340
|
camel/verifiers/base.py,sha256=efWZV9g58IHzJ24U4zr109y34CaAi8tV9WZPMCzP3YI,12017
|
|
338
341
|
camel/verifiers/models.py,sha256=hC6m_YxEX-mqi_tkCNZHZWLBWf04ZTyv5vfKR-BEyU4,2818
|
|
339
342
|
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.
|
|
343
|
+
camel_ai-0.2.26.dist-info/METADATA,sha256=md1wlHHOxnVY3b-m7kkN8AbotAoAioTx8SshfLOm5BI,37992
|
|
344
|
+
camel_ai-0.2.26.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
345
|
+
camel_ai-0.2.26.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
|
|
346
|
+
camel_ai-0.2.26.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|