camel-ai 0.2.59__py3-none-any.whl → 0.2.82__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 (506) 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 +5012 -902
  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 +39 -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 +94 -0
  28. camel/benchmarks/mock_website/mock_web.py +299 -0
  29. camel/benchmarks/mock_website/requirements.txt +3 -0
  30. camel/benchmarks/mock_website/shopping_mall/app.py +465 -0
  31. camel/benchmarks/mock_website/task.json +104 -0
  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 +26 -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 +8 -7
  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 +3 -3
  52. camel/configs/cometapi_config.py +106 -0
  53. camel/configs/crynux_config.py +94 -0
  54. camel/configs/deepseek_config.py +9 -8
  55. camel/configs/gemini_config.py +6 -4
  56. camel/configs/groq_config.py +6 -4
  57. camel/configs/internlm_config.py +6 -4
  58. camel/configs/litellm_config.py +2 -2
  59. camel/configs/lmstudio_config.py +6 -4
  60. camel/configs/minimax_config.py +95 -0
  61. camel/configs/mistral_config.py +3 -3
  62. camel/configs/modelscope_config.py +5 -3
  63. camel/configs/moonshot_config.py +2 -2
  64. camel/configs/nebius_config.py +105 -0
  65. camel/configs/netmind_config.py +2 -2
  66. camel/configs/novita_config.py +2 -2
  67. camel/configs/nvidia_config.py +2 -2
  68. camel/configs/ollama_config.py +2 -2
  69. camel/configs/openai_config.py +8 -3
  70. camel/configs/openrouter_config.py +6 -4
  71. camel/configs/ppio_config.py +2 -2
  72. camel/configs/qianfan_config.py +85 -0
  73. camel/configs/qwen_config.py +2 -2
  74. camel/configs/reka_config.py +3 -3
  75. camel/configs/samba_config.py +8 -6
  76. camel/configs/sglang_config.py +2 -2
  77. camel/configs/siliconflow_config.py +2 -2
  78. camel/configs/togetherai_config.py +2 -2
  79. camel/configs/vllm_config.py +4 -2
  80. camel/configs/watsonx_config.py +2 -2
  81. camel/configs/yi_config.py +6 -4
  82. camel/configs/zhipuai_config.py +6 -4
  83. camel/{data_collector → data_collectors}/__init__.py +2 -2
  84. camel/{data_collector → data_collectors}/alpaca_collector.py +19 -10
  85. camel/{data_collector → data_collectors}/base.py +2 -2
  86. camel/{data_collector → data_collectors}/sharegpt_collector.py +3 -3
  87. camel/datagen/__init__.py +2 -2
  88. camel/datagen/cot_datagen.py +32 -37
  89. camel/datagen/evol_instruct/__init__.py +2 -2
  90. camel/datagen/evol_instruct/evol_instruct.py +2 -2
  91. camel/datagen/evol_instruct/scorer.py +24 -25
  92. camel/datagen/evol_instruct/templates.py +48 -48
  93. camel/datagen/self_improving_cot.py +5 -5
  94. camel/datagen/self_instruct/__init__.py +2 -2
  95. camel/datagen/self_instruct/filter/__init__.py +2 -2
  96. camel/datagen/self_instruct/filter/filter_function.py +2 -2
  97. camel/datagen/self_instruct/filter/filter_registry.py +2 -2
  98. camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
  99. camel/datagen/self_instruct/self_instruct.py +2 -2
  100. camel/datagen/self_instruct/templates.py +47 -47
  101. camel/datagen/source2synth/__init__.py +2 -2
  102. camel/datagen/source2synth/data_processor.py +2 -2
  103. camel/datagen/source2synth/models.py +2 -2
  104. camel/datagen/source2synth/user_data_processor_config.py +2 -2
  105. camel/datahubs/__init__.py +2 -2
  106. camel/datahubs/base.py +2 -2
  107. camel/datahubs/huggingface.py +2 -2
  108. camel/datahubs/models.py +2 -2
  109. camel/datasets/__init__.py +2 -2
  110. camel/datasets/base_generator.py +41 -12
  111. camel/datasets/few_shot_generator.py +18 -18
  112. camel/datasets/models.py +3 -3
  113. camel/datasets/self_instruct_generator.py +2 -2
  114. camel/datasets/static_dataset.py +152 -2
  115. camel/embeddings/__init__.py +2 -2
  116. camel/embeddings/azure_embedding.py +2 -2
  117. camel/embeddings/base.py +2 -2
  118. camel/embeddings/gemini_embedding.py +2 -2
  119. camel/embeddings/jina_embedding.py +10 -3
  120. camel/embeddings/mistral_embedding.py +2 -2
  121. camel/embeddings/openai_compatible_embedding.py +2 -2
  122. camel/embeddings/openai_embedding.py +2 -2
  123. camel/embeddings/sentence_transformers_embeddings.py +4 -4
  124. camel/embeddings/together_embedding.py +2 -2
  125. camel/embeddings/vlm_embedding.py +11 -4
  126. camel/environments/__init__.py +14 -2
  127. camel/environments/models.py +2 -2
  128. camel/environments/multi_step.py +2 -2
  129. camel/environments/rlcards_env.py +860 -0
  130. camel/environments/single_step.py +30 -5
  131. camel/environments/tic_tac_toe.py +3 -3
  132. camel/extractors/__init__.py +2 -2
  133. camel/extractors/base.py +2 -2
  134. camel/extractors/python_strategies.py +2 -2
  135. camel/generators.py +2 -2
  136. camel/human.py +2 -2
  137. camel/interpreters/__init__.py +4 -2
  138. camel/interpreters/base.py +16 -3
  139. camel/interpreters/docker/Dockerfile +53 -7
  140. camel/interpreters/docker_interpreter.py +70 -11
  141. camel/interpreters/e2b_interpreter.py +59 -11
  142. camel/interpreters/internal_python_interpreter.py +81 -4
  143. camel/interpreters/interpreter_error.py +2 -2
  144. camel/interpreters/ipython_interpreter.py +23 -5
  145. camel/interpreters/microsandbox_interpreter.py +395 -0
  146. camel/interpreters/subprocess_interpreter.py +36 -4
  147. camel/loaders/__init__.py +17 -5
  148. camel/loaders/apify_reader.py +2 -2
  149. camel/loaders/base_io.py +2 -2
  150. camel/loaders/base_loader.py +85 -0
  151. camel/loaders/chunkr_reader.py +128 -93
  152. camel/loaders/crawl4ai_reader.py +2 -2
  153. camel/loaders/firecrawl_reader.py +6 -6
  154. camel/loaders/jina_url_reader.py +2 -2
  155. camel/loaders/markitdown.py +2 -2
  156. camel/loaders/mineru_extractor.py +2 -2
  157. camel/loaders/mistral_reader.py +148 -0
  158. camel/loaders/scrapegraph_reader.py +2 -2
  159. camel/loaders/unstructured_io.py +2 -2
  160. camel/logger.py +5 -5
  161. camel/memories/__init__.py +2 -2
  162. camel/memories/agent_memories.py +86 -3
  163. camel/memories/base.py +36 -2
  164. camel/memories/blocks/__init__.py +2 -2
  165. camel/memories/blocks/chat_history_block.py +126 -9
  166. camel/memories/blocks/vectordb_block.py +10 -3
  167. camel/memories/context_creators/__init__.py +2 -2
  168. camel/memories/context_creators/score_based.py +31 -239
  169. camel/memories/records.py +98 -13
  170. camel/messages/__init__.py +2 -2
  171. camel/messages/base.py +193 -46
  172. camel/messages/conversion/__init__.py +2 -2
  173. camel/messages/conversion/alpaca.py +2 -2
  174. camel/messages/conversion/conversation_models.py +2 -2
  175. camel/messages/conversion/sharegpt/__init__.py +2 -2
  176. camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
  177. camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
  178. camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
  179. camel/messages/func_message.py +54 -17
  180. camel/models/__init__.py +18 -2
  181. camel/models/_utils.py +3 -3
  182. camel/models/aihubmix_model.py +83 -0
  183. camel/models/aiml_model.py +11 -18
  184. camel/models/amd_model.py +101 -0
  185. camel/models/anthropic_model.py +127 -20
  186. camel/models/aws_bedrock_model.py +12 -35
  187. camel/models/azure_openai_model.py +263 -63
  188. camel/models/base_audio_model.py +5 -3
  189. camel/models/base_model.py +195 -26
  190. camel/models/cerebras_model.py +83 -0
  191. camel/models/cohere_model.py +81 -21
  192. camel/models/cometapi_model.py +83 -0
  193. camel/models/crynux_model.py +87 -0
  194. camel/models/deepseek_model.py +61 -59
  195. camel/models/fish_audio_model.py +8 -2
  196. camel/models/gemini_model.py +439 -30
  197. camel/models/groq_model.py +11 -19
  198. camel/models/internlm_model.py +11 -18
  199. camel/models/litellm_model.py +94 -34
  200. camel/models/lmstudio_model.py +17 -20
  201. camel/models/minimax_model.py +83 -0
  202. camel/models/mistral_model.py +84 -19
  203. camel/models/model_factory.py +49 -6
  204. camel/models/model_manager.py +33 -11
  205. camel/models/modelscope_model.py +13 -193
  206. camel/models/moonshot_model.py +195 -21
  207. camel/models/nebius_model.py +83 -0
  208. camel/models/nemotron_model.py +19 -9
  209. camel/models/netmind_model.py +11 -18
  210. camel/models/novita_model.py +11 -18
  211. camel/models/nvidia_model.py +11 -18
  212. camel/models/ollama_model.py +14 -21
  213. camel/models/openai_audio_models.py +2 -2
  214. camel/models/openai_compatible_model.py +234 -27
  215. camel/models/openai_model.py +255 -39
  216. camel/models/openrouter_model.py +11 -19
  217. camel/models/ppio_model.py +11 -18
  218. camel/models/qianfan_model.py +89 -0
  219. camel/models/qwen_model.py +13 -193
  220. camel/models/reka_model.py +90 -21
  221. camel/models/reward/__init__.py +2 -2
  222. camel/models/reward/base_reward_model.py +2 -2
  223. camel/models/reward/evaluator.py +2 -2
  224. camel/models/reward/nemotron_model.py +2 -2
  225. camel/models/reward/skywork_model.py +2 -2
  226. camel/models/samba_model.py +117 -49
  227. camel/models/sglang_model.py +162 -42
  228. camel/models/siliconflow_model.py +12 -35
  229. camel/models/stub_model.py +10 -7
  230. camel/models/togetherai_model.py +11 -18
  231. camel/models/vllm_model.py +10 -18
  232. camel/models/volcano_model.py +16 -20
  233. camel/models/watsonx_model.py +69 -19
  234. camel/models/yi_model.py +11 -18
  235. camel/models/zhipuai_model.py +70 -18
  236. camel/parsers/__init__.py +18 -0
  237. camel/parsers/mcp_tool_call_parser.py +176 -0
  238. camel/personas/__init__.py +2 -2
  239. camel/personas/persona.py +2 -2
  240. camel/personas/persona_hub.py +2 -2
  241. camel/prompts/__init__.py +2 -2
  242. camel/prompts/ai_society.py +2 -2
  243. camel/prompts/base.py +2 -2
  244. camel/prompts/code.py +2 -2
  245. camel/prompts/evaluation.py +2 -2
  246. camel/prompts/generate_text_embedding_data.py +2 -2
  247. camel/prompts/image_craft.py +2 -2
  248. camel/prompts/misalignment.py +2 -2
  249. camel/prompts/multi_condition_image_craft.py +2 -2
  250. camel/prompts/object_recognition.py +2 -2
  251. camel/prompts/persona_hub.py +3 -3
  252. camel/prompts/prompt_templates.py +2 -2
  253. camel/prompts/role_description_prompt_template.py +2 -2
  254. camel/prompts/solution_extraction.py +8 -8
  255. camel/prompts/task_prompt_template.py +2 -2
  256. camel/prompts/translation.py +2 -2
  257. camel/prompts/video_description_prompt.py +3 -3
  258. camel/responses/__init__.py +2 -2
  259. camel/responses/agent_responses.py +2 -2
  260. camel/retrievers/__init__.py +2 -2
  261. camel/retrievers/auto_retriever.py +23 -3
  262. camel/retrievers/base.py +2 -2
  263. camel/retrievers/bm25_retriever.py +3 -4
  264. camel/retrievers/cohere_rerank_retriever.py +2 -2
  265. camel/retrievers/hybrid_retrival.py +4 -4
  266. camel/retrievers/vector_retriever.py +2 -2
  267. camel/runtimes/Dockerfile.multi-toolkit +90 -0
  268. camel/{runtime → runtimes}/__init__.py +2 -2
  269. camel/runtimes/api.py +153 -0
  270. camel/{runtime → runtimes}/base.py +2 -2
  271. camel/{runtime → runtimes}/configs.py +13 -13
  272. camel/{runtime → runtimes}/daytona_runtime.py +18 -19
  273. camel/{runtime → runtimes}/docker_runtime.py +13 -13
  274. camel/{runtime → runtimes}/llm_guard_runtime.py +28 -28
  275. camel/{runtime → runtimes}/remote_http_runtime.py +12 -12
  276. camel/{runtime → runtimes}/ubuntu_docker_runtime.py +3 -3
  277. camel/{runtime → runtimes}/utils/__init__.py +2 -2
  278. camel/{runtime → runtimes}/utils/function_risk_toolkit.py +2 -2
  279. camel/{runtime → runtimes}/utils/ignore_risk_toolkit.py +2 -2
  280. camel/schemas/__init__.py +2 -2
  281. camel/schemas/base.py +2 -2
  282. camel/schemas/openai_converter.py +3 -3
  283. camel/schemas/outlines_converter.py +2 -2
  284. camel/services/agent_openapi_server.py +380 -0
  285. camel/societies/__init__.py +4 -2
  286. camel/societies/babyagi_playing.py +2 -2
  287. camel/societies/role_playing.py +201 -80
  288. camel/societies/workforce/__init__.py +10 -3
  289. camel/societies/workforce/base.py +9 -5
  290. camel/societies/workforce/events.py +143 -0
  291. camel/societies/workforce/prompts.py +258 -33
  292. camel/societies/workforce/role_playing_worker.py +95 -30
  293. camel/societies/workforce/single_agent_worker.py +659 -30
  294. camel/societies/workforce/structured_output_handler.py +512 -0
  295. camel/societies/workforce/task_channel.py +182 -38
  296. camel/societies/workforce/utils.py +784 -18
  297. camel/societies/workforce/worker.py +96 -28
  298. camel/societies/workforce/workflow_memory_manager.py +1746 -0
  299. camel/societies/workforce/workforce.py +5730 -366
  300. camel/societies/workforce/workforce_callback.py +103 -0
  301. camel/societies/workforce/workforce_logger.py +647 -0
  302. camel/societies/workforce/workforce_metrics.py +33 -0
  303. camel/storages/__init__.py +10 -2
  304. camel/storages/graph_storages/__init__.py +2 -2
  305. camel/storages/graph_storages/base.py +2 -2
  306. camel/storages/graph_storages/graph_element.py +2 -2
  307. camel/storages/graph_storages/nebula_graph.py +4 -4
  308. camel/storages/graph_storages/neo4j_graph.py +7 -7
  309. camel/storages/key_value_storages/__init__.py +2 -2
  310. camel/storages/key_value_storages/base.py +2 -2
  311. camel/storages/key_value_storages/in_memory.py +2 -2
  312. camel/storages/key_value_storages/json.py +17 -4
  313. camel/storages/key_value_storages/mem0_cloud.py +50 -49
  314. camel/storages/key_value_storages/redis.py +2 -2
  315. camel/storages/object_storages/__init__.py +2 -2
  316. camel/storages/object_storages/amazon_s3.py +2 -2
  317. camel/storages/object_storages/azure_blob.py +2 -2
  318. camel/storages/object_storages/base.py +2 -2
  319. camel/storages/object_storages/google_cloud.py +3 -3
  320. camel/storages/vectordb_storages/__init__.py +12 -2
  321. camel/storages/vectordb_storages/base.py +2 -2
  322. camel/storages/vectordb_storages/chroma.py +731 -0
  323. camel/storages/vectordb_storages/faiss.py +712 -0
  324. camel/storages/vectordb_storages/milvus.py +2 -2
  325. camel/storages/vectordb_storages/oceanbase.py +16 -17
  326. camel/storages/vectordb_storages/pgvector.py +349 -0
  327. camel/storages/vectordb_storages/qdrant.py +6 -6
  328. camel/storages/vectordb_storages/surreal.py +372 -0
  329. camel/storages/vectordb_storages/tidb.py +11 -8
  330. camel/storages/vectordb_storages/weaviate.py +714 -0
  331. camel/tasks/__init__.py +2 -2
  332. camel/tasks/task.py +366 -27
  333. camel/tasks/task_prompt.py +3 -3
  334. camel/terminators/__init__.py +2 -2
  335. camel/terminators/base.py +2 -2
  336. camel/terminators/response_terminator.py +2 -2
  337. camel/terminators/token_limit_terminator.py +2 -2
  338. camel/toolkits/__init__.py +58 -10
  339. camel/toolkits/aci_toolkit.py +66 -21
  340. camel/toolkits/arxiv_toolkit.py +8 -8
  341. camel/toolkits/ask_news_toolkit.py +2 -2
  342. camel/toolkits/async_browser_toolkit.py +174 -575
  343. camel/toolkits/audio_analysis_toolkit.py +3 -3
  344. camel/toolkits/base.py +65 -7
  345. camel/toolkits/bohrium_toolkit.py +318 -0
  346. camel/toolkits/browser_toolkit.py +306 -566
  347. camel/toolkits/browser_toolkit_commons.py +568 -0
  348. camel/toolkits/code_execution.py +67 -11
  349. camel/toolkits/context_summarizer_toolkit.py +684 -0
  350. camel/toolkits/craw4ai_toolkit.py +93 -0
  351. camel/toolkits/dappier_toolkit.py +12 -8
  352. camel/toolkits/data_commons_toolkit.py +2 -2
  353. camel/toolkits/dingtalk.py +1135 -0
  354. camel/toolkits/earth_science_toolkit.py +5367 -0
  355. camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
  356. camel/toolkits/excel_toolkit.py +910 -70
  357. camel/toolkits/file_toolkit.py +1402 -0
  358. camel/toolkits/function_tool.py +128 -20
  359. camel/toolkits/github_toolkit.py +148 -43
  360. camel/toolkits/gmail_toolkit.py +1839 -0
  361. camel/toolkits/google_calendar_toolkit.py +40 -6
  362. camel/toolkits/google_drive_mcp_toolkit.py +54 -0
  363. camel/toolkits/google_maps_toolkit.py +2 -2
  364. camel/toolkits/google_scholar_toolkit.py +2 -2
  365. camel/toolkits/human_toolkit.py +36 -12
  366. camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
  367. camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
  368. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
  369. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1973 -0
  370. camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
  371. camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
  372. camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
  373. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
  374. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1929 -0
  375. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
  376. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
  377. camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
  378. camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
  379. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
  380. camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
  381. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
  382. camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
  383. camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +319 -0
  384. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
  385. camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
  386. camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
  387. camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
  388. camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
  389. camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
  390. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
  391. camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
  392. camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
  393. camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
  394. camel/toolkits/image_analysis_toolkit.py +3 -3
  395. camel/toolkits/image_generation_toolkit.py +390 -0
  396. camel/toolkits/jina_reranker_toolkit.py +195 -79
  397. camel/toolkits/klavis_toolkit.py +7 -3
  398. camel/toolkits/linkedin_toolkit.py +2 -2
  399. camel/toolkits/markitdown_toolkit.py +104 -0
  400. camel/toolkits/math_toolkit.py +66 -12
  401. camel/toolkits/mcp_toolkit.py +841 -600
  402. camel/toolkits/memory_toolkit.py +7 -3
  403. camel/toolkits/meshy_toolkit.py +2 -2
  404. camel/toolkits/message_agent_toolkit.py +608 -0
  405. camel/toolkits/message_integration.py +724 -0
  406. camel/toolkits/mineru_toolkit.py +2 -2
  407. camel/toolkits/minimax_mcp_toolkit.py +195 -0
  408. camel/toolkits/networkx_toolkit.py +2 -2
  409. camel/toolkits/note_taking_toolkit.py +277 -0
  410. camel/toolkits/notion_mcp_toolkit.py +224 -0
  411. camel/toolkits/notion_toolkit.py +2 -2
  412. camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
  413. camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
  414. camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
  415. camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
  416. camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
  417. camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
  418. camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
  419. camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
  420. camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
  421. camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
  422. camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
  423. camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
  424. camel/toolkits/open_api_specs/security_config.py +2 -2
  425. camel/toolkits/open_api_specs/speak/__init__.py +2 -2
  426. camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
  427. camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
  428. camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
  429. camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
  430. camel/toolkits/open_api_toolkit.py +2 -2
  431. camel/toolkits/openbb_toolkit.py +7 -3
  432. camel/toolkits/origene_mcp_toolkit.py +56 -0
  433. camel/toolkits/page_script.js +86 -74
  434. camel/toolkits/playwright_mcp_toolkit.py +27 -32
  435. camel/toolkits/pptx_toolkit.py +790 -0
  436. camel/toolkits/pubmed_toolkit.py +2 -2
  437. camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
  438. camel/toolkits/pyautogui_toolkit.py +2 -2
  439. camel/toolkits/reddit_toolkit.py +2 -2
  440. camel/toolkits/resend_toolkit.py +168 -0
  441. camel/toolkits/retrieval_toolkit.py +2 -2
  442. camel/toolkits/screenshot_toolkit.py +213 -0
  443. camel/toolkits/search_toolkit.py +539 -146
  444. camel/toolkits/searxng_toolkit.py +2 -2
  445. camel/toolkits/semantic_scholar_toolkit.py +2 -2
  446. camel/toolkits/slack_toolkit.py +108 -58
  447. camel/toolkits/sql_toolkit.py +712 -0
  448. camel/toolkits/stripe_toolkit.py +2 -2
  449. camel/toolkits/sympy_toolkit.py +3 -3
  450. camel/toolkits/task_planning_toolkit.py +134 -0
  451. camel/toolkits/terminal_toolkit/__init__.py +18 -0
  452. camel/toolkits/terminal_toolkit/terminal_toolkit.py +1070 -0
  453. camel/toolkits/terminal_toolkit/utils.py +532 -0
  454. camel/toolkits/thinking_toolkit.py +3 -3
  455. camel/toolkits/twitter_toolkit.py +8 -3
  456. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  457. camel/toolkits/video_analysis_toolkit.py +112 -29
  458. camel/toolkits/video_download_toolkit.py +22 -16
  459. camel/toolkits/weather_toolkit.py +2 -2
  460. camel/toolkits/web_deploy_toolkit.py +1219 -0
  461. camel/toolkits/wechat_official_toolkit.py +483 -0
  462. camel/toolkits/whatsapp_toolkit.py +2 -2
  463. camel/toolkits/wolfram_alpha_toolkit.py +53 -25
  464. camel/toolkits/zapier_toolkit.py +7 -3
  465. camel/types/__init__.py +4 -4
  466. camel/types/agents/__init__.py +2 -2
  467. camel/types/agents/tool_calling_record.py +6 -3
  468. camel/types/enums.py +454 -35
  469. camel/types/mcp_registries.py +2 -2
  470. camel/types/openai_types.py +4 -4
  471. camel/types/unified_model_type.py +43 -6
  472. camel/utils/__init__.py +20 -2
  473. camel/utils/async_func.py +2 -2
  474. camel/utils/chunker/__init__.py +2 -2
  475. camel/utils/chunker/base.py +2 -2
  476. camel/utils/chunker/code_chunker.py +2 -2
  477. camel/utils/chunker/uio_chunker.py +2 -2
  478. camel/utils/commons.py +65 -7
  479. camel/utils/constants.py +5 -2
  480. camel/utils/context_utils.py +1134 -0
  481. camel/utils/deduplication.py +2 -2
  482. camel/utils/filename.py +2 -2
  483. camel/utils/langfuse.py +258 -0
  484. camel/utils/mcp.py +140 -6
  485. camel/utils/mcp_client.py +1056 -0
  486. camel/utils/message_summarizer.py +148 -0
  487. camel/utils/response_format.py +2 -2
  488. camel/utils/token_counting.py +45 -22
  489. camel/utils/tool_result.py +44 -0
  490. camel/verifiers/__init__.py +2 -2
  491. camel/verifiers/base.py +2 -2
  492. camel/verifiers/math_verifier.py +2 -2
  493. camel/verifiers/models.py +2 -2
  494. camel/verifiers/physics_verifier.py +2 -2
  495. camel/verifiers/python_verifier.py +2 -2
  496. {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/METADATA +349 -108
  497. camel_ai-0.2.82.dist-info/RECORD +507 -0
  498. {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/WHEEL +1 -1
  499. {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/licenses/LICENSE +1 -1
  500. camel/loaders/pandas_reader.py +0 -368
  501. camel/runtime/api.py +0 -97
  502. camel/toolkits/dalle_toolkit.py +0 -171
  503. camel/toolkits/file_write_toolkit.py +0 -395
  504. camel/toolkits/openai_agent_toolkit.py +0 -135
  505. camel/toolkits/terminal_toolkit.py +0 -1037
  506. camel_ai-0.2.59.dist-info/RECORD +0 -410
@@ -1,6 +1,6 @@
1
1
  var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
2
2
  let nextLabel = 10;
3
-
3
+
4
4
  let roleMapping = {
5
5
  "a": "link",
6
6
  "area": "link",
@@ -22,23 +22,23 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
22
22
  "option": "option",
23
23
  "textarea": "textbox"
24
24
  };
25
-
25
+
26
26
  let getCursor = function(elm) {
27
27
  return window.getComputedStyle(elm)["cursor"];
28
28
  };
29
-
29
+
30
30
  let getInteractiveElements = function() {
31
-
31
+
32
32
  let results = []
33
33
  let roles = ["scrollbar", "searchbox", "slider", "spinbutton", "switch", "tab", "treeitem", "button", "checkbox", "gridcell", "link", "menuitem", "menuitemcheckbox", "menuitemradio", "option", "progressbar", "radio", "textbox", "combobox", "menu", "tree", "treegrid", "grid", "listbox", "radiogroup", "widget"];
34
34
  let inertCursors = ["auto", "default", "none", "text", "vertical-text", "not-allowed", "no-drop"];
35
-
35
+
36
36
  // Get the main interactive elements
37
37
  let nodeList = document.querySelectorAll("input, select, textarea, button, [href], [onclick], [contenteditable], [tabindex]:not([tabindex='-1'])");
38
38
  for (let i=0; i<nodeList.length; i++) { // Copy to something mutable
39
39
  results.push(nodeList[i]);
40
40
  }
41
-
41
+
42
42
  // Anything not already included that has a suitable role
43
43
  nodeList = document.querySelectorAll("[role]");
44
44
  for (let i=0; i<nodeList.length; i++) { // Copy to something mutable
@@ -49,34 +49,34 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
49
49
  }
50
50
  }
51
51
  }
52
-
52
+
53
53
  // Any element that changes the cursor to something implying interactivity
54
54
  nodeList = document.querySelectorAll("*");
55
55
  for (let i=0; i<nodeList.length; i++) {
56
56
  let node = nodeList[i];
57
-
57
+
58
58
  // Cursor is default, or does not suggest interactivity
59
59
  let cursor = getCursor(node);
60
60
  if (inertCursors.indexOf(cursor) >= 0) {
61
61
  continue;
62
62
  }
63
-
63
+
64
64
  // Move up to the first instance of this cursor change
65
65
  parent = node.parentNode;
66
66
  while (parent && getCursor(parent) == cursor) {
67
67
  node = parent;
68
68
  parent = node.parentNode;
69
69
  }
70
-
70
+
71
71
  // Add the node if it is new
72
72
  if (results.indexOf(node) == -1) {
73
73
  results.push(node);
74
74
  }
75
75
  }
76
-
76
+
77
77
  return results;
78
78
  };
79
-
79
+
80
80
  let labelElements = function(elements) {
81
81
  for (let i=0; i<elements.length; i++) {
82
82
  if (!elements[i].hasAttribute("__elementId")) {
@@ -84,22 +84,22 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
84
84
  }
85
85
  }
86
86
  };
87
-
87
+
88
88
  let isTopmost = function(element, x, y) {
89
89
  let hit = document.elementFromPoint(x, y);
90
-
90
+
91
91
  // Hack to handle elements outside the viewport
92
92
  if (hit === null) {
93
- return true;
93
+ return true;
94
94
  }
95
-
95
+
96
96
  while (hit) {
97
97
  if (hit == element) return true;
98
98
  hit = hit.parentNode;
99
99
  }
100
100
  return false;
101
101
  };
102
-
102
+
103
103
  let getFocusedElementId = function() {
104
104
  let elm = document.activeElement;
105
105
  while (elm) {
@@ -110,7 +110,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
110
110
  }
111
111
  return null;
112
112
  };
113
-
113
+
114
114
  let trimmedInnerText = function(element) {
115
115
  if (!element) {
116
116
  return "";
@@ -121,7 +121,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
121
121
  }
122
122
  return text.trim();
123
123
  };
124
-
124
+
125
125
  let getApproximateAriaName = function(element) {
126
126
  // Check for aria labels
127
127
  if (element.hasAttribute("aria-labelledby")) {
@@ -135,11 +135,11 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
135
135
  }
136
136
  return buffer.trim();
137
137
  }
138
-
138
+
139
139
  if (element.hasAttribute("aria-label")) {
140
140
  return element.getAttribute("aria-label");
141
141
  }
142
-
142
+
143
143
  // Check for labels
144
144
  if (element.hasAttribute("id")) {
145
145
  let label_id = element.getAttribute("id");
@@ -153,29 +153,29 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
153
153
  return label;
154
154
  }
155
155
  }
