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,13 +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
  import os
15
+ import uuid
15
16
  from typing import Any, Dict, List, Optional, Type, Union
16
17
 
17
18
  from pydantic import BaseModel
18
19
 
19
- from camel.configs import LITELLM_API_PARAMS, LiteLLMConfig
20
+ from camel.configs import LiteLLMConfig
20
21
  from camel.messages import OpenAIMessage
21
22
  from camel.models import BaseModelBackend
22
23
  from camel.types import ChatCompletion, ModelType
@@ -24,9 +25,7 @@ from camel.utils import (
24
25
  BaseTokenCounter,
25
26
  LiteLLMTokenCounter,
26
27
  dependencies_required,
27
- get_current_agent_session_id,
28
28
  update_current_observation,
29
- update_langfuse_trace,
30
29
  )
31
30
 
32
31
  if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
@@ -59,6 +58,8 @@ class LiteLLMModel(BaseModelBackend):
59
58
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
60
59
  environment variable or default to 180 seconds.
61
60
  (default: :obj:`None`)
61
+ **kwargs (Any): Additional arguments to pass to the client
62
+ initialization.
62
63
  """
63
64
 
64
65
  # NOTE: Currently stream mode is not supported.
@@ -72,6 +73,7 @@ class LiteLLMModel(BaseModelBackend):
72
73
  url: Optional[str] = None,
73
74
  token_counter: Optional[BaseTokenCounter] = None,
74
75
  timeout: Optional[float] = None,
76
+ **kwargs: Any,
75
77
  ) -> None:
76
78
  from litellm import completion
77
79
 
@@ -82,6 +84,7 @@ class LiteLLMModel(BaseModelBackend):
82
84
  model_type, model_config_dict, api_key, url, token_counter, timeout
83
85
  )
84
86
  self.client = completion
87
+ self.kwargs = kwargs
85
88
 
86
89
  def _convert_response_from_litellm_to_openai(
87
90
  self, response
@@ -94,23 +97,47 @@ class LiteLLMModel(BaseModelBackend):
94
97
  Returns:
95
98
  ChatCompletion: The response object in OpenAI's format.
96
99
  """
