camel-ai 0.2.73a8__py3-none-any.whl → 0.2.73a10__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/societies/workforce/prompts.py +27 -7
- camel/societies/workforce/workforce.py +6 -4
- camel/storages/key_value_storages/mem0_cloud.py +48 -47
- camel/toolkits/file_write_toolkit.py +67 -0
- camel/toolkits/slack_toolkit.py +15 -10
- camel/types/enums.py +6 -0
- {camel_ai-0.2.73a8.dist-info → camel_ai-0.2.73a10.dist-info}/METADATA +1 -1
- {camel_ai-0.2.73a8.dist-info → camel_ai-0.2.73a10.dist-info}/RECORD +11 -11
- {camel_ai-0.2.73a8.dist-info → camel_ai-0.2.73a10.dist-info}/WHEEL +0 -0
- {camel_ai-0.2.73a8.dist-info → camel_ai-0.2.73a10.dist-info}/licenses/LICENSE +0 -0
camel/__init__.py
CHANGED
|
@@ -196,27 +196,32 @@ Now you should summarize the scenario and return the result of the task.
|
|
|
196
196
|
"""
|
|
197
197
|
)
|
|
198
198
|
|
|
199
|
-
TASK_DECOMPOSE_PROMPT = r"""You need to decompose
|
|
199
|
+
TASK_DECOMPOSE_PROMPT = r"""You need to either decompose a complex task or enhance a simple one, following these important principles to maximize efficiency and clarity for the executing agents:
|
|
200
200
|
|
|
201
|
-
|
|
201
|
+
0. **Enhance Simple Tasks, Don't Decompose**: First, evaluate if the task is a single, straightforward action.
|
|
202
|
+
* **If the task is simple, DO NOT decompose it.** Instead, **rewrite and enhance** it by consolidating the main goal with any specific details from the additional information into a single, self-contained instruction. The goal is to produce a high-quality task with a clear, specific deliverable.
|
|
203
|
+
* For example, a vague task like "Generate a report about camel-ai" should be enhanced to "Generate a comprehensive, well-structured report about camel-ai as one HTML file".
|
|
204
|
+
* **Only decompose if a task is truly complex**: A task is complex if it involves multiple distinct steps, requires different worker skills, or can be significantly sped up by running parts in parallel.
|
|
205
|
+
|
|
206
|
+
1. **Self-Contained Subtasks** (if decomposing): This is critical principle. Each subtask's description **must be fully self-sufficient and independently understandable**. The agent executing the subtask has **no knowledge** of the parent task, other subtasks, or the overall workflow.
|
|
202
207
|
* **DO NOT** use relative references like "the first task," "the paper mentioned above," or "the result from the previous step."
|
|
203
208
|
* **DO** write explicit instructions. For example, instead of "Analyze the document," write "Analyze the document titled 'The Future of AI'." The system will automatically provide the necessary inputs (like the document itself) from previous steps.
|
|
204
209
|
|
|
205
|
-
2. **Define Clear Deliverables
|
|
210
|
+
2. **Define Clear Deliverables** (for all tasks and subtasks): Each task or subtask must specify a clear, concrete deliverable. This tells the agent exactly what to produce and provides a clear "definition of done."
|
|
206
211
|
* **DO NOT** use vague verbs like "analyze," "look into," or "research" without defining the output.
|
|
207
212
|
* **DO** specify the format and content of the output. For example, instead of "Analyze the attached report," write "Summarize the key findings of the attached report in a 3-bullet-point list." Instead of "Find contacts," write "Extract all names and email addresses from the document and return them as a JSON list of objects, where each object has a 'name' and 'email' key."
|
|
208
213
|
|
|
209
|
-
3. **Full Workflow Completion & Strategic Grouping
|
|
214
|
+
3. **Full Workflow Completion & Strategic Grouping** (if decomposing):
|
|
210
215
|
* **Preserve the Entire Goal**: Ensure the decomposed subtasks collectively achieve the *entire* original task. Do not drop or ignore final steps like sending a message, submitting a form, or creating a file.
|
|
211
216
|
* **Group Sequential Actions**: If a series of steps must be done in order *and* can be handled by the same worker type (e.g., read, think, reply), group them into a single, comprehensive subtask. This maintains workflow and ensures the final goal is met.
|
|
212
217
|
|
|
213
|
-
4. **Aggressive Parallelization
|
|
218
|
+
4. **Aggressive Parallelization** (if decomposing):
|
|
214
219
|
* **Across Different Worker Specializations**: If distinct phases of the overall task require different types of workers (e.g., research by a 'SearchAgent', then content creation by a 'DocumentAgent'), define these as separate subtasks.
|
|
215
220
|
* **Within a Single Phase (Data/Task Parallelism)**: If a phase involves repetitive operations on multiple items (e.g., processing 10 documents, fetching 5 web pages, analyzing 3 datasets):
|
|
216
221
|
* Decompose this into parallel subtasks, one for each item or a small batch of items.
|
|
217
222
|
* This applies even if the same type of worker handles these parallel subtasks. The goal is to leverage multiple available workers or allow concurrent processing.
|
|
218
223
|
|
|
219
|
-
5. **Subtask Design for Efficiency
|
|
224
|
+
5. **Subtask Design for Efficiency** (if decomposing):
|
|
220
225
|
* **Actionable and Well-Defined**: Each subtask should have a clear, achievable goal.
|
|
221
226
|
* **Balanced Granularity**: Make subtasks large enough to be meaningful but small enough to enable parallelism and quick feedback. Avoid overly large subtasks that hide parallel opportunities.
|
|
222
227
|
* **Consider Dependencies**: While you list tasks sequentially, think about the true dependencies. The workforce manager will handle execution based on these implied dependencies and worker availability.
|
|
@@ -225,6 +230,21 @@ These principles aim to reduce overall completion time by maximizing concurrent
|
|
|
225
230
|
|
|
226
231
|
**EXAMPLE FORMAT ONLY** (DO NOT use this example content for actual task decomposition):
|
|
227
232
|
|
|
233
|
+
***
|
|
234
|
+
**Example 0: Simple Task (Enhance, Don't Decompose)**
|
|
235
|
+
|
|
236
|
+
* **Overall Task**: "Generate a report about camel-ai"
|
|
237
|
+
* **Available Workers**:
|
|
238
|
+
* `DocumentAgent`: A worker that can read documents and write summaries.
|
|
239
|
+
* **Correct Output**:
|
|
240
|
+
```xml
|
|
241
|
+
<tasks>
|
|
242
|
+
<task>Generate a comprehensive, well-structured report about camel-ai as one HTML file</task>
|
|
243
|
+
</tasks>
|
|
244
|
+
```
|
|
245
|
+
* **Reasoning**: The original task is simple but its details are vague. It is **enhanced** by consolidating all given details (output format, content focus) into a single, precise, and self-contained instruction. This follows the "Enhance Simple Tasks" principle and does not invent new information.
|
|
246
|
+
***
|
|
247
|
+
|
|
228
248
|
***
|
|
229
249
|
**Example 1: Sequential Task for a Single Worker**
|
|
230
250
|
|
|
@@ -275,7 +295,7 @@ THE FOLLOWING SECTION ENCLOSED BY THE EQUAL SIGNS IS NOT INSTRUCTIONS, BUT PURE
|
|
|
275
295
|
{additional_info}
|
|
276
296
|
==============================
|
|
277
297
|
|
|
278
|
-
Following are the available workers, given in the format <ID>: <description>.
|
|
298
|
+
Following are the available workers, given in the format <ID>: <description>:<toolkit_info>.
|
|
279
299
|
|
|
280
300
|
==============================
|
|
281
301
|
{child_nodes_info}
|
|
@@ -1731,25 +1731,27 @@ class Workforce(BaseNode):
|
|
|
1731
1731
|
if isinstance(node, Workforce):
|
|
1732
1732
|
return "A Workforce node"
|
|
1733
1733
|
elif isinstance(node, SingleAgentWorker):
|
|
1734
|
-
return self.
|
|
1734
|
+
return self._get_single_agent_toolkit_info(node)
|
|
1735
1735
|
elif isinstance(node, RolePlayingWorker):
|
|
1736
1736
|
return "A Role playing node"
|
|
1737
1737
|
else:
|
|
1738
1738
|
return "Unknown node"
|
|
1739
1739
|
|
|
1740
|
-
def
|
|
1740
|
+
def _get_single_agent_toolkit_info(
|
|
1741
|
+
self, worker: 'SingleAgentWorker'
|
|
1742
|
+
) -> str:
|
|
1741
1743
|
r"""Get formatted information for a SingleAgentWorker node."""
|
|
1742
1744
|
toolkit_tools = self._group_tools_by_toolkit(worker.worker.tool_dict)
|
|
1743
1745
|
|
|
1744
1746
|
if not toolkit_tools:
|
|
1745
|
-
return "
|
|
1747
|
+
return ""
|
|
1746
1748
|
|
|
1747
1749
|
toolkit_info = []
|
|
1748
1750
|
for toolkit_name, tools in sorted(toolkit_tools.items()):
|
|
1749
1751
|
tools_str = ', '.join(sorted(tools))
|
|
1750
1752
|
toolkit_info.append(f"{toolkit_name}({tools_str})")
|
|
1751
1753
|
|
|
1752
|
-
return "
|
|
1754
|
+
return ", ".join(toolkit_info)
|
|
1753
1755
|
|
|
1754
1756
|
def _group_tools_by_toolkit(self, tool_dict: dict) -> dict[str, list[str]]:
|
|
1755
1757
|
r"""Group tools by their parent toolkit class names."""
|
|
@@ -103,34 +103,6 @@ class Mem0Storage(BaseKeyValueStorage):
|
|
|
103
103
|
}
|
|
104
104
|
return {k: v for k, v in options.items() if v is not None}
|
|
105
105
|
|
|
106
|
-
def _prepare_filters(
|
|
107
|
-
self,
|
|
108
|
-
agent_id: Optional[str] = None,
|
|
109
|
-
user_id: Optional[str] = None,
|
|
110
|
-
filters: Optional[Dict[str, Any]] = None,
|
|
111
|
-
) -> Dict[str, Any]:
|
|
112
|
-
r"""Helper method to prepare filters for Mem0 API calls.
|
|
113
|
-
|
|
114
|
-
Args:
|
|
115
|
-
agent_id (Optional[str], optional): Agent ID to filter by
|
|
116
|
-
(default: :obj:`None`).
|
|
117
|
-
user_id (Optional[str], optional): User ID to filter by (default:
|
|
118
|
-
:obj:`None`).
|
|
119
|
-
filters (Optional[Dict[str, Any]], optional): Additional filters
|
|
120
|
-
(default: :obj:`None`).
|
|
121
|
-
|
|
122
|
-
Returns:
|
|
123
|
-
Dict[str, Any]: Prepared filters dictionary for API calls.
|
|
124
|
-
"""
|
|
125
|
-
base_filters: Dict[str, Any] = {"AND": []}
|
|
126
|
-
if filters:
|
|
127
|
-
base_filters["AND"].append(filters)
|
|
128
|
-
if agent_id or self.agent_id:
|
|
129
|
-
base_filters["AND"].append({"agent_id": agent_id or self.agent_id})
|
|
130
|
-
if user_id or self.user_id:
|
|
131
|
-
base_filters["AND"].append({"user_id": user_id or self.user_id})
|
|
132
|
-
return base_filters if base_filters["AND"] else {}
|
|
133
|
-
|
|
134
106
|
def _prepare_messages(
|
|
135
107
|
self,
|
|
136
108
|
records: List[Dict[str, Any]],
|
|
@@ -164,11 +136,11 @@ class Mem0Storage(BaseKeyValueStorage):
|
|
|
164
136
|
agent_id=self.agent_id,
|
|
165
137
|
user_id=self.user_id,
|
|
166
138
|
metadata=self.metadata,
|
|
139
|
+
version="v2",
|
|
167
140
|
)
|
|
168
141
|
self.client.add(messages, **options)
|
|
169
142
|
except Exception as e:
|
|
170
143
|
logger.error(f"Error adding memory: {e}")
|
|
171
|
-
logger.error(f"Error: {e}")
|
|
172
144
|
|
|
173
145
|
def load(self) -> List[Dict[str, Any]]:
|
|
174
146
|
r"""Loads all stored records from the Mem0 storage system.
|
|
@@ -178,47 +150,76 @@ class Mem0Storage(BaseKeyValueStorage):
|
|
|
178
150
|
represents a stored record.
|
|
179
151
|
"""
|
|
180
152
|
try:
|
|
181
|
-
filters
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
153
|
+
# Build filters for get_all using proper Mem0 filter format
|
|
154
|
+
filters = {}
|
|
155
|
+
if self.agent_id:
|
|
156
|
+
filters = {"AND": [{"user_id": self.agent_id}]}
|
|
157
|
+
if self.user_id:
|
|
158
|
+
filters = {"AND": [{"user_id": self.user_id}]}
|
|
159
|
+
|
|
160
|
+
results = self.client.get_all(version="v2", filters=filters)
|
|
186
161
|
|
|
187
162
|
# Transform results into MemoryRecord objects
|
|
188
163
|
transformed_results = []
|
|
189
164
|
for result in results:
|
|
165
|
+
# Ensure metadata is a dictionary, not None
|
|
166
|
+
metadata = result.get("metadata") or {}
|
|
167
|
+
|
|
190
168
|
memory_record = MemoryRecord(
|
|
191
169
|
uuid=UUID(result["id"]),
|
|
192
170
|
message=BaseMessage(
|
|
193
|
-
role_name="
|
|
171
|
+
role_name="memory",
|
|
194
172
|
role_type=RoleType.USER,
|
|
195
|
-
meta_dict=
|
|
173
|
+
meta_dict=metadata,
|
|
196
174
|
content=result["memory"],
|
|
197
175
|
),
|
|
198
176
|
role_at_backend=OpenAIBackendRole.USER,
|
|
199
|
-
extra_info=
|
|
177
|
+
extra_info=metadata,
|
|
200
178
|
timestamp=datetime.fromisoformat(
|
|
201
|
-
result["created_at"]
|
|
179
|
+
result["created_at"].replace('Z', '+00:00')
|
|
202
180
|
).timestamp(),
|
|
203
|
-
agent_id=result.get("agent_id", ""),
|
|
181
|
+
agent_id=result.get("agent_id", self.agent_id or ""),
|
|
204
182
|
)
|
|
205
183
|
transformed_results.append(memory_record.to_dict())
|
|
206
184
|
|
|
207
185
|
return transformed_results
|
|
208
186
|
except Exception as e:
|
|
209
|
-
logger.error(f"Error
|
|
187
|
+
logger.error(f"Error loading memories: {e}")
|
|
210
188
|
return []
|
|
211
189
|
|
|
212
190
|
def clear(
|
|
213
191
|
self,
|
|
192
|
+
agent_id: Optional[str] = None,
|
|
193
|
+
user_id: Optional[str] = None,
|
|
214
194
|
) -> None:
|
|
215
|
-
r"""Removes all records from the Mem0 storage system.
|
|
195
|
+
r"""Removes all records from the Mem0 storage system.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
agent_id (Optional[str]): Specific agent ID to clear memories for.
|
|
199
|
+
user_id (Optional[str]): Specific user ID to clear memories for.
|
|
200
|
+
"""
|
|
216
201
|
try:
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
202
|
+
# Use provided IDs or fall back to instance defaults
|
|
203
|
+
target_user_id = user_id or self.user_id
|
|
204
|
+
target_agent_id = agent_id or self.agent_id
|
|
205
|
+
|
|
206
|
+
# Build kwargs for delete_users method
|
|
207
|
+
kwargs = {}
|
|
208
|
+
if target_user_id:
|
|
209
|
+
kwargs['user_id'] = target_user_id
|
|
210
|
+
if target_agent_id:
|
|
211
|
+
kwargs['agent_id'] = target_agent_id
|
|
212
|
+
|
|
213
|
+
if kwargs:
|
|
214
|
+
# Use delete_users (plural) - this is the correct method name
|
|
215
|
+
self.client.delete_users(**kwargs)
|
|
216
|
+
logger.info(
|
|
217
|
+
f"Successfully cleared memories with filters: {kwargs}"
|
|
218
|
+
)
|
|
219
|
+
else:
|
|
220
|
+
logger.warning(
|
|
221
|
+
"No user_id or agent_id available for clearing memories"
|
|
222
|
+
)
|
|
223
|
+
|
|
222
224
|
except Exception as e:
|
|
223
225
|
logger.error(f"Error deleting memories: {e}")
|
|
224
|
-
logger.error(f"Error: {e}")
|
|
@@ -840,6 +840,69 @@ class FileWriteToolkit(BaseToolkit):
|
|
|
840
840
|
|
|
841
841
|
return text
|
|
842
842
|
|
|
843
|
+
def _ensure_html_utf8_meta(self, content: str) -> str:
|
|
844
|
+
r"""Ensure HTML content has UTF-8 meta tag.
|
|
845
|
+
|
|
846
|
+
Args:
|
|
847
|
+
content (str): The HTML content.
|
|
848
|
+
|
|
849
|
+
Returns:
|
|
850
|
+
str: HTML content with UTF-8 meta tag.
|
|
851
|
+
"""
|
|
852
|
+
# Check if content already has a charset meta tag
|
|
853
|
+
has_charset = re.search(
|
|
854
|
+
r'<meta[^>]*charset[^>]*>', content, re.IGNORECASE
|
|
855
|
+
)
|
|
856
|
+
|
|
857
|
+
# UTF-8 meta tag
|
|
858
|
+
utf8_meta = '<meta charset="utf-8">'
|
|
859
|
+
|
|
860
|
+
if has_charset:
|
|
861
|
+
# Replace existing charset with UTF-8
|
|
862
|
+
content = re.sub(
|
|
863
|
+
r'<meta[^>]*charset[^>]*>',
|
|
864
|
+
utf8_meta,
|
|
865
|
+
content,
|
|
866
|
+
flags=re.IGNORECASE,
|
|
867
|
+
)
|
|
868
|
+
else:
|
|
869
|
+
# Add UTF-8 meta tag
|
|
870
|
+
# Try to find <head> tag
|
|
871
|
+
head_match = re.search(r'<head[^>]*>', content, re.IGNORECASE)
|
|
872
|
+
if head_match:
|
|
873
|
+
# Insert after <head> tag
|
|
874
|
+
insert_pos = head_match.end()
|
|
875
|
+
content = (
|
|
876
|
+
content[:insert_pos]
|
|
877
|
+
+ '\n '
|
|
878
|
+
+ utf8_meta
|
|
879
|
+
+ content[insert_pos:]
|
|
880
|
+
)
|
|
881
|
+
else:
|
|
882
|
+
# No <head> tag found, check if there's <html> tag
|
|
883
|
+
html_match = re.search(r'<html[^>]*>', content, re.IGNORECASE)
|
|
884
|
+
if html_match:
|
|
885
|
+
# Insert <head> with meta tag after <html>
|
|
886
|
+
insert_pos = html_match.end()
|
|
887
|
+
content = (
|
|
888
|
+
content[:insert_pos]
|
|
889
|
+
+ '\n<head>\n '
|
|
890
|
+
+ utf8_meta
|
|
891
|
+
+ '\n</head>'
|
|
892
|
+
+ content[insert_pos:]
|
|
893
|
+
)
|
|
894
|
+
else:
|
|
895
|
+
# No proper HTML structure, wrap content
|
|
896
|
+
content = (
|
|
897
|
+
'<!DOCTYPE html>\n<html>\n<head>\n '
|
|
898
|
+
+ utf8_meta
|
|
899
|
+
+ '\n</head>\n<body>\n'
|
|
900
|
+
+ content
|
|
901
|
+
+ '\n</body>\n</html>'
|
|
902
|
+
)
|
|
903
|
+
|
|
904
|
+
return content
|
|
905
|
+
|
|
843
906
|
def _write_csv_file(
|
|
844
907
|
self,
|
|
845
908
|
file_path: Path,
|
|
@@ -901,6 +964,10 @@ class FileWriteToolkit(BaseToolkit):
|
|
|
901
964
|
content (str): The content to write.
|
|
902
965
|
encoding (str): Character encoding to use. (default: :obj:`utf-8`)
|
|
903
966
|
"""
|
|
967
|
+
# For HTML files, ensure UTF-8 meta tag is present
|
|
968
|
+
if file_path.suffix.lower() in ['.html', '.htm']:
|
|
969
|
+
content = self._ensure_html_utf8_meta(content)
|
|
970
|
+
|
|
904
971
|
with file_path.open("w", encoding=encoding) as f:
|
|
905
972
|
f.write(content)
|
|
906
973
|
|
camel/toolkits/slack_toolkit.py
CHANGED
|
@@ -128,8 +128,9 @@ class SlackToolkit(BaseToolkit):
|
|
|
128
128
|
return f"Error creating conversation: {e.response['error']}"
|
|
129
129
|
|
|
130
130
|
def join_slack_channel(self, channel_id: str) -> str:
|
|
131
|
-
r"""Joins an existing Slack channel.
|
|
132
|
-
|
|
131
|
+
r"""Joins an existing Slack channel. When use this function you must
|
|
132
|
+
call `get_slack_channel_information` function first to get the
|
|
133
|
+
`channel id`.
|
|
133
134
|
|
|
134
135
|
Args:
|
|
135
136
|
channel_id (str): The ID of the Slack channel to join.
|
|
@@ -147,8 +148,9 @@ class SlackToolkit(BaseToolkit):
|
|
|
147
148
|
return f"Error joining channel: {e.response['error']}"
|
|
148
149
|
|
|
149
150
|
def leave_slack_channel(self, channel_id: str) -> str:
|
|
150
|
-
r"""Leaves an existing Slack channel.
|
|
151
|
-
|
|
151
|
+
r"""Leaves an existing Slack channel. When use this function you must
|
|
152
|
+
call `get_slack_channel_information` function first to get the
|
|
153
|
+
`channel id`.
|
|
152
154
|
|
|
153
155
|
Args:
|
|
154
156
|
channel_id (str): The ID of the Slack channel to leave.
|
|
@@ -199,9 +201,9 @@ class SlackToolkit(BaseToolkit):
|
|
|
199
201
|
return f"Error retrieving channel list: {e.response['error']}"
|
|
200
202
|
|
|
201
203
|
def get_slack_channel_message(self, channel_id: str) -> str:
|
|
202
|
-
r"""Retrieve messages from a Slack channel.
|
|
203
|
-
|
|
204
|
-
|
|
204
|
+
r"""Retrieve messages from a Slack channel. When use this function you
|
|
205
|
+
must call `get_slack_channel_information` function first to get the
|
|
206
|
+
`channel id`.
|
|
205
207
|
|
|
206
208
|
Args:
|
|
207
209
|
channel_id (str): The ID of the Slack channel to retrieve messages
|
|
@@ -233,8 +235,9 @@ class SlackToolkit(BaseToolkit):
|
|
|
233
235
|
file_path: Optional[str] = None,
|
|
234
236
|
user: Optional[str] = None,
|
|
235
237
|
) -> str:
|
|
236
|
-
r"""Send a message to a Slack channel.
|
|
237
|
-
|
|
238
|
+
r"""Send a message to a Slack channel. When use this function you must
|
|
239
|
+
call `get_slack_channel_information` function first to get the
|
|
240
|
+
`channel id`.
|
|
238
241
|
|
|
239
242
|
Args:
|
|
240
243
|
message (str): The message to send.
|
|
@@ -279,7 +282,9 @@ class SlackToolkit(BaseToolkit):
|
|
|
279
282
|
time_stamp: str,
|
|
280
283
|
channel_id: str,
|
|
281
284
|
) -> str:
|
|
282
|
-
r"""Delete a message from a Slack channel.
|
|
285
|
+
r"""Delete a message from a Slack channel. When use this function you
|
|
286
|
+
must call `get_slack_channel_information` function first to get the
|
|
287
|
+
`channel id`.
|
|
283
288
|
|
|
284
289
|
Args:
|
|
285
290
|
time_stamp (str): The 'ts' value of the message to be deleted.
|
camel/types/enums.py
CHANGED
|
@@ -245,6 +245,7 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
245
245
|
QWEN_QWQ_32B = "qwq-32b-preview"
|
|
246
246
|
QWEN_QVQ_72B = "qvq-72b-preview"
|
|
247
247
|
QWEN_QWQ_PLUS = "qwq-plus"
|
|
248
|
+
QWEN_3_CODER_PLUS = "qwen3-coder-plus"
|
|
248
249
|
|
|
249
250
|
# Yi models (01-ai)
|
|
250
251
|
YI_LIGHTNING = "yi-lightning"
|
|
@@ -763,6 +764,7 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
763
764
|
ModelType.QWEN_PLUS_2025_04_28,
|
|
764
765
|
ModelType.QWEN_TURBO_LATEST,
|
|
765
766
|
ModelType.QWEN_TURBO_2025_04_28,
|
|
767
|
+
ModelType.QWEN_3_CODER_PLUS,
|
|
766
768
|
}
|
|
767
769
|
|
|
768
770
|
@property
|
|
@@ -1306,6 +1308,10 @@ class ModelType(UnifiedModelType, Enum):
|
|
|
1306
1308
|
ModelType.NOVITA_LLAMA_4_MAVERICK_17B,
|
|
1307
1309
|
}:
|
|
1308
1310
|
return 1_048_576
|
|
1311
|
+
elif self in {
|
|
1312
|
+
ModelType.QWEN_3_CODER_PLUS,
|
|
1313
|
+
}:
|
|
1314
|
+
return 1_000_000
|
|
1309
1315
|
elif self in {
|
|
1310
1316
|
ModelType.QWEN_LONG,
|
|
1311
1317
|
ModelType.TOGETHER_LLAMA_4_SCOUT,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
camel/__init__.py,sha256=
|
|
1
|
+
camel/__init__.py,sha256=spTi5vdPmw964Nr2GfKpHobsPq9ws2zFpUV8oK9cMYE,902
|
|
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=WgEwael_eT6D-lVAKHpKIpwXSTjvLbny5jbV1Ab8lnA,5760
|
|
@@ -273,14 +273,14 @@ camel/societies/babyagi_playing.py,sha256=KbTdpHfZ2V8AripVck0bNTOyF-RSaMPCRARz3D
|
|
|
273
273
|
camel/societies/role_playing.py,sha256=0XScr3WfxX1QOC71RhBLmrcS5y2c7DMQB_mAFOHU34M,31421
|
|
274
274
|
camel/societies/workforce/__init__.py,sha256=bkTI-PE-MSK9AQ2V2gR6cR2WY-R7Jqy_NmXRtAoqo8o,920
|
|
275
275
|
camel/societies/workforce/base.py,sha256=z2DmbTP5LL5-aCAAqglznQqCLfPmnyM5zD3w6jjtsb8,2175
|
|
276
|
-
camel/societies/workforce/prompts.py,sha256=
|
|
276
|
+
camel/societies/workforce/prompts.py,sha256=FYsBd5_vNUDIP8C49Pm5CWzR1rNfBgekDel9lZ0RR1U,20037
|
|
277
277
|
camel/societies/workforce/role_playing_worker.py,sha256=Zm89lZTlV0T3o9C-DJ0HAV68Iq2Kdg8QqJRWs1TV9_A,10320
|
|
278
278
|
camel/societies/workforce/single_agent_worker.py,sha256=c7gXxeTGofYWfnQdv3id1c4G2B2jqAakYN-BaSw3BwY,19396
|
|
279
279
|
camel/societies/workforce/structured_output_handler.py,sha256=xr8szFN86hg3jQ825aEkJTjkSFQnTlbinVg4j1vZJVI,17870
|
|
280
280
|
camel/societies/workforce/task_channel.py,sha256=GWHaGQBpjTzdKbWoBYAQzzAiLKRKRXa6beqtc4cg-Is,7611
|
|
281
281
|
camel/societies/workforce/utils.py,sha256=THgNHSeZsNVnjTzQTur3qCJhi72MrDS8X2gPET174cI,8434
|
|
282
282
|
camel/societies/workforce/worker.py,sha256=MtUqYkTC9V-PIIRwSkKiB9w_YSu92iOpoha2rktEiQ0,6248
|
|
283
|
-
camel/societies/workforce/workforce.py,sha256=
|
|
283
|
+
camel/societies/workforce/workforce.py,sha256=lgtYe5I20B1JQCTwmYcOCmPMA2RiwZAPpDs1dHY1x7Q,140647
|
|
284
284
|
camel/societies/workforce/workforce_logger.py,sha256=0YT__ys48Bgn0IICKIZBmSWhON-eA1KShebjCdn5ppE,24525
|
|
285
285
|
camel/storages/__init__.py,sha256=RwpEyvxpMbJzVDZJJygeBg4AzyYMkTjjkfB53hTuqGo,2141
|
|
286
286
|
camel/storages/graph_storages/__init__.py,sha256=G29BNn651C0WTOpjCl4QnVM-4B9tcNh8DdmsCiONH8Y,948
|
|
@@ -292,7 +292,7 @@ camel/storages/key_value_storages/__init__.py,sha256=qBNx5QwKGa2wydavFYpM5MLVPkq
|
|
|
292
292
|
camel/storages/key_value_storages/base.py,sha256=FSfxeLuG7SPvn-Mg-OQxtRKPtQBnRkB7lYeDaFOefpk,2177
|
|
293
293
|
camel/storages/key_value_storages/in_memory.py,sha256=k04Nx53lYxD5MoqDtBEgZrQYkAQ-zIuU6tqnoNqiHws,1949
|
|
294
294
|
camel/storages/key_value_storages/json.py,sha256=Jn7-fh2MjSMaVSCCMF_Hu-mAIj6JJ86iwKaSgI-5Uf0,3483
|
|
295
|
-
camel/storages/key_value_storages/mem0_cloud.py,sha256=
|
|
295
|
+
camel/storages/key_value_storages/mem0_cloud.py,sha256=jyOUTtUR9dR0wLFcdvq-enU1aLKTWgw_j18AMPmJ1pY,8295
|
|
296
296
|
camel/storages/key_value_storages/redis.py,sha256=Suo7wxxBXFc0fkJ8qSX2xQ26Ik_YhoKWfTOVQKUl5vA,5720
|
|
297
297
|
camel/storages/object_storages/__init__.py,sha256=26yATVTD9yVH-p9KueD30JakstTGiDh89GcFtUNNe4U,915
|
|
298
298
|
camel/storages/object_storages/amazon_s3.py,sha256=9Yvyyyb1LGHxr8REEza7oGopbVtLEfOyXWJc18ZwgqA,7418
|
|
@@ -333,7 +333,7 @@ camel/toolkits/dappier_toolkit.py,sha256=OEHOYXX_oXhgbVtWYAy13nO9uXf9i5qEXSwY4Pe
|
|
|
333
333
|
camel/toolkits/data_commons_toolkit.py,sha256=aHZUSL1ACpnYGaf1rE2csVKTmXTmN8lMGRUBYhZ_YEk,14168
|
|
334
334
|
camel/toolkits/edgeone_pages_mcp_toolkit.py,sha256=1TFpAGHUNLggFQeN1OEw7P5laijwnlrCkfxBtgxFuUY,2331
|
|
335
335
|
camel/toolkits/excel_toolkit.py,sha256=tQaonygk0yDTPZHWWQKG5osTN-R_EawR0bJIKLsLg08,35768
|
|
336
|
-
camel/toolkits/file_write_toolkit.py,sha256=
|
|
336
|
+
camel/toolkits/file_write_toolkit.py,sha256=BIN4c_Tw_24iBu7vDFxVV401UTNqKZkP5p_eOOL_Hmk,39389
|
|
337
337
|
camel/toolkits/function_tool.py,sha256=3_hE-Khqf556CeebchsPpjIDCynC6vKmUJLdh1EO_js,34295
|
|
338
338
|
camel/toolkits/github_toolkit.py,sha256=iUyRrjWGAW_iljZVfNyfkm1Vi55wJxK6PsDAQs9pOag,13099
|
|
339
339
|
camel/toolkits/google_calendar_toolkit.py,sha256=E-sdgdbtNBs_CXbhht9t1dsVr4DsTr5NguHkx4fvSmc,15410
|
|
@@ -374,7 +374,7 @@ camel/toolkits/screenshot_toolkit.py,sha256=IwfvfLSfqrEywvPlDbtYJe1qcbrO5uC3Mxxv
|
|
|
374
374
|
camel/toolkits/search_toolkit.py,sha256=2zKclYTQi5ThjPLiwKV7qX8GxuvgtgSLBHipTz-ZgWY,48360
|
|
375
375
|
camel/toolkits/searxng_toolkit.py,sha256=a2GtE4FGSrmaIVvX6Yide-abBYD1wsHqitnDlx9fdVg,7664
|
|
376
376
|
camel/toolkits/semantic_scholar_toolkit.py,sha256=Rh7eA_YPxV5pvPIzhjjvpr3vtlaCniJicrqzkPWW9_I,11634
|
|
377
|
-
camel/toolkits/slack_toolkit.py,sha256=
|
|
377
|
+
camel/toolkits/slack_toolkit.py,sha256=iBVkDIpfsR5QwaNCqA4O4UkCwpdLhJjYCA8Gka7U9e8,12050
|
|
378
378
|
camel/toolkits/stripe_toolkit.py,sha256=07swo5znGTnorafC1uYLKB4NRcJIOPOx19J7tkpLYWk,10102
|
|
379
379
|
camel/toolkits/sympy_toolkit.py,sha256=BAQnI8EFJydNUpKQWXBdleQ1Cm-srDBhFlqp9V9pbPQ,33757
|
|
380
380
|
camel/toolkits/task_planning_toolkit.py,sha256=Ttw9fHae4omGC1SA-6uaeXVHJ1YkwiVloz_hO-fm1gw,4855
|
|
@@ -438,7 +438,7 @@ camel/toolkits/open_api_specs/web_scraper/openapi.yaml,sha256=u_WalQ01e8W1D27VnZ
|
|
|
438
438
|
camel/toolkits/open_api_specs/web_scraper/paths/__init__.py,sha256=OKCZrQCDwaWtXIN_2rA9FSqEvgpQRieRoHh7Ek6N16A,702
|
|
439
439
|
camel/toolkits/open_api_specs/web_scraper/paths/scraper.py,sha256=aWy1_ppV4NVVEZfnbN3tu9XA9yAPAC9bRStJ5JuXMRU,1117
|
|
440
440
|
camel/types/__init__.py,sha256=pFTg3CWGSCfwFdoxPDTf4dKV8DdJS1x-bBPuEOmtdf0,2549
|
|
441
|
-
camel/types/enums.py,sha256=
|
|
441
|
+
camel/types/enums.py,sha256=JolxBxgOfAGXAD-Z6DzMLiQ51I8H-6GrAO__1dEB_MQ,63239
|
|
442
442
|
camel/types/mcp_registries.py,sha256=dl4LgYtSaUhsqAKpz28k_SA9La11qxqBvDLaEuyzrFE,4971
|
|
443
443
|
camel/types/openai_types.py,sha256=8ZFzLe-zGmKNPfuVZFzxlxAX98lGf18gtrPhOgMmzus,2104
|
|
444
444
|
camel/types/unified_model_type.py,sha256=U3NUZux7QuMIxPW2H0qDp9BOyDJFHAx6jUmDNw5_9KM,5912
|
|
@@ -467,7 +467,7 @@ camel/verifiers/math_verifier.py,sha256=tA1D4S0sm8nsWISevxSN0hvSVtIUpqmJhzqfbuMo
|
|
|
467
467
|
camel/verifiers/models.py,sha256=GdxYPr7UxNrR1577yW4kyroRcLGfd-H1GXgv8potDWU,2471
|
|
468
468
|
camel/verifiers/physics_verifier.py,sha256=c1grrRddcrVN7szkxhv2QirwY9viIRSITWeWFF5HmLs,30187
|
|
469
469
|
camel/verifiers/python_verifier.py,sha256=ogTz77wODfEcDN4tMVtiSkRQyoiZbHPY2fKybn59lHw,20558
|
|
470
|
-
camel_ai-0.2.
|
|
471
|
-
camel_ai-0.2.
|
|
472
|
-
camel_ai-0.2.
|
|
473
|
-
camel_ai-0.2.
|
|
470
|
+
camel_ai-0.2.73a10.dist-info/METADATA,sha256=0AREHHMYBWL6FNS5X0gdZpqqu_HCgsB8uvXyYpibkmg,50435
|
|
471
|
+
camel_ai-0.2.73a10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
472
|
+
camel_ai-0.2.73a10.dist-info/licenses/LICENSE,sha256=id0nB2my5kG0xXeimIu5zZrbHLS6EQvxvkKkzIHaT2k,11343
|
|
473
|
+
camel_ai-0.2.73a10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|