camel-ai 0.2.65__py3-none-any.whl → 0.2.82__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of camel-ai might be problematic. Click here for more details.

Files changed (505) 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 +4835 -947
  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 +23 -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/gemini_config.py +6 -4
  56. camel/configs/groq_config.py +6 -4
  57. camel/configs/internlm_config.py +6 -4
  58. camel/configs/litellm_config.py +2 -2
  59. camel/configs/lmstudio_config.py +6 -4
  60. camel/configs/minimax_config.py +95 -0
  61. camel/configs/mistral_config.py +2 -2
  62. camel/configs/modelscope_config.py +5 -3
  63. camel/configs/moonshot_config.py +2 -2
  64. camel/configs/nebius_config.py +105 -0
  65. camel/configs/netmind_config.py +2 -2
  66. camel/configs/novita_config.py +2 -2
  67. camel/configs/nvidia_config.py +2 -2
  68. camel/configs/ollama_config.py +2 -2
  69. camel/configs/openai_config.py +5 -3
  70. camel/configs/openrouter_config.py +6 -4
  71. camel/configs/ppio_config.py +2 -2
  72. camel/configs/qianfan_config.py +85 -0
  73. camel/configs/qwen_config.py +2 -2
  74. camel/configs/reka_config.py +2 -2
  75. camel/configs/samba_config.py +6 -4
  76. camel/configs/sglang_config.py +2 -2
  77. camel/configs/siliconflow_config.py +2 -2
  78. camel/configs/togetherai_config.py +2 -2
  79. camel/configs/vllm_config.py +4 -2
  80. camel/configs/watsonx_config.py +2 -2
  81. camel/configs/yi_config.py +6 -4
  82. camel/configs/zhipuai_config.py +6 -4
  83. camel/data_collectors/__init__.py +2 -2
  84. camel/data_collectors/alpaca_collector.py +18 -9
  85. camel/data_collectors/base.py +2 -2
  86. camel/data_collectors/sharegpt_collector.py +2 -2
  87. camel/datagen/__init__.py +2 -2
  88. camel/datagen/cot_datagen.py +3 -3
  89. camel/datagen/evol_instruct/__init__.py +2 -2
  90. camel/datagen/evol_instruct/evol_instruct.py +2 -2
  91. camel/datagen/evol_instruct/scorer.py +12 -12
  92. camel/datagen/evol_instruct/templates.py +16 -16
  93. camel/datagen/self_improving_cot.py +5 -5
  94. camel/datagen/self_instruct/__init__.py +2 -2
  95. camel/datagen/self_instruct/filter/__init__.py +2 -2
  96. camel/datagen/self_instruct/filter/filter_function.py +2 -2
  97. camel/datagen/self_instruct/filter/filter_registry.py +2 -2
  98. camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
  99. camel/datagen/self_instruct/self_instruct.py +2 -2
  100. camel/datagen/self_instruct/templates.py +47 -47
  101. camel/datagen/source2synth/__init__.py +2 -2
  102. camel/datagen/source2synth/data_processor.py +2 -2
  103. camel/datagen/source2synth/models.py +2 -2
  104. camel/datagen/source2synth/user_data_processor_config.py +2 -2
  105. camel/datahubs/__init__.py +2 -2
  106. camel/datahubs/base.py +2 -2
  107. camel/datahubs/huggingface.py +2 -2
  108. camel/datahubs/models.py +2 -2
  109. camel/datasets/__init__.py +2 -2
  110. camel/datasets/base_generator.py +41 -12
  111. camel/datasets/few_shot_generator.py +18 -18
  112. camel/datasets/models.py +2 -2
  113. camel/datasets/self_instruct_generator.py +2 -2
  114. camel/datasets/static_dataset.py +2 -2
  115. camel/embeddings/__init__.py +2 -2
  116. camel/embeddings/azure_embedding.py +2 -2
  117. camel/embeddings/base.py +2 -2
  118. camel/embeddings/gemini_embedding.py +2 -2
  119. camel/embeddings/jina_embedding.py +2 -2
  120. camel/embeddings/mistral_embedding.py +2 -2
  121. camel/embeddings/openai_compatible_embedding.py +2 -2
  122. camel/embeddings/openai_embedding.py +2 -2
  123. camel/embeddings/sentence_transformers_embeddings.py +2 -2
  124. camel/embeddings/together_embedding.py +2 -2
  125. camel/embeddings/vlm_embedding.py +2 -2
  126. camel/environments/__init__.py +14 -2
  127. camel/environments/models.py +2 -2
  128. camel/environments/multi_step.py +2 -2
  129. camel/environments/rlcards_env.py +860 -0
  130. camel/environments/single_step.py +30 -5
  131. camel/environments/tic_tac_toe.py +3 -3
  132. camel/extractors/__init__.py +2 -2
  133. camel/extractors/base.py +2 -2
  134. camel/extractors/python_strategies.py +2 -2
  135. camel/generators.py +2 -2
  136. camel/human.py +2 -2
  137. camel/interpreters/__init__.py +4 -2
  138. camel/interpreters/base.py +2 -2
  139. camel/interpreters/docker/Dockerfile +14 -24
  140. camel/interpreters/docker_interpreter.py +5 -4
  141. camel/interpreters/e2b_interpreter.py +36 -3
  142. camel/interpreters/internal_python_interpreter.py +53 -4
  143. camel/interpreters/interpreter_error.py +2 -2
  144. camel/interpreters/ipython_interpreter.py +2 -2
  145. camel/interpreters/microsandbox_interpreter.py +395 -0
  146. camel/interpreters/subprocess_interpreter.py +2 -2
  147. camel/loaders/__init__.py +13 -4
  148. camel/loaders/apify_reader.py +2 -2
  149. camel/loaders/base_io.py +2 -2
  150. camel/loaders/base_loader.py +85 -0
  151. camel/loaders/chunkr_reader.py +11 -2
  152. camel/loaders/crawl4ai_reader.py +2 -2
  153. camel/loaders/firecrawl_reader.py +6 -6
  154. camel/loaders/jina_url_reader.py +2 -2
  155. camel/loaders/markitdown.py +2 -2
  156. camel/loaders/mineru_extractor.py +2 -2
  157. camel/loaders/mistral_reader.py +2 -2
  158. camel/loaders/scrapegraph_reader.py +2 -2
  159. camel/loaders/unstructured_io.py +2 -2
  160. camel/logger.py +5 -5
  161. camel/memories/__init__.py +2 -2
  162. camel/memories/agent_memories.py +86 -3
  163. camel/memories/base.py +36 -2
  164. camel/memories/blocks/__init__.py +2 -2
  165. camel/memories/blocks/chat_history_block.py +125 -7
  166. camel/memories/blocks/vectordb_block.py +10 -3
  167. camel/memories/context_creators/__init__.py +2 -2
  168. camel/memories/context_creators/score_based.py +31 -239
  169. camel/memories/records.py +90 -10
  170. camel/messages/__init__.py +2 -2
  171. camel/messages/base.py +178 -43
  172. camel/messages/conversion/__init__.py +2 -2
  173. camel/messages/conversion/alpaca.py +2 -2
  174. camel/messages/conversion/conversation_models.py +2 -2
  175. camel/messages/conversion/sharegpt/__init__.py +2 -2
  176. camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
  177. camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
  178. camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
  179. camel/messages/func_message.py +54 -17
  180. camel/models/__init__.py +16 -2
  181. camel/models/_utils.py +3 -3
  182. camel/models/aihubmix_model.py +83 -0
  183. camel/models/aiml_model.py +11 -18
  184. camel/models/amd_model.py +101 -0
  185. camel/models/anthropic_model.py +127 -20
  186. camel/models/aws_bedrock_model.py +12 -35
  187. camel/models/azure_openai_model.py +212 -89
  188. camel/models/base_audio_model.py +5 -3
  189. camel/models/base_model.py +195 -26
  190. camel/models/cerebras_model.py +83 -0
  191. camel/models/cohere_model.py +16 -21
  192. camel/models/cometapi_model.py +83 -0
  193. camel/models/crynux_model.py +11 -18
  194. camel/models/deepseek_model.py +18 -58
  195. camel/models/fish_audio_model.py +8 -2
  196. camel/models/gemini_model.py +389 -26
  197. camel/models/groq_model.py +11 -19
  198. camel/models/internlm_model.py +11 -18
  199. camel/models/litellm_model.py +56 -34
  200. camel/models/lmstudio_model.py +17 -20
  201. camel/models/minimax_model.py +83 -0
  202. camel/models/mistral_model.py +18 -19
  203. camel/models/model_factory.py +37 -3
  204. camel/models/model_manager.py +26 -8
  205. camel/models/modelscope_model.py +13 -193
  206. camel/models/moonshot_model.py +195 -21
  207. camel/models/nebius_model.py +83 -0
  208. camel/models/nemotron_model.py +19 -9
  209. camel/models/netmind_model.py +11 -18
  210. camel/models/novita_model.py +11 -18
  211. camel/models/nvidia_model.py +11 -18
  212. camel/models/ollama_model.py +14 -21
  213. camel/models/openai_audio_models.py +2 -2
  214. camel/models/openai_compatible_model.py +188 -45
  215. camel/models/openai_model.py +216 -71
  216. camel/models/openrouter_model.py +11 -19
  217. camel/models/ppio_model.py +11 -18
  218. camel/models/qianfan_model.py +89 -0
  219. camel/models/qwen_model.py +13 -193
  220. camel/models/reka_model.py +21 -21
  221. camel/models/reward/__init__.py +2 -2
  222. camel/models/reward/base_reward_model.py +2 -2
  223. camel/models/reward/evaluator.py +2 -2
  224. camel/models/reward/nemotron_model.py +2 -2
  225. camel/models/reward/skywork_model.py +2 -2
  226. camel/models/samba_model.py +48 -47
  227. camel/models/sglang_model.py +88 -40
  228. camel/models/siliconflow_model.py +12 -35
  229. camel/models/stub_model.py +10 -7
  230. camel/models/togetherai_model.py +11 -18
  231. camel/models/vllm_model.py +10 -18
  232. camel/models/volcano_model.py +16 -20
  233. camel/models/watsonx_model.py +7 -19
  234. camel/models/yi_model.py +11 -18
  235. camel/models/zhipuai_model.py +70 -18
  236. camel/parsers/__init__.py +18 -0
  237. camel/parsers/mcp_tool_call_parser.py +176 -0
  238. camel/personas/__init__.py +2 -2
  239. camel/personas/persona.py +2 -2
  240. camel/personas/persona_hub.py +2 -2
  241. camel/prompts/__init__.py +2 -2
  242. camel/prompts/ai_society.py +2 -2
  243. camel/prompts/base.py +2 -2
  244. camel/prompts/code.py +2 -2
  245. camel/prompts/evaluation.py +2 -2
  246. camel/prompts/generate_text_embedding_data.py +2 -2
  247. camel/prompts/image_craft.py +2 -2
  248. camel/prompts/misalignment.py +2 -2
  249. camel/prompts/multi_condition_image_craft.py +2 -2
  250. camel/prompts/object_recognition.py +2 -2
  251. camel/prompts/persona_hub.py +3 -3
  252. camel/prompts/prompt_templates.py +2 -2
  253. camel/prompts/role_description_prompt_template.py +2 -2
  254. camel/prompts/solution_extraction.py +8 -8
  255. camel/prompts/task_prompt_template.py +2 -2
  256. camel/prompts/translation.py +2 -2
  257. camel/prompts/video_description_prompt.py +3 -3
  258. camel/responses/__init__.py +2 -2
  259. camel/responses/agent_responses.py +2 -2
  260. camel/retrievers/__init__.py +2 -2
  261. camel/retrievers/auto_retriever.py +3 -2
  262. camel/retrievers/base.py +2 -2
  263. camel/retrievers/bm25_retriever.py +2 -2
  264. camel/retrievers/cohere_rerank_retriever.py +2 -2
  265. camel/retrievers/hybrid_retrival.py +2 -2
  266. camel/retrievers/vector_retriever.py +2 -2
  267. camel/runtimes/Dockerfile.multi-toolkit +90 -0
  268. camel/runtimes/__init__.py +2 -2
  269. camel/runtimes/api.py +79 -23
  270. camel/runtimes/base.py +2 -2
  271. camel/runtimes/configs.py +13 -13
  272. camel/runtimes/daytona_runtime.py +17 -18
  273. camel/runtimes/docker_runtime.py +12 -12
  274. camel/runtimes/llm_guard_runtime.py +26 -26
  275. camel/runtimes/remote_http_runtime.py +11 -11
  276. camel/runtimes/ubuntu_docker_runtime.py +2 -2
  277. camel/runtimes/utils/__init__.py +2 -2
  278. camel/runtimes/utils/function_risk_toolkit.py +2 -2
  279. camel/runtimes/utils/ignore_risk_toolkit.py +2 -2
  280. camel/schemas/__init__.py +2 -2
  281. camel/schemas/base.py +2 -2
  282. camel/schemas/openai_converter.py +3 -3
  283. camel/schemas/outlines_converter.py +2 -2
  284. camel/services/agent_openapi_server.py +380 -0
  285. camel/societies/__init__.py +4 -2
  286. camel/societies/babyagi_playing.py +2 -2
  287. camel/societies/role_playing.py +201 -80
  288. camel/societies/workforce/__init__.py +10 -3
  289. camel/societies/workforce/base.py +2 -2
  290. camel/societies/workforce/events.py +143 -0
  291. camel/societies/workforce/prompts.py +258 -33
  292. camel/societies/workforce/role_playing_worker.py +88 -31
  293. camel/societies/workforce/single_agent_worker.py +638 -40
  294. camel/societies/workforce/structured_output_handler.py +512 -0
  295. camel/societies/workforce/task_channel.py +182 -38
  296. camel/societies/workforce/utils.py +780 -65
  297. camel/societies/workforce/worker.py +92 -26
  298. camel/societies/workforce/workflow_memory_manager.py +1746 -0
  299. camel/societies/workforce/workforce.py +5276 -355
  300. camel/societies/workforce/workforce_callback.py +103 -0
  301. camel/societies/workforce/workforce_logger.py +647 -0
  302. camel/societies/workforce/workforce_metrics.py +33 -0
  303. camel/storages/__init__.py +6 -2
  304. camel/storages/graph_storages/__init__.py +2 -2
  305. camel/storages/graph_storages/base.py +2 -2
  306. camel/storages/graph_storages/graph_element.py +2 -2
  307. camel/storages/graph_storages/nebula_graph.py +4 -4
  308. camel/storages/graph_storages/neo4j_graph.py +7 -7
  309. camel/storages/key_value_storages/__init__.py +2 -2
  310. camel/storages/key_value_storages/base.py +2 -2
  311. camel/storages/key_value_storages/in_memory.py +2 -2
  312. camel/storages/key_value_storages/json.py +17 -4
  313. camel/storages/key_value_storages/mem0_cloud.py +50 -49
  314. camel/storages/key_value_storages/redis.py +2 -2
  315. camel/storages/object_storages/__init__.py +2 -2
  316. camel/storages/object_storages/amazon_s3.py +2 -2
  317. camel/storages/object_storages/azure_blob.py +2 -2
  318. camel/storages/object_storages/base.py +2 -2
  319. camel/storages/object_storages/google_cloud.py +3 -3
  320. camel/storages/vectordb_storages/__init__.py +8 -2
  321. camel/storages/vectordb_storages/base.py +2 -2
  322. camel/storages/vectordb_storages/chroma.py +731 -0
  323. camel/storages/vectordb_storages/faiss.py +2 -2
  324. camel/storages/vectordb_storages/milvus.py +2 -2
  325. camel/storages/vectordb_storages/oceanbase.py +15 -15
  326. camel/storages/vectordb_storages/pgvector.py +349 -0
  327. camel/storages/vectordb_storages/qdrant.py +6 -6
  328. camel/storages/vectordb_storages/surreal.py +372 -0
  329. camel/storages/vectordb_storages/tidb.py +11 -8
  330. camel/storages/vectordb_storages/weaviate.py +2 -2
  331. camel/tasks/__init__.py +2 -2
  332. camel/tasks/task.py +348 -26
  333. camel/tasks/task_prompt.py +3 -3
  334. camel/terminators/__init__.py +2 -2
  335. camel/terminators/base.py +2 -2
  336. camel/terminators/response_terminator.py +2 -2
  337. camel/terminators/token_limit_terminator.py +2 -2
  338. camel/toolkits/__init__.py +54 -10
  339. camel/toolkits/aci_toolkit.py +66 -21
  340. camel/toolkits/arxiv_toolkit.py +8 -8
  341. camel/toolkits/ask_news_toolkit.py +2 -2
  342. camel/toolkits/async_browser_toolkit.py +4 -4
  343. camel/toolkits/audio_analysis_toolkit.py +3 -3
  344. camel/toolkits/base.py +65 -7
  345. camel/toolkits/bohrium_toolkit.py +2 -2
  346. camel/toolkits/browser_toolkit.py +34 -21
  347. camel/toolkits/browser_toolkit_commons.py +4 -4
  348. camel/toolkits/code_execution.py +31 -4
  349. camel/toolkits/context_summarizer_toolkit.py +684 -0
  350. camel/toolkits/craw4ai_toolkit.py +93 -0
  351. camel/toolkits/dappier_toolkit.py +12 -8
  352. camel/toolkits/data_commons_toolkit.py +2 -2
  353. camel/toolkits/dingtalk.py +1135 -0
  354. camel/toolkits/earth_science_toolkit.py +5367 -0
  355. camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
  356. camel/toolkits/excel_toolkit.py +905 -71
  357. camel/toolkits/file_toolkit.py +1402 -0
  358. camel/toolkits/function_tool.py +126 -18
  359. camel/toolkits/github_toolkit.py +109 -22
  360. camel/toolkits/gmail_toolkit.py +1839 -0
  361. camel/toolkits/google_calendar_toolkit.py +40 -6
  362. camel/toolkits/google_drive_mcp_toolkit.py +54 -0
  363. camel/toolkits/google_maps_toolkit.py +2 -2
  364. camel/toolkits/google_scholar_toolkit.py +2 -2
  365. camel/toolkits/human_toolkit.py +36 -12
  366. camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
  367. camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
  368. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
  369. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1973 -0
  370. camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
  371. camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
  372. camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
  373. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
  374. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1929 -0
  375. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
  376. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
  377. camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
  378. camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
  379. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
  380. camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
  381. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
  382. camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
  383. camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +319 -0
  384. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
  385. camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
  386. camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
  387. camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
  388. camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
  389. camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
  390. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
  391. camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
  392. camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
  393. camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
  394. camel/toolkits/image_analysis_toolkit.py +3 -6
  395. camel/toolkits/image_generation_toolkit.py +390 -0
  396. camel/toolkits/jina_reranker_toolkit.py +5 -6
  397. camel/toolkits/klavis_toolkit.py +7 -3
  398. camel/toolkits/linkedin_toolkit.py +2 -2
  399. camel/toolkits/markitdown_toolkit.py +104 -0
  400. camel/toolkits/math_toolkit.py +66 -12
  401. camel/toolkits/mcp_toolkit.py +412 -36
  402. camel/toolkits/memory_toolkit.py +7 -3
  403. camel/toolkits/meshy_toolkit.py +2 -2
  404. camel/toolkits/message_agent_toolkit.py +608 -0
  405. camel/toolkits/message_integration.py +724 -0
  406. camel/toolkits/mineru_toolkit.py +2 -2
  407. camel/toolkits/minimax_mcp_toolkit.py +195 -0
  408. camel/toolkits/networkx_toolkit.py +2 -2
  409. camel/toolkits/note_taking_toolkit.py +277 -0
  410. camel/toolkits/notion_mcp_toolkit.py +224 -0
  411. camel/toolkits/notion_toolkit.py +2 -2
  412. camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
  413. camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
  414. camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
  415. camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
  416. camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
  417. camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
  418. camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
  419. camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
  420. camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
  421. camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
  422. camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
  423. camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
  424. camel/toolkits/open_api_specs/security_config.py +2 -2
  425. camel/toolkits/open_api_specs/speak/__init__.py +2 -2
  426. camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
  427. camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
  428. camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
  429. camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
  430. camel/toolkits/open_api_toolkit.py +2 -2
  431. camel/toolkits/openbb_toolkit.py +7 -3
  432. camel/toolkits/origene_mcp_toolkit.py +56 -0
  433. camel/toolkits/page_script.js +53 -53
  434. camel/toolkits/playwright_mcp_toolkit.py +13 -31
  435. camel/toolkits/pptx_toolkit.py +36 -23
  436. camel/toolkits/pubmed_toolkit.py +2 -2
  437. camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
  438. camel/toolkits/pyautogui_toolkit.py +2 -2
  439. camel/toolkits/reddit_toolkit.py +2 -2
  440. camel/toolkits/resend_toolkit.py +168 -0
  441. camel/toolkits/retrieval_toolkit.py +2 -2
  442. camel/toolkits/screenshot_toolkit.py +213 -0
  443. camel/toolkits/search_toolkit.py +539 -146
  444. camel/toolkits/searxng_toolkit.py +2 -2
  445. camel/toolkits/semantic_scholar_toolkit.py +2 -2
  446. camel/toolkits/slack_toolkit.py +108 -58
  447. camel/toolkits/sql_toolkit.py +712 -0
  448. camel/toolkits/stripe_toolkit.py +2 -2
  449. camel/toolkits/sympy_toolkit.py +3 -3
  450. camel/toolkits/task_planning_toolkit.py +5 -5
  451. camel/toolkits/terminal_toolkit/__init__.py +18 -0
  452. camel/toolkits/terminal_toolkit/terminal_toolkit.py +1070 -0
  453. camel/toolkits/terminal_toolkit/utils.py +532 -0
  454. camel/toolkits/thinking_toolkit.py +3 -3
  455. camel/toolkits/twitter_toolkit.py +2 -2
  456. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  457. camel/toolkits/video_analysis_toolkit.py +109 -29
  458. camel/toolkits/video_download_toolkit.py +19 -16
  459. camel/toolkits/weather_toolkit.py +2 -2
  460. camel/toolkits/web_deploy_toolkit.py +1219 -0
  461. camel/toolkits/wechat_official_toolkit.py +483 -0
  462. camel/toolkits/whatsapp_toolkit.py +2 -2
  463. camel/toolkits/wolfram_alpha_toolkit.py +2 -2
  464. camel/toolkits/zapier_toolkit.py +7 -3
  465. camel/types/__init__.py +4 -4
  466. camel/types/agents/__init__.py +2 -2
  467. camel/types/agents/tool_calling_record.py +6 -3
  468. camel/types/enums.py +378 -39
  469. camel/types/mcp_registries.py +2 -2
  470. camel/types/openai_types.py +4 -4
  471. camel/types/unified_model_type.py +38 -6
  472. camel/utils/__init__.py +2 -2
  473. camel/utils/async_func.py +2 -2
  474. camel/utils/chunker/__init__.py +2 -2
  475. camel/utils/chunker/base.py +2 -2
  476. camel/utils/chunker/code_chunker.py +2 -2
  477. camel/utils/chunker/uio_chunker.py +2 -2
  478. camel/utils/commons.py +38 -7
  479. camel/utils/constants.py +5 -2
  480. camel/utils/context_utils.py +1134 -0
  481. camel/utils/deduplication.py +2 -2
  482. camel/utils/filename.py +2 -2
  483. camel/utils/langfuse.py +2 -2
  484. camel/utils/mcp.py +140 -6
  485. camel/utils/mcp_client.py +48 -38
  486. camel/utils/message_summarizer.py +148 -0
  487. camel/utils/response_format.py +2 -2
  488. camel/utils/token_counting.py +45 -22
  489. camel/utils/tool_result.py +44 -0
  490. camel/verifiers/__init__.py +2 -2
  491. camel/verifiers/base.py +2 -2
  492. camel/verifiers/math_verifier.py +2 -2
  493. camel/verifiers/models.py +2 -2
  494. camel/verifiers/physics_verifier.py +2 -2
  495. camel/verifiers/python_verifier.py +2 -2
  496. {camel_ai-0.2.65.dist-info → camel_ai-0.2.82.dist-info}/METADATA +327 -94
  497. camel_ai-0.2.82.dist-info/RECORD +507 -0
  498. {camel_ai-0.2.65.dist-info → camel_ai-0.2.82.dist-info}/WHEEL +1 -1
  499. {camel_ai-0.2.65.dist-info → camel_ai-0.2.82.dist-info}/licenses/LICENSE +1 -1
  500. camel/loaders/pandas_reader.py +0 -368
  501. camel/toolkits/dalle_toolkit.py +0 -175
  502. camel/toolkits/file_write_toolkit.py +0 -444
  503. camel/toolkits/openai_agent_toolkit.py +0 -135
  504. camel/toolkits/terminal_toolkit.py +0 -1037
  505. camel_ai-0.2.65.dist-info/RECORD +0 -426
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,14 +10,20 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ import copy
14
15
  import os
