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,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,20 +186,20 @@ 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
194
  let scale = window.devicePixelRatio || 1;
195
-
195
+
196
196
  for (let i = 0; i < elements.length; i++) {
197
197
  let key = elements[i].getAttribute("__elementId");
198
198
  let rects = elements[i].getClientRects();
199
199
  let ariaRole = getApproximateAriaRole(elements[i]);
200
200
  let ariaName = getApproximateAriaName(elements[i]);
201
201
  let vScrollable = elements[i].scrollHeight - elements[i].clientHeight >= 1;
202
-
202
+
203
203
  let record = {
204
204
  "tag_name": ariaRole[1],
205
205
  "role": ariaRole[0],
@@ -207,7 +207,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
207
207
  "v-scrollable": vScrollable,
208
208
  "rects": []
209
209
  };
210
-
210
+
211
211
  for (const rect of rects) {
212
212
  let x = rect.left + rect.width / 2;
213
213
  let y = rect.top + rect.height / 2;
@@ -224,15 +224,15 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
224
224
  });
225
225
  }
226
226
  }
227
-
227
+
228
228
  if (record["rects"].length > 0) {
229
229
  results[key] = record;
230
230
  }
231
231
  }
232
-
232
+
233
233
  return results;
234
- };
235
-
234
+ };
235
+
236
236
  let getVisualViewport = function() {
237
237
  let vv = window.visualViewport;
238
238
  let de = document.documentElement;
@@ -250,7 +250,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
250
250
  "scrollHeight": de ? de.scrollHeight : 0
251
251
  };
252
252
  };
253
-
253
+
254
254
  let _getMetaTags = function() {
255
255
  let meta = document.querySelectorAll("meta");
256
256
  let results = {};
@@ -271,7 +271,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
271
271
  }
272
272
  return results;
273
273
  };
274
-
274
+
275
275
  let _getJsonLd = function() {
276
276
  let jsonld = [];
277
277
  let scripts = document.querySelectorAll('script[type="application/ld+json"]');
@@ -280,13 +280,13 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
280
280
  }
281
281
  return jsonld;
282
282
  };
283
-
283
+
284
284
  // From: https://www.stevefenton.co.uk/blog/2022/12/parse-microdata-with-javascript/