156
-
156
+
157
157
  if (element.parentElement && element.parentElement.tagName == "LABEL") {
158
158
  return element.parentElement.innerText;
159
159
  }
160
-
160
+
161
161
  // Check for alt text or titles
162
162
  if (element.hasAttribute("alt")) {
163
163
  return element.getAttribute("alt")
164
164
  }
165
-
165
+
166
166
  if (element.hasAttribute("title")) {
167
167
  return element.getAttribute("title")
168
168
  }
169
-
169
+
170
170
  return trimmedInnerText(element);
171
171
  };
172
-
172
+
173
173
  let getApproximateAriaRole = function(element) {
174
174
  let tag = element.tagName.toLowerCase();
175
175
  if (tag == "input" && element.hasAttribute("type")) {
176
176
  tag = tag + ", type=" + element.getAttribute("type");
177
177
  }
178
-
178
+
179
179
  if (element.hasAttribute("role")) {
180
180
  return [element.getAttribute("role"), tag];
181
181
  }
@@ -186,41 +186,53 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
186
186
  return ["", tag];
187
187
  }
188
188
  };
189
-
189
+
190
190
  let getInteractiveRects = function() {
191
191
  labelElements(getInteractiveElements());
192
192
  let elements = document.querySelectorAll("[__elementId]");
193
193
  let results = {};
194
- for (let i=0; i<elements.length; i++) {
195
- let key = elements[i].getAttribute("__elementId");
196
- let rects = elements[i].getClientRects();
197
- let ariaRole = getApproximateAriaRole(elements[i]);
198
- let ariaName = getApproximateAriaName(elements[i]);
199
- let vScrollable = elements[i].scrollHeight - elements[i].clientHeight >= 1;
200
-
201
- let record = {
202
- "tag_name": ariaRole[1],
203
- "role": ariaRole[0],
204
- "aria-name": ariaName,
205
- "v-scrollable": vScrollable,
206
- "rects": []
207
- };
208
-
209
- for (const rect of rects) {
210
- let x = rect.left + rect.width/2;
211
- let y = rect.top + rect.height/2;
212
- if (isTopmost(elements[i], x, y)) {
213
- record["rects"].push(JSON.parse(JSON.stringify(rect)));
214
- }
215
- }
216
-
217
- if (record["rects"].length > 0) {
218
- results[key] = record;
219
- }
194
+ let scale = window.devicePixelRatio || 1;
195
+
196
+ for (let i = 0; i < elements.length; i++) {
197
+ let key = elements[i].getAttribute("__elementId");
198
+ let rects = elements[i].getClientRects();
199
+ let ariaRole = getApproximateAriaRole(elements[i]);
200
+ let ariaName = getApproximateAriaName(elements[i]);
201
+ let vScrollable = elements[i].scrollHeight - elements[i].clientHeight >= 1;
202
+
203
+ let record = {
204
+ "tag_name": ariaRole[1],
205
+ "role": ariaRole[0],
206
+ "aria-name": ariaName,
207
+ "v-scrollable": vScrollable,
208
+ "rects": []
209
+ };
210
+
211
+ for (const rect of rects) {
212
+ let x = rect.left + rect.width / 2;
213
+ let y = rect.top + rect.height / 2;
214
+ if (isTopmost(elements[i], x, y)) {
215
+ record["rects"].push({
216
+ x: rect.x * scale,
217
+ y: rect.y * scale,
218
+ width: rect.width * scale,
219
+ height: rect.height * scale,
220
+ top: rect.top * scale,
221
+ left: rect.left * scale,
222
+ right: rect.right * scale,
223
+ bottom: rect.bottom * scale
224
+ });
225
+ }
226
+ }
227
+
228
+ if (record["rects"].length > 0) {
229
+ results[key] = record;
230
+ }
220
231
  }
232
+
221
233
  return results;
222
234
  };
223
-
235
+
224
236
  let getVisualViewport = function() {
225
237
  let vv = window.visualViewport;
226
238
  let de = document.documentElement;
@@ -238,7 +250,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
238
250
  "scrollHeight": de ? de.scrollHeight : 0
239
251
  };
240
252
  };