16
+ import warnings
15
17
  from typing import Any, Callable, Dict, List, Optional, Type, Union
16
18
 
17
19
  from openai import AsyncAzureOpenAI, AsyncStream, AzureOpenAI, Stream
20
+ from openai.lib.streaming.chat import (
21
+ AsyncChatCompletionStreamManager,
22
+ ChatCompletionStreamManager,
23
+ )
18
24
  from pydantic import BaseModel
19
25
 
20
- from camel.configs import OPENAI_API_PARAMS, ChatGPTConfig
26
+ from camel.configs import ChatGPTConfig
21
27
  from camel.messages import OpenAIMessage
22
28
  from camel.models.base_model import BaseModelBackend
23
29
  from camel.types import (
@@ -41,6 +47,11 @@ if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
41
47
  from langfuse.decorators import observe
42
48
  except ImportError:
43
49
  from camel.utils import observe
50
+ elif os.environ.get("TRACEROOT_ENABLED", "False").lower() == "true":
51
+ try:
52
+ from traceroot import trace as observe # type: ignore[import]
53
+ except ImportError:
54
+ from camel.utils import observe
44
55
  else:
45
56
  from camel.utils import observe
46
57
 
@@ -50,7 +61,8 @@ class AzureOpenAIModel(BaseModelBackend):
50
61
 
51
62
  Args:
52
63
  model_type (Union[ModelType, str]): Model for which a backend is
53
- created, one of GPT_* series.
64
+ created, Should be the deployment name you chose when you deployed
65
+ an azure model.
54
66
  model_config_dict (Optional[Dict[str, Any]], optional): A dictionary
55
67
  that will be fed into:obj:`openai.ChatCompletion.create()`. If
56
68
  :obj:`None`, :obj:`ChatGPTConfig().as_dict()` will be used.
@@ -61,8 +73,6 @@ class AzureOpenAIModel(BaseModelBackend):
61
73
  (default: :obj:`None`)
62
74
  api_version (Optional[str], optional): The api version for the model.
63
75
  (default: :obj:`None`)
64
- azure_deployment_name (Optional[str], optional): The deployment name
65
- you chose when you deployed an azure model. (default: :obj:`None`)
66
76
  azure_ad_token (Optional[str], optional): Your Azure Active Directory
67
77
  token, https://www.microsoft.com/en-us/security/business/
68
78
  identity-access/microsoft-entra-id. (default: :obj:`None`)
@@ -76,7 +86,25 @@ class AzureOpenAIModel(BaseModelBackend):
76
86
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
77
87
  environment variable or default to 180 seconds.
78
88
  (default: :obj:`None`)
79
-
89
+ max_retries (int, optional): Maximum number of retries for API calls.
90
+ (default: :obj:`3`)
91
+ client (Optional[Any], optional): A custom synchronous AzureOpenAI
92
+ client instance. If provided, this client will be used instead of
93
+ creating a new one. Useful for RL frameworks like AReaL or rLLM
94
+ that provide Azure OpenAI-compatible clients. The client should
95
+ implement the AzureOpenAI client interface with
96
+ `.chat.completions.create()` and `.beta.chat.completions.parse()`
97
+ methods. (default: :obj:`None`)
98
+ async_client (Optional[Any], optional): A custom asynchronous
99
+ AzureOpenAI client instance. If provided, this client will be
100
+ used instead of creating a new one. The client should implement
101
+ the AsyncAzureOpenAI client interface. (default: :obj:`None`)
102
+ azure_deployment_name (Optional[str], optional): **Deprecated**.
103
+ Use `model_type` parameter instead. This parameter is kept for
104
+ backward compatibility and will be removed in a future version.
105
+ (default: :obj:`None`)
106
+ **kwargs (Any): Additional arguments to pass to the client
107
+ initialization. Ignored if custom clients are provided.
80
108
 
81
109
  References:
82
110
  https://learn.microsoft.com/en-us/azure/ai-services/openai/
@@ -91,10 +119,35 @@ class AzureOpenAIModel(BaseModelBackend):
91
119
  timeout: Optional[float] = None,
92
120
  token_counter: Optional[BaseTokenCounter] = None,
93
121
  api_version: Optional[str] = None,
94
- azure_deployment_name: Optional[str] = None,
95
122
  azure_ad_token_provider: Optional["AzureADTokenProvider"] = None,
96
123
  azure_ad_token: Optional[str] = None,
124
+ max_retries: int = 3,
125
+ client: Optional[Any] = None,
126
+ async_client: Optional[Any] = None,
127
+ azure_deployment_name: Optional[str] = None,
128
+ **kwargs: Any,
97
129
  ) -> None:
130
+ # Handle deprecated azure_deployment_name parameter
131
+ if azure_deployment_name is not None:
132
+ warnings.warn(
133
+ "The 'azure_deployment_name' parameter is deprecated. "
134
+ "Please use 'model_type' parameter instead. "
135
+ "The 'azure_deployment_name' parameter is being ignored.",
136
+ DeprecationWarning,
137
+ stacklevel=2,
138
+ )
139
+
140
+ # Handle deprecated AZURE_DEPLOYMENT_NAME environment variable
141
+ if os.environ.get("AZURE_DEPLOYMENT_NAME") is not None:
142
+ warnings.warn(
143
+ "The 'AZURE_DEPLOYMENT_NAME' environment variable is "
144
+ "deprecated. Please use the 'model_type' parameter "
145
+ "instead. The 'AZURE_DEPLOYMENT_NAME' environment "
146
+ "variable is being ignored.",
147
+ DeprecationWarning,
148
+ stacklevel=2,
149
+ )
150
+
98
151
  if model_config_dict is None:
99
152
  model_config_dict = ChatGPTConfig().as_dict()
100
153
  api_key = api_key or os.environ.get("AZURE_OPENAI_API_KEY")
@@ -105,9 +158,6 @@ class AzureOpenAIModel(BaseModelBackend):
105
158
  )
