camel-ai 0.1.6.9__py3-none-any.whl → 0.1.7.1__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,229 @@
1
+ # =========== Copyright 2023 @ 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 @ CAMEL-AI.org. All Rights Reserved. ===========
14
+
15
+ import os
16
+ import time
17
+ from typing import Any, Dict, List
18
+
19
+ from requests.exceptions import RequestException
20
+
21
+ from camel.toolkits import OpenAIFunction
22
+ from camel.toolkits.base import BaseToolkit
23
+
24
+
25
+ class RedditToolkit(BaseToolkit):
26
+ r"""A class representing a toolkit for Reddit operations.
27
+
28
+ This toolkit provides methods to interact with the Reddit API, allowing
29
+ users to collect top posts, perform sentiment analysis on comments, and
30
+ track keyword discussions across multiple subreddits.
31
+
32
+ Attributes:
33
+ retries (int): Number of retries for API requests in case of failure.
34
+ delay (int): Delay between retries in seconds.
35
+ reddit (Reddit): An instance of the Reddit client.
36
+ """
37
+
38
+ def __init__(self, retries: int = 3, delay: int = 0):
39
+ r"""Initializes the RedditToolkit with the specified number of retries
40
+ and delay.
41
+
42
+ Args:
43
+ retries (int): Number of times to retry the request in case of
44
+ failure. Defaults to `3`.
45
+ delay (int): Time in seconds to wait between retries. Defaults to
46
+ `0`.
47
+ """
48
+ from praw import Reddit # type: ignore[import-untyped]
49
+
50
+ self.retries = retries
51
+ self.delay = delay
52
+
53
+ client_id = os.environ.get("REDDIT_CLIENT_ID", "")
54
+ client_secret = os.environ.get("REDDIT_CLIENT_SECRET", "")
55
+ user_agent = os.environ.get("REDDIT_USER_AGENT", "")
56
+
57
+ if not all([client_id, client_secret, user_agent]):
58
+ print(
59
+ "Reddit API credentials are not set. "
60
+ "Please set the environment variables."
61
+ )
62
+
63
+ self.reddit = Reddit(
64
+ client_id=client_id,
65
+ client_secret=client_secret,
66
+ user_agent=user_agent,
67
+ request_timeout=30, # Set a timeout to handle delays
68
+ )
69
+
70
+ def _retry_request(self, func, *args, **kwargs):
71
+ r"""Retries a function in case of network-related errors.
72
+
73
+ Args:
74
+ func (callable): The function to be retried.
75
+ *args: Arguments to pass to the function.
76
+ **kwargs: Keyword arguments to pass to the function.
77
+
78
+ Returns:
79
+ Any: The result of the function call if successful.
80
+
81
+ Raises:
82
+ RequestException: If all retry attempts fail.
83
+ """
84
+ for attempt in range(self.retries):
85
+ try:
86
+ return func(*args, **kwargs)
87
+ except RequestException as e:
88
+ print(f"Attempt {attempt + 1}/{self.retries} failed: {e}")
89
+ if attempt < self.retries - 1:
90
+ time.sleep(self.delay)
91
+ else:
92
+ raise
93
+
94
+ def collect_top_posts(
95
+ self,
96
+ subreddit_name: str,
97
+ post_limit: int = 5,
98
+ comment_limit: int = 5,
99
+ ) -> List[Dict[str, Any]]:
100
+ r"""Collects the top posts and their comments from a specified
101
+ subreddit.
102
+
103
+ Args:
104
+ subreddit_name (str): The name of the subreddit to collect posts
105
+ from.
106
+ post_limit (int): The maximum number of top posts to collect.
107
+ Defaults to `5`.
108
+ comment_limit (int): The maximum number of top comments to collect
109
+ per post. Defaults to `5`.
110
+
111
+ Returns:
112
+ List[Dict[str, Any]]: A list of dictionaries, each containing the
113
+ post title and its top comments.
114
+ """
115
+ subreddit = self._retry_request(self.reddit.subreddit, subreddit_name)
116
+ top_posts = self._retry_request(subreddit.top, limit=post_limit)
117
+ data = []
118
+
119
+ for post in top_posts:
120
+ post_data = {
121
+ "Post Title": post.title,
122
+ "Comments": [
123
+ {"Comment Body": comment.body, "Upvotes": comment.score}
124
+ for comment in self._retry_request(
125
+ lambda post=post: list(post.comments)
126
+ )[:comment_limit]
127
+ ],
128
+ }
129
+ data.append(post_data)
130
+ time.sleep(self.delay) # Add a delay to avoid hitting rate limits
131
+
132
+ return data
133
+
134
+ def perform_sentiment_analysis(
135
+ self, data: List[Dict[str, Any]]
136
+ ) -> List[Dict[str, Any]]:
137
+ r"""Performs sentiment analysis on the comments collected from Reddit
138
+ posts.
139
+
140
+ Args:
141
+ data (List[Dict[str, Any]]): A list of dictionaries containing
142
+ Reddit post data and comments.
143
+
144
+ Returns:
145
+ List[Dict[str, Any]]: The original data with an added 'Sentiment
146
+ Score' for each comment.
147
+ """
148
+ from textblob import TextBlob
149
+
150
+ for item in data:
151
+ # Sentiment analysis should be done on 'Comment Body'
152
+ item["Sentiment Score"] = TextBlob(
153
+ item["Comment Body"]
154
+ ).sentiment.polarity
155
+
156
+ return data
157
+
158
+ def track_keyword_discussions(
159
+ self,
160
+ subreddits: List[str],
161
+ keywords: List[str],
162
+ post_limit: int = 10,
163
+ comment_limit: int = 10,
164
+ sentiment_analysis: bool = False,
165
+ ) -> List[Dict[str, Any]]:
166
+ r"""Tracks discussions about specific keywords in specified subreddits.
167
+
168
+ Args:
169
+ subreddits (List[str]): A list of subreddit names to search within.
170
+ keywords (List[str]): A list of keywords to track in the subreddit
171
+ discussions.
172
+ post_limit (int): The maximum number of top posts to collect per
173
+ subreddit. Defaults to `10`.
174
+ comment_limit (int): The maximum number of top comments to collect
175
+ per post. Defaults to `10`.
176
+ sentiment_analysis (bool): If True, performs sentiment analysis on
177
+ the comments. Defaults to `False`.
178
+
179
+ Returns:
180
+ List[Dict[str, Any]]: A list of dictionaries containing the
181
+ subreddit name, post title, comment body, and upvotes for each
182
+ comment that contains the specified keywords.
183
+ """
184
+ data = []
185
+
186
+ for subreddit_name in subreddits:
187
+ subreddit = self._retry_request(
188
+ self.reddit.subreddit, subreddit_name
189
+ )
190
+ top_posts = self._retry_request(subreddit.top, limit=post_limit)
191
+
192
+ for post in top_posts:
193
+ for comment in self._retry_request(
194
+ lambda post=post: list(post.comments)
195
+ )[:comment_limit]:
196
+ # Print comment body for debugging
197
+ if any(
198
+ keyword.lower() in comment.body.lower()
199
+ for keyword in keywords
200
+ ):
201
+ comment_data = {
202
+ "Subreddit": subreddit_name,
203
+ "Post Title": post.title,
204
+ "Comment Body": comment.body,
205
+ "Upvotes": comment.score,
206
+ }
207
+ data.append(comment_data)
208
+ # Add a delay to avoid hitting rate limits
209
+ time.sleep(self.delay)
210
+ if sentiment_analysis:
211
+ data = self.perform_sentiment_analysis(data)
212
+ return data
213
+
214
+ def get_tools(self) -> List[OpenAIFunction]:
215
+ r"""Returns a list of OpenAIFunction objects representing the
216
+ functions in the toolkit.
217
+
218
+ Returns:
219
+ List[OpenAIFunction]: A list of OpenAIFunction objects for the
220
+ toolkit methods.
221
+ """
222
+ return [
223
+ OpenAIFunction(self.collect_top_posts),
224
+ OpenAIFunction(self.perform_sentiment_analysis),
225
+ OpenAIFunction(self.track_keyword_discussions),
226
+ ]
227
+
228
+
229
+ REDDIT_FUNCS: List[OpenAIFunction] = RedditToolkit().get_tools()
@@ -11,12 +11,13 @@
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
13
  # =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. ===========