241
-
253
+
242
254
  let _getMetaTags = function() {
243
255
  let meta = document.querySelectorAll("meta");
244
256
  let results = {};
@@ -259,7 +271,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
259
271
  }
260
272
  return results;
261
273
  };
262
-
274
+
263
275
  let _getJsonLd = function() {
264
276
  let jsonld = [];
265
277
  let scripts = document.querySelectorAll('script[type="application/ld+json"]');
@@ -268,13 +280,13 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
268
280
  }
269
281
  return jsonld;
270
282
  };
271
-
283
+
272
284
  // From: https://www.stevefenton.co.uk/blog/2022/12/parse-microdata-with-javascript/
273
285
  let _getMicrodata = function() {
274
286
  function sanitize(input) {
275
287
  return input.replace(/\s/gi, ' ').trim();
276
288
  }
277
-
289
+
278
290
  function addValue(information, name, value) {
279
291
  if (information[name]) {
280
292
  if (typeof information[name] === 'array') {
@@ -289,29 +301,29 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
289
301
  information[name] = value;
290
302
  }
291
303
  }
292
-
304
+
293
305
  function traverseItem(item, information) {
294
306
  const children = item.children;
295
-
307
+
296
308
  for (let i = 0; i < children.length; i++) {
297
309
  const child = children[i];
298
-
310
+
299
311
  if (child.hasAttribute('itemscope')) {
300
312
  if (child.hasAttribute('itemprop')) {
301
313
  const itemProp = child.getAttribute('itemprop');
302
314
  const itemType = child.getAttribute('itemtype');
303
-
315
+
304
316
  const childInfo = {
305
317
  itemType: itemType
306
318
  };
307
-
319
+
308
320
  traverseItem(child, childInfo);
309
-
321
+
310
322
  itemProp.split(' ').forEach(propName => {
311
323
  addValue(information, propName, childInfo);
312
324
  });
313
325
  }
314
-
326
+
315
327
  } else if (child.hasAttribute('itemprop')) {
316
328
  const itemProp = child.getAttribute('itemprop');
317
329
  itemProp.split(' ').forEach(propName => {
@@ -327,9 +339,9 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
327
339
  }
328
340
  }
329
341
  }
330
-
342
+
331
343
  const microdata = [];
332
-
344
+
333
345
  document.querySelectorAll("[itemscope]").forEach(function(elem, i) {
334
346
  const itemType = elem.getAttribute('itemtype');
335
347
  const information = {
@@ -338,10 +350,10 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
338
350
  traverseItem(elem, information);
339
351
  microdata.push(information);
340
352
  });
341
-
353
+
342
354
  return microdata;
343
355
  };
344
-
356
+
345
357
  let getPageMetadata = function() {
346
358
  let jsonld = _getJsonLd();
347
359
  let metaTags = _getMetaTags();
@@ -350,7 +362,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
350
362
  if (jsonld.length > 0) {
351
363
  try {
352
364
  results["jsonld"] = JSON.parse(jsonld);
353
- }
365
+ }
354
366
  catch (e) {
355
367
  results["jsonld"] = jsonld;
356
368
  }
@@ -365,12 +377,12 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
365
377
  }
366
378
  }
367
379
  return results;
368
- };
369
-
380
+ };
381
+
370
382
  return {
371
383
  getInteractiveRects: getInteractiveRects,
372
384
  getVisualViewport: getVisualViewport,
373
385
  getFocusedElementId: getFocusedElementId,
374
386
  getPageMetadata: getPageMetadata,
375
387
  };
376
- })();
388
+ })();
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2025 @ 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,16 +10,14 @@
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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
 