106
159
 
107
160
  self.api_version = api_version or os.environ.get("AZURE_API_VERSION")
108
- self._azure_deployment_name = azure_deployment_name or os.environ.get(
109
- "AZURE_DEPLOYMENT_NAME"
110
- )
111
161
  self._azure_ad_token = azure_ad_token or os.environ.get(
112
162
  "AZURE_AD_TOKEN"
113
163
  )
@@ -117,58 +167,73 @@ class AzureOpenAIModel(BaseModelBackend):
117
167
  "Must provide either the `api_version` argument "
118
168
  "or `AZURE_API_VERSION` environment variable."
119
169
  )
120
- if self._azure_deployment_name is None:
121
- raise ValueError(
122
- "Must provide either the `azure_deployment_name` argument "
123
- "or `AZURE_DEPLOYMENT_NAME` environment variable."
124
- )
125
170
 
126
- if is_langfuse_available():
127
- from langfuse.openai import AsyncAzureOpenAI as LangfuseAsyncOpenAI
128
- from langfuse.openai import AzureOpenAI as LangfuseOpenAI
129
-
130
- self._client = LangfuseOpenAI(
131
- azure_endpoint=str(self._url),
132
- azure_deployment=self._azure_deployment_name,
133
- api_version=self.api_version,
134
- api_key=self._api_key,
135
- azure_ad_token=self._azure_ad_token,
136
- azure_ad_token_provider=self.azure_ad_token_provider,
137
- timeout=self._timeout,
138
- max_retries=3,
139
- )
140
- self._async_client = LangfuseAsyncOpenAI(
141
- azure_endpoint=str(self._url),
142
- azure_deployment=self._azure_deployment_name,
143
- api_version=self.api_version,
144
- api_key=self._api_key,
145
- azure_ad_token=self._azure_ad_token,
146
- azure_ad_token_provider=self.azure_ad_token_provider,
147
- timeout=self._timeout,
148
- max_retries=3,
149
- )
171
+ # Use custom clients if provided, otherwise create new ones
172
+ if client is not None:
173
+ # Use the provided custom sync client
174
+ self._client = client
150
175
  else:
