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

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

Potentially problematic release.


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

Files changed (506) hide show
  1. camel/__init__.py +3 -3
  2. camel/agents/__init__.py +2 -2
  3. camel/agents/_types.py +9 -4
  4. camel/agents/_utils.py +40 -2
  5. camel/agents/base.py +2 -2
  6. camel/agents/chat_agent.py +5012 -902
  7. camel/agents/critic_agent.py +2 -2
  8. camel/agents/deductive_reasoner_agent.py +56 -56
  9. camel/agents/embodied_agent.py +2 -2
  10. camel/agents/knowledge_graph_agent.py +20 -20
  11. camel/agents/mcp_agent.py +39 -36
  12. camel/agents/multi_hop_generator_agent.py +3 -3
  13. camel/agents/programmed_agent_instruction.py +2 -2
  14. camel/agents/repo_agent.py +4 -3
  15. camel/agents/role_assignment_agent.py +2 -2
  16. camel/agents/search_agent.py +2 -2
  17. camel/agents/task_agent.py +2 -2
  18. camel/agents/tool_agents/__init__.py +2 -2
  19. camel/agents/tool_agents/base.py +2 -2
  20. camel/agents/tool_agents/hugging_face_tool_agent.py +3 -3
  21. camel/benchmarks/__init__.py +2 -2
  22. camel/benchmarks/apibank.py +5 -5
  23. camel/benchmarks/apibench.py +2 -2
  24. camel/benchmarks/base.py +2 -2
  25. camel/benchmarks/browsecomp.py +44 -33
  26. camel/benchmarks/gaia.py +17 -13
  27. camel/benchmarks/mock_website/README.md +94 -0
  28. camel/benchmarks/mock_website/mock_web.py +299 -0
  29. camel/benchmarks/mock_website/requirements.txt +3 -0
  30. camel/benchmarks/mock_website/shopping_mall/app.py +465 -0
  31. camel/benchmarks/mock_website/task.json +104 -0
  32. camel/benchmarks/nexus.py +3 -3
  33. camel/benchmarks/ragbench.py +2 -2
  34. camel/bots/__init__.py +2 -2
  35. camel/bots/discord/__init__.py +2 -2
  36. camel/bots/discord/discord_app.py +2 -2
  37. camel/bots/discord/discord_installation.py +2 -2
  38. camel/bots/discord/discord_store.py +3 -3
  39. camel/bots/slack/__init__.py +2 -2
  40. camel/bots/slack/models.py +4 -4
  41. camel/bots/slack/slack_app.py +2 -2
  42. camel/bots/telegram_bot.py +2 -2
  43. camel/configs/__init__.py +26 -2
  44. camel/configs/aihubmix_config.py +90 -0
  45. camel/configs/aiml_config.py +2 -2
  46. camel/configs/amd_config.py +70 -0
  47. camel/configs/anthropic_config.py +8 -7
  48. camel/configs/base_config.py +2 -2
  49. camel/configs/bedrock_config.py +5 -3
  50. camel/configs/cerebras_config.py +98 -0
  51. camel/configs/cohere_config.py +3 -3
  52. camel/configs/cometapi_config.py +106 -0
  53. camel/configs/crynux_config.py +94 -0
  54. camel/configs/deepseek_config.py +9 -8
  55. camel/configs/gemini_config.py +6 -4
  56. camel/configs/groq_config.py +6 -4
  57. camel/configs/internlm_config.py +6 -4
  58. camel/configs/litellm_config.py +2 -2
  59. camel/configs/lmstudio_config.py +6 -4
  60. camel/configs/minimax_config.py +95 -0
  61. camel/configs/mistral_config.py +3 -3
  62. camel/configs/modelscope_config.py +5 -3
  63. camel/configs/moonshot_config.py +2 -2
  64. camel/configs/nebius_config.py +105 -0
  65. camel/configs/netmind_config.py +2 -2
  66. camel/configs/novita_config.py +2 -2
  67. camel/configs/nvidia_config.py +2 -2
  68. camel/configs/ollama_config.py +2 -2
  69. camel/configs/openai_config.py +8 -3
  70. camel/configs/openrouter_config.py +6 -4
  71. camel/configs/ppio_config.py +2 -2
  72. camel/configs/qianfan_config.py +85 -0
  73. camel/configs/qwen_config.py +2 -2
  74. camel/configs/reka_config.py +3 -3
  75. camel/configs/samba_config.py +8 -6
  76. camel/configs/sglang_config.py +2 -2
  77. camel/configs/siliconflow_config.py +2 -2
  78. camel/configs/togetherai_config.py +2 -2
  79. camel/configs/vllm_config.py +4 -2
  80. camel/configs/watsonx_config.py +2 -2
  81. camel/configs/yi_config.py +6 -4
  82. camel/configs/zhipuai_config.py +6 -4
  83. camel/{data_collector → data_collectors}/__init__.py +2 -2
  84. camel/{data_collector → data_collectors}/alpaca_collector.py +19 -10
  85. camel/{data_collector → data_collectors}/base.py +2 -2
  86. camel/{data_collector → data_collectors}/sharegpt_collector.py +3 -3
  87. camel/datagen/__init__.py +2 -2
  88. camel/datagen/cot_datagen.py +32 -37
  89. camel/datagen/evol_instruct/__init__.py +2 -2
  90. camel/datagen/evol_instruct/evol_instruct.py +2 -2
  91. camel/datagen/evol_instruct/scorer.py +24 -25
  92. camel/datagen/evol_instruct/templates.py +48 -48
  93. camel/datagen/self_improving_cot.py +5 -5
  94. camel/datagen/self_instruct/__init__.py +2 -2
  95. camel/datagen/self_instruct/filter/__init__.py +2 -2
  96. camel/datagen/self_instruct/filter/filter_function.py +2 -2
  97. camel/datagen/self_instruct/filter/filter_registry.py +2 -2
  98. camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
  99. camel/datagen/self_instruct/self_instruct.py +2 -2
  100. camel/datagen/self_instruct/templates.py +47 -47
  101. camel/datagen/source2synth/__init__.py +2 -2
  102. camel/datagen/source2synth/data_processor.py +2 -2
  103. camel/datagen/source2synth/models.py +2 -2
  104. camel/datagen/source2synth/user_data_processor_config.py +2 -2
  105. camel/datahubs/__init__.py +2 -2
  106. camel/datahubs/base.py +2 -2
  107. camel/datahubs/huggingface.py +2 -2
  108. camel/datahubs/models.py +2 -2
  109. camel/datasets/__init__.py +2 -2
  110. camel/datasets/base_generator.py +41 -12
  111. camel/datasets/few_shot_generator.py +18 -18
  112. camel/datasets/models.py +3 -3
  113. camel/datasets/self_instruct_generator.py +2 -2
  114. camel/datasets/static_dataset.py +152 -2
  115. camel/embeddings/__init__.py +2 -2
  116. camel/embeddings/azure_embedding.py +2 -2
  117. camel/embeddings/base.py +2 -2
  118. camel/embeddings/gemini_embedding.py +2 -2
  119. camel/embeddings/jina_embedding.py +10 -3
  120. camel/embeddings/mistral_embedding.py +2 -2
  121. camel/embeddings/openai_compatible_embedding.py +2 -2
  122. camel/embeddings/openai_embedding.py +2 -2
  123. camel/embeddings/sentence_transformers_embeddings.py +4 -4
  124. camel/embeddings/together_embedding.py +2 -2
  125. camel/embeddings/vlm_embedding.py +11 -4
  126. camel/environments/__init__.py +14 -2
  127. camel/environments/models.py +2 -2
  128. camel/environments/multi_step.py +2 -2
  129. camel/environments/rlcards_env.py +860 -0
  130. camel/environments/single_step.py +30 -5
  131. camel/environments/tic_tac_toe.py +3 -3
  132. camel/extractors/__init__.py +2 -2
  133. camel/extractors/base.py +2 -2
  134. camel/extractors/python_strategies.py +2 -2
  135. camel/generators.py +2 -2
  136. camel/human.py +2 -2
  137. camel/interpreters/__init__.py +4 -2
  138. camel/interpreters/base.py +16 -3
  139. camel/interpreters/docker/Dockerfile +53 -7
  140. camel/interpreters/docker_interpreter.py +70 -11
  141. camel/interpreters/e2b_interpreter.py +59 -11
  142. camel/interpreters/internal_python_interpreter.py +81 -4
  143. camel/interpreters/interpreter_error.py +2 -2
  144. camel/interpreters/ipython_interpreter.py +23 -5
  145. camel/interpreters/microsandbox_interpreter.py +395 -0
  146. camel/interpreters/subprocess_interpreter.py +36 -4
  147. camel/loaders/__init__.py +17 -5
  148. camel/loaders/apify_reader.py +2 -2
  149. camel/loaders/base_io.py +2 -2
  150. camel/loaders/base_loader.py +85 -0
  151. camel/loaders/chunkr_reader.py +128 -93
  152. camel/loaders/crawl4ai_reader.py +2 -2
  153. camel/loaders/firecrawl_reader.py +6 -6
  154. camel/loaders/jina_url_reader.py +2 -2
  155. camel/loaders/markitdown.py +2 -2
  156. camel/loaders/mineru_extractor.py +2 -2
  157. camel/loaders/mistral_reader.py +148 -0
  158. camel/loaders/scrapegraph_reader.py +2 -2
  159. camel/loaders/unstructured_io.py +2 -2
  160. camel/logger.py +5 -5
  161. camel/memories/__init__.py +2 -2
  162. camel/memories/agent_memories.py +86 -3
  163. camel/memories/base.py +36 -2
  164. camel/memories/blocks/__init__.py +2 -2
  165. camel/memories/blocks/chat_history_block.py +126 -9
  166. camel/memories/blocks/vectordb_block.py +10 -3
  167. camel/memories/context_creators/__init__.py +2 -2
  168. camel/memories/context_creators/score_based.py +31 -239
  169. camel/memories/records.py +98 -13
  170. camel/messages/__init__.py +2 -2
  171. camel/messages/base.py +193 -46
  172. camel/messages/conversion/__init__.py +2 -2
  173. camel/messages/conversion/alpaca.py +2 -2
  174. camel/messages/conversion/conversation_models.py +2 -2
  175. camel/messages/conversion/sharegpt/__init__.py +2 -2
  176. camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
  177. camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
  178. camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
  179. camel/messages/func_message.py +54 -17
  180. camel/models/__init__.py +18 -2
  181. camel/models/_utils.py +3 -3
  182. camel/models/aihubmix_model.py +83 -0
  183. camel/models/aiml_model.py +11 -18
  184. camel/models/amd_model.py +101 -0
  185. camel/models/anthropic_model.py +127 -20
  186. camel/models/aws_bedrock_model.py +12 -35
  187. camel/models/azure_openai_model.py +263 -63
  188. camel/models/base_audio_model.py +5 -3
  189. camel/models/base_model.py +195 -26
  190. camel/models/cerebras_model.py +83 -0
  191. camel/models/cohere_model.py +81 -21
  192. camel/models/cometapi_model.py +83 -0
  193. camel/models/crynux_model.py +87 -0
  194. camel/models/deepseek_model.py +61 -59
  195. camel/models/fish_audio_model.py +8 -2
  196. camel/models/gemini_model.py +439 -30
  197. camel/models/groq_model.py +11 -19
  198. camel/models/internlm_model.py +11 -18
  199. camel/models/litellm_model.py +94 -34
  200. camel/models/lmstudio_model.py +17 -20
  201. camel/models/minimax_model.py +83 -0
  202. camel/models/mistral_model.py +84 -19
  203. camel/models/model_factory.py +49 -6
  204. camel/models/model_manager.py +33 -11
  205. camel/models/modelscope_model.py +13 -193
  206. camel/models/moonshot_model.py +195 -21
  207. camel/models/nebius_model.py +83 -0
  208. camel/models/nemotron_model.py +19 -9
  209. camel/models/netmind_model.py +11 -18
  210. camel/models/novita_model.py +11 -18
  211. camel/models/nvidia_model.py +11 -18
  212. camel/models/ollama_model.py +14 -21
  213. camel/models/openai_audio_models.py +2 -2
  214. camel/models/openai_compatible_model.py +234 -27
  215. camel/models/openai_model.py +255 -39
  216. camel/models/openrouter_model.py +11 -19
  217. camel/models/ppio_model.py +11 -18
  218. camel/models/qianfan_model.py +89 -0
  219. camel/models/qwen_model.py +13 -193
  220. camel/models/reka_model.py +90 -21
  221. camel/models/reward/__init__.py +2 -2
  222. camel/models/reward/base_reward_model.py +2 -2
  223. camel/models/reward/evaluator.py +2 -2
  224. camel/models/reward/nemotron_model.py +2 -2
  225. camel/models/reward/skywork_model.py +2 -2
  226. camel/models/samba_model.py +117 -49
  227. camel/models/sglang_model.py +162 -42
  228. camel/models/siliconflow_model.py +12 -35
  229. camel/models/stub_model.py +10 -7
  230. camel/models/togetherai_model.py +11 -18
  231. camel/models/vllm_model.py +10 -18
  232. camel/models/volcano_model.py +16 -20
  233. camel/models/watsonx_model.py +69 -19
  234. camel/models/yi_model.py +11 -18
  235. camel/models/zhipuai_model.py +70 -18
  236. camel/parsers/__init__.py +18 -0
  237. camel/parsers/mcp_tool_call_parser.py +176 -0
  238. camel/personas/__init__.py +2 -2
  239. camel/personas/persona.py +2 -2
  240. camel/personas/persona_hub.py +2 -2
  241. camel/prompts/__init__.py +2 -2
  242. camel/prompts/ai_society.py +2 -2
  243. camel/prompts/base.py +2 -2
  244. camel/prompts/code.py +2 -2
  245. camel/prompts/evaluation.py +2 -2
  246. camel/prompts/generate_text_embedding_data.py +2 -2
  247. camel/prompts/image_craft.py +2 -2
  248. camel/prompts/misalignment.py +2 -2
  249. camel/prompts/multi_condition_image_craft.py +2 -2
  250. camel/prompts/object_recognition.py +2 -2
  251. camel/prompts/persona_hub.py +3 -3
  252. camel/prompts/prompt_templates.py +2 -2
  253. camel/prompts/role_description_prompt_template.py +2 -2
  254. camel/prompts/solution_extraction.py +8 -8
  255. camel/prompts/task_prompt_template.py +2 -2
  256. camel/prompts/translation.py +2 -2
  257. camel/prompts/video_description_prompt.py +3 -3
  258. camel/responses/__init__.py +2 -2
  259. camel/responses/agent_responses.py +2 -2
  260. camel/retrievers/__init__.py +2 -2
  261. camel/retrievers/auto_retriever.py +23 -3
  262. camel/retrievers/base.py +2 -2
  263. camel/retrievers/bm25_retriever.py +3 -4
  264. camel/retrievers/cohere_rerank_retriever.py +2 -2
  265. camel/retrievers/hybrid_retrival.py +4 -4
  266. camel/retrievers/vector_retriever.py +2 -2
  267. camel/runtimes/Dockerfile.multi-toolkit +90 -0
  268. camel/{runtime → runtimes}/__init__.py +2 -2
  269. camel/runtimes/api.py +153 -0
  270. camel/{runtime → runtimes}/base.py +2 -2
  271. camel/{runtime → runtimes}/configs.py +13 -13
  272. camel/{runtime → runtimes}/daytona_runtime.py +18 -19
  273. camel/{runtime → runtimes}/docker_runtime.py +13 -13
  274. camel/{runtime → runtimes}/llm_guard_runtime.py +28 -28
  275. camel/{runtime → runtimes}/remote_http_runtime.py +12 -12
  276. camel/{runtime → runtimes}/ubuntu_docker_runtime.py +3 -3
  277. camel/{runtime → runtimes}/utils/__init__.py +2 -2
  278. camel/{runtime → runtimes}/utils/function_risk_toolkit.py +2 -2
  279. camel/{runtime → runtimes}/utils/ignore_risk_toolkit.py +2 -2
  280. camel/schemas/__init__.py +2 -2
  281. camel/schemas/base.py +2 -2
  282. camel/schemas/openai_converter.py +3 -3
  283. camel/schemas/outlines_converter.py +2 -2
  284. camel/services/agent_openapi_server.py +380 -0
  285. camel/societies/__init__.py +4 -2
  286. camel/societies/babyagi_playing.py +2 -2
  287. camel/societies/role_playing.py +201 -80
  288. camel/societies/workforce/__init__.py +10 -3
  289. camel/societies/workforce/base.py +9 -5
  290. camel/societies/workforce/events.py +143 -0
  291. camel/societies/workforce/prompts.py +258 -33
  292. camel/societies/workforce/role_playing_worker.py +95 -30
  293. camel/societies/workforce/single_agent_worker.py +659 -30
  294. camel/societies/workforce/structured_output_handler.py +512 -0
  295. camel/societies/workforce/task_channel.py +182 -38
  296. camel/societies/workforce/utils.py +784 -18
  297. camel/societies/workforce/worker.py +96 -28
  298. camel/societies/workforce/workflow_memory_manager.py +1746 -0
  299. camel/societies/workforce/workforce.py +5730 -366
  300. camel/societies/workforce/workforce_callback.py +103 -0
  301. camel/societies/workforce/workforce_logger.py +647 -0
  302. camel/societies/workforce/workforce_metrics.py +33 -0
  303. camel/storages/__init__.py +10 -2
  304. camel/storages/graph_storages/__init__.py +2 -2
  305. camel/storages/graph_storages/base.py +2 -2
  306. camel/storages/graph_storages/graph_element.py +2 -2
  307. camel/storages/graph_storages/nebula_graph.py +4 -4
  308. camel/storages/graph_storages/neo4j_graph.py +7 -7
  309. camel/storages/key_value_storages/__init__.py +2 -2
  310. camel/storages/key_value_storages/base.py +2 -2
  311. camel/storages/key_value_storages/in_memory.py +2 -2
  312. camel/storages/key_value_storages/json.py +17 -4
  313. camel/storages/key_value_storages/mem0_cloud.py +50 -49
  314. camel/storages/key_value_storages/redis.py +2 -2
  315. camel/storages/object_storages/__init__.py +2 -2
  316. camel/storages/object_storages/amazon_s3.py +2 -2
  317. camel/storages/object_storages/azure_blob.py +2 -2
  318. camel/storages/object_storages/base.py +2 -2
  319. camel/storages/object_storages/google_cloud.py +3 -3
  320. camel/storages/vectordb_storages/__init__.py +12 -2
  321. camel/storages/vectordb_storages/base.py +2 -2
  322. camel/storages/vectordb_storages/chroma.py +731 -0
  323. camel/storages/vectordb_storages/faiss.py +712 -0
  324. camel/storages/vectordb_storages/milvus.py +2 -2
  325. camel/storages/vectordb_storages/oceanbase.py +16 -17
  326. camel/storages/vectordb_storages/pgvector.py +349 -0
  327. camel/storages/vectordb_storages/qdrant.py +6 -6
  328. camel/storages/vectordb_storages/surreal.py +372 -0
  329. camel/storages/vectordb_storages/tidb.py +11 -8
  330. camel/storages/vectordb_storages/weaviate.py +714 -0
  331. camel/tasks/__init__.py +2 -2
  332. camel/tasks/task.py +366 -27
  333. camel/tasks/task_prompt.py +3 -3
  334. camel/terminators/__init__.py +2 -2
  335. camel/terminators/base.py +2 -2
  336. camel/terminators/response_terminator.py +2 -2
  337. camel/terminators/token_limit_terminator.py +2 -2
  338. camel/toolkits/__init__.py +58 -10
  339. camel/toolkits/aci_toolkit.py +66 -21
  340. camel/toolkits/arxiv_toolkit.py +8 -8
  341. camel/toolkits/ask_news_toolkit.py +2 -2
  342. camel/toolkits/async_browser_toolkit.py +174 -575
  343. camel/toolkits/audio_analysis_toolkit.py +3 -3
  344. camel/toolkits/base.py +65 -7
  345. camel/toolkits/bohrium_toolkit.py +318 -0
  346. camel/toolkits/browser_toolkit.py +306 -566
  347. camel/toolkits/browser_toolkit_commons.py +568 -0
  348. camel/toolkits/code_execution.py +67 -11
  349. camel/toolkits/context_summarizer_toolkit.py +684 -0
  350. camel/toolkits/craw4ai_toolkit.py +93 -0
  351. camel/toolkits/dappier_toolkit.py +12 -8
  352. camel/toolkits/data_commons_toolkit.py +2 -2
  353. camel/toolkits/dingtalk.py +1135 -0
  354. camel/toolkits/earth_science_toolkit.py +5367 -0
  355. camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
  356. camel/toolkits/excel_toolkit.py +910 -70
  357. camel/toolkits/file_toolkit.py +1402 -0
  358. camel/toolkits/function_tool.py +128 -20
  359. camel/toolkits/github_toolkit.py +148 -43
  360. camel/toolkits/gmail_toolkit.py +1839 -0
  361. camel/toolkits/google_calendar_toolkit.py +40 -6
  362. camel/toolkits/google_drive_mcp_toolkit.py +54 -0
  363. camel/toolkits/google_maps_toolkit.py +2 -2
  364. camel/toolkits/google_scholar_toolkit.py +2 -2
  365. camel/toolkits/human_toolkit.py +36 -12
  366. camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
  367. camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
  368. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
  369. camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1973 -0
  370. camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
  371. camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
  372. camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
  373. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
  374. camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1929 -0
  375. camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
  376. camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
  377. camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
  378. camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
  379. camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
  380. camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
  381. camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
  382. camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
  383. camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +319 -0
  384. camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
  385. camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
  386. camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
  387. camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
  388. camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
  389. camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
  390. camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
  391. camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
  392. camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
  393. camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
  394. camel/toolkits/image_analysis_toolkit.py +3 -3
  395. camel/toolkits/image_generation_toolkit.py +390 -0
  396. camel/toolkits/jina_reranker_toolkit.py +195 -79
  397. camel/toolkits/klavis_toolkit.py +7 -3
  398. camel/toolkits/linkedin_toolkit.py +2 -2
  399. camel/toolkits/markitdown_toolkit.py +104 -0
  400. camel/toolkits/math_toolkit.py +66 -12
  401. camel/toolkits/mcp_toolkit.py +841 -600
  402. camel/toolkits/memory_toolkit.py +7 -3
  403. camel/toolkits/meshy_toolkit.py +2 -2
  404. camel/toolkits/message_agent_toolkit.py +608 -0
  405. camel/toolkits/message_integration.py +724 -0
  406. camel/toolkits/mineru_toolkit.py +2 -2
  407. camel/toolkits/minimax_mcp_toolkit.py +195 -0
  408. camel/toolkits/networkx_toolkit.py +2 -2
  409. camel/toolkits/note_taking_toolkit.py +277 -0
  410. camel/toolkits/notion_mcp_toolkit.py +224 -0
  411. camel/toolkits/notion_toolkit.py +2 -2
  412. camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
  413. camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
  414. camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
  415. camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
  416. camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
  417. camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
  418. camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
  419. camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
  420. camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
  421. camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
  422. camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
  423. camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
  424. camel/toolkits/open_api_specs/security_config.py +2 -2
  425. camel/toolkits/open_api_specs/speak/__init__.py +2 -2
  426. camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
  427. camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
  428. camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
  429. camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
  430. camel/toolkits/open_api_toolkit.py +2 -2
  431. camel/toolkits/openbb_toolkit.py +7 -3
  432. camel/toolkits/origene_mcp_toolkit.py +56 -0
  433. camel/toolkits/page_script.js +86 -74
  434. camel/toolkits/playwright_mcp_toolkit.py +27 -32
  435. camel/toolkits/pptx_toolkit.py +790 -0
  436. camel/toolkits/pubmed_toolkit.py +2 -2
  437. camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
  438. camel/toolkits/pyautogui_toolkit.py +2 -2
  439. camel/toolkits/reddit_toolkit.py +2 -2
  440. camel/toolkits/resend_toolkit.py +168 -0
  441. camel/toolkits/retrieval_toolkit.py +2 -2
  442. camel/toolkits/screenshot_toolkit.py +213 -0
  443. camel/toolkits/search_toolkit.py +539 -146
  444. camel/toolkits/searxng_toolkit.py +2 -2
  445. camel/toolkits/semantic_scholar_toolkit.py +2 -2
  446. camel/toolkits/slack_toolkit.py +108 -58
  447. camel/toolkits/sql_toolkit.py +712 -0
  448. camel/toolkits/stripe_toolkit.py +2 -2
  449. camel/toolkits/sympy_toolkit.py +3 -3
  450. camel/toolkits/task_planning_toolkit.py +134 -0
  451. camel/toolkits/terminal_toolkit/__init__.py +18 -0
  452. camel/toolkits/terminal_toolkit/terminal_toolkit.py +1070 -0
  453. camel/toolkits/terminal_toolkit/utils.py +532 -0
  454. camel/toolkits/thinking_toolkit.py +3 -3
  455. camel/toolkits/twitter_toolkit.py +8 -3
  456. camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
  457. camel/toolkits/video_analysis_toolkit.py +112 -29
  458. camel/toolkits/video_download_toolkit.py +22 -16
  459. camel/toolkits/weather_toolkit.py +2 -2
  460. camel/toolkits/web_deploy_toolkit.py +1219 -0
  461. camel/toolkits/wechat_official_toolkit.py +483 -0
  462. camel/toolkits/whatsapp_toolkit.py +2 -2
  463. camel/toolkits/wolfram_alpha_toolkit.py +53 -25
  464. camel/toolkits/zapier_toolkit.py +7 -3
  465. camel/types/__init__.py +4 -4
  466. camel/types/agents/__init__.py +2 -2
  467. camel/types/agents/tool_calling_record.py +6 -3
  468. camel/types/enums.py +454 -35
  469. camel/types/mcp_registries.py +2 -2
  470. camel/types/openai_types.py +4 -4
  471. camel/types/unified_model_type.py +43 -6
  472. camel/utils/__init__.py +20 -2
  473. camel/utils/async_func.py +2 -2
  474. camel/utils/chunker/__init__.py +2 -2
  475. camel/utils/chunker/base.py +2 -2
  476. camel/utils/chunker/code_chunker.py +2 -2
  477. camel/utils/chunker/uio_chunker.py +2 -2
  478. camel/utils/commons.py +65 -7
  479. camel/utils/constants.py +5 -2
  480. camel/utils/context_utils.py +1134 -0
  481. camel/utils/deduplication.py +2 -2
  482. camel/utils/filename.py +2 -2
  483. camel/utils/langfuse.py +258 -0
  484. camel/utils/mcp.py +140 -6
  485. camel/utils/mcp_client.py +1056 -0
  486. camel/utils/message_summarizer.py +148 -0
  487. camel/utils/response_format.py +2 -2
  488. camel/utils/token_counting.py +45 -22
  489. camel/utils/tool_result.py +44 -0
  490. camel/verifiers/__init__.py +2 -2
  491. camel/verifiers/base.py +2 -2
  492. camel/verifiers/math_verifier.py +2 -2
  493. camel/verifiers/models.py +2 -2
  494. camel/verifiers/physics_verifier.py +2 -2
  495. camel/verifiers/python_verifier.py +2 -2
  496. {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/METADATA +349 -108
  497. camel_ai-0.2.82.dist-info/RECORD +507 -0
  498. {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/WHEEL +1 -1
  499. {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/licenses/LICENSE +1 -1
  500. camel/loaders/pandas_reader.py +0 -368
  501. camel/runtime/api.py +0 -97
  502. camel/toolkits/dalle_toolkit.py +0 -171
  503. camel/toolkits/file_write_toolkit.py +0 -395
  504. camel/toolkits/openai_agent_toolkit.py +0 -135
  505. camel/toolkits/terminal_toolkit.py +0 -1037
  506. camel_ai-0.2.59.dist-info/RECORD +0 -410
@@ -1,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,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  import time
15
15
  from typing import Any, Dict, List, Optional, Type, Union
16
16
 
@@ -83,10 +83,17 @@ class StubModel(BaseModelBackend):
83
83
  url: Optional[str] = None,
84
84
  token_counter: Optional[BaseTokenCounter] = None,
85
85
  timeout: Optional[float] = None,
86
+ max_retries: int = 3,
86
87
  ) -> None:
87
88
  r"""All arguments are unused for the dummy model."""
88
89
  super().__init__(
89
- model_type, model_config_dict, api_key, url, token_counter, timeout
90
+ model_type,
91
+ model_config_dict,
92
+ api_key,
93
+ url,
94
+ token_counter,
95
+ timeout,
96
+ max_retries,
90
97
  )
91
98
 
92
99
  @property
@@ -175,7 +182,3 @@ class StubModel(BaseModelBackend):
175
182
  ),
176
183
  )
