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
@@ -33,7 +33,7 @@ from openai.types.chat.chat_completion_user_message_param import (
33
33
  from openai.types.completion_usage import CompletionUsage
34
34
  from openai.types.chat import ParsedChatCompletion
35
35
  from openai._types import NOT_GIVEN, NotGiven
36
- from openai.types.chat import ChatCompletionMessageToolCall
36
+ from openai.types.chat import ChatCompletionMessageFunctionToolCall
37
37
 
38
38
  __all__ = [
39
39
  "Choice",
@@ -45,7 +45,7 @@ __all__ = [
45
45
  "ChatCompletionUserMessageParam",
46
46
  "ChatCompletionAssistantMessageParam",
47
47
  "ChatCompletionToolMessageParam",
48
- "ChatCompletionMessageToolCall",
48
+ "ChatCompletionMessageFunctionToolCall",
49
49
  "CompletionUsage",
50
50
  "ParsedChatCompletion",
51
51
  "NOT_GIVEN",
@@ -12,6 +12,7 @@
12
12
  # limitations under the License.
13
13
  # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  import logging
15
+ from enum import Enum
15
16
  from threading import Lock
16
17
  from typing import TYPE_CHECKING, ClassVar, Dict, Union, cast
17
18
 
@@ -32,17 +33,28 @@ class UnifiedModelType(str):
32
33
  _lock: ClassVar[Lock] = Lock()
33
34
 
34
35
  def __new__(cls, value: Union["ModelType", str]) -> "UnifiedModelType":
36
+ if isinstance(value, Enum):
37
+ str_value = value.value
38
+ else:
39
+ str_value = str(value)
40
+
35
41
  with cls._lock:
36
- if value not in cls._cache:
37
- instance = super().__new__(cls, value)
38
- cls._cache[value] = cast(UnifiedModelType, instance)
42
+ if str_value not in cls._cache:
43
+ instance = super().__new__(cls, str_value)
44
+ cls._cache[str_value] = cast(UnifiedModelType, instance)
39
45
  else:
40
- instance = cls._cache[value]
46
+ instance = cls._cache[str_value]
41
47
  return instance
42
48
 
43
49
  def __init__(self, value: Union["ModelType", str]) -> None:
44
50
  pass
45
51
 
52
+ def __repr__(self) -> str:
53
+ return super().__str__()
54
+
55
+ def __str__(self) -> str:
56
+ return super().__str__()
57
+
46
58
  @property
47
59
  def value_for_tiktoken(self) -> str:
48
60
  r"""Returns the model name for TikToken."""
@@ -83,6 +95,11 @@ class UnifiedModelType(str):
83
95
  r"""Returns whether the model is a Groq served model."""
84
96
  return True
85
97
 
98
+ @property
99
+ def is_nebius(self) -> bool:
100
+ r"""Returns whether the model is a Nebius AI Studio served model."""
101
+ return True
102
+
86
103
  @property
87
104
  def is_openrouter(self) -> bool:
88
105
  r"""Returns whether the model is a OpenRouter served model."""
@@ -128,6 +145,11 @@ class UnifiedModelType(str):
128
145
  r"""Returns whether the model is a Cohere model."""
129
146
  return True
130
147
 
148
+ @property
149
+ def is_cometapi(self) -> bool:
150
+ r"""Returns whether the model is a CometAPI served model."""
151
+ return True
152
+
131
153
  @property
132
154
  def is_yi(self) -> bool:
133
155
  r"""Returns whether the model is a Yi model."""
@@ -173,6 +195,11 @@ class UnifiedModelType(str):
173
195
  r"""Returns whether the model is a Crynux served model."""
174
196
  return True
175
197
 
198
+ @property
199
+ def is_minimax(self) -> bool:
200
+ r"""Returns whether the model is a Minimax served model."""
201
+ return True
202
+
176
203
  @property
177
204
  def support_native_structured_output(self) -> bool:
178
205
  r"""Returns whether the model supports native structured output."""
camel/utils/commons.py CHANGED
@@ -318,6 +318,8 @@ def api_keys_required(
318
318
  key_way = "https://aimlapi.com/"
319
319
  elif env_var_name == 'COHERE_API_KEY':
320
320
  key_way = "https://cohere.com/"
321
+ elif env_var_name == 'COMETAPI_KEY':
322
+ key_way = "https://api.cometapi.com/console/token"
321
323
  elif env_var_name == 'DEEPSEEK_API_KEY':
322
324
  key_way = "https://www.deepseek.com/"
323
325
  elif env_var_name == 'AZURE_OPENAI_API_KEY':
@@ -354,6 +356,8 @@ def api_keys_required(
354
356
  key_way = "https://www.zhipuai.cn/"
355
357
  elif env_var_name == 'KLAVIS_API_KEY':
356
358
  key_way = "https://www.klavis.ai/docs"
359
+ elif env_var_name == 'XAI_API_KEY':
360
+ key_way = "https://api.x.ai/v1"
357
361
 
358
362
  if missing_keys:
359
363
  raise ValueError(
@@ -1011,14 +1015,32 @@ def with_timeout(timeout=None):
1011
1015
  if effective_timeout is None:
1012
1016
  return func(*args, **kwargs)
1013
1017
 
1014
- # Container to hold the result of the function call
1018
+ # If current thread has a running asyncio event loop, avoid
1019
+ # switching threads to preserve asyncio context (e.g., for
1020
+ # asyncio.create_task). Execute inline without enforcing a
1021
+ # sync timeout to keep event loop semantics intact.
1022
+ try:
1023
+ asyncio.get_running_loop()
1024
+ loop_running = True
1025
+ except RuntimeError:
1026
+ loop_running = False
1027
+
1028
+ if loop_running:
1029
+ return func(*args, **kwargs)
1030
+
1031
+ # Container to hold the result or exception from the function
1032
+ # call
1015
1033
  result_container = []
1034
+ exception_container = []
1016
1035
 
1017
1036
  def target():
1018
- result_container.append(func(*args, **kwargs))
1037
+ try:
1038
+ result_container.append(func(*args, **kwargs))
1039
+ except Exception as e:
1040
+ exception_container.append(e)
1019
1041
 
1020
- # Start the function in a new thread
1021
- thread = threading.Thread(target=target)
1042
+ # Start the function in a new daemon thread
1043
+ thread = threading.Thread(target=target, daemon=True)
1022
1044
  thread.start()
1023
1045
  thread.join(effective_timeout)
1024
1046
 
@@ -1029,7 +1051,16 @@ def with_timeout(timeout=None):
1029
1051
  f"exceeded {effective_timeout} seconds."
1030
1052
  )
1031
1053
  else:
1032
- return result_container[0]
1054
+ # If an exception occurred, re-raise it
1055
+ if exception_container:
1056
+ raise exception_container[0]
1057
+ # Return result if available
1058
+ if result_container:
1059
+ return result_container[0]
1060
+ raise RuntimeError(
1061
+ f"Function `{func.__name__}` completed but produced "
1062
+ "no result or exception."
1063
+ )
1033
1064
 
1034
1065
  return wrapper
1035
1066
 
camel/utils/constants.py CHANGED
@@ -35,3 +35,6 @@ class Constants:
35
35
 
36
36
  # Default similarity threshold value for RAG
37
37
  DEFAULT_SIMILARITY_THRESHOLD = 0.7
38
+
39
+ # Default timeout threshold value
40
+ TIMEOUT_THRESHOLD = 180.0