151
- self._client = AzureOpenAI(
152
- azure_endpoint=str(self._url),
153
- azure_deployment=self._azure_deployment_name,
154
- api_version=self.api_version,
155
- api_key=self._api_key,
156
- azure_ad_token=self._azure_ad_token,
157
- azure_ad_token_provider=self.azure_ad_token_provider,
158
- timeout=self._timeout,
159
- max_retries=3,
160
- )
176
+ # Create default sync client
177
+ if is_langfuse_available():
178
+ from langfuse.openai import AzureOpenAI as LangfuseOpenAI
179
+
180
+ self._client = LangfuseOpenAI(
181
+ azure_endpoint=str(self._url),
182
+ azure_deployment=str(self.model_type),
183
+ api_version=self.api_version,
184
+ api_key=self._api_key,
185
+ azure_ad_token=self._azure_ad_token,
186
+ azure_ad_token_provider=self.azure_ad_token_provider,
187
+ timeout=self._timeout,
188
+ max_retries=max_retries,
189
+ **kwargs,
190
+ )
191
+ else:
192
+ self._client = AzureOpenAI(
193
+ azure_endpoint=str(self._url),
194
+ azure_deployment=str(self.model_type),
195
+ api_version=self.api_version,
196
+ api_key=self._api_key,
197
+ azure_ad_token=self._azure_ad_token,
198
+ azure_ad_token_provider=self.azure_ad_token_provider,
199
+ timeout=self._timeout,
200
+ max_retries=max_retries,
201
+ **kwargs,
202
+ )
161
203
 