177
184
  return response
178
-
179
- def check_model_config(self):
180
- r"""Directly pass the check on arguments to STUB model."""
181
- pass
@@ -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,12 @@
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 typing import Any, Dict, Optional, Union
17
17
 
18
- from camel.configs import TOGETHERAI_API_PARAMS, TogetherAIConfig
18
+ from camel.configs import TogetherAIConfig
19
19
  from camel.models.openai_compatible_model import OpenAICompatibleModel
20
20
  from camel.types import ModelType
21
21
  from camel.utils import (
@@ -47,6 +47,10 @@ class TogetherAIModel(OpenAICompatibleModel):
47
47
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
48
48
  environment variable or default to 180 seconds.
49
49
  (default: :obj:`None`)
50
+ max_retries (int, optional): Maximum number of retries for API calls.
51
+ (default: :obj:`3`)
52
+ **kwargs (Any): Additional arguments to pass to the client
53
+ initialization.
50
54
  """
51
55
 
52
56
  @api_keys_required(
@@ -62,6 +66,8 @@ class TogetherAIModel(OpenAICompatibleModel):
62
66
  url: Optional[str] = None,
63
67
  token_counter: Optional[BaseTokenCounter] = None,
64
68
  timeout: Optional[float] = None,
69
+ max_retries: int = 3,
70
+ **kwargs: Any,
65
71
  ) -> None:
66
72
  if model_config_dict is None:
67
73
  model_config_dict = TogetherAIConfig().as_dict()
@@ -77,19 +83,6 @@ class TogetherAIModel(OpenAICompatibleModel):
77
83
  url=url,
78
84
  token_counter=token_counter,
79
85
  timeout=timeout,
86
+ max_retries=max_retries,
87
+ **kwargs,
80
88
  )
81
-
82
- def check_model_config(self):
83
- r"""Check whether the model configuration contains any
84
- unexpected arguments to TogetherAI API.
85
-
86
- Raises:
87
- ValueError: If the model configuration dictionary contains any
88
- unexpected arguments to TogetherAI API.
89
- """
90
- for param in self.model_config_dict:
91
- if param not in TOGETHERAI_API_PARAMS:
92
- raise ValueError(
93
- f"Unexpected argument `{param}` is "
94
- "input into TogetherAI model backend."
95
- )
@@ -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,12 @@
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
  import os
15
15
  import subprocess
16
16
  from typing import Any, Dict, Optional, Union
17
17
 
18
- from camel.configs import VLLM_API_PARAMS, VLLMConfig
18
+ from camel.configs import VLLMConfig
19
19
  from camel.logger import get_logger
20
20
  from camel.models.openai_compatible_model import OpenAICompatibleModel
21
21
  from camel.types import ModelType
@@ -49,6 +49,9 @@ class VLLMModel(OpenAICompatibleModel):
49
49
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
50
50
  environment variable or default to 180 seconds.
51
51
  (default: :obj:`None`)
52
+ max_retries (int, optional): Maximum number of retries for API calls.
53
+ (default: :obj:`3`)
54
+ **kwargs (Any): Additional arguments to pass to the client initialization.
52
55
 
53
56
  References:
54
57
  https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html
@@ -62,6 +65,8 @@ class VLLMModel(OpenAICompatibleModel):
62
65
  url: Optional[str] = None,
63
66
  token_counter: Optional[BaseTokenCounter] = None,
64
67
  timeout: Optional[float] = None,
68
+ max_retries: int = 3,
69
+ **kwargs: Any,
65
70
  ) -> None:
66
71
  if model_config_dict is None:
67
72
  model_config_dict = VLLMConfig().as_dict()
@@ -79,6 +84,8 @@ class VLLMModel(OpenAICompatibleModel):
79
84
  url=self._url,
80
85
  token_counter=token_counter,
81
86
  timeout=timeout,
87
+ max_retries=max_retries,
88
+ **kwargs,
82
89
  )
83
90
 
84
91
  def _start_server(self) -> None:
@@ -96,18 +103,3 @@ class VLLMModel(OpenAICompatibleModel):
96
103
  )
97
104
  except Exception as e:
98
105
  logger.error(f"Failed to start vllm server: {e}.")
99
-
100
- def check_model_config(self):
101
- r"""Check whether the model configuration contains any
102
- unexpected arguments to vLLM API.
103
-
104
- Raises:
105
- ValueError: If the model configuration dictionary contains any
106
- unexpected arguments to OpenAI API.
107
- """
108
- for param in self.model_config_dict:
109
- if param not in VLLM_API_PARAMS:
110
- raise ValueError(
111
- f"Unexpected argument `{param}` is "
112
- "input into vLLM model backend."
113
- )
@@ -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,11 @@
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 typing import Any, Dict, Optional, Union
17
17
 
18
- from camel.configs import OPENAI_API_PARAMS
19
18
  from camel.models.openai_compatible_model import OpenAICompatibleModel
20
19
  from camel.types import ModelType
21
20
  from camel.utils import (
@@ -44,6 +43,10 @@ class VolcanoModel(OpenAICompatibleModel):
44
43
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
45
44
  environment variable or default to 180 seconds.
46
45
  (default: :obj:`None`)
46
+ max_retries (int, optional): Maximum number of retries for API calls.
47
+ (default: :obj:`3`)
48
+ **kwargs (Any): Additional arguments to pass to the client
49
+ initialization.
47
50
  """
48
51
 
49
52
  @api_keys_required(
@@ -59,6 +62,8 @@ class VolcanoModel(OpenAICompatibleModel):
59
62
  url: Optional[str] = None,
60
63
  token_counter: Optional[BaseTokenCounter] = None,
61
64
  timeout: Optional[float] = None,
65
+ max_retries: int = 3,
66
+ **kwargs: Any,
62
67
  ) -> None:
63
68
  if model_config_dict is None:
64
69
  model_config_dict = {}
@@ -71,21 +76,12 @@ class VolcanoModel(OpenAICompatibleModel):
71
76
  )