15
15
  from typing import List, Optional
16
16
 
17
- from camel.toolkits import BaseToolkit, FunctionTool
18
-
19
17
  from .mcp_toolkit import MCPToolkit
20
18
 
21
19
 
22
- class PlaywrightMCPToolkit(BaseToolkit):
20
+ class PlaywrightMCPToolkit(MCPToolkit):
23
21
  r"""PlaywrightMCPToolkit provides an interface for interacting with web
24
22
  browsers using the Playwright automation library through the Model Context
25
23
  Protocol (MCP).
@@ -27,43 +25,40 @@ class PlaywrightMCPToolkit(BaseToolkit):
27
25
  Attributes:
28
26
  timeout (Optional[float]): Connection timeout in seconds.
29
27
  (default: :obj:`None`)
28
+ additional_args (Optional[List[str]]): Additional command-line
29
+ arguments to pass to the Playwright MCP server. For example,
30
+ `["--cdp-endpoint=http://localhost:9222"]`.
31
+ (default: :obj:`None`)
30
32
 
31
33
  Note:
32
34
  Currently only supports asynchronous operation mode.
33
35
  """
34
36
 
35
- def __init__(self, timeout: Optional[float] = None) -> None:
36
- r"""Initializes the PlaywrightMCPToolkit with the specified timeout.
37
+ def __init__(
38
+ self,
39
+ timeout: Optional[float] = None,
40
+ additional_args: Optional[List[str]] = None,
41
+ ) -> None:
42
+ r"""Initializes the PlaywrightMCPToolkit.
37
43
 