162
- self._async_client = AsyncAzureOpenAI(
163
- azure_endpoint=str(self._url),
164
- azure_deployment=self._azure_deployment_name,
165
- api_version=self.api_version,
166
- api_key=self._api_key,
167
- azure_ad_token=self._azure_ad_token,
168
- azure_ad_token_provider=self.azure_ad_token_provider,
169
- timeout=self._timeout,
170
- max_retries=3,
171
- )
204
+ if async_client is not None:
205
+ # Use the provided custom async client
206
+ self._async_client = async_client
207
+ else:
208
+ # Create default async client
209
+ if is_langfuse_available():
210
+ from langfuse.openai import (
211
+ AsyncAzureOpenAI as LangfuseAsyncOpenAI,
212
+ )
213
+
214
+ self._async_client = LangfuseAsyncOpenAI(
215
+ azure_endpoint=str(self._url),
216
+ azure_deployment=str(self.model_type),
217
+ api_version=self.api_version,
218
+ api_key=self._api_key,
219
+ azure_ad_token=self._azure_ad_token,
220
+ azure_ad_token_provider=self.azure_ad_token_provider,
221
+ timeout=self._timeout,
222
+ max_retries=max_retries,
223
+ **kwargs,
224
+ )
225
+ else:
226
+ self._async_client = AsyncAzureOpenAI(
227
+ azure_endpoint=str(self._url),
228
+ azure_deployment=str(self.model_type),
229
+ api_version=self.api_version,
230
+ api_key=self._api_key,
231
+ azure_ad_token=self._azure_ad_token,
232
+ azure_ad_token_provider=self.azure_ad_token_provider,
233
+ timeout=self._timeout,
234
+ max_retries=max_retries,
235
+ **kwargs,
236
+ )
172
237
 