72
77
  timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
73
78
  super().__init__(
74
- model_type, model_config_dict, api_key, url, token_counter, timeout
79
+ model_type,
80
+ model_config_dict,
81
+ api_key,
82
+ url,
83
+ token_counter,
84
+ timeout,
85
+ max_retries,
86
+ **kwargs,
75
87
  )
76
-
77
- def check_model_config(self):
78
- r"""Check whether the model configuration is valid for Volcano
79
- model backends.
80
-
81
- Raises:
82
- ValueError: If the model configuration dictionary contains any
83
- unexpected arguments to Volcano API.
84
- """
85
- # Using OpenAI API params as Volcano Engine API is OpenAI-compatible
86
- for param in self.model_config_dict:
87
- if param not in OPENAI_API_PARAMS:
88
- raise ValueError(
89
- f"Unexpected argument `{param}` is "
90
- "input into Volcano model backend."
91
- )
@@ -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,13 +10,13 @@
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
  import os
15
15
  from typing import Any, Dict, List, Optional, Type, Union
16
16
 
17
17
  from pydantic import BaseModel
18
18
 
19
- from camel.configs import WATSONX_API_PARAMS, WatsonXConfig
19
+ from camel.configs import WatsonXConfig
20
20
  from camel.logger import get_logger
21
21
  from camel.messages import OpenAIMessage
