camel-ai 0.2.67__py3-none-any.whl → 0.2.68__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/environments/__init__.py +12 -0
- camel/environments/rlcards_env.py +860 -0
- camel/interpreters/docker/Dockerfile +2 -5
- camel/loaders/firecrawl_reader.py +4 -4
- camel/memories/blocks/vectordb_block.py +8 -1
- camel/memories/context_creators/score_based.py +123 -19
- camel/models/anthropic_model.py +114 -2
- camel/societies/workforce/prompts.py +42 -9
- camel/societies/workforce/single_agent_worker.py +36 -6
- camel/societies/workforce/task_channel.py +9 -2
- camel/societies/workforce/worker.py +98 -16
- camel/societies/workforce/workforce.py +61 -27
- {camel_ai-0.2.67.dist-info → camel_ai-0.2.68.dist-info}/METADATA +2 -1
- {camel_ai-0.2.67.dist-info → camel_ai-0.2.68.dist-info}/RECORD +17 -16
- {camel_ai-0.2.67.dist-info → camel_ai-0.2.68.dist-info}/WHEEL +0 -0
- {camel_ai-0.2.67.dist-info → camel_ai-0.2.68.dist-info}/licenses/LICENSE +0 -0
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
+
import asyncio
|
|
16
17
|
import logging
|
|
17
18
|
from abc import ABC, abstractmethod
|
|
18
|
-
from typing import List, Optional
|
|
19
|
+
from typing import List, Optional, Set
|
|
19
20
|
|
|
20
21
|
from colorama import Fore
|
|
21
22
|
|
|
@@ -35,14 +36,19 @@ class Worker(BaseNode, ABC):
|
|
|
35
36
|
description (str): Description of the node.
|
|
36
37
|
node_id (Optional[str]): ID of the node. If not provided, it will
|
|
37
38
|
be generated automatically. (default: :obj:`None`)
|
|
39
|
+
max_concurrent_tasks (int): Maximum number of tasks this worker can
|
|
40
|
+
process concurrently. (default: :obj:`10`)
|
|
38
41
|
"""
|
|
39
42
|
|
|
40
43
|
def __init__(
|
|
41
44
|
self,
|
|
42
45
|
description: str,
|
|
43
46
|
node_id: Optional[str] = None,
|
|
47
|
+
max_concurrent_tasks: int = 10,
|
|
44
48
|
) -> None:
|
|
45
49
|
super().__init__(description, node_id=node_id)
|
|
50
|
+
self.max_concurrent_tasks = max_concurrent_tasks
|
|
51
|
+
self._active_task_ids: Set[str] = set()
|
|
46
52
|
|
|
47
53
|
def __repr__(self):
|
|
48
54
|
return f"Worker node {self.node_id} ({self.description})"
|
|
@@ -60,7 +66,7 @@ class Worker(BaseNode, ABC):
|
|
|
60
66
|
pass
|
|
61
67
|
|
|
62
68
|
async def _get_assigned_task(self) -> Task:
|
|
63
|
-
r"""Get
|
|
69
|
+
r"""Get a task assigned to this node from the channel."""
|
|
64
70
|
return await self._channel.get_assigned_task_by_assignee(self.node_id)
|
|
65
71
|
|
|
66
72
|
@staticmethod
|
|
@@ -77,20 +83,10 @@ class Worker(BaseNode, ABC):
|
|
|
77
83
|
def set_channel(self, channel: TaskChannel):
|
|
78
84
|
self._channel = channel
|
|
79
85
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
This method should be run in an event loop, as it will run
|
|
86
|
-
indefinitely.
|
|
87
|
-
"""
|
|
88
|
-
self._running = True
|
|
89
|
-
logger.info(f"{self} started.")
|
|
90
|
-
|
|
91
|
-
while True:
|
|
92
|
-
# Get the earliest task assigned to this node
|
|
93
|
-
task = await self._get_assigned_task()
|
|
86
|
+
async def _process_single_task(self, task: Task) -> None:
|
|
87
|
+
r"""Process a single task and handle its completion/failure."""
|
|
88
|
+
try:
|
|
89
|
+
self._active_task_ids.add(task.id)
|
|
94
90
|
print(
|
|
95
91
|
f"{Fore.YELLOW}{self} get task {task.id}: {task.content}"
|
|
96
92
|
f"{Fore.RESET}"
|
|
@@ -109,6 +105,92 @@ class Worker(BaseNode, ABC):
|
|
|
109
105
|
task.set_state(task_state)
|
|
110
106
|
|
|
111
107
|
await self._channel.return_task(task.id)
|
|
108
|
+
except Exception as e:
|
|
109
|
+
logger.error(f"Error processing task {task.id}: {e}")
|
|
110
|
+
task.set_state(TaskState.FAILED)
|
|
111
|
+
await self._channel.return_task(task.id)
|
|
112
|
+
finally:
|
|
113
|
+
self._active_task_ids.discard(task.id)
|
|
114
|
+
|
|
115
|
+
@check_if_running(False)
|
|
116
|
+
async def _listen_to_channel(self):
|
|
117
|
+
r"""Continuously listen to the channel, process tasks that are
|
|
118
|
+
assigned to this node concurrently up to max_concurrent_tasks limit.
|
|
119
|
+
|
|
120
|
+
This method supports parallel task execution when multiple tasks
|
|
121
|
+
are assigned to the same worker.
|
|
122
|
+
"""
|
|
123
|
+
self._running = True
|
|
124
|
+
logger.info(
|
|
125
|
+
f"{self} started with max {self.max_concurrent_tasks} "
|
|
126
|
+
f"concurrent tasks."
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# Keep track of running task coroutines
|
|
130
|
+
running_tasks: Set[asyncio.Task] = set()
|
|
131
|
+
|
|
132
|
+
while self._running:
|
|
133
|
+
try:
|
|
134
|
+
# Clean up completed tasks
|
|
135
|
+
completed_tasks = [t for t in running_tasks if t.done()]
|
|
136
|
+
for completed_task in completed_tasks:
|
|
137
|
+
running_tasks.remove(completed_task)
|
|
138
|
+
# Check for exceptions in completed tasks
|
|
139
|
+
try:
|
|
140
|
+
await completed_task
|
|
141
|
+
except Exception as e:
|
|
142
|
+
logger.error(f"Task processing failed: {e}")
|
|
143
|
+
|
|
144
|
+
# Check if we can accept more tasks
|
|
145
|
+
if len(running_tasks) < self.max_concurrent_tasks:
|
|
146
|
+
try:
|
|
147
|
+
# Try to get a new task (with short timeout to avoid
|
|
148
|
+
# blocking)
|
|
149
|
+
task = await asyncio.wait_for(
|
|
150
|
+
self._get_assigned_task(), timeout=1.0
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# Create and start processing task
|
|
154
|
+
task_coroutine = asyncio.create_task(
|
|
155
|
+
self._process_single_task(task)
|
|
156
|
+
)
|
|
157
|
+
running_tasks.add(task_coroutine)
|
|
158
|
+
|
|
159
|
+
except asyncio.TimeoutError:
|
|
160
|
+
# No tasks available, continue loop
|
|
161
|
+
if not running_tasks:
|
|
162
|
+
# No tasks running and none available, short sleep
|
|
163
|
+
await asyncio.sleep(0.1)
|
|
164
|
+
continue
|
|
165
|
+
else:
|
|
166
|
+
# At max capacity, wait for at least one task to complete
|
|
167
|
+
if running_tasks:
|
|
168
|
+
done, running_tasks = await asyncio.wait(
|
|
169
|
+
running_tasks, return_when=asyncio.FIRST_COMPLETED
|
|
170
|
+
)
|
|
171
|
+
# Process completed tasks
|
|
172
|
+
for completed_task in done:
|
|
173
|
+
try:
|
|
174
|
+
await completed_task
|
|
175
|
+
except Exception as e:
|
|
176
|
+
logger.error(f"Task processing failed: {e}")
|
|
177
|
+
|
|
178
|
+
except Exception as e:
|
|
179
|
+
logger.error(
|
|
180
|
+
f"Error in worker {self.node_id} listen loop: {e}"
|
|
181
|
+
)
|
|
182
|
+
await asyncio.sleep(0.1)
|
|
183
|
+
continue
|
|
184
|
+
|
|
185
|
+
# Wait for all remaining tasks to complete when stopping
|
|
186
|
+
if running_tasks:
|
|
187
|
+
logger.info(
|
|
188
|
+
f"{self} stopping, waiting for {len(running_tasks)} "
|
|
189
|
+
f"tasks to complete..."
|
|
190
|
+
)
|
|
191
|
+
await asyncio.gather(*running_tasks, return_exceptions=True)
|
|
192
|
+
|
|
193
|
+
logger.info(f"{self} stopped.")
|
|
112
194
|
|
|
113
195
|
@check_if_running(False)
|
|
114
196
|
async def start(self):
|
|
@@ -274,10 +274,13 @@ class Workforce(BaseNode):
|
|
|
274
274
|
"of agents. This ensures efficient execution by minimizing "
|
|
275
275
|
"context switching between agents.",
|
|
276
276
|
)
|
|
277
|
-
|
|
277
|
+
_task_agent_kwargs = dict(task_agent_kwargs or {})
|
|
278
278
|
extra_tools = TaskPlanningToolkit().get_tools()
|
|
279
|
-
|
|
280
|
-
|
|
279
|
+
_task_agent_kwargs["tools"] = [
|
|
280
|
+
*_task_agent_kwargs.get("tools", []),
|
|
281
|
+
*extra_tools,
|
|
282
|
+
]
|
|
283
|
+
self.task_agent = ChatAgent(task_sys_msg, **_task_agent_kwargs)
|
|
281
284
|
|
|
282
285
|
def __repr__(self):
|
|
283
286
|
return (
|
|
@@ -823,9 +826,17 @@ class Workforce(BaseNode):
|
|
|
823
826
|
|
|
824
827
|
# Check if we're already in an event loop
|
|
825
828
|
try:
|
|
826
|
-
asyncio.get_running_loop()
|
|
829
|
+
current_loop = asyncio.get_running_loop()
|
|
830
|
+
# Store the current loop for potential reuse by async tools
|
|
831
|
+
self._loop = current_loop
|
|
827
832
|
|
|
828
|
-
|
|
833
|
+
logger.info(
|
|
834
|
+
"Running in active event loop context. "
|
|
835
|
+
"Consider using process_task_async() directly for better "
|
|
836
|
+
"async tool compatibility."
|
|
837
|
+
)
|
|
838
|
+
|
|
839
|
+
# Create a new thread with a fresh event loop
|
|
829
840
|
def run_in_thread():
|
|
830
841
|
# Create new event loop for this thread
|
|
831
842
|
new_loop = asyncio.new_event_loop()
|
|
@@ -836,6 +847,8 @@ class Workforce(BaseNode):
|
|
|
836
847
|
)
|
|
837
848
|
finally:
|
|
838
849
|
new_loop.close()
|
|
850
|
+
# Restore original loop reference
|
|
851
|
+
self._loop = current_loop
|
|
839
852
|
|
|
840
853
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
|
841
854
|
future = executor.submit(run_in_thread)
|
|
@@ -982,18 +995,25 @@ class Workforce(BaseNode):
|
|
|
982
995
|
|
|
983
996
|
@check_if_running(False)
|
|
984
997
|
def add_single_agent_worker(
|
|
985
|
-
self,
|
|
998
|
+
self,
|
|
999
|
+
description: str,
|
|
1000
|
+
worker: ChatAgent,
|
|
1001
|
+
max_concurrent_tasks: int = 10,
|
|
986
1002
|
) -> Workforce:
|
|
987
1003
|
r"""Add a worker node to the workforce that uses a single agent.
|
|
988
1004
|
|
|
989
1005
|
Args:
|
|
990
1006
|
description (str): Description of the worker node.
|
|
991
1007
|
worker (ChatAgent): The agent to be added.
|
|
1008
|
+
max_concurrent_tasks (int): Maximum number of tasks this worker can
|
|
1009
|
+
process concurrently. (default: :obj:`10`)
|
|
992
1010
|
|
|
993
1011
|
Returns:
|
|
994
1012
|
Workforce: The workforce node itself.
|
|
995
1013
|
"""
|
|
996
|
-
worker_node = SingleAgentWorker(
|
|
1014
|
+
worker_node = SingleAgentWorker(
|
|
1015
|
+
description, worker, max_concurrent_tasks
|
|
1016
|
+
)
|
|
997
1017
|
self._children.append(worker_node)
|
|
998
1018
|
if self.metrics_logger:
|
|
999
1019
|
self.metrics_logger.log_worker_created(
|
|
@@ -1222,6 +1242,7 @@ class Workforce(BaseNode):
|
|
|
1222
1242
|
new_node = SingleAgentWorker(
|
|
1223
1243
|
description=new_node_conf.description,
|
|
1224
1244
|
worker=new_agent,
|
|
1245
|
+
max_concurrent_tasks=10, # TODO: make this configurable
|
|
1225
1246
|
)
|
|
1226
1247
|
new_node.set_channel(self._channel)
|
|
1227
1248
|
|
|
@@ -1273,14 +1294,17 @@ class Workforce(BaseNode):
|
|
|
1273
1294
|
# Add timeout to prevent indefinite waiting
|
|
1274
1295
|
return await asyncio.wait_for(
|
|
1275
1296
|
self._channel.get_returned_task_by_publisher(self.node_id),
|
|
1276
|
-
timeout=
|
|
1297
|
+
timeout=180.0, # 3 minute timeout
|
|
1277
1298
|
)
|
|
1278
1299
|
except asyncio.TimeoutError:
|
|
1279
1300
|
logger.warning(
|
|
1280
1301
|
f"Timeout waiting for returned task in "
|
|
1281
|
-
f"workforce {self.node_id}"
|
|
1302
|
+
f"workforce {self.node_id}. "
|
|
1303
|
+
f"This may indicate an issue with async tool execution. "
|
|
1304
|
+
f"Current pending tasks: {len(self._pending_tasks)}, "
|
|
1305
|
+
f"In-flight tasks: {self._in_flight_tasks}"
|
|
1282
1306
|
)
|
|
1283
|
-
raise
|
|
1307
|
+
raise
|
|
1284
1308
|
|
|
1285
1309
|
async def _post_ready_tasks(self) -> None:
|
|
1286
1310
|
r"""Checks for unassigned tasks, assigns them, and then posts any
|
|
@@ -1448,25 +1472,32 @@ class Workforce(BaseNode):
|
|
|
1448
1472
|
'processing_time_seconds'
|
|
1449
1473
|
]
|
|
1450
1474
|
|
|
1451
|
-
# Get token usage from task additional info
|
|
1475
|
+
# Get token usage from task additional info (preferred - actual
|
|
1476
|
+
# usage)
|
|
1452
1477
|
if (
|
|
1453
1478
|
task.additional_info is not None
|
|
1454
1479
|
and 'token_usage' in task.additional_info
|
|
1455
1480
|
):
|
|
1456
1481
|
token_usage = task.additional_info['token_usage']
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
(
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1482
|
+
else:
|
|
1483
|
+
# Fallback: Try to get token usage from SingleAgentWorker
|
|
1484
|
+
# memory
|
|
1485
|
+
assignee_node = next(
|
|
1486
|
+
(
|
|
1487
|
+
child
|
|
1488
|
+
for child in self._children
|
|
1489
|
+
if child.node_id == worker_id
|
|
1490
|
+
),
|
|
1491
|
+
None,
|
|
1492
|
+
)
|
|
1493
|
+
if isinstance(assignee_node, SingleAgentWorker):
|
|
1494
|
+
try:
|
|
1495
|
+
_, total_tokens = (
|
|
1496
|
+
assignee_node.worker.memory.get_context()
|
|
1497
|
+
)
|
|
1498
|
+
token_usage = {'total_tokens': total_tokens}
|
|
1499
|
+
except Exception:
|
|
1500
|
+
token_usage = None
|
|
1470
1501
|
|
|
1471
1502
|
# Log the completed task
|
|
1472
1503
|
self.metrics_logger.log_task_completed(
|
|
@@ -1764,17 +1795,20 @@ class Workforce(BaseNode):
|
|
|
1764
1795
|
if isinstance(child, SingleAgentWorker):
|
|
1765
1796
|
cloned_worker = child.worker.clone(with_memory)
|
|
1766
1797
|
new_instance.add_single_agent_worker(
|
|
1767
|
-
child.description,
|
|
1798
|
+
child.description,
|
|
1799
|
+
cloned_worker,
|
|
1800
|
+
child.max_concurrent_tasks,
|
|
1768
1801
|
)
|
|
1769
1802
|
elif isinstance(child, RolePlayingWorker):
|
|
1770
1803
|
new_instance.add_role_playing_worker(
|
|
1771
1804
|
child.description,
|
|
1772
1805
|
child.assistant_role_name,
|
|
1773
1806
|
child.user_role_name,
|
|
1774
|
-
child.chat_turn_limit,
|
|
1775
1807
|
child.assistant_agent_kwargs,
|
|
1776
1808
|
child.user_agent_kwargs,
|
|
1777
1809
|
child.summarize_agent_kwargs,
|
|
1810
|
+
child.chat_turn_limit,
|
|
1811
|
+
child.max_concurrent_tasks,
|
|
1778
1812
|
)
|
|
1779
1813
|
elif isinstance(child, Workforce):
|
|
1780
1814
|
new_instance.add_workforce(child.clone(with_memory))
|
|
@@ -1868,7 +1902,7 @@ class Workforce(BaseNode):
|
|
|
1868
1902
|
)
|
|
1869
1903
|
|
|
1870
1904
|
try:
|
|
1871
|
-
result_task = await workforce_instance.
|
|
1905
|
+
result_task = await workforce_instance.process_task_async(task)
|
|
1872
1906
|
return {
|
|
1873
1907
|
"status": "success",
|
|
1874
1908
|
"task_id": result_task.id,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: camel-ai
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.68
|
|
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
|
|
@@ -109,6 +109,7 @@ Requires-Dist: rank-bm25<0.3,>=0.2.2; extra == 'all'
|
|
|
109
109
|
Requires-Dist: redis<6,>=5.0.6; extra == 'all'
|
|
110
110
|
Requires-Dist: reka-api<4,>=3.0.8; extra == 'all'
|
|
111
111
|
Requires-Dist: requests-oauthlib<2,>=1.3.1; extra == 'all'
|
|
112
|
+
Requires-Dist: rlcard<1.3.0,>=1.0.0; extra == 'all'
|
|
112
113
|
Requires-Dist: rouge<2,>=1.0.1; extra == 'all'
|
|
113
114
|
Requires-Dist: scenedetect>=0.6.5.2; extra == 'all'
|
|
114
115
|
Requires-Dist: scholarly[tor]==1.7.11; extra == 'all'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
camel/__init__.py,sha256=
|
|
1
|
+
camel/__init__.py,sha256=rJXL52mQmrprC-MGOi-1lgeaR3Jr3lcBxI4TSHnu7Gw,899
|
|
2
2
|
camel/generators.py,sha256=JRqj9_m1PF4qT6UtybzTQ-KBT9MJQt18OAAYvQ_fr2o,13844
|
|
3
3
|
camel/human.py,sha256=Xg8x1cS5KK4bQ1SDByiHZnzsRpvRP-KZViNvmu38xo4,5475
|
|
4
4
|
camel/logger.py,sha256=rZVeOVYuQ9RYJ5Tqyv0usqy0g4zaVEq4qSfZ9nd2640,5755
|
|
@@ -121,9 +121,10 @@ camel/embeddings/openai_embedding.py,sha256=zix0O8KdbiVarol4hktKi-0I060epsnj8qAE
|
|
|
121
121
|
camel/embeddings/sentence_transformers_embeddings.py,sha256=q9jR_C5y58R-35WGaluT5q5gOwVRWz3-uo-Ivisbsj4,2732
|
|
122
122
|
camel/embeddings/together_embedding.py,sha256=Nl7uyk3pxyI4-l147LEkc1zj5O-H17RbJtb8pYb2K7Q,4765
|
|
123
123
|
camel/embeddings/vlm_embedding.py,sha256=ydmU1n-3ecqkqsRH5crvLfbRlfNcWnpHBuE6B_5_HuQ,5708
|
|
124
|
-
camel/environments/__init__.py,sha256=
|
|
124
|
+
camel/environments/__init__.py,sha256=VXNFb4jGImUYBVWR_G6D-_fUd4n7yZw_t_BVlZNOUxg,1276
|
|
125
125
|
camel/environments/models.py,sha256=jVcCyU7xObKoWPnkshmPqyyKi3AOiMVVtUZA-tWEYUU,4194
|
|
126
126
|
camel/environments/multi_step.py,sha256=HPIH2W-iWsmtDLeN1gjxo7LoAnMQQZzdmfjhmRoBAxg,8534
|
|
127
|
+
camel/environments/rlcards_env.py,sha256=OclnrJf7HgjuGUgYP6lISBmzTyG_gThHgPKwTUrG9y8,29861
|
|
127
128
|
camel/environments/single_step.py,sha256=zrAXLOBGGKQFnGENasUnmFO_T-rjppGPK2CRBLGu7aQ,23019
|
|
128
129
|
camel/environments/tic_tac_toe.py,sha256=axRDN9yUVH8PzACkD6zenWiQKFDaupGsQ7NmSvbJCIc,19080
|
|
129
130
|
camel/extractors/__init__.py,sha256=lgtDl8zWvN826fJVKqRv05w556YZ-EdrHwdzKphywgA,1097
|
|
@@ -137,13 +138,13 @@ camel/interpreters/internal_python_interpreter.py,sha256=TU4ITQTsR8TXsklN11xWEcC
|
|
|
137
138
|
camel/interpreters/interpreter_error.py,sha256=uEhcmHmmcajt5C9PLeHs21h1fE6cmyt23tCAGie1kTA,880
|
|
138
139
|
camel/interpreters/ipython_interpreter.py,sha256=V-Z_nIwaKmmivv_gD6nwdzmqfBUW4IoN4vZ0IOaUTZU,6582
|
|
139
140
|
camel/interpreters/subprocess_interpreter.py,sha256=DMLJIlTiHk0QA_pH5CXESHdJk-5olKo3aUh0KNECqJI,17759
|
|
140
|
-
camel/interpreters/docker/Dockerfile,sha256=
|
|
141
|
+
camel/interpreters/docker/Dockerfile,sha256=n3oXzcJhELuN2oYzOyEItICga6RqtwRyjPtS-Qes-F4,1625
|
|
141
142
|
camel/loaders/__init__.py,sha256=NfXLr0gQUhfyMeB5KpU9EUvhhFLp3X5KNinDs2WO0Q0,1548
|
|
142
143
|
camel/loaders/apify_reader.py,sha256=oaVjKyNhJhG-hTuIwrpZ2hsB4XTL0M-kUksgSL2R0ck,7952
|
|
143
144
|
camel/loaders/base_io.py,sha256=zsbdBPHgSPFyQrtiUgAsHvy39QHWUObRYNaVvr-pPk0,10190
|
|
144
145
|
camel/loaders/chunkr_reader.py,sha256=LC2zZvq2BiT1j2ukWPCttgo8a3RlOhFDfijYsEEQ_9I,6452
|
|
145
146
|
camel/loaders/crawl4ai_reader.py,sha256=ugfGMpWhfLnKf_XEOyDGI2ekpViDnSATg9eSxHyWX7M,7653
|
|
146
|
-
camel/loaders/firecrawl_reader.py,sha256=
|
|
147
|
+
camel/loaders/firecrawl_reader.py,sha256=whHBhixQkCtJZYhhr7TgU7aMcbnfDR8LXx5If5Ci_kg,5687
|
|
147
148
|
camel/loaders/jina_url_reader.py,sha256=dL9J5JlsFKEhi4gU_vYIxKvvf_RJ4LY9gG6i8P8JpcA,3601
|
|
148
149
|
camel/loaders/markitdown.py,sha256=2tc9Tf2pMJFkFzJwTAge-2kdmgRBBAV3sXHjcbo9AVE,7058
|
|
149
150
|
camel/loaders/mineru_extractor.py,sha256=nKa5n7f3ergv1TURcbXZJP5mQpnSCIFdlWrxWn4hBz8,9070
|
|
@@ -157,9 +158,9 @@ camel/memories/base.py,sha256=3BGuExfwwkbkVpxw1uYms8O37F-PD8ArcmYnFKYUcI4,5652
|
|
|
157
158
|
camel/memories/records.py,sha256=NoiwDuwnKYObhrXPHSRGw8xdxAqyZDDiarOAN6-d17I,4451
|
|
158
159
|
camel/memories/blocks/__init__.py,sha256=ci7_WU11222cNd1Zkv-a0z5E2ux95NMjAYm_cDzF0pE,854
|
|
159
160
|
camel/memories/blocks/chat_history_block.py,sha256=ZAQZ9NqbwZ_w8XebQ3vVPSTA2sfUNooOfI4oNrGxdDo,6679
|
|
160
|
-
camel/memories/blocks/vectordb_block.py,sha256=
|
|
161
|
+
camel/memories/blocks/vectordb_block.py,sha256=r0mRGLV14YUr8aruLdylBjKdSm11oprsiNEWl0EJJhQ,4166
|
|
161
162
|
camel/memories/context_creators/__init__.py,sha256=pqzkBM2ro5JZD7RhWg05TjinphhCq0QTIqBJlIL1sJ0,800
|
|
162
|
-
camel/memories/context_creators/score_based.py,sha256=
|
|
163
|
+
camel/memories/context_creators/score_based.py,sha256=i5nWuXe2WoX496yblq7V8bxzNLS7TOHNKRHeYiWdpy0,14536
|
|
163
164
|
camel/messages/__init__.py,sha256=Px-gTFp2Kcgbeb2sZQ_f4tqjoLHE-QEOiMHIMfPrvTw,1949
|
|
164
165
|
camel/messages/base.py,sha256=4tW240FyYWBoNhvfFClCjCGoiHiAdhHqMqsbg2_nX44,19760
|
|
165
166
|
camel/messages/func_message.py,sha256=2fv35Ruyhhf-wmqtCPiqC-ZujnR-hJH-rEoSgPTKdA8,5959
|
|
@@ -173,7 +174,7 @@ camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py,sha256=-9
|
|
|
173
174
|
camel/models/__init__.py,sha256=leNjmPCEeO8jZAvY8op1XeFPMuSnF349buZRGCE3aBU,3385
|
|
174
175
|
camel/models/_utils.py,sha256=hob1ehnS5xZitMCdYToHVgaTB55JnaP4_DSWnTEfVsg,2045
|
|
175
176
|
camel/models/aiml_model.py,sha256=tQeJcS0RlRwMK-sapFVUSIr-r5cJyCt0UNphzD8O2oI,4070
|
|
176
|
-
camel/models/anthropic_model.py,sha256=
|
|
177
|
+
camel/models/anthropic_model.py,sha256=m5J1-RabKyYf-2ejA7A8r4qbRLpS9oRtHWapzHs0BnM,8878
|
|
177
178
|
camel/models/aws_bedrock_model.py,sha256=bcQBiHVdVuJXyPEkSdymQlGx2zHIVj5d4ouFuF8CSY0,4670
|
|
178
179
|
camel/models/azure_openai_model.py,sha256=FGQ6Cls-a7uzStsgPmBPffgm7TgTEzN3R2SWlAmiBeY,15164
|
|
179
180
|
camel/models/base_audio_model.py,sha256=_VUWh1L3rh8mldNvM5R6jBOKtvmTeBKJyRxAdPJmPlY,3324
|
|
@@ -270,13 +271,13 @@ camel/societies/babyagi_playing.py,sha256=KbTdpHfZ2V8AripVck0bNTOyF-RSaMPCRARz3D
|
|
|
270
271
|
camel/societies/role_playing.py,sha256=1TsQbGYmN91BeQ0DGM5PpSJ9TMbn1F3maJNuv4fQ5zI,31749
|
|
271
272
|
camel/societies/workforce/__init__.py,sha256=bkTI-PE-MSK9AQ2V2gR6cR2WY-R7Jqy_NmXRtAoqo8o,920
|
|
272
273
|
camel/societies/workforce/base.py,sha256=z2DmbTP5LL5-aCAAqglznQqCLfPmnyM5zD3w6jjtsb8,2175
|
|
273
|
-
camel/societies/workforce/prompts.py,sha256=
|
|
274
|
+
camel/societies/workforce/prompts.py,sha256=qXNF4l08LJBMUasLHAjocWQTlxpUrqC7h5_YJSneOTw,11387
|
|
274
275
|
camel/societies/workforce/role_playing_worker.py,sha256=pWPCtkLx-xbc4SWyZBfMwvWr-R5ZpANhN7g6PDuH8Po,7615
|
|
275
|
-
camel/societies/workforce/single_agent_worker.py,sha256=
|
|
276
|
-
camel/societies/workforce/task_channel.py,sha256=
|
|
276
|
+
camel/societies/workforce/single_agent_worker.py,sha256=dnO0pZlqE37pTQyp7RB8krjwdtdSe02ChsmKwhB8HLc,5924
|
|
277
|
+
camel/societies/workforce/task_channel.py,sha256=uqQQI67Tr4awbR4bjZXdx8_4gL6-ON5IjQk_H_ryqT4,7431
|
|
277
278
|
camel/societies/workforce/utils.py,sha256=klqTSjUnIUaFo_AnFMmozNNnwclxx_RicfujDspc0l0,5861
|
|
278
|
-
camel/societies/workforce/worker.py,sha256=
|
|
279
|
-
camel/societies/workforce/workforce.py,sha256=
|
|
279
|
+
camel/societies/workforce/worker.py,sha256=D_q1rx0GPSBnue110E-s25GFrJZRGpYX80R7B6Da7E4,7679
|
|
280
|
+
camel/societies/workforce/workforce.py,sha256=Vb37zL8aPWsyJgQNNZgNK43r6gcvNvc5HFihJqQbTSc,87682
|
|
280
281
|
camel/societies/workforce/workforce_logger.py,sha256=2xGMMYQPphC5WlPbgWWp9SEY2hGpP-GkhgsNC19irns,24237
|
|
281
282
|
camel/storages/__init__.py,sha256=bFpvvAS2QyZoIr-tnwhMWsZRL411kIRq6IMUHcI7KHs,1989
|
|
282
283
|
camel/storages/graph_storages/__init__.py,sha256=G29BNn651C0WTOpjCl4QnVM-4B9tcNh8DdmsCiONH8Y,948
|
|
@@ -423,7 +424,7 @@ camel/verifiers/math_verifier.py,sha256=tA1D4S0sm8nsWISevxSN0hvSVtIUpqmJhzqfbuMo
|
|
|
423
424
|
camel/verifiers/models.py,sha256=GdxYPr7UxNrR1577yW4kyroRcLGfd-H1GXgv8potDWU,2471
|
|
424
425
|
camel/verifiers/physics_verifier.py,sha256=c1grrRddcrVN7szkxhv2QirwY9viIRSITWeWFF5HmLs,30187
|
|
425
426
|
camel/verifiers/python_verifier.py,sha256=ogTz77wODfEcDN4tMVtiSkRQyoiZbHPY2fKybn59lHw,20558
|
|
426
|
-
camel_ai-0.2.
|
|
427
|
-
camel_ai-0.2.
|
|
428
|
-
camel_ai-0.2.
|
|
429
|
-
camel_ai-0.2.
|
|
427
|
+
camel_ai-0.2.68.dist-info/METADATA,sha256=Zdf5BDhWfpTnJN_pp5XkOTnfhS2uuuGEUOointBL-W0,44835
|
|
428
|
+
camel_ai-0.2.68.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
429
|
+
camel_ai-0.2.68.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
|
|
430
|
+
camel_ai-0.2.68.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|