camel-ai 0.2.67__py3-none-any.whl → 0.2.80a2__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.
Files changed (224) hide show
  1. camel/__init__.py +1 -1
  2. camel/agents/_types.py +6 -2
  3. camel/agents/_utils.py +38 -0
  4. camel/agents/chat_agent.py +4014 -410
  5. camel/agents/mcp_agent.py +30 -27
  6. camel/agents/repo_agent.py +2 -1
  7. camel/benchmarks/browsecomp.py +6 -6
  8. camel/configs/__init__.py +15 -0
  9. camel/configs/aihubmix_config.py +88 -0
  10. camel/configs/amd_config.py +70 -0
  11. camel/configs/cometapi_config.py +104 -0
  12. camel/configs/minimax_config.py +93 -0
  13. camel/configs/nebius_config.py +103 -0
  14. camel/configs/vllm_config.py +2 -0
  15. camel/data_collectors/alpaca_collector.py +15 -6
  16. camel/datagen/self_improving_cot.py +1 -1
  17. camel/datasets/base_generator.py +39 -10
  18. camel/environments/__init__.py +12 -0
  19. camel/environments/rlcards_env.py +860 -0
  20. camel/environments/single_step.py +28 -3
  21. camel/environments/tic_tac_toe.py +1 -1
  22. camel/interpreters/__init__.py +2 -0
  23. camel/interpreters/docker/Dockerfile +4 -16
  24. camel/interpreters/docker_interpreter.py +3 -2
  25. camel/interpreters/e2b_interpreter.py +34 -1
  26. camel/interpreters/internal_python_interpreter.py +51 -2
  27. camel/interpreters/microsandbox_interpreter.py +395 -0
  28. camel/loaders/__init__.py +11 -2
  29. camel/loaders/base_loader.py +85 -0
  30. camel/loaders/chunkr_reader.py +9 -0
  31. camel/loaders/firecrawl_reader.py +4 -4
  32. camel/logger.py +1 -1
  33. camel/memories/agent_memories.py +84 -1
  34. camel/memories/base.py +34 -0
  35. camel/memories/blocks/chat_history_block.py +122 -4
  36. camel/memories/blocks/vectordb_block.py +8 -1
  37. camel/memories/context_creators/score_based.py +29 -237
  38. camel/memories/records.py +88 -8
  39. camel/messages/base.py +166 -40
  40. camel/messages/func_message.py +32 -5
  41. camel/models/__init__.py +10 -0
  42. camel/models/aihubmix_model.py +83 -0
  43. camel/models/aiml_model.py +1 -16
  44. camel/models/amd_model.py +101 -0
  45. camel/models/anthropic_model.py +117 -18
  46. camel/models/aws_bedrock_model.py +2 -33
  47. camel/models/azure_openai_model.py +205 -91
  48. camel/models/base_audio_model.py +3 -1
  49. camel/models/base_model.py +189 -24
  50. camel/models/cohere_model.py +5 -17
  51. camel/models/cometapi_model.py +83 -0
  52. camel/models/crynux_model.py +1 -16
  53. camel/models/deepseek_model.py +6 -16
  54. camel/models/fish_audio_model.py +6 -0
  55. camel/models/gemini_model.py +71 -20
  56. camel/models/groq_model.py +1 -17
  57. camel/models/internlm_model.py +1 -16
  58. camel/models/litellm_model.py +49 -32
  59. camel/models/lmstudio_model.py +1 -17
  60. camel/models/minimax_model.py +83 -0
  61. camel/models/mistral_model.py +1 -16
  62. camel/models/model_factory.py +27 -1
  63. camel/models/model_manager.py +24 -6
  64. camel/models/modelscope_model.py +1 -16
  65. camel/models/moonshot_model.py +185 -19
  66. camel/models/nebius_model.py +83 -0
  67. camel/models/nemotron_model.py +0 -5
  68. camel/models/netmind_model.py +1 -16
  69. camel/models/novita_model.py +1 -16
  70. camel/models/nvidia_model.py +1 -16
  71. camel/models/ollama_model.py +4 -19
  72. camel/models/openai_compatible_model.py +171 -46
  73. camel/models/openai_model.py +205 -77
  74. camel/models/openrouter_model.py +1 -17
  75. camel/models/ppio_model.py +1 -16
  76. camel/models/qianfan_model.py +1 -16
  77. camel/models/qwen_model.py +1 -16
  78. camel/models/reka_model.py +1 -16
  79. camel/models/samba_model.py +34 -47
  80. camel/models/sglang_model.py +64 -31
  81. camel/models/siliconflow_model.py +1 -16
  82. camel/models/stub_model.py +0 -4
  83. camel/models/togetherai_model.py +1 -16
  84. camel/models/vllm_model.py +1 -16
  85. camel/models/volcano_model.py +0 -17
  86. camel/models/watsonx_model.py +1 -16
  87. camel/models/yi_model.py +1 -16
  88. camel/models/zhipuai_model.py +60 -16
  89. camel/parsers/__init__.py +18 -0
  90. camel/parsers/mcp_tool_call_parser.py +176 -0
  91. camel/retrievers/auto_retriever.py +1 -0
  92. camel/runtimes/configs.py +11 -11
  93. camel/runtimes/daytona_runtime.py +15 -16
  94. camel/runtimes/docker_runtime.py +6 -6
  95. camel/runtimes/remote_http_runtime.py +5 -5
  96. camel/services/agent_openapi_server.py +380 -0
  97. camel/societies/__init__.py +2 -0
  98. camel/societies/role_playing.py +26 -28
  99. camel/societies/workforce/__init__.py +2 -0
  100. camel/societies/workforce/events.py +122 -0
  101. camel/societies/workforce/prompts.py +249 -38
  102. camel/societies/workforce/role_playing_worker.py +82 -20
  103. camel/societies/workforce/single_agent_worker.py +634 -34
  104. camel/societies/workforce/structured_output_handler.py +512 -0
  105. camel/societies/workforce/task_channel.py +169 -23
  106. camel/societies/workforce/utils.py +176 -9
  107. camel/societies/workforce/worker.py +77 -23
  108. camel/societies/workforce/workflow_memory_manager.py +772 -0
  109. camel/societies/workforce/workforce.py +3168 -478
  110. camel/societies/workforce/workforce_callback.py +74 -0
  111. camel/societies/workforce/workforce_logger.py +203 -175
  112. camel/societies/workforce/workforce_metrics.py +33 -0
  113. camel/storages/__init__.py +4 -0
  114. camel/storages/key_value_storages/json.py +15 -2
  115. camel/storages/key_value_storages/mem0_cloud.py +48 -47
  116. camel/storages/object_storages/google_cloud.py +1 -1
  117. camel/storages/vectordb_storages/__init__.py +6 -0
  118. camel/storages/vectordb_storages/chroma.py +731 -0
  119. camel/storages/vectordb_storages/oceanbase.py +13 -13
  120. camel/storages/vectordb_storages/pgvector.py +349 -0
  121. camel/storages/vectordb_storages/qdrant.py +3 -3
  122. camel/storages/vectordb_storages/surreal.py +365 -0
  123. camel/storages/vectordb_storages/tidb.py +8 -6
  124. camel/tasks/task.py +244 -27
  125. camel/toolkits/__init__.py +46 -8
  126. camel/toolkits/aci_toolkit.py +64 -19
  127. camel/toolkits/arxiv_toolkit.py +6 -6
  128. camel/toolkits/base.py +63 -5
  129. camel/toolkits/code_execution.py +28 -1
  130. camel/toolkits/context_summarizer_toolkit.py +684 -0
  131. camel/toolkits/craw4ai_toolkit.py +93 -0
  132. camel/toolkits/dappier_toolkit.py +10 -6
  133. camel/toolkits/dingtalk.py +1135 -0
  134. camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
  135. camel/toolkits/excel_toolkit.py +901 -67
  136. camel/toolkits/file_toolkit.py +1402 -0
  137. camel/toolkits/function_tool.py +30 -6
  138. camel/toolkits/github_toolkit.py +107 -20
  139. camel/toolkits/gmail_toolkit.py +1839 -0
  140. camel/toolkits/google_calendar_toolkit.py +38 -4
  141. camel/toolkits/google_drive_mcp_toolkit.py +54 -0
  142. camel/toolkits/human_toolkit.py +34 -10
  143. camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
  144. camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
  145. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
  146. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1973 -0
  147. camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
  148. camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +3749 -0
  149. camel/toolkits/hybrid_browser_toolkit/ts/package.json +32 -0
  150. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
  151. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1815 -0
  152. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
  153. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +590 -0
  154. camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
  155. camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
  156. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
  157. camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
  158. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +130 -0
  159. camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +26 -0
  160. camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +319 -0
  161. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1032 -0
  162. camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
  163. camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
  164. camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
  165. camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
  166. camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
  167. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
  168. camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
  169. camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
  170. camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
  171. camel/toolkits/image_generation_toolkit.py +390 -0
  172. camel/toolkits/jina_reranker_toolkit.py +3 -4
  173. camel/toolkits/klavis_toolkit.py +5 -1
  174. camel/toolkits/markitdown_toolkit.py +104 -0
  175. camel/toolkits/math_toolkit.py +64 -10
  176. camel/toolkits/mcp_toolkit.py +370 -45
  177. camel/toolkits/memory_toolkit.py +5 -1
  178. camel/toolkits/message_agent_toolkit.py +608 -0
  179. camel/toolkits/message_integration.py +724 -0
  180. camel/toolkits/minimax_mcp_toolkit.py +195 -0
  181. camel/toolkits/note_taking_toolkit.py +277 -0
  182. camel/toolkits/notion_mcp_toolkit.py +224 -0
  183. camel/toolkits/openbb_toolkit.py +5 -1
  184. camel/toolkits/origene_mcp_toolkit.py +56 -0
  185. camel/toolkits/playwright_mcp_toolkit.py +12 -31
  186. camel/toolkits/pptx_toolkit.py +25 -12
  187. camel/toolkits/resend_toolkit.py +168 -0
  188. camel/toolkits/screenshot_toolkit.py +213 -0
  189. camel/toolkits/search_toolkit.py +437 -142
  190. camel/toolkits/slack_toolkit.py +104 -50
  191. camel/toolkits/sympy_toolkit.py +1 -1
  192. camel/toolkits/task_planning_toolkit.py +3 -3
  193. camel/toolkits/terminal_toolkit/__init__.py +18 -0
  194. camel/toolkits/terminal_toolkit/terminal_toolkit.py +957 -0
  195. camel/toolkits/terminal_toolkit/utils.py +532 -0
  196. camel/toolkits/thinking_toolkit.py +1 -1
  197. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  198. camel/toolkits/video_analysis_toolkit.py +106 -26
  199. camel/toolkits/video_download_toolkit.py +17 -14
  200. camel/toolkits/web_deploy_toolkit.py +1219 -0
  201. camel/toolkits/wechat_official_toolkit.py +483 -0
  202. camel/toolkits/zapier_toolkit.py +5 -1
  203. camel/types/__init__.py +2 -2
  204. camel/types/agents/tool_calling_record.py +4 -1
  205. camel/types/enums.py +316 -40
  206. camel/types/openai_types.py +2 -2
  207. camel/types/unified_model_type.py +31 -4
  208. camel/utils/commons.py +36 -5
  209. camel/utils/constants.py +3 -0
  210. camel/utils/context_utils.py +1003 -0
  211. camel/utils/mcp.py +138 -4
  212. camel/utils/mcp_client.py +45 -1
  213. camel/utils/message_summarizer.py +148 -0
  214. camel/utils/token_counting.py +43 -20
  215. camel/utils/tool_result.py +44 -0
  216. {camel_ai-0.2.67.dist-info → camel_ai-0.2.80a2.dist-info}/METADATA +296 -85
  217. {camel_ai-0.2.67.dist-info → camel_ai-0.2.80a2.dist-info}/RECORD +219 -146
  218. camel/loaders/pandas_reader.py +0 -368
  219. camel/toolkits/dalle_toolkit.py +0 -175
  220. camel/toolkits/file_write_toolkit.py +0 -444
  221. camel/toolkits/openai_agent_toolkit.py +0 -135
  222. camel/toolkits/terminal_toolkit.py +0 -1037
  223. {camel_ai-0.2.67.dist-info → camel_ai-0.2.80a2.dist-info}/WHEEL +0 -0
  224. {camel_ai-0.2.67.dist-info → camel_ai-0.2.80a2.dist-info}/licenses/LICENSE +0 -0