22
22
  from camel.models import BaseModelBackend
@@ -26,8 +26,19 @@ from camel.utils import (
26
26
  BaseTokenCounter,
27
27
  OpenAITokenCounter,
28
28
  api_keys_required,
29
+ get_current_agent_session_id,
30
+ update_current_observation,
31
+ update_langfuse_trace,
29
32
  )
30
33
 
34
+ if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
35
+ try:
36
+ from langfuse.decorators import observe
37
+ except ImportError:
38
+ from camel.utils import observe
39
+ else:
40
+ from camel.utils import observe
41
+
31
42
  logger = get_logger(__name__)
32
43
 
33
44
 
@@ -55,6 +66,8 @@ class WatsonXModel(BaseModelBackend):
55
66
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
56
67
  environment variable or default to 180 seconds.
57
68
  (default: :obj:`None`)
69
+ **kwargs (Any): Additional arguments to pass to the client
70
+ initialization.
58
71
  """
59
72
 
60
73
  @api_keys_required(
@@ -72,6 +85,7 @@ class WatsonXModel(BaseModelBackend):
72
85
  project_id: Optional[str] = None,
73
86
  token_counter: Optional[BaseTokenCounter] = None,
74
87
  timeout: Optional[float] = None,
88
+ **kwargs: Any,
75
89
  ):
76
90
  from ibm_watsonx_ai import APIClient, Credentials
77
91
  from ibm_watsonx_ai.foundation_models import ModelInference
@@ -92,7 +106,7 @@ class WatsonXModel(BaseModelBackend):
92
106
 
93
107
  self._project_id = project_id
94
108
  credentials = Credentials(api_key=self._api_key, url=self._url)
95
- client = APIClient(credentials, project_id=self._project_id)
109
+ client = APIClient(credentials, project_id=self._project_id, **kwargs)
96
110
 
97
111
  self._model = ModelInference(
98
112
  model_id=self.model_type,
@@ -151,6 +165,7 @@ class WatsonXModel(BaseModelBackend):
151
165
 
152
166
  return request_config
153
167
 
168
+ @observe(as_type='generation')
154
169
  def _run(
155
170
  self,
156
171
  messages: List[OpenAIMessage],
@@ -170,6 +185,27 @@ class WatsonXModel(BaseModelBackend):
170
185
  Returns:
171
186
  ChatCompletion.
172
187
  """
