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
camel/messages/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
 
15
15
  # Enables postponed evaluation of annotations (for string-based type hints)
16
16
  from __future__ import annotations
@@ -64,14 +64,17 @@ class BaseMessage:
64
64
  content (str): The content of the message.
65
65
  video_bytes (Optional[bytes]): Optional bytes of a video associated
66
66
  with the message. (default: :obj:`None`)
67
- image_list (Optional[List[Image.Image]]): Optional list of PIL Image
68
- objects associated with the message. (default: :obj:`None`)
67
+ image_list (Optional[List[Union[Image.Image, str]]]): Optional list of
68
+ PIL Image objects or image URLs (strings) associated with the
69
+ message. (default: :obj:`None`)
69
70
  image_detail (Literal["auto", "low", "high"]): Detail level of the
70
71
  images associated with the message. (default: :obj:`auto`)
71
72
  video_detail (Literal["auto", "low", "high"]): Detail level of the
72
- videos associated with the message. (default: :obj:`low`)
73
- parsed: Optional[Union[Type[BaseModel], dict]]: Optional object which
73
+ videos associated with the message. (default: :obj:`auto`)
74
+ parsed (Optional[Union[Type[BaseModel], dict]]): Optional object which
74
75
  is parsed from the content. (default: :obj:`None`)
76
+ reasoning_content (Optional[str]): Optional reasoning trace associated
77
+ with the message. (default: :obj:`None`)
75
78
  """
76
79
 
77
80
  role_name: str
@@ -80,10 +83,11 @@ class BaseMessage:
80
83
  content: str
81
84
 
82
85
  video_bytes: Optional[bytes] = None
83
- image_list: Optional[List[Image.Image]] = None
86
+ image_list: Optional[List[Union[Image.Image, str]]] = None
84
87
  image_detail: Literal["auto", "low", "high"] = "auto"
85
- video_detail: Literal["auto", "low", "high"] = "low"
88
+ video_detail: Literal["auto", "low", "high"] = "auto"
86
89
  parsed: Optional[Union[BaseModel, dict]] = None
90
+ reasoning_content: Optional[str] = None
87
91
 
88
92
  @classmethod
89
93
  def make_user_message(
@@ -92,7 +96,7 @@ class BaseMessage:
92
96
  content: str,
93
97
  meta_dict: Optional[Dict[str, str]] = None,
94
98
  video_bytes: Optional[bytes] = None,
95
- image_list: Optional[List[Image.Image]] = None,
99
+ image_list: Optional[List[Union[Image.Image, str]]] = None,
96
100
  image_detail: Union[
97
101
  OpenAIVisionDetailType, str
98
102
  ] = OpenAIVisionDetailType.AUTO,
@@ -109,8 +113,9 @@ class BaseMessage:
109
113
  dictionary for the message.
110
114
  video_bytes (Optional[bytes]): Optional bytes of a video
111
115
  associated with the message.
112
- image_list (Optional[List[Image.Image]]): Optional list of PIL
113
- Image objects associated with the message.
116
+ image_list (Optional[List[Union[Image.Image, str]]]): Optional list
117
+ of PIL Image objects or image URLs (strings) associated with
118
+ the message.
114
119
  image_detail (Union[OpenAIVisionDetailType, str]): Detail level of
115
120
  the images associated with the message.
116
121
  video_detail (Union[OpenAIVisionDetailType, str]): Detail level of
@@ -137,7 +142,7 @@ class BaseMessage:
137
142
  content: str,
138
143
  meta_dict: Optional[Dict[str, str]] = None,
139
144
  video_bytes: Optional[bytes] = None,
140
- image_list: Optional[List[Image.Image]] = None,
145
+ image_list: Optional[List[Union[Image.Image, str]]] = None,
141
146
  image_detail: Union[
142
147
  OpenAIVisionDetailType, str
143
148
  ] = OpenAIVisionDetailType.AUTO,
@@ -154,8 +159,9 @@ class BaseMessage:
154
159
  dictionary for the message.
155
160
  video_bytes (Optional[bytes]): Optional bytes of a video
156
161
  associated with the message.
157
- image_list (Optional[List[Image.Image]]): Optional list of PIL
158
- Image objects associated with the message.
162
+ image_list (Optional[List[Union[Image.Image, str]]]): Optional list
163
+ of PIL Image objects or image URLs (strings) associated with
164
+ the message.
159
165
  image_detail (Union[OpenAIVisionDetailType, str]): Detail level of
160
166
  the images associated with the message.
161
167
  video_detail (Union[OpenAIVisionDetailType, str]): Detail level of
@@ -175,6 +181,32 @@ class BaseMessage:
175
181
  OpenAIVisionDetailType(video_detail).value,
176
182
  )
177
183
 
184
+ @classmethod
185
+ def make_system_message(
186
+ cls,
187
+ content: str,
188
+ role_name: str = "System",
189
+ meta_dict: Optional[Dict[str, str]] = None,
190
+ ) -> "BaseMessage":
191
+ r"""Create a new system message.
192
+
193
+ Args:
194
+ content (str): The content of the system message.
195
+ role_name (str): The name of the system role.
196
+ (default: :obj:`"System"`)
197
+ meta_dict (Optional[Dict[str, str]]): Additional metadata
198
+ dictionary for the message.
199
+
200
+ Returns:
201
+ BaseMessage: The new system message.
202
+ """
203
+ return cls(
204
+ role_name,
205
+ RoleType.SYSTEM,
206
+ meta_dict,
207
+ content,
208
+ )
209
+
178
210
  def create_new_instance(self, content: str) -> "BaseMessage":
179
211
  r"""Create a new instance of the :obj:`BaseMessage` with updated
