camel-ai 0.2.65__py3-none-any.whl → 0.2.83a6__py3-none-any.whl

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

Potentially problematic release.


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

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