camel-ai 0.2.25__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.

@@ -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
- command.extend(["dir", "/s", "/b", os.path.join(path, pattern)])
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.25
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=PzLOi5tF4retGUqkCZIJVUZbR9atlI1NspMfmVKtg5c,912
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=JvKrqPIWG1r2yehFmdZx_2gw5_O0LRH79jE3NUVdFWI,40844
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=qBv_-t5wuk74bVVerbzaU86Qu2ZqwFhWi143djujGFI,9091
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=9eLmNrBVlxCg7KtUZTa0nQVebRnYxcTcLcfTJuI8jq0,4991
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=sSlH-k9PaLasJLpvl1bmVDzDMpsuok3k064S9xbk7V4,33345
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=X9-x26-4AKGrLSJEVKM3ZYfoSonWG9AbPiLsE4sIYlg,17632
96
- camel/extractors/__init__.py,sha256=aYcYo6rDxVQMFeMqXN1epitlPuLirOOQCcdpWq9basA,763
97
- camel/extractors/base.py,sha256=Id0odIG8u9ws6ai1HXT6mckNdQbCtAZflXC1F7ViqgQ,9454
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
@@ -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=I4a9yeqqgKF1skiTwvFmBmJTy6HjKAahyGlwF8zNPeM,7319
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
@@ -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=v7Gzl63VhN00vlsI3G8GCZkbgiOCyonFCpNsPCo90Pk,2617
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=yjxNWoikgoGC_N-JXiJQlhQTSre87_5wTSOeKeVtEoc,28046
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=l7G2_QjBMctZ4vebr42Xd7cAxuSOx2cc4UfrMVkM1aM,3624
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=ahLb3tBxpxInVqmQesI0Bm30JGziFoiXXi4qNGAJXBY,15116
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.25.dist-info/METADATA,sha256=SKrS5S00hnDWTqbqtN64dWdsqx2jkuT_nttTq68aVO0,37372
341
- camel_ai-0.2.25.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
342
- camel_ai-0.2.25.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
343
- camel_ai-0.2.25.dist-info/RECORD,,
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,,