97
- return ChatCompletion.construct(
98
- id=response.id,
99
- choices=[
100
+
101
+ converted_choices = []
102
+ for choice in response.choices:
103
+ # Build the assistant message dict
104
+ msg_dict: Dict[str, Any] = {
105
+ "role": choice.message.role,
106
+ "content": choice.message.content,
107
+ }
108
+
109
+ if getattr(choice.message, "tool_calls", None):
110
+ msg_dict["tool_calls"] = choice.message.tool_calls
111
+
112
+ elif getattr(choice.message, "function_call", None):
113
+ func_call = choice.message.function_call
114
+ msg_dict["tool_calls"] = [
115
+ {
116
+ "id": f"call_{uuid.uuid4().hex[:24]}",
117
+ "type": "function",
118
+ "function": {
119
+ "name": getattr(func_call, "name", None),
120
+ "arguments": getattr(func_call, "arguments", "{}"),
121
+ },
122
+ }
123
+ ]
124
+
125
+ converted_choices.append(
100
126
  {
101
- "index": response.choices[0].index,
102
- "message": {
103
- "role": response.choices[0].message.role,
104
- "content": response.choices[0].message.content,
105
- },
106
- "finish_reason": response.choices[0].finish_reason,
127
+ "index": choice.index,
128
+ "message": msg_dict,
129
+ "finish_reason": choice.finish_reason,
107
130
  }
108
- ],
109
- created=response.created,
110
- model=response.model,
111
- object=response.object,
112
- system_fingerprint=response.system_fingerprint,
113
- usage=response.usage,
131
+ )
132
+
133
+ return ChatCompletion.construct(
134
+ id=response.id,
135
+ choices=converted_choices,
136
+ created=getattr(response, "created", None),
137
+ model=getattr(response, "model", None),
138
+ object=getattr(response, "object", None),
139
+ system_fingerprint=getattr(response, "system_fingerprint", None),
140
+ usage=getattr(response, "usage", None),
114
141
  )
115
142
 
116
143
  @property
@@ -144,6 +171,13 @@ class LiteLLMModel(BaseModelBackend):
144
171
  Returns:
145
172
  ChatCompletion
146
173
  """
174
+
175
+ request_config = self.model_config_dict.copy()
176
+ if tools:
177
+ request_config['tools'] = tools
178
+ if response_format:
179
+ request_config['response_format'] = response_format
180
+
147
181
  update_current_observation(
148
182
  input={
149
183
  "messages": messages,
@@ -152,19 +186,7 @@ class LiteLLMModel(BaseModelBackend):
152
186
  model=str(self.model_type),
153
187
  model_parameters=self.model_config_dict,
154
188
  )
155
- # Update Langfuse trace with current agent session and metadata
156
- agent_session_id = get_current_agent_session_id()
157
- if agent_session_id:
158
- update_langfuse_trace(
159
- session_id=agent_session_id,
160
- metadata={
161
- "source": "camel",
162
- "agent_id": agent_session_id,
163
- "agent_type": "camel_chat_agent",
164
- "model_type": str(self.model_type),
165
- },
166
- tags=["CAMEL-AI", str(self.model_type)],
167
- )
189
+ self._log_and_trace()
168
190
 
169
191
  response = self.client(
170
192
  timeout=self._timeout,
@@ -172,7 +194,8 @@ class LiteLLMModel(BaseModelBackend):
172
194
  base_url=self._url,
173
195
  model=self.model_type,
174
196
  messages=messages,
175
- **self.model_config_dict,
197
+ **request_config,
198
+ **self.kwargs,
176
199
  )
177
200
  response = self._convert_response_from_litellm_to_openai(response)
178
201
 
@@ -180,18 +203,3 @@ class LiteLLMModel(BaseModelBackend):
180
203
  usage=response.usage,
181
204
  )
182
205
  return response
183
-
184
- def check_model_config(self):
185
- r"""Check whether the model configuration contains any unexpected
186
- arguments to LiteLLM API.
187
-
188
- Raises:
189
- ValueError: If the model configuration dictionary contains any
190
- unexpected arguments.
191
- """
192
- for param in self.model_config_dict:
193
- if param not in LITELLM_API_PARAMS:
194
- raise ValueError(
195
- f"Unexpected argument `{param}` is "
196
- "input into LiteLLM model backend."
197
- )
@@ -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,11 +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-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  import os
15
15
  from typing import Any, Dict, Optional, Union
16
16
 
17
- from camel.configs import LMSTUDIO_API_PARAMS, LMStudioConfig
17
+ from camel.configs import LMStudioConfig
18
18
  from camel.models.openai_compatible_model import OpenAICompatibleModel
19
19
  from camel.types import ModelType
20
20
  from camel.utils import BaseTokenCounter
@@ -43,6 +43,10 @@ class LMStudioModel(OpenAICompatibleModel):
43
43
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
44
44
  environment variable or default to 180 seconds.
45
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.
46
50
  """
47
51
 
48
52
  def __init__(
@@ -53,6 +57,8 @@ class LMStudioModel(OpenAICompatibleModel):
53
57
  url: Optional[str] = None,
54
58
  token_counter: Optional[BaseTokenCounter] = None,
55
59
  timeout: Optional[float] = None,
60
+ max_retries: int = 3,
61
+ **kwargs: Any,
56
62
  ) -> None:
57
63
  if model_config_dict is None:
58
64
  model_config_dict = LMStudioConfig().as_dict()
@@ -62,21 +68,12 @@ class LMStudioModel(OpenAICompatibleModel):
62
68
  )
63
69
  timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
64
70
  super().__init__(
65
- model_type, model_config_dict, api_key, url, token_counter, timeout
71
+ model_type,
72
+ model_config_dict,
73
+ api_key,
74
+ url,
75
+ token_counter,
76
+ timeout,
77
+ max_retries=max_retries,
78
+ **kwargs,
66
79
  )