14
- from typing import List, Union
14
+ from typing import List, Optional, Union
15
15
 
16
16
  from camel.retrievers import AutoRetriever
17
17
  from camel.toolkits import OpenAIFunction
18
18
  from camel.toolkits.base import BaseToolkit
19
19
  from camel.types import StorageType
20
+ from camel.utils import Constants
20
21
 
21
22
 
22
23
  class RetrievalToolkit(BaseToolkit):
@@ -26,8 +27,19 @@ class RetrievalToolkit(BaseToolkit):
26
27
  storage system based on a specified query.
27
28
  """
28
29
 
30
+ def __init__(self, auto_retriever: Optional[AutoRetriever] = None) -> None:
31
+ r"""Initializes a new instance of the RetrievalToolkit class."""
32
+ self.ar = auto_retriever or AutoRetriever(
33
+ vector_storage_local_path="camel/temp_storage",
34
+ storage_type=StorageType.QDRANT,
35
+ )
36
+
29
37
  def information_retrieval(
30
- self, query: str, contents: Union[str, List[str]]
38
+ self,
39
+ query: str,
40
+ contents: Union[str, List[str]],
41
+ top_k: int = Constants.DEFAULT_TOP_K_RESULTS,
42
+ similarity_threshold: float = Constants.DEFAULT_SIMILARITY_THRESHOLD,
31
43
  ) -> str:
32
44
  r"""Retrieves information from a local vector storage based on the