188
+ update_current_observation(
189
+ input={
190
+ "messages": messages,
191
+ "tools": tools,
192
+ },
193
+ model=str(self.model_type),
194
+ model_parameters=self.model_config_dict,
195
+ )
196
+ # Update Langfuse trace with current agent session and metadata
197
+ agent_session_id = get_current_agent_session_id()
198
+ if agent_session_id:
199
+ update_langfuse_trace(
200
+ session_id=agent_session_id,
201
+ metadata={
202
+ "source": "camel",
203
+ "agent_id": agent_session_id,
204
+ "agent_type": "camel_chat_agent",
205
+ "model_type": str(self.model_type),
206
+ },
207
+ tags=["CAMEL-AI", str(self.model_type)],
208
+ )
173
209
  try:
174
210
  request_config = self._prepare_request(
175
211
  messages, response_format, tools
@@ -183,12 +219,16 @@ class WatsonXModel(BaseModelBackend):
183
219
  )
184
220
 
185
221
  openai_response = self._to_openai_response(response)
222
+ update_current_observation(
223
+ usage=openai_response.usage,
224
+ )
186
225
  return openai_response
187
226
 
188
227
  except Exception as e:
189
228
  logger.error(f"Unexpected error when calling WatsonX API: {e!s}")
190
229
  raise