67
-
68
- def check_model_config(self):
69
- r"""Check whether the model configuration contains any unexpected
70
- arguments to LMStudio API. But LMStudio API does not have any
71
- additional arguments to check.
72
-
73
- Raises:
74
- ValueError: If the model configuration dictionary contains any
75
- unexpected arguments to LMStudio API.
76
- """
77
- for param in self.model_config_dict:
78
- if param not in LMSTUDIO_API_PARAMS:
79
- raise ValueError(
80
- f"Unexpected argument `{param}` is "
81
- "input into LMStudio model backend."
82
- )
@@ -0,0 +1,83 @@
1
+ # ========= Copyright 2023-2026 @ 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-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
+ import os
15
+ from typing import Any, Dict, Optional, Union
16
+
17
+ from camel.configs import MinimaxConfig
18
+ from camel.models.openai_compatible_model import OpenAICompatibleModel
19
+ from camel.types import ModelType
20
+ from camel.utils import (
21
+ BaseTokenCounter,
22
+ api_keys_required,
23
+ )
24
+
25
+
26
+ class MinimaxModel(OpenAICompatibleModel):
27
+ r"""LLM API served by Minimax in a unified OpenAICompatibleModel
28
+ interface.
29
+
30
+ Args:
31
+ model_type (Union[ModelType, str]): Model for which a backend is
32
+ created.
33
+ model_config_dict (Optional[Dict[str, Any]], optional): A dictionary
34
+ that will be fed into:obj:`openai.ChatCompletion.create()`.
35
+ If:obj:`None`, :obj:`MinimaxConfig().as_dict()` will be used.
36
+ (default: :obj:`None`)
37
+ api_key (Optional[str], optional): The API key for authenticating
38
+ with the Minimax service. (default: :obj:`None`).
39
+ url (Optional[str], optional): The url to the Minimax M2 service.
40
+ (default: :obj:`None`)
41
+ token_counter (Optional[BaseTokenCounter], optional): Token counter to
42
+ use for the model. If not provided, :obj:`OpenAITokenCounter(
43
+ ModelType.GPT_4O_MINI)` will be used.
44
+ (default: :obj:`None`)
45
+ timeout (Optional[float], optional): The timeout value in seconds for
46
+ API calls. If not provided, will fall back to the MODEL_TIMEOUT
47
+ environment variable or default to 180 seconds.
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.
53
+ """
54
+
55
+ @api_keys_required([("api_key", "MINIMAX_API_KEY")])
56
+ def __init__(
57
+ self,
58
+ model_type: Union[ModelType, str],
59
+ model_config_dict: Optional[Dict[str, Any]] = None,
60
+ api_key: Optional[str] = None,
61
+ url: Optional[str] = None,
62
+ token_counter: Optional[BaseTokenCounter] = None,
63
+ timeout: Optional[float] = None,
64
+ max_retries: int = 3,
65
+ **kwargs: Any,
66
+ ) -> None:
67
+ if model_config_dict is None:
68
+ model_config_dict = MinimaxConfig().as_dict()
69
+ api_key = api_key or os.environ.get("MINIMAX_API_KEY")
70
+ url = url or os.environ.get(
71
+ "MINIMAX_API_BASE_URL", "https://api.minimaxi.com/v1"
72
+ )
73
+ timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
74
+ super().__init__(
75
+ model_type=model_type,
76
+ model_config_dict=model_config_dict,
77
+ api_key=api_key,
78
+ url=url,
79
+ token_counter=token_counter,
80
+ timeout=timeout,
81
+ max_retries=max_retries,
82
+ **kwargs,
83
+ )
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  import os
15
15
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type, Union
16
16
 
@@ -24,7 +24,7 @@ if TYPE_CHECKING:
24
24
 
25
25
  from openai import AsyncStream
26
26
 
27
- from camel.configs import MISTRAL_API_PARAMS, MistralConfig
27
+ from camel.configs import MistralConfig
28
28
  from camel.logger import get_logger
29
29
  from camel.messages import OpenAIMessage
30
30
  from camel.models import BaseModelBackend
@@ -35,9 +35,7 @@ from camel.utils import (
35
35
  OpenAITokenCounter,
36
36
  api_keys_required,
37
37
  dependencies_required,
38
- get_current_agent_session_id,
39
38
  update_current_observation,
40
- update_langfuse_trace,
41
39
  )
42
40
 
43
41
  logger = get_logger(__name__)
@@ -80,6 +78,10 @@ class MistralModel(BaseModelBackend):
80
78
  API calls. If not provided, will fall back to the MODEL_TIMEOUT
81
79
  environment variable or default to 180 seconds.
82
80
  (default: :obj:`None`)