33
45
  specified query. This function connects to a local vector storage
@@ -39,6 +51,12 @@ class RetrievalToolkit(BaseToolkit):
39
51
  query (str): The question or query for which an answer is required.
40
52
  contents (Union[str, List[str]]): Local file paths, remote URLs or
41
53
  string contents.
54
+ top_k (int, optional): The number of top results to return during
55
+ retrieve. Must be a positive integer. Defaults to
56
+ `DEFAULT_TOP_K_RESULTS`.
57
+ similarity_threshold (float, optional): The similarity threshold
58
+ for filtering results. Defaults to
59
+ `DEFAULT_SIMILARITY_THRESHOLD`.
42
60
 
43
61
  Returns:
44
62
  str: The information retrieved in response to the query, aggregated
@@ -46,16 +64,14 @@ class RetrievalToolkit(BaseToolkit):
46
64
 
47
65
  Example:
48
66
  # Retrieve information about CAMEL AI.
49
- information_retrieval(query = "what is CAMEL AI?",
50
- contents="https://www.camel-ai.org/")
67
+ information_retrieval(query = "How to contribute to CAMEL AI?",
68
+ contents="https://github.com/camel-ai/camel/blob/master/CONTRIBUTING.md")
51
69
  """
52
- auto_retriever = AutoRetriever(
53
- vector_storage_local_path="camel/temp_storage",
54
- storage_type=StorageType.QDRANT,
55
- )
56
-
57
- retrieved_info = auto_retriever.run_vector_retriever(
58
- query=query, contents=contents, top_k=3
70
+ retrieved_info = self.ar.run_vector_retriever(
71
+ query=query,
72
+ contents=contents,
73
+ top_k=top_k,
74
+ similarity_threshold=similarity_threshold,
59
75
  )
60
76
  return str(retrieved_info)
61
77
 
camel/types/enums.py CHANGED
@@ -86,16 +86,11 @@ class ModelType(Enum):
86
86
  REKA_FLASH = "reka-flash"
87
87
  REKA_EDGE = "reka-edge"
88
88
 
89
- # SambaNova Model
90
- SAMBA_LLAMA_3_1_405B = "llama3-405b"
91
- SAMBA_LLAMA_3_1_70B = "llama3-70b"
92
- SAMBA_LLAMA_3_1_8B = "llama3-8b"
93
-
94
89
  @property
95
90
  def value_for_tiktoken(self) -> str:
96
91
  if self.is_openai:
97
92
  return self.value
98
- return "gpt-3.5-turbo"
93
+ return "gpt-4o-mini"
99
94
 
100
95
  @property
101
96
  def is_openai(self) -> bool:
@@ -218,14 +213,6 @@ class ModelType(Enum):
218
213
  ModelType.REKA_FLASH,
219
214
  }
220
215
 
221
- @property
222
- def is_samba(self) -> bool:
223
- return self in {
224
- ModelType.SAMBA_LLAMA_3_1_405B,
225
- ModelType.SAMBA_LLAMA_3_1_70B,
226
- ModelType.SAMBA_LLAMA_3_1_8B,
227
- }
228
-
229
216
  @property
230
217
  def token_limit(self) -> int:
231
218
  r"""Returns the maximum token limit for a given model.
@@ -288,9 +275,6 @@ class ModelType(Enum):
288
275
  ModelType.GROQ_LLAMA_3_1_8B,
289
276
  ModelType.GROQ_LLAMA_3_1_70B,
290
277
  ModelType.GROQ_LLAMA_3_1_405B,
291
- ModelType.SAMBA_LLAMA_3_1_405B,
292
- ModelType.SAMBA_LLAMA_3_1_70B,
293
- ModelType.SAMBA_LLAMA_3_1_8B,
294
278
  }:
295
279
  return 131_072