173
238
  @property
174
239
  def token_counter(self) -> BaseTokenCounter:
@@ -188,7 +253,11 @@ class AzureOpenAIModel(BaseModelBackend):
188
253
  messages: List[OpenAIMessage],
189
254
  response_format: Optional[Type[BaseModel]] = None,
190
255
  tools: Optional[List[Dict[str, Any]]] = None,
191
- ) -> Union[ChatCompletion, Stream[ChatCompletionChunk]]:
256
+ ) -> Union[
257
+ ChatCompletion,
258
+ Stream[ChatCompletionChunk],
259
+ ChatCompletionStreamManager[BaseModel],
260
+ ]:
192
261
  r"""Runs inference of Azure OpenAI chat completion.
193
262
 
194
263
  Args:
@@ -203,6 +272,8 @@ class AzureOpenAIModel(BaseModelBackend):
203
272
  Union[ChatCompletion, Stream[ChatCompletionChunk]]:
204
273
  `ChatCompletion` in the non-stream mode, or
205
274
  `Stream[ChatCompletionChunk]` in the stream mode.
275
+ `ChatCompletionStreamManager[BaseModel]` for
276
+ structured output streaming.
206
277
  """
207
278
 
208
279
  # Update Langfuse trace with current agent session and metadata
@@ -220,10 +291,14 @@ class AzureOpenAIModel(BaseModelBackend):
220
291
  response_format = response_format or self.model_config_dict.get(
221
292
  "response_format", None
222
293
  )
294
+ is_streaming = self.model_config_dict.get("stream", False)
223
295
  if response_format:
224
- result: Union[ChatCompletion, Stream[ChatCompletionChunk]] = (
225
- self._request_parse(messages, response_format, tools)
226
- )
296
+ if is_streaming:
297
+ return self._request_stream_parse(
298
+ messages, response_format, tools
299
+ )
300
+ else:
301
+ return self._request_parse(messages, response_format, tools)
227
302
  else:
228
303
  result = self._request_chat_completion(messages, tools)
229
304
 
@@ -235,7 +310,11 @@ class AzureOpenAIModel(BaseModelBackend):
235
310
  messages: List[OpenAIMessage],
236
311
  response_format: Optional[Type[BaseModel]] = None,
237
312
  tools: Optional[List[Dict[str, Any]]] = None,
238
- ) -> Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
313
+ ) -> Union[
314
+ ChatCompletion,
315
+ AsyncStream[ChatCompletionChunk],
316
+ AsyncChatCompletionStreamManager[BaseModel],
317
+ ]:
239
318
  r"""Runs inference of Azure OpenAI chat completion.
240
319
 
241
320
  Args:
@@ -247,9 +326,12 @@ class AzureOpenAIModel(BaseModelBackend):
247
326
  use for the request.
248
327
 
249
328
  Returns:
250
- Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
329
+ Union[ChatCompletion, AsyncStream[ChatCompletionChunk],
330
+ AsyncChatCompletionStreamManager[BaseModel]]:
251
331
  `ChatCompletion` in the non-stream mode, or
252
332
  `AsyncStream[ChatCompletionChunk]` in the stream mode.
333
+ `AsyncChatCompletionStreamManager[BaseModel]` for
334
+ structured output streaming.
253
335
  """
254
336
 
255
337
  # Update Langfuse trace with current agent session and metadata
@@ -267,10 +349,16 @@ class AzureOpenAIModel(BaseModelBackend):
267
349
  response_format = response_format or self.model_config_dict.get(
268
350
  "response_format", None
269
351
  )
352
+ is_streaming = self.model_config_dict.get("stream", False)
270
353
  if response_format:
271
- result: Union[
272
- ChatCompletion, AsyncStream[ChatCompletionChunk]
273
- ] = await self._arequest_parse(messages, response_format, tools)
354
+ if is_streaming:
355
+ return await self._arequest_stream_parse(
356
+ messages, response_format, tools
357
+ )
358
+ else:
359
+ return await self._arequest_parse(
360
+ messages, response_format, tools
361
+ )
274
362
  else:
275
363
  result = await self._arequest_chat_completion(messages, tools)
276
364
 
@@ -288,7 +376,7 @@ class AzureOpenAIModel(BaseModelBackend):
288
376
 
289
377
  return self._client.chat.completions.create(
290
378
  messages=messages,
291
- model=self._azure_deployment_name, # type:ignore[arg-type]
379
+ model=str(self.model_type),
292
380
  **request_config,
293
381
  )
294
382
 
@@ -304,7 +392,7 @@ class AzureOpenAIModel(BaseModelBackend):
304
392
 
305
393
  return await self._async_client.chat.completions.create(
306
394
  messages=messages,
307
- model=self._azure_deployment_name, # type:ignore[arg-type]
395
+ model=str(self.model_type),
308
396
  **request_config,
309
397
  )
310
398
 
@@ -314,8 +402,6 @@ class AzureOpenAIModel(BaseModelBackend):
314
402
  response_format: Type[BaseModel],
315
403
  tools: Optional[List[Dict[str, Any]]] = None,
316
404
  ) -> ChatCompletion:
317
- import copy
318
-
319
405
  request_config = copy.deepcopy(self.model_config_dict)
320
406
 
321
407
  request_config["response_format"] = response_format
@@ -327,7 +413,7 @@ class AzureOpenAIModel(BaseModelBackend):
327
413
 
328
414
  return self._client.beta.chat.completions.parse(
329
415
  messages=messages,
330
- model=self._azure_deployment_name, # type:ignore[arg-type]
416
+ model=str(self.model_type),
331
417
  **request_config,
332
418
  )
333
419
 
@@ -337,8 +423,6 @@ class AzureOpenAIModel(BaseModelBackend):
337
423
  response_format: Type[BaseModel],
338
424
  tools: Optional[List[Dict[str, Any]]] = None,
339
425
  ) -> ChatCompletion:
340
- import copy
341
-
342
426
  request_config = copy.deepcopy(self.model_config_dict)
343
427
 
344
428
  request_config["response_format"] = response_format
@@ -350,24 +434,63 @@ class AzureOpenAIModel(BaseModelBackend):
350
434
 
351
435
  return await self._async_client.beta.chat.completions.parse(
352
436
  messages=messages,
353
- model=self._azure_deployment_name, # type:ignore[arg-type]
437
+ model=str(self.model_type),
354
438
  **request_config,
355
439
  )
356
440
 
357
- def check_model_config(self):
358
- r"""Check whether the model configuration contains any
359
- unexpected arguments to Azure OpenAI API.
441
+ def _request_stream_parse(
442
+ self,
443
+ messages: List[OpenAIMessage],
444
+ response_format: Type[BaseModel],
445
+ tools: Optional[List[Dict[str, Any]]] = None,
446
+ ) -> ChatCompletionStreamManager[BaseModel]:
447
+ r"""Request streaming structured output parsing.
360
448
 
361
- Raises:
362
- ValueError: If the model configuration dictionary contains any
363
- unexpected arguments to Azure OpenAI API.
449
+ Note: This uses OpenAI's beta streaming API for structured outputs.
364
450
  """
365
- for param in self.model_config_dict:
366
- if param not in OPENAI_API_PARAMS:
367
- raise ValueError(
368
- f"Unexpected argument `{param}` is "
369
- "input into Azure OpenAI model backend."
370
- )
451
+
452
+ request_config = copy.deepcopy(self.model_config_dict)
453
+
454
+ # Remove stream from config as it's handled by the stream method
455
+ request_config.pop("stream", None)
456
+
457
+ if tools is not None:
458
+ request_config["tools"] = tools
459
+
460
+ # Use the beta streaming API for structured outputs
461
+ return self._client.beta.chat.completions.stream(
462
+ messages=messages,
463
+ model=str(self.model_type),
464
+ response_format=response_format,
465
+ **request_config,
466
+ )
467
+
468
+ async def _arequest_stream_parse(
469
+ self,
470
+ messages: List[OpenAIMessage],
471
+ response_format: Type[BaseModel],
472
+ tools: Optional[List[Dict[str, Any]]] = None,
473
+ ) -> AsyncChatCompletionStreamManager[BaseModel]:
474
+ r"""Request async streaming structured output parsing.
475
+
476
+ Note: This uses OpenAI's beta streaming API for structured outputs.
477
+ """
478
+
479
+ request_config = copy.deepcopy(self.model_config_dict)
480
+
481
+ # Remove stream from config as it's handled by the stream method
482
+ request_config.pop("stream", None)
483
+
484
+ if tools is not None:
485
+ request_config["tools"] = tools
486
+
487
+ # Use the beta streaming API for structured outputs
488
+ return self._async_client.beta.chat.completions.stream(
489
+ messages=messages,
490
+ model=str(self.model_type),
491
+ response_format=response_format,
492
+ **request_config,
493
+ )
371
494
 
372
495
  @property
373
496
  def stream(self) -> bool:
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,12 +10,14 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
 
15
15
  import os
16
16
  from abc import ABC, abstractmethod
17
17
  from typing import Any, Optional
18
18
 
19
+ from camel.utils import Constants
20
+
19
21
 
20
22
  class BaseAudioModel(ABC):
21
23
  r"""Base class for audio models providing Text-to-Speech (TTS) and
@@ -26,7 +28,7 @@ class BaseAudioModel(ABC):
26
28
  self,
27
29
  api_key: Optional[str] = None,
28
30
  url: Optional[str] = None,
29
- timeout: Optional[float] = None,
31
+ timeout: Optional[float] = Constants.TIMEOUT_THRESHOLD,
30
32
  ) -> None:
31
33
  r"""Initialize an instance of BaseAudioModel.
32
34