285
285
  let _getMicrodata = function() {
286
286
  function sanitize(input) {
287
287
  return input.replace(/\s/gi, ' ').trim();
288
288
  }
289
-
289
+
290
290
  function addValue(information, name, value) {
291
291
  if (information[name]) {
292
292
  if (typeof information[name] === 'array') {
@@ -301,29 +301,29 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
301
301
  information[name] = value;
302
302
  }
303
303
  }
304
-
304
+
305
305
  function traverseItem(item, information) {
306
306
  const children = item.children;
307
-
307
+
308
308
  for (let i = 0; i < children.length; i++) {
309
309
  const child = children[i];
310
-
310
+
311
311
  if (child.hasAttribute('itemscope')) {
312
312
  if (child.hasAttribute('itemprop')) {
313
313
  const itemProp = child.getAttribute('itemprop');
314
314
  const itemType = child.getAttribute('itemtype');
315
-
315
+
316
316
  const childInfo = {
317
317
  itemType: itemType
318
318
  };
319
-
319
+
320
320
  traverseItem(child, childInfo);
321
-
321
+
322
322
  itemProp.split(' ').forEach(propName => {
323
323
  addValue(information, propName, childInfo);
324
324
  });
325
325
  }
326
-
326
+
327
327
  } else if (child.hasAttribute('itemprop')) {
328
328
  const itemProp = child.getAttribute('itemprop');
329
329
  itemProp.split(' ').forEach(propName => {
@@ -339,9 +339,9 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
339
339
  }
340
340
  }
341
341
  }
342
-
342
+
343
343
  const microdata = [];
344
-
344
+
345
345
  document.querySelectorAll("[itemscope]").forEach(function(elem, i) {
346
346
  const itemType = elem.getAttribute('itemtype');
347
347
  const information = {
@@ -350,10 +350,10 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
350
350
  traverseItem(elem, information);
351
351
  microdata.push(information);
352
352
  });
353
-
353
+
354
354
  return microdata;
355
355
  };
356
-
356
+
357
357
  let getPageMetadata = function() {
358
358
  let jsonld = _getJsonLd();
359
359
  let metaTags = _getMetaTags();
@@ -362,7 +362,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
362
362
  if (jsonld.length > 0) {
363
363
  try {
364
364
  results["jsonld"] = JSON.parse(jsonld);
365
- }
365
+ }
366
366
  catch (e) {
367
367
  results["jsonld"] = jsonld;
368
368
  }
@@ -377,8 +377,8 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
377
377
  }
378
378
  }
379
379
  return results;
380
- };
381
-
380
+ };
381
+
382
382
  return {
383
383
  getInteractiveRects: getInteractiveRects,
384
384
  getVisualViewport: getVisualViewport,
@@ -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,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-2026 @ 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).
@@ -51,32 +49,16 @@ class PlaywrightMCPToolkit(BaseToolkit):
51
49
  `["--cdp-endpoint=http://localhost:9222"]`.
52
50
  (default: :obj:`None`)
53
51
  """
54
- super().__init__(timeout=timeout)
55
-
56
- self._mcp_toolkit = MCPToolkit(
57
- config_dict={
58
- "mcpServers": {
59
- "playwright": {
60
- "command": "npx",
61
- "args": ["@playwright/mcp@latest"]
62
- + (additional_args or []),
63
- }
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 []),
64
59
  }
65
60
  }
66
- )
67
-
68
- async def connect(self):
69
- r"""Explicitly connect to the Playwright MCP server."""
70
- await self._mcp_toolkit.connect()
61
+ }
71
62
 
72
- async def disconnect(self):
73
- r"""Explicitly disconnect from the Playwright MCP server."""
74
- await self._mcp_toolkit.disconnect()
75
-
76
- def get_tools(self) -> List[FunctionTool]:
77
- r"""Returns a list of tools provided by the PlaywrightMCPToolkit.
78
-
79
- Returns:
80
- List[FunctionTool]: List of available tools.
81
- """
82
- return self._mcp_toolkit.get_tools()
63
+ # Initialize parent MCPToolkit with Playwright configuration
64
+ super().__init__(config_dict=config_dict, timeout=timeout)
@@ -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
 
15
15
 
16
16
  import os
@@ -53,22 +53,35 @@ class PPTXToolkit(BaseToolkit):
53
53
 
54
54
  def __init__(
55
55
  self,
56
- output_dir: str = "./",
56
+ working_directory: Optional[str] = None,
57
57
  timeout: Optional[float] = None,
58
58
  ) -> None:
59
59
  r"""Initialize the PPTXToolkit.
60
60
 
61
61
  Args:
62
- output_dir (str): The default directory for output files.
63
- Defaults to the current working directory.
62
+ working_directory (str, optional): The default directory for
63
+ output files. If not provided, it will be determined by the
64
+ `CAMEL_WORKDIR` environment variable (if set). If the
65
+ environment variable is not set, it defaults to
66
+ `camel_working_dir`.
64
67
  timeout (Optional[float]): The timeout for the toolkit.
65
- (default: :obj: `None`)
68
+ (default: :obj:`None`)
66
69
  """
67
70
  super().__init__(timeout=timeout)
68
- self.output_dir = Path(output_dir).resolve()
69
- self.output_dir.mkdir(parents=True, exist_ok=True)
71
+
72
+ if working_directory:
73
+ self.working_directory = Path(working_directory).resolve()
74
+ else:
75
+ camel_workdir = os.environ.get("CAMEL_WORKDIR")
76
+ if camel_workdir:
77
+ self.working_directory = Path(camel_workdir).resolve()
78
+ else:
79
+ self.working_directory = Path("./camel_working_dir").resolve()
80
+
81
+ self.working_directory.mkdir(parents=True, exist_ok=True)
70
82
  logger.info(
71
- f"PPTXToolkit initialized with output directory: {self.output_dir}"
83
+ f"PPTXToolkit initialized with output directory: "
84
+ f"{self.working_directory}"
72
85
  )
73
86
 
74
87
  def _resolve_filepath(self, file_path: str) -> Path:
@@ -87,7 +100,7 @@ class PPTXToolkit(BaseToolkit):
87
100
  """
88
101
  path_obj = Path(file_path)
89
102
  if not path_obj.is_absolute():
90
- path_obj = self.output_dir / path_obj
103
+ path_obj = self.working_directory / path_obj
91
104
 
92
105
  sanitized_filename = self._sanitize_filename(path_obj.name)
93
106
  path_obj = path_obj.parent / sanitized_filename
@@ -120,7 +133,7 @@ class PPTXToolkit(BaseToolkit):
120
133
  frame_paragraph: The paragraph to format.
121
134
  text (str): The text to format.
122
135
  set_color_to_white (bool): Whether to set the color to white.
123
- (default: :obj: `False`)
136
+ (default: :obj:`False`)
124
137
  """
125
138
  from pptx.dml.color import RGBColor
126
139
 
@@ -170,7 +183,7 @@ class PPTXToolkit(BaseToolkit):
170
183
  flat_items_list (List[Tuple[str, int]]): The list of items to be
171
184
  displayed.
172
185
  set_color_to_white (bool): Whether to set the font color to white.
173
- (default: :obj: `False`)
186
+ (default: :obj:`False`)
174
187
  """
175
188
  if not flat_items_list:
176
189
  logger.warning("Empty bullet point list provided")
@@ -260,7 +273,7 @@ class PPTXToolkit(BaseToolkit):
260
273
  provided, the default template will be used. (default: :obj:
261
274
  `None`)
262
275
  """
263
- import pptx
276
+ from pptx import Presentation
264
277
 
265
278
  # Use template if provided, otherwise create new presentation
266
279
  if template is not None:
@@ -270,9 +283,9 @@ class PPTXToolkit(BaseToolkit):
270
283
  f"Template file not found: {template_path}, using "
271
284
  "default template"
272
285
  )
273
- presentation = pptx.Presentation()
286
+ presentation = Presentation()
274
287
  else:
275
- presentation = pptx.Presentation(str(template_path))
288
+ presentation = Presentation(str(template_path))
276
289
  # Clear all existing slides by removing them from the slide
277
290
  # list
278
291
  while len(presentation.slides) > 0:
@@ -280,7 +293,7 @@ class PPTXToolkit(BaseToolkit):
280
293
  presentation.part.drop_rel(rId)
281
294
  del presentation.slides._sldIdLst[-1]
282
295
  else:
283
- presentation = pptx.Presentation()
296
+ presentation = Presentation()
284
297
 
285
298
  slide_width_inch, slide_height_inch = (
286
299
  self._get_slide_width_height_inches(presentation)
@@ -365,10 +378,10 @@ class PPTXToolkit(BaseToolkit):
365
378
  * Table slides: {"heading": str, "table": {"headers": list
366
379
  of str, "rows": list of list of str}}
367
380
  filename (str): The name or path of the file. If a relative path is
368
- supplied, it is resolved to self.output_dir.
381
+ supplied, it is resolved to self.working_directory.
369
382
  template (Optional[str]): The path to the template PPTX file.
370
383
  Initializes a presentation from a given template file Or PPTX
371
- file. (default: :obj: `None`)
384
+ file. (default: :obj:`None`)
372
385
 
373
386
  Returns:
374
387
  str: A success message indicating the file was created.
@@ -667,8 +680,8 @@ class PPTXToolkit(BaseToolkit):
667
680
  slide_width_inch (float): The width of the slide in inches.
668
681
  slide_height_inch (float): The height of the slide in inches.
669
682
  """
670
- import pptx
671
683
  from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE
684
+ from pptx.enum.text import MSO_ANCHOR, PP_ALIGN
672
685
  from pptx.util import Inches, Pt
673
686
 
674
687
  steps = slide_json['bullet_points']
@@ -697,8 +710,8 @@ class PPTXToolkit(BaseToolkit):
697
710
  text_frame = shape.text_frame
698
711
  text_frame.clear()
699
712
  paragraph = text_frame.paragraphs[0]
700
- paragraph.alignment = pptx.enum.text.PP_ALIGN.CENTER
701
- text_frame.vertical_anchor = pptx.enum.text.MSO_ANCHOR.MIDDLE
713
+ paragraph.alignment = PP_ALIGN.CENTER
714
+ text_frame.vertical_anchor = MSO_ANCHOR.MIDDLE
702
715
  self._format_text(
703
716
  paragraph, step.removeprefix(STEP_BY_STEP_PROCESS_MARKER)
704
717
  )
@@ -719,8 +732,8 @@ class PPTXToolkit(BaseToolkit):
719
732
  text_frame = shape.text_frame
720
733
  text_frame.clear()
721
734
  paragraph = text_frame.paragraphs[0]
722
- paragraph.alignment = pptx.enum.text.PP_ALIGN.CENTER
723
- text_frame.vertical_anchor = pptx.enum.text.MSO_ANCHOR.MIDDLE
735
+ paragraph.alignment = PP_ALIGN.CENTER
736
+ text_frame.vertical_anchor = MSO_ANCHOR.MIDDLE
724
737
  self._format_text(
725
738
  paragraph, step.removeprefix(STEP_BY_STEP_PROCESS_MARKER)
726
739
  )
@@ -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
 
15
15
  from typing import Any, Dict, List, Optional, Union, cast
16
16
 
@@ -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, Dict, List, Optional
15
15
 
16
16
  import requests
@@ -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
 
15
15
  import os
16
16
  import time
@@ -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
 
15
15
  import os
16
16
  import time