296
280
  elif self in {
camel/utils/constants.py CHANGED
@@ -22,8 +22,14 @@ class Constants:
22
22
  # are extracted from the video.
23
23
  VIDEO_IMAGE_EXTRACTION_INTERVAL = 50
24
24
 
25
- # default plug of imageio to read video
25
+ # Default plug of imageio to read video
26
26
  VIDEO_DEFAULT_PLUG_PYAV = "pyav"
27
27
 
28
- # return response with json format
28
+ # Return response with json format
29
29
  FUNC_NAME_FOR_STRUCTURE_OUTPUT = "return_json_response"
30
+
31
+ # Default top k vaule for RAG
32
+ DEFAULT_TOP_K_RESULTS = 1
33
+
34
+ # Default similarity threshold vaule for RAG
35
+ DEFAULT_SIMILARITY_THRESHOLD = 0.7
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: camel-ai
3
- Version: 0.1.6.9
3
+ Version: 0.1.7.1
4
4
  Summary: Communicative Agents for AI Society Study
5
5
  Home-page: https://www.camel-ai.org/
6
6
  License: Apache-2.0
@@ -40,7 +40,7 @@ Requires-Dist: docstring-parser (>=0.15,<0.16)
40
40
  Requires-Dist: docx2txt (>=0.8,<0.9) ; extra == "tools" or extra == "all"
41
41
  Requires-Dist: duckduckgo-search (>=6.1.0,<7.0.0) ; extra == "tools" or extra == "all"
42
42
  Requires-Dist: eval-type-backport (==0.2.0)
43
- Requires-Dist: firecrawl-py (>=0.0.20,<0.0.21) ; extra == "tools" or extra == "all"
43
+ Requires-Dist: firecrawl-py (>=1.0.0,<2.0.0) ; extra == "tools" or extra == "all"
44
44
  Requires-Dist: google-cloud-storage (>=2.18.0,<3.0.0) ; extra == "object-storages" or extra == "all"
45
45
  Requires-Dist: google-generativeai (>=0.6.0,<0.7.0) ; extra == "model-platforms" or extra == "all"
46
46
  Requires-Dist: googlemaps (>=4.10.0,<5.0.0) ; extra == "tools" or extra == "all"
@@ -62,6 +62,7 @@ Requires-Dist: opencv-python (>=4,<5) ; extra == "huggingface-agent" or extra ==
62
62
  Requires-Dist: pathlib (>=1.0.1,<2.0.0)
63
63
  Requires-Dist: pillow (>=10.2.0,<11.0.0) ; extra == "tools" or extra == "all"
64
64
  Requires-Dist: prance (>=23.6.21.0,<24.0.0.0) ; extra == "tools" or extra == "all"
65
+ Requires-Dist: praw (>=7.7.1,<8.0.0) ; extra == "tools" or extra == "all"
65
66
  Requires-Dist: protobuf (>=4,<5)
66
67
  Requires-Dist: pyTelegramBotAPI (>=4.18.0,<5.0.0) ; extra == "tools" or extra == "all"
67
68
  Requires-Dist: pydantic (>=1.9,<3)
@@ -80,6 +81,7 @@ Requires-Dist: sentence-transformers (>=3.0.1,<4.0.0) ; extra == "encoders" or e
80
81
  Requires-Dist: sentencepiece (>=0,<1) ; extra == "huggingface-agent" or extra == "all"
81
82
  Requires-Dist: slack-sdk (>=3.27.2,<4.0.0) ; extra == "tools" or extra == "all"
82
83
  Requires-Dist: soundfile (>=0,<1) ; extra == "huggingface-agent" or extra == "all"
84
+ Requires-Dist: textblob (>=0.18.0.post0,<0.19.0) ; extra == "tools" or extra == "all"
83
85
  Requires-Dist: tiktoken (>=0.7.0,<0.8.0)
84
86
  Requires-Dist: torch (>=2,<3) ; extra == "huggingface-agent" or extra == "all"
85
87
  Requires-Dist: transformers (>=4,<5) ; extra == "huggingface-agent" or extra == "all"
@@ -211,7 +213,7 @@ conda create --name camel python=3.10
211
213
  conda activate camel
212
214
 
213
215
  # Clone github repo
214
- git clone -b v0.1.6.9 https://github.com/camel-ai/camel.git
216
+ git clone -b v0.1.7.1 https://github.com/camel-ai/camel.git
215
217
 
216
218
  # Change directory into project directory
217
219
  cd camel
@@ -1,7 +1,7 @@
1
- camel/__init__.py,sha256=NpUPP_J-proe5Nrf3866fjfSUgSJqji94yPPEOStrZY,780
1
+ camel/__init__.py,sha256=k-CsaXT5OFrrhnD7hKaxlVmf_Y2ACKAgKY8Mi3sqmP0,780
2
2
  camel/agents/__init__.py,sha256=SSU1wbhZXWwQnE0rRxkpyN57kEu72KklsZNcdLkXfTs,1551
3
3
  camel/agents/base.py,sha256=X39qWSiT1WnDqaJ9k3gQrTpOQSwUKzNEVpp5AY6fDH8,1130
4
- camel/agents/chat_agent.py,sha256=S2ZP8hC_Wjursnd0mxk0Iq4BYA_UedyolyValuyAYZY,37418
4
+ camel/agents/chat_agent.py,sha256=bfmj5PFu6Q2NVlHbPnQ6Re5_fslNyOFhSjsegq1Qdvc,37563
5
5
  camel/agents/critic_agent.py,sha256=To-istnO-9Eb0iabdeIDrgfvkxYYfsdX9xIZiSrc3oM,7493
6
6
  camel/agents/deductive_reasoner_agent.py,sha256=49vwglWYHgXf-VRftdMN9OFGOwqdsXyTt45PP6z-pbg,13473
7
7
  camel/agents/embodied_agent.py,sha256=3ABuiRQXBpplKbuhPY5KNLJyKc6Z8SgXgzIges3ZwVs,7542
@@ -12,7 +12,7 @@ camel/agents/task_agent.py,sha256=n9xIU3QtcptRPSuHZJ4ntQ_M_a8AvJ6U9ZRV8VaxV5A,14
12
12
  camel/agents/tool_agents/__init__.py,sha256=ulTNWU2qoFGe3pvVmCq_sdfeSX3NKZ0due66TYvsL-M,862
13
13
  camel/agents/tool_agents/base.py,sha256=nQAhfWi8a_bCgzlf5-G-tmj1fKm6AjpRc89NQkWwpnc,1399
14
14
  camel/agents/tool_agents/hugging_face_tool_agent.py,sha256=1Z5tG6f_86eL0vmtRZ-BJvoLDFFLhoHt8JtDvgat1xU,8723
15
- camel/configs/__init__.py,sha256=7rJ-fAqML30O8UpN1CRb4M1TE-TYB3GsLHkyBcRucxE,2084
15
+ camel/configs/__init__.py,sha256=GmkMkyWsCWUW_8Oc9yajTUac39Sx9iSVlnzaZFTFm_0,2231
16
16
  camel/configs/anthropic_config.py,sha256=DGQoPyYrayhYQ7aSjkYYGHOZ5VdQ9qahtaS0p_GpU0Q,3294
17
17
  camel/configs/base_config.py,sha256=gjsDACMCk-hXDBk7qkeHcpbQrWy6jbp4iyzfqgghJEk,2485
18
18
  camel/configs/gemini_config.py,sha256=YHJSNEAIxBxPX1NAj2rWvM4OOR7vmIANH88pZO-aOsY,6880
@@ -22,14 +22,14 @@ camel/configs/mistral_config.py,sha256=G9LuY0-3S6az-8j8kpqB-4asgoaxTOsZVYeZBYJl6
22
22
  camel/configs/ollama_config.py,sha256=xrT-ulqvANjIu0bVxOzN93uaKUs8e2gW1tmYK1jULEM,4357
23
23
  camel/configs/openai_config.py,sha256=yQf7lkBcYTtCNAopow3SlZgcDMlMkiCpC5Dvhh9wb9M,7327
24
24
  camel/configs/reka_config.py,sha256=ECYg3BT7onwZX-iKLq-5TBhCFdm70rV-9hZ_G6Ye8-k,3504
25
- camel/configs/samba_config.py,sha256=PY9it-wRlEUljvTfu_wI-xhhy-emG_iuXYCtEmU0q_8,2166
25
+ camel/configs/samba_config.py,sha256=XpNrsQjTIpEDxtGpVhr9eAU89k48jiMhF6qihWDOc0k,4577
26
26
  camel/configs/togetherai_config.py,sha256=WERo8W6yb-qy_3qa1GUckt58J5XGKwN5X_nC9baL8Cs,5663
27
27
  camel/configs/vllm_config.py,sha256=jfeveBnlkkBHC2RFkffG6ZlTkGzkwrX_WXMwHkg36Jg,5516
28
28
  camel/configs/zhipuai_config.py,sha256=zU8Zaj3d9d7SCFEFIkCIRNlnJw9z_oFDmIoCQKrerEM,3600
29
29
  camel/embeddings/__init__.py,sha256=KTX6IC9b2ifKde-Yh7srSp_gNopvBwtDy8kEzazn5lE,1106
30
30
  camel/embeddings/base.py,sha256=deX70VXGmWGRAPal3HheXvMaarymRR5I1i90KPWGWXs,2196
31
31
  camel/embeddings/mistral_embedding.py,sha256=Ft5GYWgGXTtPS71AVut0wjGMbXPIcDPQbu7ovWRVwAQ,3241
32
- camel/embeddings/openai_embedding.py,sha256=Eh7Hbj6bWMTrX0Tze2IgPdD3-v9aRoBeE8AifG3jF8A,3332
32
+ camel/embeddings/openai_embedding.py,sha256=TaNTVhKkCi7-9_k4IivavLeehY7qYnhLPK9WyFuwQac,3608
33
33
  camel/embeddings/sentence_transformers_embeddings.py,sha256=ayYIBOADdmmhlmo1iZS8tI_mZ-rX0sxjljyQpkuftcw,2730
34
34
  camel/embeddings/vlm_embedding.py,sha256=VvD_b737snNrZTRE4ejFvWLjd_YT1DCTKl8yKIgRM-g,5436
35
35
  camel/generators.py,sha256=tcYDoHwSKN0rBiu7u4rWN9pb61O8OaclrNaasCqHSJM,10437
@@ -43,7 +43,7 @@ camel/interpreters/ipython_interpreter.py,sha256=B0v1DCiq6PmOYQXXQAQBX1oOYjgJ0ge
43
43
  camel/interpreters/subprocess_interpreter.py,sha256=nKxFXZJ9zGYlKdNlz6Ln7bvg65ejKZ8yAHgIFuR2WzM,6835
44
44
  camel/loaders/__init__.py,sha256=ClE516UbyUes6Zut8CCiH0zWqFwwpgEcP9ur3dte8iU,949
45
45
  camel/loaders/base_io.py,sha256=xzK67fqx66eYaM6fMXRJiSZfwKhFVNQmzuKURPtTzhk,10339
46
- camel/loaders/firecrawl_reader.py,sha256=AJhZB2C0FTFwEVCW3UVo4Zp100Yqjeo9cRSqnayQA_g,7173
46
+ camel/loaders/firecrawl_reader.py,sha256=6CfuSA3LrjnDhApoPnZfmTHbauN2TmseBTWpx0sutzo,7943
47
47
  camel/loaders/jina_url_reader.py,sha256=ur_2Z3NFrz5AbPFi5REyZh5fISkJ9H_UZV4gtmOSO04,3607
48
48
  camel/loaders/unstructured_io.py,sha256=cY-5mqViE5Sobr3dnbK-KYcXjalUfeDfb8Yk6yOsu_g,16330
49
49
  camel/memories/__init__.py,sha256=ml1Uj4Y_1Q2LfrTXOY38niF0x1H-N-u_zoN_VvR939U,1364
@@ -66,18 +66,18 @@ camel/models/gemini_model.py,sha256=h_kyD8LSpXCn2dQ4OEer5HwwEUwuTD65yRIRV4LD3Vs,
66
66
  camel/models/groq_model.py,sha256=Lm1br_2FBdqNQ3pCgMNf3VnjykYzttUKnHWExEXshLo,4753
67
67
  camel/models/litellm_model.py,sha256=5sTOzI07FsxDEW3jSK-XXBx91Yo8z9voahyCsK36U6U,5748
68
68
  camel/models/mistral_model.py,sha256=39rHJ-z_6Z-UbtUqZPEAbCdFYY1Ft0Drs42jG5hHaho,9517
69
- camel/models/model_factory.py,sha256=rN6U3LDvUE55cj04znY3yJGzmHjRD99rYGsjMWPdZnQ,5998
69
+ camel/models/model_factory.py,sha256=_dQOx_MYxXih6uQOjkKR7uoIrhDcWRsMTKHbO3NLYN0,5974
70
70
  camel/models/nemotron_model.py,sha256=2Idf4wrZervxvfu6av42EKjefFtDnBb6cKnWCJUkqI4,2682
71
- camel/models/ollama_model.py,sha256=RRav-OXKRP41N9thrd_wFTZg7d7ZqlfhpPqkg_Q2LJw,4994
71
+ camel/models/ollama_model.py,sha256=tdcKUKRo9gsa6ifvEzlE32T5eHFmi-9guKP3afwhUKs,5684
72
72
  camel/models/open_source_model.py,sha256=p5a2sCeZl5SyrgkygClndOrHEjpJxmyhE1CqKE2fZSw,6363
73
73
  camel/models/openai_audio_models.py,sha256=_ddOxqzFZCVZaK6h33Z0THU6HXk2XlJTxVWquZ3oOaQ,10042
74
74
  camel/models/openai_compatibility_model.py,sha256=7h1zSFBgg_mQojFvtSqC54tcZOZY0NFsZ7ZNlns5CWk,4229
75
75
  camel/models/openai_model.py,sha256=uOtiLmbdH7sDKqk9oV0i1HEVni_4ApPXCukShZwQDKA,4611
76
76
  camel/models/reka_model.py,sha256=_ERZvtkK0Gd7GUx3f4VVqqtH093clVMoJfa896t9f2M,8043
77
- camel/models/samba_model.py,sha256=vu9459hMOTxGDny7IkJEQhtwOlyAs0_haWCFrjoGG5U,10146
77
+ camel/models/samba_model.py,sha256=kIpk6gtwVEpXAKD8kE33TYP4o4Lm-hp6b_X7lsskcio,16385
78
78
  camel/models/stub_model.py,sha256=DuqaBsS55STSbcLJsk025Uwo_u4ixrSSKqKEoZj2ihY,3680
79
79
  camel/models/togetherai_model.py,sha256=kUFGxb6cXUgkvMNQ0MsDKW27Udw622zt2QIVa3U7iLU,5461
80
- camel/models/vllm_model.py,sha256=D_o9OYgQi9KCPJn5r-4qTj-IJuQLBHaSv49j0QPcuGs,5129
80
+ camel/models/vllm_model.py,sha256=YsJmgvxcsXrUGOpAVV4mrRz7T-zwywn8fBxTgNfiQ3s,5806
81
81
  camel/models/zhipuai_model.py,sha256=JqJDEMk6vWH-ZnKkMwdG4yDvJWf1xk4PBsp2ifSFGR0,4939
82
82
  camel/prompts/__init__.py,sha256=O5bkcuwj2kXTkz5yDPiiMI8KN04vI8bCKG7mGE1SIdI,2326
83
83
  camel/prompts/ai_society.py,sha256=ApgvIED1Z_mdsWDNc2_u35Ktp7pEKksMrOIQKo_q5cI,6306
@@ -98,11 +98,11 @@ camel/prompts/video_description_prompt.py,sha256=HRd3fHXftKwBm5QH7Tvm3FabgZPCoAv
98
98
  camel/responses/__init__.py,sha256=edtTQskOgq5obyITziRFL62HTJP9sAikAtP9vrFacEQ,795
99
99
  camel/responses/agent_responses.py,sha256=sGlGwXz2brWI-FpiU5EhVRpZvcfGWUmooAF0ukqAF3I,1771
100
100
  camel/retrievers/__init__.py,sha256=CuP3B77zl2PoF-W2y9xSkTGRzoK2J4TlUHdCtuJD8dg,1059
101
- camel/retrievers/auto_retriever.py,sha256=GeSdulUu05_7VulgEO5aGnXp8ESHFJSvvH3A9TDuo5E,12580
101
+ camel/retrievers/auto_retriever.py,sha256=XPyECIXO7lFbHoLMPasFurYmC9Me6wa7JPKHZWYLLuo,12571
102
102
  camel/retrievers/base.py,sha256=sgqaJDwIkWluEgPBlukFN7RYZJnrp0imCAOEWm6bZ40,2646
103
103
  camel/retrievers/bm25_retriever.py,sha256=Dr7Yfkjw45sovI1EVNByGIMj7KERWrr8JHlh8csSF1s,5155
104
104
  camel/retrievers/cohere_rerank_retriever.py,sha256=HvnFqXpsX9EdBOab0kFLDyxxJnknPFMVxyQJQDlHbOA,4100
105
- camel/retrievers/vector_retriever.py,sha256=SYqWsL7A0OWeuRdLXMT1jGxITscfvmFd_K0ITEk1-Ng,8227
105
+ camel/retrievers/vector_retriever.py,sha256=4tzqsUIW29Pq8uvQw_2iXhcJyTmIhvq7CinhCrr7Sps,8256
106
106
  camel/societies/__init__.py,sha256=JhGwUHjht4CewzC3shKuxmgB3oS7FIxIxmiKyhNsfIs,832
107
107
  camel/societies/babyagi_playing.py,sha256=tZTcfQrD9ECUhkqwdthsM2yFPfYGKsoAGMfTlrxt5as,11675
108
108
  camel/societies/role_playing.py,sha256=ZiiT1RtS3cQtV3XqyAXOH_Up7-b7WRDznC2qiX4PDGg,22982
@@ -132,7 +132,7 @@ camel/terminators/__init__.py,sha256=pE7fcfDUNngdbm1BhzSQPRMXNbdd28rl9YbF4gKWwXE
132
132
  camel/terminators/base.py,sha256=TSkl3maNEsdjyAniJaSgFfD4UF8RQ1LwNIiGw0dN8Gg,1396
133
133
  camel/terminators/response_terminator.py,sha256=zcXuigbvlclUoBv4xcVbfU36ZohUT1RhI-rSnukloUY,4951
134
134
  camel/terminators/token_limit_terminator.py,sha256=mK30wVUnoqNAvIo-wxkqY5gUSNay2M04rsAktKqoiOI,2087
135
- camel/toolkits/__init__.py,sha256=g1QuDKhGrT7gUBneBTkLENqfYV9bAomRIcAqaRCQSb8,2229
135
+ camel/toolkits/__init__.py,sha256=CfWQm901AVP_Eq-PMxJAej8EZ9ZAUoWDPnGlCJkkZL4,2326
136
136
  camel/toolkits/base.py,sha256=ez04Ei8jwIAws023bM19EGkOPUkQMouULqBvOKfM4kM,986
137
137
  camel/toolkits/code_execution.py,sha256=fWBhn1_3adiv7YYuA0gJzEBlc_dYNS6_hVtDbgB-zX0,2425
138
138
  camel/toolkits/dalle_toolkit.py,sha256=IalDFfNCz58LMRdCZNSJfLMiauHGBGN9XNRV7pzuf28,5261
@@ -167,18 +167,19 @@ camel/toolkits/open_api_specs/web_scraper/paths/__init__.py,sha256=f3LXNDzN2XWWo
167
167
  camel/toolkits/open_api_specs/web_scraper/paths/scraper.py,sha256=SQGbFkshLN4xm-Ya49ssbSvaU1nFVNFYhWsEPYVeFe0,1123
168
168
  camel/toolkits/open_api_toolkit.py,sha256=rbQrhY6gHoZi9kiX9138pah9qZ2S8K5Vex1zFGWeCK8,23403
169
169
  camel/toolkits/openai_function.py,sha256=eaE441qxLvuRKr_WrpYLGkr5P2Nav07VVdR29n76RkU,14767
170
- camel/toolkits/retrieval_toolkit.py,sha256=D16yeJX1WscWfXqeI7b_Y-x9UmaJdwn5ymnbv61jUks,2984
170
+ camel/toolkits/reddit_toolkit.py,sha256=ohycaCMZkVNlmv9cCv4n2yFAYN0pcxTmV9Z0_a6dYuc,8511
171
+ camel/toolkits/retrieval_toolkit.py,sha256=UFByIxMB8m_C8HH-a65MeBJJACoJcVrcKMU9TGzm_SI,3828
171
172
  camel/toolkits/search_toolkit.py,sha256=vXe026bQpLic09iwY5PN4RS6SXeHYBBkjfnOlJYB670,12943
172
173
  camel/toolkits/slack_toolkit.py,sha256=JdgDJe7iExTmG7dDXOG6v5KpVjZ6_My_d_WFTYSxkw4,10839
173
174
  camel/toolkits/twitter_toolkit.py,sha256=oQw8wRkU7iDxaocsmWvio4pU75pmq6FJAorPdQ2xEAE,19810
174
175
  camel/toolkits/weather_toolkit.py,sha256=n4YrUI_jTIH7oqH918IdHbXLgfQ2BPGIWWK8Jp8G1Uw,7054
175
176
  camel/types/__init__.py,sha256=ArKXATj3z_Vv4ISmROVeo6Mv3tj5kE1dTkqfgwyxVY4,1975
176
- camel/types/enums.py,sha256=ax37MGZH6i5gDv6jOZJpDCkM9vuNbL6eRqnwKGMWRZk,17810
177
+ camel/types/enums.py,sha256=VjGUAPPJ2rEjNU-16radtPMeWSoTtPDMDMIo0PhMzaE,17328
177
178
  camel/types/openai_types.py,sha256=BNQ6iCzKTjSvgcXFsAFIgrUS_YUFZBU6bDoyAp387hI,2045
178
179
  camel/utils/__init__.py,sha256=IdI9v0FetNR-nx-Hg4bmNHoYto6Xfcs_uaomksdewmo,2303
179
180
  camel/utils/async_func.py,sha256=SLo8KPkrNKdsONvFf3KBb33EgFn4gH2EKSX1aI_LKes,1578
180
181
  camel/utils/commons.py,sha256=cTg5yQEdVnqqf0oYa-EUp7Qv0RIBcPD6kSNNJ52UmPw,16451
181
- camel/utils/constants.py,sha256=BdB5qgphZWsgKZf__gsQal6KiQSapvICGWKwiZlzBvM,1205
182
+ camel/utils/constants.py,sha256=p3_to59l7-pJPVsZ1rAhBO5kQyZMKFq1A6LdnvGGoz4,1359
182
183
  camel/utils/token_counting.py,sha256=G7vBzrxSXm4DzHMOfMXaOYjYf8WJTpxjHjlzmngHlYQ,21004
183
184
  camel/workforce/__init__.py,sha256=6jwJWDlESEqcnWCm61WCyjzFUF6KLzXA_fGI86rHfiE,878
184
185
  camel/workforce/base.py,sha256=lEHqgOV1tmsy7y4wuuKClcDkoPCRvXVdMrBngsM_6yY,1722
@@ -190,6 +191,6 @@ camel/workforce/utils.py,sha256=Z-kODz5PMPtfeKKVqpcQq-b-B8oqC7XSwi_F3__Ijhs,3526
190
191
  camel/workforce/worker_node.py,sha256=wsRqk2rugCvvkcmCzvn-y-gQuyuJGAG8PIr1KtgqJFw,3878
191
192
  camel/workforce/workforce.py,sha256=SVJJgSSkYvk05RgL9oaJzHwzziH7u51KLINRuzLB8BI,1773
192
193
  camel/workforce/workforce_prompt.py,sha256=cAWYEIA0rau5itEekSoUIFttBzpKM9RzB6x-mfukGSU,4665
193
- camel_ai-0.1.6.9.dist-info/METADATA,sha256=E2QUNSqrJAet4ECGMU7q3SbnR5D0zsu8eFq8wHkBJ8U,24500
194
- camel_ai-0.1.6.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
195
- camel_ai-0.1.6.9.dist-info/RECORD,,
194
+ camel_ai-0.1.7.1.dist-info/METADATA,sha256=3i7AY4MF6i73MWDFeha6lKhQLS53kjUqIpWteg7HFPU,24658
195
+ camel_ai-0.1.7.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
196
+ camel_ai-0.1.7.1.dist-info/RECORD,,