180
212
  content.
@@ -190,6 +222,12 @@ class BaseMessage:
190
222
  role_type=self.role_type,
191
223
  meta_dict=self.meta_dict,
192
224
  content=content,
225
+ video_bytes=self.video_bytes,
226
+ image_list=self.image_list,
227
+ image_detail=self.image_detail,
228
+ video_detail=self.video_detail,
229
+ parsed=self.parsed,
230
+ reasoning_content=self.reasoning_content,
193
231
  )
194
232
 
195
233
  def __add__(self, other: Any) -> Union["BaseMessage", Any]:
@@ -436,35 +474,64 @@ class BaseMessage:
436
474
  )
437
475
  if self.image_list and len(self.image_list) > 0:
438
476
  for image in self.image_list:
439
- if image.format is None:
440
- raise ValueError(
441
- f"Image's `format` is `None`, please "
442
- f"transform the `PIL.Image.Image` to one of "
443
- f"following supported formats, such as "
444
- f"{list(OpenAIImageType)}"
477
+ # Check if image is a URL string or PIL Image
478
+ if isinstance(image, str):
479
+ # Image is a URL string
480
+ hybrid_content.append(
481
+ {
482
+ "type": "image_url",
483
+ "image_url": {
484
+ "url": image,
485
+ "detail": self.image_detail,
486
+ },
487
+ }
445
488
  )
489
+ else:
490
+ # Image is a PIL Image object
491
+ if image.format is None:
492
+ # Set default format to PNG as fallback
493
+ image.format = 'PNG'
494
+
495
+ image_type: str = image.format.lower()
496
+ if image_type not in OpenAIImageType:
497
+ raise ValueError(
498
+ f"Image type {image.format} "
499
+ f"is not supported by OpenAI vision model"
500
+ )
501
+
502
+ # Convert RGBA to RGB for formats that don't support
503
+ # transparency or when the image has transparency channel
504
+ img_to_save = image
505
+ if image.mode in ('RGBA', 'LA', 'P') and image_type in (
506
+ 'jpeg',
507
+ 'jpg',
508
+ ):
509
+ # JPEG doesn't support transparency, convert to RGB
510
+ img_to_save = image.convert('RGB')
511
+ elif (
512
+ image.mode in ('RGBA', 'LA', 'P')
513
+ and image_type == 'png'
514
+ ):
515
+ # For PNG with transparency, convert to RGBA if needed
516
+ if image.mode in ('LA', 'P'):
517
+ img_to_save = image.convert('RGBA')
518
+ # else: RGBA mode, keep as-is
446
519
 
447
- image_type: str = image.format.lower()
448
- if image_type not in OpenAIImageType:
449
- raise ValueError(
450
- f"Image type {image.format} "
451
- f"is not supported by OpenAI vision model"
452
- )
453
- with io.BytesIO() as buffer:
454
- image.save(fp=buffer, format=image.format)
455
- encoded_image = base64.b64encode(buffer.getvalue()).decode(
456
- "utf-8"
520
+ with io.BytesIO() as buffer:
521
+ img_to_save.save(fp=buffer, format=image.format)
522
+ encoded_image = base64.b64encode(
523
+ buffer.getvalue()
524
+ ).decode("utf-8")
525
+ image_prefix = f"data:image/{image_type};base64,"
526
+ hybrid_content.append(
527
+ {
528
+ "type": "image_url",
529
+ "image_url": {
530
+ "url": f"{image_prefix}{encoded_image}",
531
+ "detail": self.image_detail,
532
+ },
533
+ }
457
534
  )
458
- image_prefix = f"data:image/{image_type};base64,"
459
- hybrid_content.append(
460
- {
461
- "type": "image_url",
462
- "image_url": {
463
- "url": f"{image_prefix}{encoded_image}",
464
- "detail": self.image_detail,
465
- },
466
- }
467
- )
468
535
 
469
536
  if self.video_bytes:
470
537
  import imageio.v3 as iio
@@ -537,7 +604,18 @@ class BaseMessage:
537
604
  OpenAIAssistantMessage: The converted :obj:`OpenAIAssistantMessage`
538
605
  object.
539
606
  """
540
- return {"role": "assistant", "content": self.content}
607
+ message_dict: Dict[str, Any] = {
608
+ "role": "assistant",
609
+ "content": self.content,
610
+ }
611
+
612
+ # Check if meta_dict contains tool_calls
613
+ if self.meta_dict and "tool_calls" in self.meta_dict:
614
+ tool_calls = self.meta_dict["tool_calls"]
615
+ if tool_calls:
616
+ message_dict["tool_calls"] = tool_calls
617
+
618
+ return message_dict # type: ignore[return-value]
541
619
 
542
620
  def to_dict(self) -> Dict:
543
621
  r"""Converts the message to a dictionary.
@@ -545,9 +623,66 @@ class BaseMessage:
545
623
  Returns:
546
624
  dict: The converted dictionary.
547
625
  """
548
- return {
626
+ result = {
549
627
  "role_name": self.role_name,
550
- "role_type": self.role_type.name,
628
+ "role_type": self.role_type.value,
551
629
  **(self.meta_dict or {}),
552
630
  "content": self.content,
553
631
  }
632
+
633
+ # Include image/video fields if present
634
+ if self.image_list is not None:
635
+ # Handle both PIL Images and URL strings
636
+ import base64
637
+ from io import BytesIO
638
+
639
+ image_data_list = []
640
+ for img in self.image_list:
641
+ if isinstance(img, str):
642
+ # Image is a URL string, store as-is
643
+ image_data_list.append({"type": "url", "data": img})
644
+ else:
645
+ # Image is a PIL Image, convert to base64
646
+ # Preserve format, default to PNG if not set
647
+ img_format = img.format if img.format else "PNG"
648
+
649
+ # Handle transparency for different formats
650
+ img_to_save = img
651
+ if img.mode in (
652
+ 'RGBA',
653
+ 'LA',
654
+ 'P',
655
+ ) and img_format.upper() in ('JPEG', 'JPG'):
656
+ # JPEG doesn't support transparency, convert to RGB
657
+ img_to_save = img.convert('RGB')
658
+ elif (
659
+ img.mode in ('LA', 'P') and img_format.upper() == 'PNG'
660
+ ):
661
+ # For PNG with transparency, convert to RGBA if needed
662
+ img_to_save = img.convert('RGBA')
663
+ # else: keep as-is for other combinations
664
+
665
+ buffered = BytesIO()
666
+ img_to_save.save(buffered, format=img_format)
667
+ img_str = base64.b64encode(buffered.getvalue()).decode()
668
+ image_data_list.append(
669
+ {
670
+ "type": "base64",
671
+ "data": img_str,
672
+ "format": img_format, # Preserve format
673
+ }
674
+ )
675
+ result["image_list"] = image_data_list
676
+
677
+ if self.video_bytes is not None:
678
+ import base64
679
+
680
+ result["video_bytes"] = base64.b64encode(self.video_bytes).decode()
681
+
682
+ if self.image_detail is not None:
683
+ result["image_detail"] = self.image_detail
684
+
685
+ if self.video_detail is not None:
686
+ result["video_detail"] = self.video_detail
687
+
688
+ return result
@@ -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 .alpaca import AlpacaItem
16
16
  from .conversation_models import (
@@ -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 re
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
 
15
15
  import json
16
16
  from typing import Any, Dict, List, Literal
@@ -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
  from .hermes import HermesFunctionFormatter
@@ -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, Dict, Generic, List, Optional, TypeVar
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
 
15
15
  from .hermes_function_formatter import HermesFunctionFormatter
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
  import json
15
15
  import re
16
16
  from typing import Any, Dict, List, Optional
@@ -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
  from dataclasses import dataclass
16
16
  from typing import Any, Dict, Optional
@@ -47,12 +47,20 @@ class FunctionCallingMessage(BaseMessage):
47
47
  (default: :obj:`None`)
48
48
  tool_call_id (Optional[str]): The ID of the tool call, if available.
49
49
  (default: :obj:`None`)
50
+ mask_output (Optional[bool]): Whether to return a sanitized placeholder
51
+ instead of the raw tool output.
52
+ (default: :obj:`False`)
53
+ extra_content (Optional[Dict[str, Any]]): Additional content
54
+ associated with the tool call.
55
+ (default: :obj:`None`)
50
56
  """
51
57
 
52
58
  func_name: Optional[str] = None
53
59
  args: Optional[Dict] = None
54
60
  result: Optional[Any] = None
55
61
  tool_call_id: Optional[str] = None
62
+ mask_output: Optional[bool] = False
63
+ extra_content: Optional[Dict[str, Any]] = None
56
64
 
57
65
  def to_openai_message(
58
66
  self,
@@ -105,10 +113,13 @@ class FunctionCallingMessage(BaseMessage):
105
113
  # This is a function response
106
114
  # TODO: Allow for more flexible setting of tool role,
107
115
  # optionally to be the same as assistant messages
108
- content = function_format.format_tool_response(
109
- self.func_name, # type: ignore[arg-type]
110
- self.result, # type: ignore[arg-type]
111
- )
116
+ if self.mask_output:
117
+ content = "[MASKED]"
118
+ else:
119
+ content = function_format.format_tool_response(
120
+ self.func_name, # type: ignore[arg-type]
121
+ self.result, # type: ignore[arg-type]
122
+ )
112
123
  return ShareGPTMessage(from_="tool", value=content) # type: ignore[call-arg]
113
124
 
114
125
  def to_openai_assistant_message(self) -> OpenAIAssistantMessage:
@@ -124,19 +135,23 @@ class FunctionCallingMessage(BaseMessage):
124
135
  " due to missing function name or arguments."
125
136
  )
126
137
 
138
+ tool_call = {
139
+ "id": self.tool_call_id or "null",
140
+ "type": "function",
141
+ "function": {
142
+ "name": self.func_name,
143
+ "arguments": json.dumps(self.args, ensure_ascii=False),
144
+ },
145
+ }
146
+
147
+ # Include extra_content if available
148
+ if self.extra_content is not None:
149
+ tool_call["extra_content"] = self.extra_content
150
+
127
151
  return {
128
152
  "role": "assistant",
129
153
  "content": self.content or "",
130
- "tool_calls": [
131
- {
132
- "id": self.tool_call_id or "null",
133
- "type": "function",
134
- "function": {
135
- "name": self.func_name,
136
- "arguments": json.dumps(self.args, ensure_ascii=False),
137
- },
138
- }
139
- ],
154
+ "tool_calls": [tool_call], # type: ignore[list-item]
140
155
  }
141
156
 
142
157
  def to_openai_tool_message(self) -> OpenAIToolMessageParam:
@@ -154,10 +169,32 @@ class FunctionCallingMessage(BaseMessage):
154
169
  " due to missing function name."
155
170
  )
156
171
 
157
- result_content = str(self.result)
172
+ if self.mask_output:
173
+ result_content = "[MASKED]"
174
+ else:
175
+ result_content = str(self.result)
158
176
 
159
177
  return {
160
178
  "role": "tool",
161
179
  "content": result_content,
162
180
  "tool_call_id": self.tool_call_id or "null",
163
181
  }
182
+
183
+ def to_dict(self) -> Dict:
184
+ r"""Converts the message to a dictionary.
185
+
186
+ Returns:
187
+ dict: The converted dictionary.
188
+ """
189
+ base = super().to_dict()
190
+ base["func_name"] = self.func_name
191
+ if self.args is not None:
192
+ base["args"] = self.args
193
+ if self.result is not None:
194
+ base["result"] = self.result
195
+ if self.tool_call_id is not None:
196
+ base["tool_call_id"] = self.tool_call_id
197
+ base["mask_output"] = self.mask_output
198
+ if self.extra_content is not None:
199
+ base["extra_content"] = self.extra_content
200
+ return base
camel/models/__init__.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,27 +10,34 @@
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
+ from .aihubmix_model import AihubMixModel
14
15
  from .aiml_model import AIMLModel
16
+ from .amd_model import AMDModel
15
17
  from .anthropic_model import AnthropicModel
16
18
  from .aws_bedrock_model import AWSBedrockModel
17
19
  from .azure_openai_model import AzureOpenAIModel
18
20
  from .base_audio_model import BaseAudioModel
19
21
  from .base_model import BaseModelBackend
22
+ from .cerebras_model import CerebrasModel
20
23
  from .cohere_model import CohereModel
24
+ from .cometapi_model import CometAPIModel
21
25
  from .crynux_model import CrynuxModel
22
26
  from .deepseek_model import DeepSeekModel
23
27
  from .fish_audio_model import FishAudioModel
28
+ from .function_gemma_model import FunctionGemmaModel
24
29
  from .gemini_model import GeminiModel
25
30
  from .groq_model import GroqModel
26
31
  from .internlm_model import InternLMModel
27
32
  from .litellm_model import LiteLLMModel
28
33
  from .lmstudio_model import LMStudioModel
34
+ from .minimax_model import MinimaxModel
29
35
  from .mistral_model import MistralModel
30
36
  from .model_factory import ModelFactory
31
37
  from .model_manager import ModelManager, ModelProcessingError
32
38
  from .modelscope_model import ModelScopeModel
33
39
  from .moonshot_model import MoonshotModel
40
+ from .nebius_model import NebiusModel
34
41
  from .nemotron_model import NemotronModel
35
42
  from .netmind_model import NetmindModel
36
43
  from .novita_model import NovitaModel
@@ -41,6 +48,7 @@ from .openai_compatible_model import OpenAICompatibleModel
41
48
  from .openai_model import OpenAIModel
42
49
  from .openrouter_model import OpenRouterModel
43
50
  from .ppio_model import PPIOModel
51
+ from .qianfan_model import QianfanModel
44
52
  from .qwen_model import QwenModel
45
53
  from .reka_model import RekaModel
46
54
  from .samba_model import SambaModel
@@ -60,11 +68,14 @@ __all__ = [
60
68
  'OpenRouterModel',
61
69
  'AzureOpenAIModel',
62
70
  'AnthropicModel',
71
+ 'AMDModel',
63
72
  'MistralModel',
64
73
  'GroqModel',
65
74
  'StubModel',
66
75
  'ZhipuAIModel',
76
+ 'CerebrasModel',
67
77
  'CohereModel',
78
+ 'CometAPIModel',
68
79
  'ModelFactory',
69
80
  'ModelManager',
70
81
  'LiteLLMModel',
@@ -86,6 +97,7 @@ __all__ = [
86
97
  'QwenModel',
87
98
  'AWSBedrockModel',
88
99
  'ModelProcessingError',
100
+ 'NebiusModel',
89
101
  'DeepSeekModel',
90
102
  'FishAudioModel',
91
103
  'InternLMModel',
@@ -96,6 +108,10 @@ __all__ = [
96
108
  'SiliconFlowModel',
97
109
  'VolcanoModel',
98
110
  'LMStudioModel',
111
+ 'MinimaxModel',
99
112
  'WatsonXModel',
113
+ 'QianfanModel',
100
114
  'CrynuxModel',
115
+ 'AihubMixModel',
116
+ 'FunctionGemmaModel',
101
117
  ]
camel/models/_utils.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
  import textwrap
15
15
  from typing import Optional, Type
16
16
 
@@ -48,7 +48,7 @@ def try_modify_message_with_format(
48
48
  updated_prompt = textwrap.dedent(
49
49
  f"""\
50
50
  {message["content"]}
51
-
51
+
52
52
  Please generate a JSON response adhering to the following JSON schema:
53
53
  {json_schema}
54
54
  Make sure the JSON response is valid and matches the EXACT structure defined in the schema. Your result should ONLY be a valid json object, WITHOUT ANY OTHER TEXT OR COMMENTS.