38
44
  Args:
39
45
  timeout (Optional[float]): Connection timeout in seconds.
40
46
  (default: :obj:`None`)
47
+ additional_args (Optional[List[str]]): Additional command-line
48
+ arguments to pass to the Playwright MCP server. For example,
49
+ `["--cdp-endpoint=http://localhost:9222"]`.
50
+ (default: :obj:`None`)
41
51
  """
42
- super().__init__(timeout=timeout)
43
-
44
- self._mcp_toolkit = MCPToolkit(
45
- config_dict={
46
- "mcpServers": {
47
- "playwright": {
48
- "command": "npx",
49
- "args": ["@playwright/mcp@latest"],
50
- }
52
+ # Create config for Playwright MCP server
53
+ config_dict = {
54
+ "mcpServers": {
55
+ "playwright": {
56
+ "command": "npx",
57
+ "args": ["@playwright/mcp@latest"]
58
+ + (additional_args or []),
51
59
  }
52
60
  }
53
- )
61
+ }
54
62
 
55
- async def connect(self):
56
- r"""Explicitly connect to the Playwright MCP server."""
57
- await self._mcp_toolkit.connect()
58
-
59
- async def disconnect(self):
60
- r"""Explicitly disconnect from the Playwright MCP server."""
61
- await self._mcp_toolkit.disconnect()
62
-
63
- def get_tools(self) -> List[FunctionTool]:
64
- r"""Returns a list of tools provided by the PlaywrightMCPToolkit.
65
-
66
- Returns:
67
- List[FunctionTool]: List of available tools.
68
- """
69
- return self._mcp_toolkit.get_tools()
63
+ # Initialize parent MCPToolkit with Playwright configuration
64
+ super().__init__(config_dict=config_dict, timeout=timeout)