@@ -17,6 +17,8 @@ from enum import EnumMeta
17
17
  from pathlib import Path
18
18
  from typing import Any, ClassVar, Dict, List, Optional
19
19
 
20
+ from pydantic import BaseModel
21
+
20
22
  from camel.storages.key_value_storages import BaseKeyValueStorage
21
23
  from camel.types import (
22
24
  ModelType,
@@ -27,8 +29,13 @@ from camel.types import (
27
29
 
28
30
 
29
31
  class CamelJSONEncoder(json.JSONEncoder):
30
- r"""A custom JSON encoder for serializing specifically enumerated types.
31
- Ensures enumerated types can be stored in and retrieved from JSON format.
32
+ r"""A custom JSON encoder for serializing CAMEL-specific types.
33
+
34
+ Handles serialization of:
35
+ - Enumerated types (RoleType, TaskType, ModelType, OpenAIBackendRole)
36
+ - Pydantic BaseModel objects (from structured outputs)
37
+
38
+ Ensures these types can be stored in and retrieved from JSON format.
32
39
  """
33
40
 
34
41
  CAMEL_ENUMS: ClassVar[Dict[str, EnumMeta]] = {
@@ -39,8 +46,14 @@ class CamelJSONEncoder(json.JSONEncoder):
39
46
  }
40
47
 
41
48
  def default(self, obj) -> Any:
49
+ # Handle CAMEL enum types
42
50
  if type(obj) in self.CAMEL_ENUMS.values():
43
51
  return {"__enum__": str(obj)}
52
+
53
+ # Handle Pydantic BaseModel objects (e.g., from structured outputs)
54
+ if isinstance(obj, BaseModel):
55
+ return obj.model_dump()
56
+
44
57
  # Let the base class default method raise the TypeError
45
58
  return json.JSONEncoder.default(self, obj)
46
59
 
@@ -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 = self._prepare_filters(
182
- agent_id=self.agent_id,
183
- user_id=self.user_id,
184
- )
185
- results = self.client.get_all(version="v2", **filters)
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="user",
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=result.get("metadata", {}),
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 searching memories: {e}")
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
- filters = self._prepare_filters(
218
- agent_id=self.agent_id,
219
- user_id=self.user_id,
220
- )
221
- self.client.delete_users(**filters)
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}")
@@ -46,7 +46,7 @@ class GoogleCloudStorage(BaseObjectStorage):
46
46
  create_if_not_exists: bool = True,
47
47
  anonymous: bool = False,
48
48
  ) -> None:
49
- from google.cloud import storage
49
+ from google.cloud import storage # type: ignore[attr-defined]
50
50
 
51
51
  self.create_if_not_exists = create_if_not_exists
52
52
 
@@ -19,10 +19,13 @@ from .base import (
19
19
  VectorDBStatus,
20
20
  VectorRecord,
21
21
  )
22
+ from .chroma import ChromaStorage
22
23
  from .faiss import FaissStorage
23
24
  from .milvus import MilvusStorage
24
25
  from .oceanbase import OceanBaseStorage
26
+ from .pgvector import PgVectorStorage
25
27
  from .qdrant import QdrantStorage
28
+ from .surreal import SurrealStorage
26
29
  from .tidb import TiDBStorage
27
30
  from .weaviate import WeaviateStorage
28
31
 
@@ -30,6 +33,7 @@ __all__ = [
30
33
  'BaseVectorStorage',
31
34
  'VectorDBQuery',
32
35
  'VectorDBQueryResult',
36
+ 'ChromaStorage',
33
37
  'QdrantStorage',
34
38
  'MilvusStorage',
35
39
  "TiDBStorage",
@@ -38,4 +42,6 @@ __all__ = [
38
42
  'WeaviateStorage',
39
43
  'VectorRecord',
40
44
  'VectorDBStatus',
45
+ 'PgVectorStorage',
46
+ 'SurrealStorage',
41
47
  ]