191
230
 
231
+ @observe(as_type='generation')
192
232
  async def _arun(
193
233
  self,
194
234
  messages: List[OpenAIMessage],
@@ -208,6 +248,28 @@ class WatsonXModel(BaseModelBackend):
208
248
  Returns:
209
249
  ChatCompletion.
210
250
  """
251
+ update_current_observation(
252
+ input={
253
+ "messages": messages,
254
+ "tools": tools,
255
+ },
256
+ model=str(self.model_type),
257
+ model_parameters=self.model_config_dict,
258
+ )
259
+ # Update Langfuse trace with current agent session and metadata
260
+ agent_session_id = get_current_agent_session_id()
261
+ if agent_session_id:
262
+ update_langfuse_trace(
263
+ session_id=agent_session_id,
264
+ metadata={
265
+ "source": "camel",
266
+ "agent_id": agent_session_id,
267
+ "agent_type": "camel_chat_agent",
268
+ "model_type": str(self.model_type),
269
+ },
270
+ tags=["CAMEL-AI", str(self.model_type)],
271
+ )
272
+
211
273
  try:
212
274
  request_config = self._prepare_request(
213
275
  messages, response_format, tools
@@ -221,27 +283,15 @@ class WatsonXModel(BaseModelBackend):
221
283
  )
222
284
 
223
285
  openai_response = self._to_openai_response(response)
286
+ update_current_observation(
287
+ usage=openai_response.usage,
288
+ )
224
289
  return openai_response
225
290
 
226
291
  except Exception as e:
227
292
  logger.error(f"Unexpected error when calling WatsonX API: {e!s}")
228
293
  raise
229
294
 
230
- def check_model_config(self):
231
- r"""Check whether the model configuration contains any unexpected
232
- arguments to WatsonX API.
233
-
234
- Raises:
235
- ValueError: If the model configuration dictionary contains any
236
- unexpected arguments to WatsonX API.
237
- """
238
- for param in self.model_config_dict:
239
- if param not in WATSONX_API_PARAMS:
240
- raise ValueError(
241
- f"Unexpected argument `{param}` is "
242
- "input into WatsonX model backend."
243
- )
244
-
245
295
  @property
246
296
  def stream(self) -> bool:
247
297
  r"""Returns whether the model is in stream mode, which sends partial
camel/models/yi_model.py CHANGED
@@ -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,12 @@
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 typing import Any, Dict, Optional, Union
17
17
 
18
- from camel.configs import YI_API_PARAMS, YiConfig
18
+ from camel.configs import YiConfig
19
19
  from camel.models.openai_compatible_model import OpenAICompatibleModel
20
20
  from camel.types import ModelType
21
21
  from camel.utils import (
@@ -46,6 +46,10 @@ class YiModel(OpenAICompatibleModel):
46
46
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
47
47
  environment variable or default to 180 seconds.
48
48
  (default: :obj:`None`)
49
+ max_retries (int, optional): Maximum number of retries for API calls.
50
+ (default: :obj:`3`)
51
+ **kwargs (Any): Additional arguments to pass to the client
52
+ initialization.
49
53
  """
50
54
 
51
55
  @api_keys_required(
@@ -61,6 +65,8 @@ class YiModel(OpenAICompatibleModel):
61
65
  url: Optional[str] = None,
62
66
  token_counter: Optional[BaseTokenCounter] = None,
63
67
  timeout: Optional[float] = None,
68
+ max_retries: int = 3,
69
+ **kwargs: Any,
64
70
  ) -> None:
65
71
  if model_config_dict is None:
66
72
  model_config_dict = YiConfig().as_dict()
@@ -76,19 +82,6 @@ class YiModel(OpenAICompatibleModel):
76
82
  url=url,
77
83
  token_counter=token_counter,
78
84
  timeout=timeout,
85
+ max_retries=max_retries,
86
+ **kwargs,
79
87
  )
80
-
81
- def check_model_config(self):
82
- r"""Check whether the model configuration contains any
83
- unexpected arguments to Yi API.
84
-
85
- Raises:
86
- ValueError: If the model configuration dictionary contains any
87
- unexpected arguments to Yi API.
88
- """
89
- for param in self.model_config_dict:
90
- if param not in YI_API_PARAMS:
91
- raise ValueError(
92
- f"Unexpected argument `{param}` is "
93
- "input into Yi model backend."
94
- )
@@ -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,19 +10,29 @@
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
- from typing import Any, Dict, Optional, Union
16
+ from typing import Any, Dict, List, Optional, Type, Union
17
17
 
18
- from camel.configs import ZHIPUAI_API_PARAMS, ZhipuAIConfig
18
+ from pydantic import BaseModel
19
+
20
+ from camel.configs import ZhipuAIConfig
21
+ from camel.logger import get_logger
22
+ from camel.messages import OpenAIMessage
23
+ from camel.models._utils import try_modify_message_with_format
19
24
  from camel.models.openai_compatible_model import OpenAICompatibleModel
20
- from camel.types import ModelType
25
+ from camel.types import (
26
+ ChatCompletion,
27
+ ModelType,
28
+ )
21
29
  from camel.utils import (
22
30
  BaseTokenCounter,
23
31
  api_keys_required,
24
32
  )
25
33
 
34
+ logger = get_logger(__name__)
35
+
26
36
 
27
37
  class ZhipuAIModel(OpenAICompatibleModel):
28
38
  r"""ZhipuAI API in a unified OpenAICompatibleModel interface.
@@ -46,6 +56,10 @@ class ZhipuAIModel(OpenAICompatibleModel):
46
56
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
47
57
  environment variable or default to 180 seconds.
48
58
  (default: :obj:`None`)
59
+ max_retries (int, optional): Maximum number of retries for API calls.
60
+ (default: :obj:`3`)
61
+ **kwargs (Any): Additional arguments to pass to the client
62
+ initialization.
49
63
  """
50
64
 
51
65
  @api_keys_required(
@@ -61,6 +75,8 @@ class ZhipuAIModel(OpenAICompatibleModel):
61
75
  url: Optional[str] = None,
62
76
  token_counter: Optional[BaseTokenCounter] = None,
63
77
  timeout: Optional[float] = None,
78
+ max_retries: int = 3,
79
+ **kwargs: Any,
64
80
  ) -> None:
65
81
  if model_config_dict is None:
66
82
  model_config_dict = ZhipuAIConfig().as_dict()
@@ -76,19 +92,55 @@ class ZhipuAIModel(OpenAICompatibleModel):
76
92
  url=url,
77
93
  token_counter=token_counter,
78
94
  timeout=timeout,
95
+ max_retries=max_retries,
96
+ **kwargs,
79
97
  )
80
98
 
81
- def check_model_config(self):
82
- r"""Check whether the model configuration contains any
83
- unexpected arguments to OpenAI API.
99
+ def _request_parse(
100
+ self,
101
+ messages: List[OpenAIMessage],
102
+ response_format: Type[BaseModel],
103
+ tools: Optional[List[Dict[str, Any]]] = None,
104
+ ) -> ChatCompletion:
105
+ import copy
106
+
107
+ request_config = copy.deepcopy(self.model_config_dict)
108
+ request_config.pop("stream", None)
109
+ if tools is not None:
110
+ request_config["tools"] = tools
111
+
112
+ try_modify_message_with_format(messages[-1], response_format)
113
+ request_config["response_format"] = {"type": "json_object"}
114
+ try:
115
+ return self._client.beta.chat.completions.parse(
116
+ messages=messages,
117
+ model=self.model_type,
118
+ **request_config,
119
+ )
120
+ except Exception as e:
121
+ logger.error(f"Fallback attempt also failed: {e}")
122
+ raise
123
+
124
+ async def _arequest_parse(
125
+ self,
126
+ messages: List[OpenAIMessage],
127
+ response_format: Type[BaseModel],
128
+ tools: Optional[List[Dict[str, Any]]] = None,
129
+ ) -> ChatCompletion:
130
+ import copy
84
131
 
85
- Raises:
86
- ValueError: If the model configuration dictionary contains any
87
- unexpected arguments to ZhipuAI API.
88
- """
89
- for param in self.model_config_dict:
90
- if param not in ZHIPUAI_API_PARAMS:
91
- raise ValueError(
92
- f"Unexpected argument `{param}` is "
93
- "input into ZhipuAI model backend."
94
- )
132
+ request_config = copy.deepcopy(self.model_config_dict)
133
+ request_config.pop("stream", None)
134
+ if tools is not None:
135
+ request_config["tools"] = tools
136
+ try_modify_message_with_format(messages[-1], response_format)
137
+ request_config["response_format"] = {"type": "json_object"}
138
+ try:
139
+ return await self._async_client.beta.chat.completions.parse(
140
+ messages=messages,
141
+ model=self.model_type,
142
+ **request_config,
143
+ )
144
+ except Exception as e:
145
+ logger.error(f"Fallback attempt also failed: {e}")
146
+ raise
@@ -0,0 +1,18 @@
1
+ # ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+ # ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ """Helper parsers used across the CAMEL project."""
15
+
16
+ from .mcp_tool_call_parser import extract_tool_calls_from_text
17
+
18
+ __all__ = ["extract_tool_calls_from_text"]