camel-ai 0.2.65__py3-none-any.whl → 0.2.83a6__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.

Files changed (509) hide show
  1. camel/__init__.py +3 -3
  2. camel/agents/__init__.py +2 -2
  3. camel/agents/_types.py +9 -4
  4. camel/agents/_utils.py +40 -2
  5. camel/agents/base.py +2 -2
  6. camel/agents/chat_agent.py +5107 -995
  7. camel/agents/critic_agent.py +2 -2
  8. camel/agents/deductive_reasoner_agent.py +56 -56
  9. camel/agents/embodied_agent.py +2 -2
  10. camel/agents/knowledge_graph_agent.py +20 -20
  11. camel/agents/mcp_agent.py +35 -36
  12. camel/agents/multi_hop_generator_agent.py +3 -3
  13. camel/agents/programmed_agent_instruction.py +2 -2
  14. camel/agents/repo_agent.py +4 -3
  15. camel/agents/role_assignment_agent.py +2 -2
  16. camel/agents/search_agent.py +2 -2
  17. camel/agents/task_agent.py +2 -2
  18. camel/agents/tool_agents/__init__.py +2 -2
  19. camel/agents/tool_agents/base.py +2 -2
  20. camel/agents/tool_agents/hugging_face_tool_agent.py +3 -3
  21. camel/benchmarks/__init__.py +2 -2
  22. camel/benchmarks/apibank.py +5 -5
  23. camel/benchmarks/apibench.py +2 -2
  24. camel/benchmarks/base.py +2 -2
  25. camel/benchmarks/browsecomp.py +44 -33
  26. camel/benchmarks/gaia.py +17 -13
  27. camel/benchmarks/mock_website/README.md +1 -3
  28. camel/benchmarks/mock_website/mock_web.py +2 -2
  29. camel/benchmarks/mock_website/requirements.txt +1 -1
  30. camel/benchmarks/mock_website/shopping_mall/app.py +2 -2
  31. camel/benchmarks/mock_website/task.json +1 -1
  32. camel/benchmarks/nexus.py +3 -3
  33. camel/benchmarks/ragbench.py +2 -2
  34. camel/bots/__init__.py +2 -2
  35. camel/bots/discord/__init__.py +2 -2
  36. camel/bots/discord/discord_app.py +2 -2
  37. camel/bots/discord/discord_installation.py +2 -2
  38. camel/bots/discord/discord_store.py +3 -3
  39. camel/bots/slack/__init__.py +2 -2
  40. camel/bots/slack/models.py +4 -4
  41. camel/bots/slack/slack_app.py +2 -2
  42. camel/bots/telegram_bot.py +2 -2
  43. camel/configs/__init__.py +29 -2
  44. camel/configs/aihubmix_config.py +90 -0
  45. camel/configs/aiml_config.py +2 -2
  46. camel/configs/amd_config.py +70 -0
  47. camel/configs/anthropic_config.py +2 -2
  48. camel/configs/base_config.py +2 -2
  49. camel/configs/bedrock_config.py +5 -3
  50. camel/configs/cerebras_config.py +98 -0
  51. camel/configs/cohere_config.py +2 -2
  52. camel/configs/cometapi_config.py +106 -0
  53. camel/configs/crynux_config.py +2 -2
  54. camel/configs/deepseek_config.py +9 -8
  55. camel/configs/function_gemma_config.py +59 -0
  56. camel/configs/gemini_config.py +6 -4
  57. camel/configs/groq_config.py +6 -4
  58. camel/configs/internlm_config.py +6 -4
  59. camel/configs/litellm_config.py +2 -2
  60. camel/configs/lmstudio_config.py +6 -4
  61. camel/configs/minimax_config.py +95 -0
  62. camel/configs/mistral_config.py +2 -2
  63. camel/configs/modelscope_config.py +5 -3
  64. camel/configs/moonshot_config.py +2 -2
  65. camel/configs/nebius_config.py +105 -0
  66. camel/configs/netmind_config.py +2 -2
  67. camel/configs/novita_config.py +2 -2
  68. camel/configs/nvidia_config.py +2 -2
  69. camel/configs/ollama_config.py +2 -2
  70. camel/configs/openai_config.py +5 -3
  71. camel/configs/openrouter_config.py +6 -4
  72. camel/configs/ppio_config.py +2 -2
  73. camel/configs/qianfan_config.py +85 -0
  74. camel/configs/qwen_config.py +2 -2
  75. camel/configs/reka_config.py +2 -2
  76. camel/configs/samba_config.py +6 -4
  77. camel/configs/sglang_config.py +2 -2
  78. camel/configs/siliconflow_config.py +2 -2
  79. camel/configs/togetherai_config.py +2 -2
  80. camel/configs/vllm_config.py +4 -2
  81. camel/configs/watsonx_config.py +2 -2
  82. camel/configs/yi_config.py +6 -4
  83. camel/configs/zhipuai_config.py +6 -4
  84. camel/data_collectors/__init__.py +2 -2
  85. camel/data_collectors/alpaca_collector.py +18 -9
  86. camel/data_collectors/base.py +2 -2
  87. camel/data_collectors/sharegpt_collector.py +2 -2
  88. camel/datagen/__init__.py +2 -2
  89. camel/datagen/cot_datagen.py +3 -3
  90. camel/datagen/evol_instruct/__init__.py +2 -2
  91. camel/datagen/evol_instruct/evol_instruct.py +2 -2
  92. camel/datagen/evol_instruct/scorer.py +12 -12
  93. camel/datagen/evol_instruct/templates.py +16 -16
  94. camel/datagen/self_improving_cot.py +5 -5
  95. camel/datagen/self_instruct/__init__.py +2 -2
  96. camel/datagen/self_instruct/filter/__init__.py +2 -2
  97. camel/datagen/self_instruct/filter/filter_function.py +2 -2
  98. camel/datagen/self_instruct/filter/filter_registry.py +2 -2
  99. camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
  100. camel/datagen/self_instruct/self_instruct.py +2 -2
  101. camel/datagen/self_instruct/templates.py +47 -47
  102. camel/datagen/source2synth/__init__.py +2 -2
  103. camel/datagen/source2synth/data_processor.py +2 -2
  104. camel/datagen/source2synth/models.py +2 -2
  105. camel/datagen/source2synth/user_data_processor_config.py +2 -2
  106. camel/datahubs/__init__.py +2 -2
  107. camel/datahubs/base.py +2 -2
  108. camel/datahubs/huggingface.py +2 -2
  109. camel/datahubs/models.py +2 -2
  110. camel/datasets/__init__.py +2 -2
  111. camel/datasets/base_generator.py +41 -12
  112. camel/datasets/few_shot_generator.py +18 -18
  113. camel/datasets/models.py +2 -2
  114. camel/datasets/self_instruct_generator.py +2 -2
  115. camel/datasets/static_dataset.py +2 -2
  116. camel/embeddings/__init__.py +2 -2
  117. camel/embeddings/azure_embedding.py +2 -2
  118. camel/embeddings/base.py +2 -2
  119. camel/embeddings/gemini_embedding.py +2 -2
  120. camel/embeddings/jina_embedding.py +2 -2
  121. camel/embeddings/mistral_embedding.py +2 -2
  122. camel/embeddings/openai_compatible_embedding.py +2 -2
  123. camel/embeddings/openai_embedding.py +2 -2
  124. camel/embeddings/sentence_transformers_embeddings.py +2 -2
  125. camel/embeddings/together_embedding.py +2 -2
  126. camel/embeddings/vlm_embedding.py +2 -2
  127. camel/environments/__init__.py +14 -2
  128. camel/environments/models.py +2 -2
  129. camel/environments/multi_step.py +2 -2
  130. camel/environments/rlcards_env.py +860 -0
  131. camel/environments/single_step.py +30 -5
  132. camel/environments/tic_tac_toe.py +3 -3
  133. camel/extractors/__init__.py +2 -2
  134. camel/extractors/base.py +2 -2
  135. camel/extractors/python_strategies.py +2 -2
  136. camel/generators.py +2 -2
  137. camel/human.py +2 -2
  138. camel/interpreters/__init__.py +4 -2
  139. camel/interpreters/base.py +2 -2
  140. camel/interpreters/docker/Dockerfile +14 -24
  141. camel/interpreters/docker_interpreter.py +5 -4
  142. camel/interpreters/e2b_interpreter.py +36 -3
  143. camel/interpreters/internal_python_interpreter.py +53 -4
  144. camel/interpreters/interpreter_error.py +2 -2
  145. camel/interpreters/ipython_interpreter.py +2 -2
  146. camel/interpreters/microsandbox_interpreter.py +395 -0
  147. camel/interpreters/subprocess_interpreter.py +2 -2
  148. camel/loaders/__init__.py +13 -4
  149. camel/loaders/apify_reader.py +2 -2
  150. camel/loaders/base_io.py +2 -2
  151. camel/loaders/base_loader.py +85 -0
  152. camel/loaders/chunkr_reader.py +11 -2
  153. camel/loaders/crawl4ai_reader.py +2 -2
  154. camel/loaders/firecrawl_reader.py +6 -6
  155. camel/loaders/jina_url_reader.py +2 -2
  156. camel/loaders/markitdown.py +2 -2
  157. camel/loaders/mineru_extractor.py +2 -2
  158. camel/loaders/mistral_reader.py +2 -2
  159. camel/loaders/scrapegraph_reader.py +2 -2
  160. camel/loaders/unstructured_io.py +2 -2
  161. camel/logger.py +5 -5
  162. camel/memories/__init__.py +2 -2
  163. camel/memories/agent_memories.py +86 -3
  164. camel/memories/base.py +36 -2
  165. camel/memories/blocks/__init__.py +2 -2
  166. camel/memories/blocks/chat_history_block.py +125 -7
  167. camel/memories/blocks/vectordb_block.py +10 -3
  168. camel/memories/context_creators/__init__.py +2 -2
  169. camel/memories/context_creators/score_based.py +109 -230
  170. camel/memories/records.py +90 -10
  171. camel/messages/__init__.py +2 -2
  172. camel/messages/base.py +178 -43
  173. camel/messages/conversion/__init__.py +2 -2
  174. camel/messages/conversion/alpaca.py +2 -2
  175. camel/messages/conversion/conversation_models.py +2 -2
  176. camel/messages/conversion/sharegpt/__init__.py +2 -2
  177. camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
  178. camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
  179. camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
  180. camel/messages/func_message.py +54 -17
  181. camel/models/__init__.py +18 -2
  182. camel/models/_utils.py +3 -3
  183. camel/models/aihubmix_model.py +83 -0
  184. camel/models/aiml_model.py +11 -18
  185. camel/models/amd_model.py +101 -0
  186. camel/models/anthropic_model.py +127 -20
  187. camel/models/aws_bedrock_model.py +12 -35
  188. camel/models/azure_openai_model.py +214 -115
  189. camel/models/base_audio_model.py +5 -3
  190. camel/models/base_model.py +378 -31
  191. camel/models/cerebras_model.py +83 -0
  192. camel/models/cohere_model.py +18 -49
  193. camel/models/cometapi_model.py +83 -0
  194. camel/models/crynux_model.py +11 -18
  195. camel/models/deepseek_model.py +20 -84
  196. camel/models/fish_audio_model.py +8 -2
  197. camel/models/function_gemma_model.py +889 -0
  198. camel/models/gemini_model.py +391 -52
  199. camel/models/groq_model.py +11 -19
  200. camel/models/internlm_model.py +11 -18
  201. camel/models/litellm_model.py +57 -49
  202. camel/models/lmstudio_model.py +17 -20
  203. camel/models/minimax_model.py +83 -0
  204. camel/models/mistral_model.py +20 -47
  205. camel/models/model_factory.py +39 -3
  206. camel/models/model_manager.py +26 -8
  207. camel/models/modelscope_model.py +13 -193
  208. camel/models/moonshot_model.py +183 -21
  209. camel/models/nebius_model.py +83 -0
  210. camel/models/nemotron_model.py +19 -9
  211. camel/models/netmind_model.py +11 -18
  212. camel/models/novita_model.py +11 -18
  213. camel/models/nvidia_model.py +11 -18
  214. camel/models/ollama_model.py +14 -21
  215. camel/models/openai_audio_models.py +2 -2
  216. camel/models/openai_compatible_model.py +190 -71
  217. camel/models/openai_model.py +192 -86
  218. camel/models/openrouter_model.py +11 -19
  219. camel/models/ppio_model.py +11 -18
  220. camel/models/qianfan_model.py +89 -0
  221. camel/models/qwen_model.py +13 -193
  222. camel/models/reka_model.py +23 -49
  223. camel/models/reward/__init__.py +2 -2
  224. camel/models/reward/base_reward_model.py +2 -2
  225. camel/models/reward/evaluator.py +2 -2
  226. camel/models/reward/nemotron_model.py +2 -2
  227. camel/models/reward/skywork_model.py +2 -2
  228. camel/models/samba_model.py +50 -75
  229. camel/models/sglang_model.py +90 -68
  230. camel/models/siliconflow_model.py +12 -35
  231. camel/models/stub_model.py +10 -7
  232. camel/models/togetherai_model.py +11 -18
  233. camel/models/vllm_model.py +10 -18
  234. camel/models/volcano_model.py +158 -19
  235. camel/models/watsonx_model.py +9 -47
  236. camel/models/yi_model.py +11 -18
  237. camel/models/zhipuai_model.py +70 -18
  238. camel/parsers/__init__.py +18 -0
  239. camel/parsers/mcp_tool_call_parser.py +176 -0
  240. camel/personas/__init__.py +2 -2
  241. camel/personas/persona.py +2 -2
  242. camel/personas/persona_hub.py +2 -2
  243. camel/prompts/__init__.py +2 -2
  244. camel/prompts/ai_society.py +2 -2
  245. camel/prompts/base.py +2 -2
  246. camel/prompts/code.py +2 -2
  247. camel/prompts/evaluation.py +2 -2
  248. camel/prompts/generate_text_embedding_data.py +2 -2
  249. camel/prompts/image_craft.py +2 -2
  250. camel/prompts/misalignment.py +2 -2
  251. camel/prompts/multi_condition_image_craft.py +2 -2
  252. camel/prompts/object_recognition.py +2 -2
  253. camel/prompts/persona_hub.py +3 -3
  254. camel/prompts/prompt_templates.py +2 -2
  255. camel/prompts/role_description_prompt_template.py +2 -2
  256. camel/prompts/solution_extraction.py +8 -8
  257. camel/prompts/task_prompt_template.py +2 -2
  258. camel/prompts/translation.py +2 -2
  259. camel/prompts/video_description_prompt.py +3 -3
  260. camel/responses/__init__.py +2 -2
  261. camel/responses/agent_responses.py +2 -2
  262. camel/retrievers/__init__.py +2 -2
  263. camel/retrievers/auto_retriever.py +3 -2
  264. camel/retrievers/base.py +2 -2
  265. camel/retrievers/bm25_retriever.py +2 -2
  266. camel/retrievers/cohere_rerank_retriever.py +2 -2
  267. camel/retrievers/hybrid_retrival.py +2 -2
  268. camel/retrievers/vector_retriever.py +2 -2
  269. camel/runtimes/Dockerfile.multi-toolkit +90 -0
  270. camel/runtimes/__init__.py +2 -2
  271. camel/runtimes/api.py +79 -23
  272. camel/runtimes/base.py +2 -2
  273. camel/runtimes/configs.py +13 -13
  274. camel/runtimes/daytona_runtime.py +17 -18
  275. camel/runtimes/docker_runtime.py +12 -12
  276. camel/runtimes/llm_guard_runtime.py +26 -26
  277. camel/runtimes/remote_http_runtime.py +11 -11
  278. camel/runtimes/ubuntu_docker_runtime.py +2 -2
  279. camel/runtimes/utils/__init__.py +2 -2
  280. camel/runtimes/utils/function_risk_toolkit.py +2 -2
  281. camel/runtimes/utils/ignore_risk_toolkit.py +2 -2
  282. camel/schemas/__init__.py +2 -2
  283. camel/schemas/base.py +2 -2
  284. camel/schemas/openai_converter.py +3 -3
  285. camel/schemas/outlines_converter.py +2 -2
  286. camel/services/agent_openapi_server.py +380 -0
  287. camel/societies/__init__.py +4 -2
  288. camel/societies/babyagi_playing.py +2 -2
  289. camel/societies/role_playing.py +201 -80
  290. camel/societies/workforce/__init__.py +10 -3
  291. camel/societies/workforce/base.py +2 -2
  292. camel/societies/workforce/events.py +145 -0
  293. camel/societies/workforce/prompts.py +259 -33
  294. camel/societies/workforce/role_playing_worker.py +88 -31
  295. camel/societies/workforce/single_agent_worker.py +638 -40
  296. camel/societies/workforce/structured_output_handler.py +512 -0
  297. camel/societies/workforce/task_channel.py +182 -38
  298. camel/societies/workforce/utils.py +780 -65
  299. camel/societies/workforce/worker.py +92 -26
  300. camel/societies/workforce/workflow_memory_manager.py +1746 -0
  301. camel/societies/workforce/workforce.py +5354 -372
  302. camel/societies/workforce/workforce_callback.py +103 -0
  303. camel/societies/workforce/workforce_logger.py +647 -0
  304. camel/societies/workforce/workforce_metrics.py +33 -0
  305. camel/storages/__init__.py +6 -2
  306. camel/storages/graph_storages/__init__.py +2 -2
  307. camel/storages/graph_storages/base.py +2 -2
  308. camel/storages/graph_storages/graph_element.py +2 -2
  309. camel/storages/graph_storages/nebula_graph.py +4 -4
  310. camel/storages/graph_storages/neo4j_graph.py +7 -7
  311. camel/storages/key_value_storages/__init__.py +2 -2
  312. camel/storages/key_value_storages/base.py +2 -2
  313. camel/storages/key_value_storages/in_memory.py +2 -2
  314. camel/storages/key_value_storages/json.py +17 -4
  315. camel/storages/key_value_storages/mem0_cloud.py +50 -49
  316. camel/storages/key_value_storages/redis.py +2 -2
  317. camel/storages/object_storages/__init__.py +2 -2
  318. camel/storages/object_storages/amazon_s3.py +2 -2
  319. camel/storages/object_storages/azure_blob.py +2 -2
  320. camel/storages/object_storages/base.py +2 -2
  321. camel/storages/object_storages/google_cloud.py +3 -3
  322. camel/storages/vectordb_storages/__init__.py +8 -2
  323. camel/storages/vectordb_storages/base.py +2 -2
  324. camel/storages/vectordb_storages/chroma.py +731 -0
  325. camel/storages/vectordb_storages/faiss.py +2 -2
  326. camel/storages/vectordb_storages/milvus.py +2 -2
  327. camel/storages/vectordb_storages/oceanbase.py +15 -15
  328. camel/storages/vectordb_storages/pgvector.py +349 -0
  329. camel/storages/vectordb_storages/qdrant.py +6 -6
  330. camel/storages/vectordb_storages/surreal.py +372 -0
  331. camel/storages/vectordb_storages/tidb.py +11 -8
  332. camel/storages/vectordb_storages/weaviate.py +2 -2
  333. camel/tasks/__init__.py +2 -2
  334. camel/tasks/task.py +348 -26
  335. camel/tasks/task_prompt.py +3 -3
  336. camel/terminators/__init__.py +2 -2
  337. camel/terminators/base.py +2 -2
  338. camel/terminators/response_terminator.py +2 -2
  339. camel/terminators/token_limit_terminator.py +2 -2
  340. camel/toolkits/__init__.py +57 -10
  341. camel/toolkits/aci_toolkit.py +66 -21
  342. camel/toolkits/arxiv_toolkit.py +8 -8
  343. camel/toolkits/ask_news_toolkit.py +2 -2
  344. camel/toolkits/async_browser_toolkit.py +4 -4
  345. camel/toolkits/audio_analysis_toolkit.py +3 -3
  346. camel/toolkits/base.py +106 -6
  347. camel/toolkits/bohrium_toolkit.py +2 -2
  348. camel/toolkits/browser_toolkit.py +34 -21
  349. camel/toolkits/browser_toolkit_commons.py +4 -4
  350. camel/toolkits/code_execution.py +31 -4
  351. camel/toolkits/context_summarizer_toolkit.py +684 -0
  352. camel/toolkits/craw4ai_toolkit.py +93 -0
  353. camel/toolkits/dappier_toolkit.py +12 -8
  354. camel/toolkits/data_commons_toolkit.py +2 -2
  355. camel/toolkits/dingtalk.py +1135 -0
  356. camel/toolkits/earth_science_toolkit.py +5367 -0
  357. camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
  358. camel/toolkits/excel_toolkit.py +905 -71
  359. camel/toolkits/file_toolkit.py +1402 -0
  360. camel/toolkits/function_tool.py +205 -27
  361. camel/toolkits/github_toolkit.py +109 -22
  362. camel/toolkits/gmail_toolkit.py +1839 -0
  363. camel/toolkits/google_calendar_toolkit.py +40 -6
  364. camel/toolkits/google_drive_mcp_toolkit.py +54 -0
  365. camel/toolkits/google_maps_toolkit.py +2 -2
  366. camel/toolkits/google_scholar_toolkit.py +2 -2
  367. camel/toolkits/human_toolkit.py +36 -12
  368. camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
  369. camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
  370. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
  371. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1958 -0
  372. camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
  373. camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
  374. camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
  375. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
  376. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1940 -0
  377. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
  378. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
  379. camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
  380. camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
  381. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
  382. camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
  383. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
  384. camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
  385. camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +325 -0
  386. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
  387. camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
  388. camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
  389. camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
  390. camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
  391. camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
  392. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
  393. camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
  394. camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
  395. camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
  396. camel/toolkits/image_analysis_toolkit.py +3 -6
  397. camel/toolkits/image_generation_toolkit.py +390 -0
  398. camel/toolkits/jina_reranker_toolkit.py +5 -6
  399. camel/toolkits/klavis_toolkit.py +7 -3
  400. camel/toolkits/linkedin_toolkit.py +2 -2
  401. camel/toolkits/markitdown_toolkit.py +104 -0
  402. camel/toolkits/math_toolkit.py +66 -12
  403. camel/toolkits/mcp_toolkit.py +412 -36
  404. camel/toolkits/memory_toolkit.py +7 -3
  405. camel/toolkits/meshy_toolkit.py +2 -2
  406. camel/toolkits/message_agent_toolkit.py +608 -0
  407. camel/toolkits/message_integration.py +728 -0
  408. camel/toolkits/microsoft_outlook_mail_toolkit.py +1885 -0
  409. camel/toolkits/mineru_toolkit.py +2 -2
  410. camel/toolkits/minimax_mcp_toolkit.py +195 -0
  411. camel/toolkits/networkx_toolkit.py +2 -2
  412. camel/toolkits/note_taking_toolkit.py +277 -0
  413. camel/toolkits/notion_mcp_toolkit.py +224 -0
  414. camel/toolkits/notion_toolkit.py +2 -2
  415. camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
  416. camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
  417. camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
  418. camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
  419. camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
  420. camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
  421. camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
  422. camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
  423. camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
  424. camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
  425. camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
  426. camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
  427. camel/toolkits/open_api_specs/security_config.py +2 -2
  428. camel/toolkits/open_api_specs/speak/__init__.py +2 -2
  429. camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
  430. camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
  431. camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
  432. camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
  433. camel/toolkits/open_api_toolkit.py +2 -2
  434. camel/toolkits/openbb_toolkit.py +7 -3
  435. camel/toolkits/origene_mcp_toolkit.py +56 -0
  436. camel/toolkits/page_script.js +53 -53
  437. camel/toolkits/playwright_mcp_toolkit.py +13 -31
  438. camel/toolkits/pptx_toolkit.py +36 -23
  439. camel/toolkits/pubmed_toolkit.py +2 -2
  440. camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
  441. camel/toolkits/pyautogui_toolkit.py +2 -2
  442. camel/toolkits/reddit_toolkit.py +2 -2
  443. camel/toolkits/resend_toolkit.py +168 -0
  444. camel/toolkits/retrieval_toolkit.py +2 -2
  445. camel/toolkits/screenshot_toolkit.py +213 -0
  446. camel/toolkits/search_toolkit.py +606 -156
  447. camel/toolkits/searxng_toolkit.py +2 -2
  448. camel/toolkits/semantic_scholar_toolkit.py +2 -2
  449. camel/toolkits/slack_toolkit.py +108 -58
  450. camel/toolkits/sql_toolkit.py +712 -0
  451. camel/toolkits/stripe_toolkit.py +2 -2
  452. camel/toolkits/sympy_toolkit.py +3 -3
  453. camel/toolkits/task_planning_toolkit.py +5 -5
  454. camel/toolkits/terminal_toolkit/__init__.py +18 -0
  455. camel/toolkits/terminal_toolkit/terminal_toolkit.py +1281 -0
  456. camel/toolkits/terminal_toolkit/utils.py +659 -0
  457. camel/toolkits/thinking_toolkit.py +3 -3
  458. camel/toolkits/twitter_toolkit.py +2 -2
  459. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  460. camel/toolkits/video_analysis_toolkit.py +109 -29
  461. camel/toolkits/video_download_toolkit.py +19 -16
  462. camel/toolkits/weather_toolkit.py +2 -2
  463. camel/toolkits/web_deploy_toolkit.py +1219 -0
  464. camel/toolkits/wechat_official_toolkit.py +483 -0
  465. camel/toolkits/whatsapp_toolkit.py +2 -2
  466. camel/toolkits/wolfram_alpha_toolkit.py +2 -2
  467. camel/toolkits/zapier_toolkit.py +7 -3
  468. camel/types/__init__.py +4 -4
  469. camel/types/agents/__init__.py +2 -2
  470. camel/types/agents/tool_calling_record.py +6 -3
  471. camel/types/enums.py +381 -41
  472. camel/types/mcp_registries.py +2 -2
  473. camel/types/openai_types.py +4 -4
  474. camel/types/unified_model_type.py +46 -10
  475. camel/utils/__init__.py +5 -2
  476. camel/utils/agent_context.py +41 -0
  477. camel/utils/async_func.py +2 -2
  478. camel/utils/chunker/__init__.py +2 -2
  479. camel/utils/chunker/base.py +2 -2
  480. camel/utils/chunker/code_chunker.py +2 -2
  481. camel/utils/chunker/uio_chunker.py +2 -2
  482. camel/utils/commons.py +38 -7
  483. camel/utils/constants.py +5 -2
  484. camel/utils/context_utils.py +1134 -0
  485. camel/utils/deduplication.py +2 -2
  486. camel/utils/filename.py +2 -2
  487. camel/utils/langfuse.py +18 -10
  488. camel/utils/mcp.py +140 -6
  489. camel/utils/mcp_client.py +48 -38
  490. camel/utils/message_summarizer.py +148 -0
  491. camel/utils/response_format.py +2 -2
  492. camel/utils/token_counting.py +45 -22
  493. camel/utils/tool_result.py +44 -0
  494. camel/verifiers/__init__.py +2 -2
  495. camel/verifiers/base.py +2 -2
  496. camel/verifiers/math_verifier.py +2 -2
  497. camel/verifiers/models.py +2 -2
  498. camel/verifiers/physics_verifier.py +2 -2
  499. camel/verifiers/python_verifier.py +2 -2
  500. {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/METADATA +355 -117
  501. camel_ai-0.2.83a6.dist-info/RECORD +511 -0
  502. {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/WHEEL +1 -1
  503. {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/licenses/LICENSE +1 -1
  504. camel/loaders/pandas_reader.py +0 -368
  505. camel/toolkits/dalle_toolkit.py +0 -175
  506. camel/toolkits/file_write_toolkit.py +0 -444
  507. camel/toolkits/openai_agent_toolkit.py +0 -135
  508. camel/toolkits/terminal_toolkit.py +0 -1037
  509. camel_ai-0.2.65.dist-info/RECORD +0 -426
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  from typing import Any, Collection, Dict, List, Optional, Sequence, Union
15
15
 
16
16
  from camel.embeddings import BaseEmbedding
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  import os
15
15
  import warnings
16
16
  from io import IOBase
@@ -0,0 +1,90 @@
1
+ # ========= Copyright 2023-2024 @ 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-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
+
15
+ # Multi-toolkit Docker image for CAMEL shared runtimes
16
+ # Supports: BrowserToolkit, TerminalToolkit, CodeExecutionToolkit, and more
17
+ #
18
+ # Build (from repo root):
19
+ # docker build -f camel/runtimes/Dockerfile.multi-toolkit \
20
+ # -t camel-multi-toolkit:latest .
21
+ #
22
+ # Usage with DockerRuntime:
23
+ # runtime = (
24
+ # DockerRuntime("camel-multi-toolkit:latest")
25
+ # .add(BrowserToolkit().get_tools(), "camel.toolkits.BrowserToolkit")
26
+ # .add(TerminalToolkit().get_tools(), "camel.toolkits.TerminalToolkit")
27
+ # .add(CodeExecutionToolkit().get_tools(), "camel.toolkits.CodeExecutionToolkit")
28
+ # .build()
29
+ # )
30
+
31
+ FROM python:3.10-slim
32
+
33
+ # install system dependencies for various toolkits
34
+ RUN apt-get update && apt-get install -y --no-install-recommends \
35
+ # build tools (required for psutil, etc.)
36
+ gcc \
37
+ python3-dev \
38
+ # common tools
39
+ curl \
40
+ wget \
41
+ git \
42
+ bash \
43
+ # for Playwright browsers
44
+ libnss3 \
45
+ libnspr4 \
46
+ libatk1.0-0 \
47
+ libatk-bridge2.0-0 \
48
+ libcups2 \
49
+ libdrm2 \
50
+ libxkbcommon0 \
51
+ libxcomposite1 \
52
+ libxdamage1 \
53
+ libxfixes3 \
54
+ libxrandr2 \
55
+ libgbm1 \
56
+ libasound2 \
57
+ libpango-1.0-0 \
58
+ libcairo2 \
59
+ # additional dependencies
60
+ libdbus-1-3 \
61
+ libexpat1 \
62
+ libfontconfig1 \
63
+ libgcc-s1 \
64
+ libglib2.0-0 \
65
+ libgtk-3-0 \
66
+ libx11-6 \
67
+ libx11-xcb1 \
68
+ libxcb1 \
69
+ libxext6 \
70
+ && rm -rf /var/lib/apt/lists/*
71
+
72
+ # copy local CAMEL source and install from source
73
+ # this ensures we use local changes rather than PyPI version
74
+ COPY . /app/camel
75
+ WORKDIR /app/camel
76
+ RUN pip install --no-cache-dir -e '.[all]'
77
+
78
+ # install Playwright and chromium browser
79
+ RUN pip install --no-cache-dir playwright \
80
+ && playwright install chromium \
81
+ && playwright install-deps chromium
82
+
83
+ # set working directory for runtime operations
84
+ WORKDIR /workspace
85
+
86
+ # expose API port
87
+ EXPOSE 8000
88
+
89
+ # default command is sleep infinity (DockerRuntime will exec into it)
90
+ CMD ["sleep", "infinity"]
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  from .base import BaseRuntime
15
15
  from .configs import TaskConfig
16
16
  from .daytona_runtime import DaytonaRuntime
camel/runtimes/api.py CHANGED
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,14 +10,16 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ import asyncio
15
+ import concurrent.futures
14
16
  import importlib
15
17
  import io
16
18
  import json
17
19
  import logging
18
20
  import os
19
21
  import sys
20
- from typing import Dict
22
+ from typing import Any, Dict, List
21
23
 
22
24
  import uvicorn
23
25
  from fastapi import FastAPI, Request
@@ -25,8 +27,15 @@ from fastapi.responses import JSONResponse
25
27
 
26
28
  from camel.toolkits import BaseToolkit
27
29
 
30
+ # thread pool for running sync tools that can't run inside async event loop
31
+ # (e.g., Playwright sync API)
32
+ _executor = concurrent.futures.ThreadPoolExecutor(max_workers=4)
33
+
28
34
  logger = logging.getLogger(__name__)
29
35
 
36
+ # set environment variable to indicate we're running inside a CAMEL runtime
37
+ os.environ["CAMEL_RUNTIME"] = "true"
38
+
30
39
  sys.path.append(os.getcwd())
31
40
 
32
41
  modules_functions = sys.argv[1:]
@@ -35,6 +44,22 @@ logger.info(f"Modules and functions: {modules_functions}")
35
44
 
36
45
  app = FastAPI()
37
46
 
47
+ # global cache for toolkit instances to maintain state across calls
48
+ _toolkit_instances: Dict[str, Any] = {}
49
+
50
+ # track registered endpoints for health check
51
+ _registered_endpoints: List[str] = []
52
+
53
+
54
+ @app.get("/health")
55
+ async def health_check():
56
+ r"""Health check endpoint that reports loaded toolkits and endpoints."""
57
+ return {
58
+ "status": "ok",
59
+ "toolkits": list(_toolkit_instances.keys()),
60
+ "endpoints": _registered_endpoints,
61
+ }
62
+
38
63
 
39
64
  @app.exception_handler(Exception)
40
65
  async def general_exception_handler(request: Request, exc: Exception):
@@ -49,6 +74,9 @@ async def general_exception_handler(request: Request, exc: Exception):
49
74
 
50
75
  for module_function in modules_functions:
51
76
  try:
77
+ # store original module_function as cache key before parsing
78
+ cache_key = module_function
79
+
52
80
  init_params = dict()
53
81
  if "{" in module_function:
54
82
  module_function, params = module_function.split("{")
@@ -62,36 +90,64 @@ for module_function in modules_functions:
62
90
  module = importlib.import_module(module_name)
63
91
  function = getattr(module, function_name)
64
92
  if isinstance(function, type) and issubclass(function, BaseToolkit):
65
- function = function(**init_params).get_tools()
93
+ # use cached instance if available to maintain state across calls
94
+ if cache_key not in _toolkit_instances:
95
+ _toolkit_instances[cache_key] = function(**init_params)
96
+ function = _toolkit_instances[cache_key].get_tools()
66
97
 
67
98
  if not isinstance(function, list):
68
99
  function = [function]
69
100
 
70
101
  for func in function:
71
-
72
- @app.post(f"/{func.get_function_name()}")
73
- async def dynamic_function(data: Dict, func=func):
74
- redirect_stdout = data.get('redirect_stdout', False)
75
- if redirect_stdout:
76
- sys.stdout = io.StringIO()
77
- response_data = func.func(*data['args'], **data['kwargs'])
78
- if redirect_stdout:
79
- sys.stdout.seek(0)
80
- output = sys.stdout.read()
81
- sys.stdout = sys.__stdout__
102
+ endpoint_name = func.get_function_name()
103
+ _registered_endpoints.append(endpoint_name)
104
+
105
+ def make_endpoint(tool):
106
+ r"""Create endpoint with tool captured in closure."""
107
+
108
+ def run_tool(data: Dict):
109
+ r"""Run tool in thread pool to avoid async event loop."""
110
+ redirect_stdout = data.get('redirect_stdout', False)
111
+ captured_output = None
112
+ if redirect_stdout:
113
+ captured_output = io.StringIO()
114
+ old_stdout = sys.stdout
115
+ sys.stdout = captured_output
116
+ try:
117
+ response_data = tool.func(
118
+ *data['args'], **data['kwargs']
119
+ )
120
+ finally:
121
+ if redirect_stdout:
122
+ sys.stdout = old_stdout
123
+ if redirect_stdout and captured_output is not None:
124
+ captured_output.seek(0)
125
+ output = captured_output.read()
126
+ return {
127
+ "output": json.dumps(
128
+ response_data, ensure_ascii=False
129
+ ),
130
+ "stdout": output,
131
+ }
82
132
  return {
83
- "output": json.dumps(
84
- response_data, ensure_ascii=False
85
- ),
86
- "stdout": output,
133
+ "output": json.dumps(response_data, ensure_ascii=False)
87
134
  }
88
- return {
89
- "output": json.dumps(response_data, ensure_ascii=False)
90
- }
135
+
136
+ async def endpoint(data: Dict):
137
+ # run in thread pool to support sync tools like Playwright
138
+ loop = asyncio.get_running_loop()
139
+ return await loop.run_in_executor(
140
+ _executor, run_tool, data
141
+ )
142
+
143
+ return endpoint
144
+
145
+ app.post(f"/{endpoint_name}")(make_endpoint(func))
91
146
 
92
147
  except (ImportError, AttributeError) as e:
93
148
  logger.error(f"Error importing {module_function}: {e}")
94
149
 
95
150
 
96
151
  if __name__ == "__main__":
97
- uvicorn.run("__main__:app", host="0.0.0.0", port=8000, reload=True)
152
+ # reload=False to avoid conflicts with async toolkits (e.g., Playwright)
153
+ uvicorn.run(app, host="0.0.0.0", port=8000, reload=False)
camel/runtimes/base.py CHANGED
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  from abc import ABC, abstractmethod
15
15
  from typing import Any, List, Union
16
16
 
camel/runtimes/configs.py CHANGED
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  from typing import Dict, List, Optional, Union
15
15
 
16
16
  from pydantic import BaseModel
@@ -21,22 +21,22 @@ class TaskConfig(BaseModel):
21
21
 
22
22
  Arttributes:
23
23
  cmd (str or list): Command to be executed
24
- stdout (bool): Attach to stdout. (default: :obj: `True`)
25
- stderr (bool): Attach to stderr. (default: :obj: `True`)
26
- stdin (bool): Attach to stdin. (default: :obj: `False`)
27
- tty (bool): Allocate a pseudo-TTY. (default: :obj: `False`)
28
- privileged (bool): Run as privileged. (default: :obj: `False`)
29
- user (str): User to execute command as. (default: :obj: `""`)
24
+ stdout (bool): Attach to stdout. (default: :obj:`True`)
25
+ stderr (bool): Attach to stderr. (default: :obj:`True`)
26
+ stdin (bool): Attach to stdin. (default: :obj:`False`)
27
+ tty (bool): Allocate a pseudo-TTY. (default: :obj:`False`)
28
+ privileged (bool): Run as privileged. (default: :obj:`False`)
29
+ user (str): User to execute command as. (default: :obj:`""`)
30
30
  detach (bool): If true, detach from the exec command.
31
- (default: :obj: `False`)
32
- stream (bool): Stream response data. (default: :obj: `False`)
31
+ (default: :obj:`False`)
32
+ stream (bool): Stream response data. (default: :obj:`False`)
33
33
  socket (bool): Return the connection socket to allow custom
34
- read/write operations. (default: :obj: `False`)
34
+ read/write operations. (default: :obj:`False`)
35
35
  environment (dict or list): A dictionary or a list of strings in
36
36
  the following format ``["PASSWORD=xxx"]`` or
37
- ``{"PASSWORD": "xxx"}``. (default: :obj: `None`)
37
+ ``{"PASSWORD": "xxx"}``. (default: :obj:`None`)
38
38
  workdir (str): Path to working directory for this exec session.
39
- (default: :obj: `None`)
39
+ (default: :obj:`None`)
40
40
  demux (bool): Return stdout and stderr separately. (default: :obj:
41
41
  `False`)
42
42
  """
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,13 +10,13 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
 
15
15
  import inspect
16
16
  import json
17
17
  import os
18
18
  from functools import wraps
19
- from typing import Any, Dict, List, Optional, Union
19
+ from typing import Any, Callable, Dict, List, Optional, Union
20
20
 
21
21
  from pydantic import BaseModel
22
22
 
@@ -34,13 +34,13 @@ class DaytonaRuntime(BaseRuntime):
34
34
  Args:
35
35
  api_key (Optional[str]): The Daytona API key for authentication. If not
36
36
  provided, it will try to use the DAYTONA_API_KEY environment
37
- variable. (default: :obj: `None`)
37
+ variable. (default: :obj:`None`)
38
38
  api_url (Optional[str]): The URL of the Daytona server. If not
39
39
  provided, it will try to use the DAYTONA_API_URL environment
40
40
  variable. If none is provided, it will use "http://localhost:8000".
41
- (default: :obj: `None`)
41
+ (default: :obj:`None`)
42
42
  language (Optional[str]): The programming language for the sandbox.
43
- (default: :obj: `"python"`)
43
+ (default: :obj:`"python"`)
44
44
  """
45
45
 
46
46
  def __init__(
@@ -49,7 +49,7 @@ class DaytonaRuntime(BaseRuntime):
49
49
  api_url: Optional[str] = None,
50
50
  language: Optional[str] = "python",
51
51
  ):
52
- from daytona_sdk import Daytona, DaytonaConfig
52
+ from daytona_sdk import Daytona, DaytonaConfig, Sandbox
53
53
 
54
54
  super().__init__()
55
55
  self.api_key = api_key or os.environ.get('DAYTONA_API_KEY')
@@ -57,7 +57,7 @@ class DaytonaRuntime(BaseRuntime):
57
57
  self.language = language
58
58
  self.config = DaytonaConfig(api_key=self.api_key, api_url=self.api_url)
59
59
  self.daytona = Daytona(self.config)
60
- self.sandbox = None
60
+ self.sandbox: Optional[Sandbox] = None
61
61
  self.entrypoint: Dict[str, str] = dict()
62
62
 
63
63
  def build(self) -> "DaytonaRuntime":
@@ -66,10 +66,10 @@ class DaytonaRuntime(BaseRuntime):
66
66
  Returns:
67
67
  DaytonaRuntime: The current runtime.
68
68
  """
69
- from daytona_sdk import CreateSandboxParams
69
+ from daytona_sdk import CreateSandboxBaseParams
70
70
 
71
71
  try:
72
- params = CreateSandboxParams(language=self.language)
72
+ params = CreateSandboxBaseParams(language=self.language)
73
73
  self.sandbox = self.daytona.create(params)
74
74
  if self.sandbox is None:
75
75
  raise RuntimeError("Failed to create sandbox.")
@@ -83,7 +83,7 @@ class DaytonaRuntime(BaseRuntime):
83
83
  r"""Clean up the sandbox when exiting."""
84
84
  if self.sandbox:
85
85
  try:
86
- self.daytona.remove(self.sandbox)
86
+ self.daytona.delete(self.sandbox)
87
87
  logger.info(f"Sandbox {self.sandbox.id} removed")
88
88
  self.sandbox = None
89
89
  except Exception as e:
@@ -102,7 +102,7 @@ class DaytonaRuntime(BaseRuntime):
102
102
  list of functions to add.
103
103
  entrypoint (str): The entrypoint for the function.
104
104
  arguments (Optional[Dict[str, Any]]): The arguments for the
105
- function. (default: :obj: `None`)
105
+ function. (default: :obj:`None`)
106
106
 
107
107
  Returns:
108
108
  DaytonaRuntime: The current runtime.
@@ -112,7 +112,7 @@ class DaytonaRuntime(BaseRuntime):
112
112
  if arguments is not None:
113
113
  entrypoint += json.dumps(arguments, ensure_ascii=False)
114
114
 
115
- def make_wrapper(inner_func, func_name, func_code):
115
+ def make_wrapper(inner_func: Callable, func_name: str, func_code: str):
116
116
  r"""Creates a wrapper for a function to execute it in the
117
117
  Daytona sandbox.
118
118
 
@@ -208,12 +208,11 @@ class DaytonaRuntime(BaseRuntime):
208
208
  RuntimeError: If the sandbox is not initialized.
209
209
  """
210
210
  if self.sandbox is None:
211
- raise RuntimeError("Failed to create sandbox.")
212
- info = self.sandbox.info()
211
+ raise RuntimeError("Sandbox not initialized.")
213
212
  return (
214
- f"Sandbox {info.name}:\n"
215
- f"State: {info.state}\n"
216
- f"Resources: {info.resources.cpu} CPU, {info.resources.memory} RAM"
213
+ f"Sandbox {self.sandbox.id}:\n"
214
+ f"State: {self.sandbox.state}\n"
215
+ f"Resources: {self.sandbox.cpu} CPU, {self.sandbox.memory} RAM"
217
216
  )
218
217
 
219
218
  def __del__(self):
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  import io
15
15
  import json
16
16
  import logging
@@ -45,7 +45,7 @@ class DockerRuntime(BaseRuntime):
45
45
  port (int): The port number to use for the runtime API. (default: :obj:
46
46
  `8000`)
47
47
  remove (bool): Whether to remove the container after stopping it. '
48
- (default: :obj: `True`)
48
+ (default: :obj:`True`)
49
49
  kwargs (dict): Additional keyword arguments to pass to the
50
50
  Docker client.
51
51
  """
@@ -170,7 +170,7 @@ class DockerRuntime(BaseRuntime):
170
170
 
171
171
  Args:
172
172
  time_out (int): The number of seconds to wait for the container to
173
- start. (default: :obj: `15`)
173
+ start. (default: :obj:`15`)
174
174
 
175
175
  Returns:
176
176
  DockerRuntime: The DockerRuntime instance.
@@ -259,9 +259,9 @@ class DockerRuntime(BaseRuntime):
259
259
  list of functions to add.
260
260
  entrypoint (str): The entrypoint for the function.
261
261
  redirect_stdout (bool): Whether to return the stdout of
262
- the function. (default: :obj: `False`)
262
+ the function. (default: :obj:`False`)
263
263
  arguments (Optional[Dict[str, Any]]): The arguments for the
264
- function. (default: :obj: `None`)
264
+ function. (default: :obj:`None`)
265
265
 
266
266
  Returns:
267
267
  DockerRuntime: The DockerRuntime instance.
@@ -295,14 +295,14 @@ class DockerRuntime(BaseRuntime):
295
295
  )
296
296
  if resp.status_code != 200:
297
297
  logger.error(
298
- f"""ailed to execute function:
299
- {func.get_function_name()},
300
- status code: {resp.status_code},
298
+ f"""ailed to execute function:
299
+ {func.get_function_name()},
300
+ status code: {resp.status_code},
301
301
  response: {resp.text}"""
302
302
  )
303
303
  return {
304
304
  "error": f"""Failed to execute function:
305
- {func.get_function_name()},
305
+ {func.get_function_name()},
306
306
  response: {resp.text}"""
307
307
  }
308
308
  data = resp.json()
@@ -330,7 +330,7 @@ class DockerRuntime(BaseRuntime):
330
330
 
331
331
  Args:
332
332
  remove (Optional[bool]): Whether to remove the container
333
- after stopping it. (default: :obj: `None`)
333
+ after stopping it. (default: :obj:`None`)
334
334
 
335
335
  Returns:
336
336
  DockerRuntime: The DockerRuntime instance.
@@ -366,7 +366,7 @@ class DockerRuntime(BaseRuntime):
366
366
  r"""Wait for the API Server to be ready.
367
367
 
368
368
  Args:
369
- timeout (int): The number of seconds to wait. (default: :obj: `10`)
369
+ timeout (int): The number of seconds to wait. (default: :obj:`10`)
370
370
 
371
371
  Returns:
372
372
  bool: Whether the API Server is ready.
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  import json
15
15
  import logging
16
16
  from functools import wraps
@@ -26,37 +26,37 @@ from camel.types import ModelPlatformType, ModelType
26
26
 
27
27
  logger = logging.getLogger(__name__)
28
28
 
29
- GUARDPROMPT = """You are a function safety evaluator tasked with assessing the
30
- potential risk level of a given function based on both its description
31
- and parameters. Your goal is to determine if the function may pose any
32
- harm to the user's environment, such as deleting files, executing
33
- arbitrary code, or accessing sensitive information. Pay special attention
34
- to the provided parameters — even if a function has the potential to be
35
- dangerous, its actual parameters may indicate harmless behavior, and the
36
- risk level should be adjusted accordingly. Use the `function_risk` tool to
29
+ GUARDPROMPT = """You are a function safety evaluator tasked with assessing the
30
+ potential risk level of a given function based on both its description
31
+ and parameters. Your goal is to determine if the function may pose any
32
+ harm to the user's environment, such as deleting files, executing
33
+ arbitrary code, or accessing sensitive information. Pay special attention
34
+ to the provided parameters — even if a function has the potential to be
35
+ dangerous, its actual parameters may indicate harmless behavior, and the
36
+ risk level should be adjusted accordingly. Use the `function_risk` tool to
37
37
  assign a risk score to the function, based on the following criteria:
38
38
 
39
- - **Score 1**: No harm. This includes simple operations like mathematical
40
- calculations, content searches, or data retrievals that do not impact
41
- the user's environment or access sensitive resources. This also
42
- includes functions with potentially dangerous capabilities that have
39
+ - **Score 1**: No harm. This includes simple operations like mathematical
40
+ calculations, content searches, or data retrievals that do not impact
41
+ the user's environment or access sensitive resources. This also
42
+ includes functions with potentially dangerous capabilities that have
43
43
  harmless, controlled parameters that ensure safe execution.
44
- - **Score 2**: Minimal harm. The function might read user files, retrieve
45
- non-sensitive data, or access other low-risk resources,
44
+ - **Score 2**: Minimal harm. The function might read user files, retrieve
45
+ non-sensitive data, or access other low-risk resources,
46
46
  posing little risk to the user.
47
- - **Score 3**: Risk present. The function might delete files, modify the
48
- file system, execute arbitrary code, or access sensitive data, which
49
- could negatively impact the user's environment. However, if the
50
- actual parameters provided clearly indicate safe and restricted
47
+ - **Score 3**: Risk present. The function might delete files, modify the
48
+ file system, execute arbitrary code, or access sensitive data, which
49
+ could negatively impact the user's environment. However, if the
50
+ actual parameters provided clearly indicate safe and restricted
51
51
  usage, this risk should be downgraded accordingly.
52
52
 
53
- When evaluating, always consider both the function's description and its
54
- specific parameters. If the function appears risky due to its design but
55
- the provided parameters indicate a safe and non-impactful operation,
56
- adjust the risk score to reflect this. Assign an appropriate risk score
57
- and provide a brief explanation of your reasoning based on the function's
53
+ When evaluating, always consider both the function's description and its
54
+ specific parameters. If the function appears risky due to its design but
55
+ the provided parameters indicate a safe and non-impactful operation,
56
+ adjust the risk score to reflect this. Assign an appropriate risk score
57
+ and provide a brief explanation of your reasoning based on the function's
58
58
  description and the actual parameters given.
59
- YOU MUST USE THE `function_risk` TOOL TO ASSESS THE RISK
59
+ YOU MUST USE THE `function_risk` TOOL TO ASSESS THE RISK
60
60
  LEVEL OF EACH FUNCTION.
61
61
  """
62
62