81
+ max_retries (int, optional): Maximum number of retries
82
+ for API calls. (default: :obj:`3`)
83
+ **kwargs (Any): Additional arguments to pass to the client
84
+ initialization.
83
85
  """
84
86
 
85
87
  @api_keys_required(
@@ -96,6 +98,8 @@ class MistralModel(BaseModelBackend):
96
98
  url: Optional[str] = None,
97
99
  token_counter: Optional[BaseTokenCounter] = None,
98
100
  timeout: Optional[float] = None,
101
+ max_retries: int = 3,
102
+ **kwargs: Any,
99
103
  ) -> None:
100
104
  from mistralai import Mistral
101
105
 
@@ -106,7 +110,14 @@ class MistralModel(BaseModelBackend):
106
110
  url = url or os.environ.get("MISTRAL_API_BASE_URL")
107
111
  timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
108
112
  super().__init__(
109
- model_type, model_config_dict, api_key, url, token_counter, timeout
113
+ model_type,
114
+ model_config_dict,
115
+ api_key,
116
+ url,
117
+ token_counter,
118
+ timeout,
119
+ max_retries,
120
+ **kwargs,
110
121
  )
111
122
  self._client = Mistral(
112
123
  timeout_ms=int(self._timeout * 1000)
@@ -114,6 +125,7 @@ class MistralModel(BaseModelBackend):
114
125
  else None,
115
126
  api_key=self._api_key,
116
127
  server_url=self._url,
128
+ **kwargs,
117
129
  )
118
130
 
119
131
  def _to_openai_response(
@@ -263,19 +275,7 @@ class MistralModel(BaseModelBackend):
263
275
  model=str(self.model_type),
264
276
  model_parameters=self.model_config_dict,
265
277
  )
266
- # Update Langfuse trace with current agent session and metadata
267
- agent_session_id = get_current_agent_session_id()
268
- if agent_session_id:
269
- update_langfuse_trace(
270
- session_id=agent_session_id,
271
- metadata={
272
- "source": "camel",
273
- "agent_id": agent_session_id,
274
- "agent_type": "camel_chat_agent",
275
- "model_type": str(self.model_type),
276
- },
277
- tags=["CAMEL-AI", str(self.model_type)],
278
- )
278
+ self._log_and_trace()
279
279
 
280
280
  request_config = self._prepare_request(
281
281
  messages, response_format, tools
@@ -338,19 +338,7 @@ class MistralModel(BaseModelBackend):
338
338
  model=str(self.model_type),
339
339
  model_parameters=self.model_config_dict,
340
340
  )
341
- # Update Langfuse trace with current agent session and metadata
342
- agent_session_id = get_current_agent_session_id()
343
- if agent_session_id:
344
- update_langfuse_trace(
345
- session_id=agent_session_id,
346
- metadata={
347
- "source": "camel",
348
- "agent_id": agent_session_id,
349
- "agent_type": "camel_chat_agent",
350
- "model_type": str(self.model_type),
351
- },
352
- tags=["CAMEL-AI", str(self.model_type)],
353
- )
341
+ self._log_and_trace()
354
342
 
355
343
  request_config = self._prepare_request(
356
344
  messages, response_format, tools
@@ -400,21 +388,6 @@ class MistralModel(BaseModelBackend):
400
388
 
401
389
  return request_config
402
390
 
403
- def check_model_config(self):
404
- r"""Check whether the model configuration contains any
405
- unexpected arguments to Mistral API.
406
-
407
- Raises:
408
- ValueError: If the model configuration dictionary contains any
409
- unexpected arguments to Mistral API.
410
- """
411
- for param in self.model_config_dict:
412
- if param not in MISTRAL_API_PARAMS:
413
- raise ValueError(
414
- f"Unexpected argument `{param}` is "
415
- "input into Mistral model backend."
416
- )
417
-
418
391
  @property
419
392
  def stream(self) -> bool:
420
393
  r"""Returns whether the model is in stream mode, which sends partial
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,27 +10,34 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  import json
15
15
  import os
16
- from typing import ClassVar, Dict, Optional, Type, Union
16
+ from typing import Any, ClassVar, Dict, Optional, Type, Union
17
17
 
18
+ from camel.models.aihubmix_model import AihubMixModel
18
19
  from camel.models.aiml_model import AIMLModel
20
+ from camel.models.amd_model import AMDModel
19
21
  from camel.models.anthropic_model import AnthropicModel
20
22
  from camel.models.aws_bedrock_model import AWSBedrockModel
21
23
  from camel.models.azure_openai_model import AzureOpenAIModel
22
24
  from camel.models.base_model import BaseModelBackend
25
+ from camel.models.cerebras_model import CerebrasModel
23
26
  from camel.models.cohere_model import CohereModel
27
+ from camel.models.cometapi_model import CometAPIModel
24
28
  from camel.models.crynux_model import CrynuxModel
25
29
  from camel.models.deepseek_model import DeepSeekModel
30
+ from camel.models.function_gemma_model import FunctionGemmaModel
26
31
  from camel.models.gemini_model import GeminiModel
27
32
  from camel.models.groq_model import GroqModel
28
33
  from camel.models.internlm_model import InternLMModel
29
34
  from camel.models.litellm_model import LiteLLMModel
30
35
  from camel.models.lmstudio_model import LMStudioModel
36
+ from camel.models.minimax_model import MinimaxModel
31
37
  from camel.models.mistral_model import MistralModel
32
38
  from camel.models.modelscope_model import ModelScopeModel
33
39
  from camel.models.moonshot_model import MoonshotModel
40
+ from camel.models.nebius_model import NebiusModel
34
41
  from camel.models.netmind_model import NetmindModel
35
42
  from camel.models.novita_model import NovitaModel
36
43
  from camel.models.nvidia_model import NvidiaModel
@@ -39,6 +46,7 @@ from camel.models.openai_compatible_model import OpenAICompatibleModel
39
46
  from camel.models.openai_model import OpenAIModel
40
47
  from camel.models.openrouter_model import OpenRouterModel
41
48
  from camel.models.ppio_model import PPIOModel
49
+ from camel.models.qianfan_model import QianfanModel
42
50
  from camel.models.qwen_model import QwenModel
43
51
  from camel.models.reka_model import RekaModel
44
52
  from camel.models.samba_model import SambaModel
@@ -75,6 +83,7 @@ class ModelFactory:
75
83
  ModelPlatformType.AWS_BEDROCK: AWSBedrockModel,
76
84
  ModelPlatformType.NVIDIA: NvidiaModel,
77
85
  ModelPlatformType.SILICONFLOW: SiliconFlowModel,
86
+ ModelPlatformType.AMD: AMDModel,
78
87
  ModelPlatformType.AIML: AIMLModel,
79
88
  ModelPlatformType.VOLCANO: VolcanoModel,
80
89
  ModelPlatformType.NETMIND: NetmindModel,
@@ -82,7 +91,11 @@ class ModelFactory:
82
91
  ModelPlatformType.AZURE: AzureOpenAIModel,
83
92
  ModelPlatformType.ANTHROPIC: AnthropicModel,
84
93
  ModelPlatformType.GROQ: GroqModel,
94
+ ModelPlatformType.CEREBRAS: CerebrasModel,
95
+ ModelPlatformType.COMETAPI: CometAPIModel,
96
+ ModelPlatformType.NEBIUS: NebiusModel,
85
97
  ModelPlatformType.LMSTUDIO: LMStudioModel,
98
+ ModelPlatformType.MINIMAX: MinimaxModel,
86
99
  ModelPlatformType.OPENROUTER: OpenRouterModel,
87
100
  ModelPlatformType.ZHIPU: ZhipuAIModel,
88
101
  ModelPlatformType.GEMINI: GeminiModel,
@@ -98,7 +111,10 @@ class ModelFactory:
98
111
  ModelPlatformType.MODELSCOPE: ModelScopeModel,
99
112
  ModelPlatformType.NOVITA: NovitaModel,
100
113
  ModelPlatformType.WATSONX: WatsonXModel,
114
+ ModelPlatformType.QIANFAN: QianfanModel,
101
115
  ModelPlatformType.CRYNUX: CrynuxModel,
116
+ ModelPlatformType.AIHUBMIX: AihubMixModel,
117
+ ModelPlatformType.FUNCTION_GEMMA: FunctionGemmaModel,
102
118
  }
103
119
 
104
120
  @staticmethod
@@ -110,6 +126,9 @@ class ModelFactory:
110
126
  api_key: Optional[str] = None,
111
127
  url: Optional[str] = None,
112
128
  timeout: Optional[float] = None,
129
+ max_retries: int = 3,
130
+ client: Optional[Any] = None,
131
+ async_client: Optional[Any] = None,
113
132
  **kwargs,
114
133
  ) -> BaseModelBackend:
115
134
  r"""Creates an instance of `BaseModelBackend` of the specified type.
@@ -134,6 +153,16 @@ class ModelFactory:
134
153
  (default: :obj:`None`)
135
154
  timeout (Optional[float], optional): The timeout value in seconds
136
155
  for API calls. (default: :obj:`None`)
156
+ max_retries (int, optional): Maximum number of retries
157
+ for API calls. (default: :obj:`3`)
158
+ client (Optional[Any], optional): A custom synchronous client
159
+ instance. Supported by models that use OpenAI-compatible APIs
160
+ . The client should implement the appropriate client interface
161
+ for the platform. (default: :obj:`None`)
162
+ async_client (Optional[Any], optional): A custom asynchronous
163
+ client instance. Supported by models that use OpenAI-compatible
164
+ APIs. The client should implement the appropriate async client
165
+ interface for the platform. (default: :obj:`None`)
137
166
  **kwargs: Additional model-specific parameters that will be passed
138
167
  to the model constructor. For example, Azure OpenAI models may
139
168
  require `api_version`, `azure_deployment_name`,
@@ -179,6 +208,12 @@ class ModelFactory:
179
208
  if model_class is None:
180
209
  raise ValueError(f"Unknown model platform `{model_platform}`")
181
210
 
211
+ # Pass client and async_client via kwargs if provided
212
+ if client is not None:
213
+ kwargs['client'] = client
214
+ if async_client is not None:
215
+ kwargs['async_client'] = async_client
216
+
182
217
  return model_class(
183
218
  model_type=model_type,
184
219
  model_config_dict=model_config_dict,
@@ -186,6 +221,7 @@ class ModelFactory:
186
221
  url=url,
187
222
  token_counter=token_counter,
188
223
  timeout=timeout,
224
+ max_retries=max_retries,
189
225
  **kwargs,
190
226
  )
191
227
 
@@ -1,4 +1,4 @@
1
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
1
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -10,7 +10,7 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
- # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
13
+ # ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
 
15
15
  import asyncio
16
16
  import logging
@@ -27,6 +27,10 @@ from typing import (
27
27
  )
28
28
 
29
29
  from openai import AsyncStream, Stream
30
+ from openai.lib.streaming.chat import (
31
+ AsyncChatCompletionStreamManager,
32
+ ChatCompletionStreamManager,
33
+ )
30
34
  from pydantic import BaseModel
31
35
 
32
36
  from camel.messages import OpenAIMessage
@@ -196,7 +200,11 @@ class ModelManager:
196
200
  messages: List[OpenAIMessage],
197
201
  response_format: Optional[Type[BaseModel]] = None,
198
202
  tools: Optional[List[Dict[str, Any]]] = None,
199
- ) -> Union[ChatCompletion, Stream[ChatCompletionChunk]]:
203
+ ) -> Union[
204
+ ChatCompletion,
205
+ Stream[ChatCompletionChunk],
206
+ ChatCompletionStreamManager[BaseModel],
207
+ ]:
200
208
  r"""Process a list of messages by selecting a model based on
201
209
  the scheduling strategy.
202
210
  Sends the entire list of messages to the selected model,
@@ -207,9 +215,12 @@ class ModelManager:
207
215
  history in OpenAI API format.
208
216
 
209
217
  Returns:
210
- Union[ChatCompletion, Stream[ChatCompletionChunk]]:
218
+ Union[ChatCompletion, Stream[ChatCompletionChunk],
219
+ ChatCompletionStreamManager[BaseModel]]:
211
220
  `ChatCompletion` in the non-stream mode, or
212
- `Stream[ChatCompletionChunk]` in the stream mode.
221
+ `Stream[ChatCompletionChunk]` in the stream mode, or
222
+ `ChatCompletionStreamManager[BaseModel]` for
223
+ structured-output stream.
213
224
  """
214
225
  self.current_model = self.scheduling_strategy()
215
226
 
@@ -233,7 +244,11 @@ class ModelManager:
233
244
  messages: List[OpenAIMessage],
234
245
  response_format: Optional[Type[BaseModel]] = None,
235
246
  tools: Optional[List[Dict[str, Any]]] = None,
236
- ) -> Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
247
+ ) -> Union[
248
+ ChatCompletion,
249
+ AsyncStream[ChatCompletionChunk],
250
+ AsyncChatCompletionStreamManager[BaseModel],
251
+ ]:
237
252
  r"""Process a list of messages by selecting a model based on
238
253
  the scheduling strategy.
239
254
  Sends the entire list of messages to the selected model,
@@ -244,9 +259,12 @@ class ModelManager:
244
259
  history in OpenAI API format.
245
260
 
246
261
  Returns:
247
- Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
262
+ Union[ChatCompletion, AsyncStream[ChatCompletionChunk],
263
+ AsyncChatCompletionStreamManager[BaseModel]]:
248
264
  `ChatCompletion` in the non-stream mode, or
249
- `AsyncStream[ChatCompletionChunk]` in the stream mode.
265
+ `AsyncStream[ChatCompletionChunk]` in the stream mode, or
266
+ `AsyncChatCompletionStreamManager[BaseModel]` for
267
+ structured-output stream.
250
268
  """
251
269
  async with self.lock:
252
270
  self.current_model = self.scheduling_strategy()