camel-ai 0.2.51__tar.gz → 0.2.52__tar.gz

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 (401) hide show
  1. {camel_ai-0.2.51 → camel_ai-0.2.52}/PKG-INFO +3 -1
  2. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/__init__.py +1 -1
  3. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/__init__.py +2 -0
  4. camel_ai-0.2.52/camel/runtime/daytona_runtime.py +248 -0
  5. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/__init__.py +2 -0
  6. camel_ai-0.2.52/camel/toolkits/klavis_toolkit.py +228 -0
  7. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/mcp_toolkit.py +19 -3
  8. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/commons.py +2 -0
  9. {camel_ai-0.2.51 → camel_ai-0.2.52}/pyproject.toml +4 -1
  10. {camel_ai-0.2.51 → camel_ai-0.2.52}/.gitignore +0 -0
  11. {camel_ai-0.2.51 → camel_ai-0.2.52}/LICENSE +0 -0
  12. {camel_ai-0.2.51 → camel_ai-0.2.52}/README.md +0 -0
  13. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/__init__.py +0 -0
  14. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/_types.py +0 -0
  15. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/_utils.py +0 -0
  16. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/base.py +0 -0
  17. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/chat_agent.py +0 -0
  18. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/critic_agent.py +0 -0
  19. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/deductive_reasoner_agent.py +0 -0
  20. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/embodied_agent.py +0 -0
  21. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/knowledge_graph_agent.py +0 -0
  22. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/multi_hop_generator_agent.py +0 -0
  23. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/programmed_agent_instruction.py +0 -0
  24. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/repo_agent.py +0 -0
  25. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/role_assignment_agent.py +0 -0
  26. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/search_agent.py +0 -0
  27. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/task_agent.py +0 -0
  28. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/tool_agents/__init__.py +0 -0
  29. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/tool_agents/base.py +0 -0
  30. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  31. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/benchmarks/__init__.py +0 -0
  32. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/benchmarks/apibank.py +0 -0
  33. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/benchmarks/apibench.py +0 -0
  34. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/benchmarks/base.py +0 -0
  35. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/benchmarks/gaia.py +0 -0
  36. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/benchmarks/nexus.py +0 -0
  37. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/benchmarks/ragbench.py +0 -0
  38. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/__init__.py +0 -0
  39. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/discord/__init__.py +0 -0
  40. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/discord/discord_app.py +0 -0
  41. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/discord/discord_installation.py +0 -0
  42. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/discord/discord_store.py +0 -0
  43. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/slack/__init__.py +0 -0
  44. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/slack/models.py +0 -0
  45. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/slack/slack_app.py +0 -0
  46. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/bots/telegram_bot.py +0 -0
  47. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/__init__.py +0 -0
  48. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/aiml_config.py +0 -0
  49. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/anthropic_config.py +0 -0
  50. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/base_config.py +0 -0
  51. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/bedrock_config.py +0 -0
  52. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/cohere_config.py +0 -0
  53. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/deepseek_config.py +0 -0
  54. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/gemini_config.py +0 -0
  55. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/groq_config.py +0 -0
  56. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/internlm_config.py +0 -0
  57. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/litellm_config.py +0 -0
  58. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/lmstudio_config.py +0 -0
  59. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/mistral_config.py +0 -0
  60. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/modelscope_config.py +0 -0
  61. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/moonshot_config.py +0 -0
  62. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/netmind_config.py +0 -0
  63. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/novita_config.py +0 -0
  64. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/nvidia_config.py +0 -0
  65. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/ollama_config.py +0 -0
  66. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/openai_config.py +0 -0
  67. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/openrouter_config.py +0 -0
  68. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/ppio_config.py +0 -0
  69. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/qwen_config.py +0 -0
  70. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/reka_config.py +0 -0
  71. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/samba_config.py +0 -0
  72. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/sglang_config.py +0 -0
  73. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/siliconflow_config.py +0 -0
  74. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/togetherai_config.py +0 -0
  75. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/vllm_config.py +0 -0
  76. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/watsonx_config.py +0 -0
  77. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/yi_config.py +0 -0
  78. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/configs/zhipuai_config.py +0 -0
  79. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/data_collector/__init__.py +0 -0
  80. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/data_collector/alpaca_collector.py +0 -0
  81. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/data_collector/base.py +0 -0
  82. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/data_collector/sharegpt_collector.py +0 -0
  83. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/__init__.py +0 -0
  84. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/cot_datagen.py +0 -0
  85. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/evol_instruct/__init__.py +0 -0
  86. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
  87. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/evol_instruct/scorer.py +0 -0
  88. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/evol_instruct/templates.py +0 -0
  89. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/self_improving_cot.py +0 -0
  90. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/self_instruct/__init__.py +0 -0
  91. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  92. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  93. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  94. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  95. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/self_instruct/self_instruct.py +0 -0
  96. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/self_instruct/templates.py +0 -0
  97. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/source2synth/__init__.py +0 -0
  98. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/source2synth/data_processor.py +0 -0
  99. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/source2synth/models.py +0 -0
  100. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  101. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datahubs/__init__.py +0 -0
  102. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datahubs/base.py +0 -0
  103. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datahubs/huggingface.py +0 -0
  104. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datahubs/models.py +0 -0
  105. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datasets/__init__.py +0 -0
  106. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datasets/base_generator.py +0 -0
  107. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datasets/few_shot_generator.py +0 -0
  108. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datasets/models.py +0 -0
  109. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datasets/self_instruct_generator.py +0 -0
  110. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/datasets/static_dataset.py +0 -0
  111. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/__init__.py +0 -0
  112. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/azure_embedding.py +0 -0
  113. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/base.py +0 -0
  114. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/jina_embedding.py +0 -0
  115. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/mistral_embedding.py +0 -0
  116. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/openai_compatible_embedding.py +0 -0
  117. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/openai_embedding.py +0 -0
  118. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  119. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/together_embedding.py +0 -0
  120. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/embeddings/vlm_embedding.py +0 -0
  121. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/environments/__init__.py +0 -0
  122. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/environments/models.py +0 -0
  123. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/environments/multi_step.py +0 -0
  124. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/environments/single_step.py +0 -0
  125. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/environments/tic_tac_toe.py +0 -0
  126. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/extractors/__init__.py +0 -0
  127. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/extractors/base.py +0 -0
  128. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/extractors/python_strategies.py +0 -0
  129. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/generators.py +0 -0
  130. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/human.py +0 -0
  131. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/__init__.py +0 -0
  132. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/base.py +0 -0
  133. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/docker/Dockerfile +0 -0
  134. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/docker_interpreter.py +0 -0
  135. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/e2b_interpreter.py +0 -0
  136. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/internal_python_interpreter.py +0 -0
  137. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/interpreter_error.py +0 -0
  138. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/ipython_interpreter.py +0 -0
  139. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/interpreters/subprocess_interpreter.py +0 -0
  140. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/__init__.py +0 -0
  141. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/apify_reader.py +0 -0
  142. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/base_io.py +0 -0
  143. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/chunkr_reader.py +0 -0
  144. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/crawl4ai_reader.py +0 -0
  145. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/firecrawl_reader.py +0 -0
  146. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/jina_url_reader.py +0 -0
  147. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/mineru_extractor.py +0 -0
  148. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/pandas_reader.py +0 -0
  149. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/scrapegraph_reader.py +0 -0
  150. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/loaders/unstructured_io.py +0 -0
  151. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/logger.py +0 -0
  152. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/__init__.py +0 -0
  153. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/agent_memories.py +0 -0
  154. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/base.py +0 -0
  155. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/blocks/__init__.py +0 -0
  156. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/blocks/chat_history_block.py +0 -0
  157. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/blocks/vectordb_block.py +0 -0
  158. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/context_creators/__init__.py +0 -0
  159. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/context_creators/score_based.py +0 -0
  160. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/memories/records.py +0 -0
  161. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/__init__.py +0 -0
  162. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/base.py +0 -0
  163. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/conversion/__init__.py +0 -0
  164. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/conversion/alpaca.py +0 -0
  165. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/conversion/conversation_models.py +0 -0
  166. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  167. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  168. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  169. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  170. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/messages/func_message.py +0 -0
  171. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/__init__.py +0 -0
  172. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/_utils.py +0 -0
  173. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/aiml_model.py +0 -0
  174. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/anthropic_model.py +0 -0
  175. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/aws_bedrock_model.py +0 -0
  176. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/azure_openai_model.py +0 -0
  177. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/base_audio_model.py +0 -0
  178. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/base_model.py +0 -0
  179. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/cohere_model.py +0 -0
  180. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/deepseek_model.py +0 -0
  181. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/fish_audio_model.py +0 -0
  182. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/gemini_model.py +0 -0
  183. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/groq_model.py +0 -0
  184. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/internlm_model.py +0 -0
  185. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/litellm_model.py +0 -0
  186. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/lmstudio_model.py +0 -0
  187. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/mistral_model.py +0 -0
  188. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/model_factory.py +0 -0
  189. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/model_manager.py +0 -0
  190. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/modelscope_model.py +0 -0
  191. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/moonshot_model.py +0 -0
  192. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/nemotron_model.py +0 -0
  193. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/netmind_model.py +0 -0
  194. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/novita_model.py +0 -0
  195. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/nvidia_model.py +0 -0
  196. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/ollama_model.py +0 -0
  197. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/openai_audio_models.py +0 -0
  198. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/openai_compatible_model.py +0 -0
  199. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/openai_model.py +0 -0
  200. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/openrouter_model.py +0 -0
  201. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/ppio_model.py +0 -0
  202. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/qwen_model.py +0 -0
  203. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/reka_model.py +0 -0
  204. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/reward/__init__.py +0 -0
  205. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/reward/base_reward_model.py +0 -0
  206. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/reward/evaluator.py +0 -0
  207. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/reward/nemotron_model.py +0 -0
  208. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/reward/skywork_model.py +0 -0
  209. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/samba_model.py +0 -0
  210. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/sglang_model.py +0 -0
  211. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/siliconflow_model.py +0 -0
  212. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/stub_model.py +0 -0
  213. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/togetherai_model.py +0 -0
  214. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/vllm_model.py +0 -0
  215. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/volcano_model.py +0 -0
  216. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/watsonx_model.py +0 -0
  217. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/yi_model.py +0 -0
  218. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/models/zhipuai_model.py +0 -0
  219. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/personas/__init__.py +0 -0
  220. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/personas/persona.py +0 -0
  221. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/personas/persona_hub.py +0 -0
  222. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/__init__.py +0 -0
  223. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/ai_society.py +0 -0
  224. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/base.py +0 -0
  225. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/code.py +0 -0
  226. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/evaluation.py +0 -0
  227. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/generate_text_embedding_data.py +0 -0
  228. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/image_craft.py +0 -0
  229. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/misalignment.py +0 -0
  230. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/multi_condition_image_craft.py +0 -0
  231. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/object_recognition.py +0 -0
  232. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/persona_hub.py +0 -0
  233. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/prompt_templates.py +0 -0
  234. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/role_description_prompt_template.py +0 -0
  235. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/solution_extraction.py +0 -0
  236. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/task_prompt_template.py +0 -0
  237. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/translation.py +0 -0
  238. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/prompts/video_description_prompt.py +0 -0
  239. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/py.typed +0 -0
  240. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/responses/__init__.py +0 -0
  241. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/responses/agent_responses.py +0 -0
  242. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/retrievers/__init__.py +0 -0
  243. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/retrievers/auto_retriever.py +0 -0
  244. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/retrievers/base.py +0 -0
  245. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/retrievers/bm25_retriever.py +0 -0
  246. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  247. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/retrievers/hybrid_retrival.py +0 -0
  248. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/retrievers/vector_retriever.py +0 -0
  249. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/api.py +0 -0
  250. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/base.py +0 -0
  251. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/configs.py +0 -0
  252. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/docker_runtime.py +0 -0
  253. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/llm_guard_runtime.py +0 -0
  254. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/remote_http_runtime.py +0 -0
  255. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/ubuntu_docker_runtime.py +0 -0
  256. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/utils/__init__.py +0 -0
  257. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/utils/function_risk_toolkit.py +0 -0
  258. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/runtime/utils/ignore_risk_toolkit.py +0 -0
  259. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/schemas/__init__.py +0 -0
  260. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/schemas/base.py +0 -0
  261. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/schemas/openai_converter.py +0 -0
  262. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/schemas/outlines_converter.py +0 -0
  263. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/__init__.py +0 -0
  264. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/babyagi_playing.py +0 -0
  265. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/role_playing.py +0 -0
  266. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/__init__.py +0 -0
  267. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/base.py +0 -0
  268. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/prompts.py +0 -0
  269. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/role_playing_worker.py +0 -0
  270. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/single_agent_worker.py +0 -0
  271. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/task_channel.py +0 -0
  272. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/utils.py +0 -0
  273. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/worker.py +0 -0
  274. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/societies/workforce/workforce.py +0 -0
  275. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/__init__.py +0 -0
  276. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/graph_storages/__init__.py +0 -0
  277. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/graph_storages/base.py +0 -0
  278. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/graph_storages/graph_element.py +0 -0
  279. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/graph_storages/nebula_graph.py +0 -0
  280. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  281. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/key_value_storages/__init__.py +0 -0
  282. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/key_value_storages/base.py +0 -0
  283. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/key_value_storages/in_memory.py +0 -0
  284. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/key_value_storages/json.py +0 -0
  285. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
  286. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/key_value_storages/redis.py +0 -0
  287. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/object_storages/__init__.py +0 -0
  288. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/object_storages/amazon_s3.py +0 -0
  289. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/object_storages/azure_blob.py +0 -0
  290. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/object_storages/base.py +0 -0
  291. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/object_storages/google_cloud.py +0 -0
  292. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/vectordb_storages/__init__.py +0 -0
  293. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/vectordb_storages/base.py +0 -0
  294. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/vectordb_storages/milvus.py +0 -0
  295. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/vectordb_storages/oceanbase.py +0 -0
  296. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/vectordb_storages/qdrant.py +0 -0
  297. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/storages/vectordb_storages/tidb.py +0 -0
  298. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/tasks/__init__.py +0 -0
  299. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/tasks/task.py +0 -0
  300. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/tasks/task_prompt.py +0 -0
  301. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/terminators/__init__.py +0 -0
  302. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/terminators/base.py +0 -0
  303. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/terminators/response_terminator.py +0 -0
  304. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/terminators/token_limit_terminator.py +0 -0
  305. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/arxiv_toolkit.py +0 -0
  306. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/ask_news_toolkit.py +0 -0
  307. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  308. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/base.py +0 -0
  309. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/browser_toolkit.py +0 -0
  310. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/code_execution.py +0 -0
  311. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/dalle_toolkit.py +0 -0
  312. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/dappier_toolkit.py +0 -0
  313. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/data_commons_toolkit.py +0 -0
  314. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/excel_toolkit.py +0 -0
  315. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/file_write_toolkit.py +0 -0
  316. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/function_tool.py +0 -0
  317. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/github_toolkit.py +0 -0
  318. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/google_calendar_toolkit.py +0 -0
  319. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/google_maps_toolkit.py +0 -0
  320. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/google_scholar_toolkit.py +0 -0
  321. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/human_toolkit.py +0 -0
  322. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/image_analysis_toolkit.py +0 -0
  323. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/jina_reranker_toolkit.py +0 -0
  324. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/linkedin_toolkit.py +0 -0
  325. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/math_toolkit.py +0 -0
  326. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/memory_toolkit.py +0 -0
  327. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/meshy_toolkit.py +0 -0
  328. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/mineru_toolkit.py +0 -0
  329. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/networkx_toolkit.py +0 -0
  330. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/notion_toolkit.py +0 -0
  331. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  332. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  333. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  334. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  335. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  336. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  337. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  338. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  339. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  340. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  341. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  342. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  343. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  344. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  345. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  346. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  347. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  348. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/security_config.py +0 -0
  349. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  350. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  351. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  352. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  353. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  354. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  355. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  356. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/open_api_toolkit.py +0 -0
  357. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/openai_agent_toolkit.py +0 -0
  358. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/openbb_toolkit.py +0 -0
  359. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/page_script.js +0 -0
  360. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/pubmed_toolkit.py +0 -0
  361. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/pyautogui_toolkit.py +0 -0
  362. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/reddit_toolkit.py +0 -0
  363. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/retrieval_toolkit.py +0 -0
  364. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/search_toolkit.py +0 -0
  365. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/searxng_toolkit.py +0 -0
  366. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  367. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/slack_toolkit.py +0 -0
  368. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/stripe_toolkit.py +0 -0
  369. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/sympy_toolkit.py +0 -0
  370. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/terminal_toolkit.py +0 -0
  371. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/thinking_toolkit.py +0 -0
  372. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/twitter_toolkit.py +0 -0
  373. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/video_analysis_toolkit.py +0 -0
  374. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/video_download_toolkit.py +0 -0
  375. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/weather_toolkit.py +0 -0
  376. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/whatsapp_toolkit.py +0 -0
  377. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/toolkits/zapier_toolkit.py +0 -0
  378. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/types/__init__.py +0 -0
  379. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/types/agents/__init__.py +0 -0
  380. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/types/agents/tool_calling_record.py +0 -0
  381. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/types/enums.py +0 -0
  382. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/types/openai_types.py +0 -0
  383. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/types/unified_model_type.py +0 -0
  384. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/__init__.py +0 -0
  385. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/async_func.py +0 -0
  386. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/chunker/__init__.py +0 -0
  387. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/chunker/base.py +0 -0
  388. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/chunker/code_chunker.py +0 -0
  389. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/chunker/uio_chunker.py +0 -0
  390. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/constants.py +0 -0
  391. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/deduplication.py +0 -0
  392. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/filename.py +0 -0
  393. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/mcp.py +0 -0
  394. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/response_format.py +0 -0
  395. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/utils/token_counting.py +0 -0
  396. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/verifiers/__init__.py +0 -0
  397. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/verifiers/base.py +0 -0
  398. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/verifiers/math_verifier.py +0 -0
  399. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/verifiers/models.py +0 -0
  400. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/verifiers/physics_verifier.py +0 -0
  401. {camel_ai-0.2.51 → camel_ai-0.2.52}/camel/verifiers/python_verifier.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: camel-ai
3
- Version: 0.2.51
3
+ Version: 0.2.52
4
4
  Summary: Communicative Agents for AI Society Study
5
5
  Project-URL: Homepage, https://www.camel-ai.org/
6
6
  Project-URL: Repository, https://github.com/camel-ai/camel
@@ -36,6 +36,7 @@ Requires-Dist: dappier<0.4,>=0.3.3; extra == 'all'
36
36
  Requires-Dist: datacommons-pandas<0.0.4,>=0.0.3; extra == 'all'
37
37
  Requires-Dist: datacommons<2,>=1.4.3; extra == 'all'
38
38
  Requires-Dist: datasets<4,>=3; extra == 'all'
39
+ Requires-Dist: daytona-sdk==0.14.0; extra == 'all'
39
40
  Requires-Dist: diffusers<0.26,>=0.25.0; extra == 'all'
40
41
  Requires-Dist: discord-py<3,>=2.3.2; extra == 'all'
41
42
  Requires-Dist: docker<8,>=7.1.0; extra == 'all'
@@ -170,6 +171,7 @@ Requires-Dist: types-tqdm<5,>=4.66.0; extra == 'dev'
170
171
  Requires-Dist: uv==0.6.5; extra == 'dev'
171
172
  Provides-Extra: dev-tools
172
173
  Requires-Dist: agentops<0.4,>=0.3.21; extra == 'dev-tools'
174
+ Requires-Dist: daytona-sdk==0.14.0; extra == 'dev-tools'
173
175
  Requires-Dist: docker<8,>=7.1.0; extra == 'dev-tools'
174
176
  Requires-Dist: e2b-code-interpreter<2,>=1.0.3; extra == 'dev-tools'
175
177
  Requires-Dist: ipykernel<7,>=6.0.0; extra == 'dev-tools'
@@ -14,7 +14,7 @@
14
14
 
15
15
  from camel.logger import disable_logging, enable_logging, set_log_level
16
16
 
17
- __version__ = '0.2.51'
17
+ __version__ = '0.2.52'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -13,6 +13,7 @@
13
13
  # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
14
  from .base import BaseRuntime
15
15
  from .configs import TaskConfig
16
+ from .daytona_runtime import DaytonaRuntime
16
17
  from .docker_runtime import DockerRuntime
17
18
  from .llm_guard_runtime import LLMGuardRuntime
18
19
  from .remote_http_runtime import RemoteHttpRuntime
@@ -28,4 +29,5 @@ __all__ = [
28
29
  "LLMGuardRuntime",
29
30
  "TaskConfig",
30
31
  "UbuntuDockerRuntime",
32
+ "DaytonaRuntime",
31
33
  ]
@@ -0,0 +1,248 @@
1
+ # ========= Copyright 2023-2024 @ 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-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
+
15
+ import inspect
16
+ import json
17
+ import os
18
+ from functools import wraps
19
+ from typing import Any, Dict, List, Optional, Union
20
+
21
+ from pydantic import BaseModel
22
+
23
+ from camel.logger import get_logger
24
+ from camel.runtime import BaseRuntime
25
+ from camel.toolkits.function_tool import FunctionTool
26
+
27
+ logger = get_logger(__name__)
28
+
29
+
30
+ class DaytonaRuntime(BaseRuntime):
31
+ r"""A runtime that executes functions in a Daytona sandbox environment.
32
+ Requires the Daytona server to be running and an API key configured.
33
+
34
+ Args:
35
+ api_key (Optional[str]): The Daytona API key for authentication. If not
36
+ provided, it will try to use the DAYTONA_API_KEY environment
37
+ variable. (default: :obj: `None`)
38
+ api_url (Optional[str]): The URL of the Daytona server. If not
39
+ provided, it will try to use the DAYTONA_API_URL environment
40
+ variable. If none is provided, it will use "http://localhost:8000".
41
+ (default: :obj: `None`)
42
+ language (Optional[str]): The programming language for the sandbox.
43
+ (default: :obj: `"python"`)
44
+ """
45
+
46
+ def __init__(
47
+ self,
48
+ api_key: Optional[str] = None,
49
+ api_url: Optional[str] = None,
50
+ language: Optional[str] = "python",
51
+ ):
52
+ from daytona_sdk import Daytona, DaytonaConfig
53
+
54
+ super().__init__()
55
+ self.api_key = api_key or os.environ.get('DAYTONA_API_KEY')
56
+ self.api_url = api_url or os.environ.get('DAYTONA_API_URL')
57
+ self.language = language
58
+ self.config = DaytonaConfig(api_key=self.api_key, api_url=self.api_url)
59
+ self.daytona = Daytona(self.config)
60
+ self.sandbox = None
61
+ self.entrypoint: Dict[str, str] = dict()
62
+
63
+ def build(self) -> "DaytonaRuntime":
64
+ r"""Create and start a Daytona sandbox.
65
+
66
+ Returns:
67
+ DaytonaRuntime: The current runtime.
68
+ """
69
+ from daytona_sdk import CreateSandboxParams
70
+
71
+ try:
72
+ params = CreateSandboxParams(language=self.language)
73
+ self.sandbox = self.daytona.create(params)
74
+ if self.sandbox is None:
75
+ raise RuntimeError("Failed to create sandbox.")
76
+ logger.info(f"Sandbox created with ID: {self.sandbox.id}")
77
+ except Exception as e:
78
+ logger.error(f"Failed to create sandbox: {e!s}")
79
+ raise RuntimeError(f"Daytona sandbox creation failed: {e!s}")
80
+ return self
81
+
82
+ def _cleanup(self):
83
+ r"""Clean up the sandbox when exiting."""
84
+ if self.sandbox:
85
+ try:
86
+ self.daytona.remove(self.sandbox)
87
+ logger.info(f"Sandbox {self.sandbox.id} removed")
88
+ self.sandbox = None
89
+ except Exception as e:
90
+ logger.error(f"Failed to remove sandbox: {e!s}")
91
+
92
+ def add(
93
+ self,
94
+ funcs: Union[FunctionTool, List[FunctionTool]],
95
+ entrypoint: str,
96
+ arguments: Optional[Dict[str, Any]] = None,
97
+ ) -> "DaytonaRuntime":
98
+ r"""Add a function or list of functions to the runtime.
99
+
100
+ Args:
101
+ funcs (Union[FunctionTool, List[FunctionTool]]): The function or
102
+ list of functions to add.
103
+ entrypoint (str): The entrypoint for the function.
104
+ arguments (Optional[Dict[str, Any]]): The arguments for the
105
+ function. (default: :obj: `None`)
106
+
107
+ Returns:
108
+ DaytonaRuntime: The current runtime.
109
+ """
110
+ if not isinstance(funcs, list):
111
+ funcs = [funcs]
112
+ if arguments is not None:
113
+ entrypoint += json.dumps(arguments, ensure_ascii=False)
114
+
115
+ def make_wrapper(inner_func, func_name, func_code):
116
+ r"""Creates a wrapper for a function to execute it in the
117
+ Daytona sandbox.
118
+
119
+ Args:
120
+ inner_func (Callable): The function to wrap.
121
+ func_name (str): The name of the function.
122
+ func_code (str): The source code of the function.
123
+
124
+ Returns:
125
+ Callable: A wrapped function that executes in the sandbox.
126
+ """
127
+
128
+ @wraps(inner_func)
129
+ def wrapper(*args, **kwargs):
130
+ if not self.sandbox:
131
+ raise RuntimeError(
132
+ "Sandbox not initialized. Call build() first."
133
+ )
134
+
135
+ try:
136
+ for key, value in kwargs.items():
137
+ if isinstance(value, BaseModel):
138
+ kwargs[key] = value.model_dump()
139
+ args_str = json.dumps(args, ensure_ascii=True)
140
+ kwargs_str = json.dumps(kwargs, ensure_ascii=True)
141
+ except (TypeError, ValueError) as e:
142
+ logger.error(f"Failed to serialize arguments: {e!s}")
143
+ return {"error": f"Argument serialization failed: {e!s}"}
144
+
145
+ # Upload function code to the sandbox
146
+ script_path = f"/home/daytona/{func_name}.py"
147
+ try:
148
+ self.sandbox.fs.upload_file(
149
+ script_path, func_code.encode()
150
+ )
151
+ except Exception as e:
152
+ logger.error(
153
+ f"Failed to upload function {func_name}: {e!s}"
154
+ )
155
+ return {"error": f"Upload failed: {e!s}"}
156
+
157
+ exec_code = (
158
+ f"import sys\n"
159
+ f"sys.path.append('/home/daytona')\n"
160
+ f"import json\n"
161
+ f"from {func_name} import {func_name}\n"
162
+ f"args = json.loads('{args_str}')\n"
163
+ f"kwargs = json.loads('{kwargs_str}')\n"
164
+ f"result = {func_name}(*args, **kwargs)\n"
165
+ f"print(json.dumps(result) if result is not "
166
+ f"None else 'null')"
167
+ )
168
+
169
+ # Execute the function in the sandbox
170
+ try:
171
+ response = self.sandbox.process.code_run(exec_code)
172
+ return (
173
+ json.loads(response.result)
174
+ if response.result
175
+ else None
176
+ )
177
+ except json.JSONDecodeError as e:
178
+ logger.error(
179
+ f"Failed to decode JSON response for {func_name}"
180
+ )
181
+ return {"error": f"JSON decoding failed: {e!s}"}
182
+ except Exception as e:
183
+ logger.error(
184
+ f"Failed to execute function {func_name}: {e!s}"
185
+ )
186
+ return {"error": f"Execution failed: {e!s}"}
187
+
188
+ return wrapper
189
+
190
+ for func in funcs:
191
+ inner_func = func.func
192
+ func_name = func.get_function_name()
193
+ func_code = inspect.getsource(inner_func).strip()
194
+
195
+ func.func = make_wrapper(inner_func, func_name, func_code)
196
+ self.tools_map[func_name] = func
197
+ self.entrypoint[func_name] = entrypoint
198
+
199
+ return self
200
+
201
+ def info(self) -> str:
202
+ r"""Get information about the current sandbox.
203
+
204
+ Returns:
205
+ str: Information about the sandbox.
206
+
207
+ Raises:
208
+ RuntimeError: If the sandbox is not initialized.
209
+ """
210
+ if self.sandbox is None:
211
+ raise RuntimeError("Failed to create sandbox.")
212
+ info = self.sandbox.info()
213
+ return (
214
+ f"Sandbox {info.name}:\n"
215
+ f"State: {info.state}\n"
216
+ f"Resources: {info.resources.cpu} CPU, {info.resources.memory} RAM"
217
+ )
218
+
219
+ def __del__(self):
220
+ r"""Clean up the sandbox when the object is deleted."""
221
+ if hasattr(self, 'sandbox'):
222
+ self._cleanup()
223
+
224
+ def stop(self) -> "DaytonaRuntime":
225
+ r"""Stop and remove the sandbox.
226
+
227
+ Returns:
228
+ DaytonaRuntime: The current runtime.
229
+ """
230
+ self._cleanup()
231
+ return self
232
+
233
+ def reset(self) -> "DaytonaRuntime":
234
+ r"""Reset the sandbox by stopping and rebuilding it.
235
+
236
+ Returns:
237
+ DaytonaRuntime: The current runtime.
238
+ """
239
+ return self.stop().build()
240
+
241
+ @property
242
+ def docs(self) -> str:
243
+ r"""Get the URL for the Daytona API documentation.
244
+
245
+ Returns:
246
+ str: The URL for the API documentation.
247
+ """
248
+ return "https://www.daytona.io/docs/python-sdk/daytona/"
@@ -68,6 +68,7 @@ from .pyautogui_toolkit import PyAutoGUIToolkit
68
68
  from .openai_agent_toolkit import OpenAIAgentToolkit
69
69
  from .searxng_toolkit import SearxNGToolkit
70
70
  from .jina_reranker_toolkit import JinaRerankerToolkit
71
+ from .klavis_toolkit import KlavisToolkit
71
72
 
72
73
 
73
74
  __all__ = [
@@ -124,4 +125,5 @@ __all__ = [
124
125
  'OpenAIAgentToolkit',
125
126
  'SearxNGToolkit',
126
127
  'JinaRerankerToolkit',
128
+ 'KlavisToolkit',
127
129
  ]
@@ -0,0 +1,228 @@
1
+ # ========= Copyright 2023-2024 @ 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-2024 @ CAMEL-AI.org. All Rights Reserved. =========
14
+
15
+ import os
16
+ from typing import Any, Dict, List, Optional
17
+
18
+ import requests
19
+
20
+ from camel.logger import get_logger
21
+ from camel.toolkits.base import BaseToolkit
22
+ from camel.toolkits.function_tool import FunctionTool
23
+ from camel.utils import MCPServer, api_keys_required, dependencies_required
24
+
25
+ logger = get_logger(__name__)
26
+
27
+
28
+ @MCPServer()
29
+ class KlavisToolkit(BaseToolkit):
30
+ r"""A class representing a toolkit for interacting with Klavis API.
31
+
32
+ This class provides methods for interacting with Klavis MCP server
33
+ instances, retrieving server information, managing tools, and handling
34
+ authentication.
35
+
36
+ Attributes:
37
+ api_key (str): The API key for authenticating with Klavis API.
38
+ base_url (str): The base URL for Klavis API endpoints.
39
+ timeout (Optional[float]): The timeout value for API requests
40
+ in seconds. If None, no timeout is applied.
41
+ (default: :obj:`None`)
42
+ """
43
+
44
+ @dependencies_required("requests")
45
+ @api_keys_required(
46
+ [
47
+ (None, "KLAVIS_API_KEY"),
48
+ ]
49
+ )
50
+ def __init__(self, timeout: Optional[float] = None) -> None:
51
+ r"""Initialize the KlavisToolkit with API client. The API key is
52
+ retrieved from environment variables.
53
+ """
54
+ super().__init__(timeout=timeout)
55
+ self.api_key = os.environ.get("KLAVIS_API_KEY")
56
+ self.base_url = "https://api.klavis.ai"
57
+
58
+ def _request(
59
+ self,
60
+ method: str,
61
+ endpoint: str,
62
+ payload: Optional[Dict[str, Any]] = None,
63
+ additional_headers: Optional[Dict[str, str]] = None,
64
+ ) -> Dict[str, Any]:
65
+ r"""Make an HTTP request to the Klavis API.
66
+
67
+ Args:
68
+ method (str): HTTP method (e.g., 'GET', 'POST', 'DELETE').
69
+ endpoint (str): API endpoint path.
70
+ payload (Optional[Dict[str, Any]]): JSON payload for POST
71
+ requests.
72
+ additional_headers (Optional[Dict[str, str]]): Additional
73
+ headers to include in the request.
74
+
75
+ Returns:
76
+ Dict[str, Any]: The JSON response from the API or an error
77
+ dict.
78
+ """
79
+ url = f"{self.base_url}{endpoint}"
80
+ headers = {
81
+ 'accept': 'application/json',
82
+ 'Authorization': f'Bearer {self.api_key}',
83
+ }
84
+ if additional_headers:
85
+ headers.update(additional_headers)
86
+
87
+ logger.debug(
88
+ f"Making {method} request to {url} with payload: {payload}"
89
+ )
90
+
91
+ try:
92
+ response = requests.request(
93
+ method,
94
+ url,
95
+ headers=headers,
96
+ json=payload,
97
+ timeout=self.timeout,
98
+ )
99
+ response.raise_for_status()
100
+ return response.json()
101
+ except requests.exceptions.RequestException as e:
102
+ logger.error(f"Request failed for {method} {endpoint}: {e!s}")
103
+ return {"error": f"Request failed: {e!s}"}
104
+ except ValueError:
105
+ logger.error(f"Response for {method} {endpoint} is not valid JSON")
106
+ return {"error": "Response is not valid JSON"}
107
+
108
+ def create_server_instance(
109
+ self, server_name: str, user_id: str, platform_name: str
110
+ ) -> Dict[str, Any]:
111
+ r"""Create a Server-Sent Events (SSE) URL for a specified MCP server.
112
+
113
+ Args:
114
+ server_name (str): The name of the target MCP server.
115
+ user_id (str): The ID for the user requesting the server URL.
116
+ platform_name (str): The name of the platform associated
117
+ with the user.
118
+
119
+ Returns:
120
+ Dict[str, Any]: Response containing the server instance details.
121
+ """
122
+ endpoint = "/mcp-server/instance/create"
123
+ payload = {
124
+ "serverName": server_name,
125
+ "userId": user_id,
126
+ "platformName": platform_name,
127
+ }
128
+ headers = {'Content-Type': 'application/json'}
129
+ return self._request(
130
+ 'POST', endpoint, payload=payload, additional_headers=headers
131
+ )
132
+
133
+ def get_server_instance(self, instance_id: str) -> Dict[str, Any]:
134
+ r"""Get details of a specific server connection instance.
135
+
136
+ Args:
137
+ instance_id (str): The ID of the connection instance whose status
138
+ is being checked.
139
+
140
+ Returns:
141
+ Dict[str, Any]: Details about the server instance.
142
+ """
143
+ endpoint = f"/mcp-server/instance/get/{instance_id}"
144
+ return self._request('GET', endpoint)
145
+
146
+ def delete_auth_data(self, instance_id: str) -> Dict[str, Any]:
147
+ r"""Delete authentication metadata for a specific server
148
+ connection instance.
149
+
150
+ Args:
151
+ instance_id (str): The ID of the connection instance to
152
+ delete auth for.
153
+
154
+ Returns:
155
+ Dict[str, Any]: Status response for the operation.
156
+ """
157
+ endpoint = f"/mcp-server/instance/delete-auth/{instance_id}"
158
+ return self._request('DELETE', endpoint)
159
+
160
+ def delete_server_instance(self, instance_id: str) -> Dict[str, Any]:
161
+ r"""Completely removes a server connection instance.
162
+
163
+ Args:
164
+ instance_id (str): The ID of the connection instance to delete.
165
+
166
+ Returns:
167
+ Dict[str, Any]: Status response for the operation.
168
+ """
169
+ endpoint = f"/mcp-server/instance/delete/{instance_id}"
170
+ return self._request('DELETE', endpoint)
171
+
172
+ def get_server_tools(self, server_name: str) -> Dict[str, Any]:
173
+ r"""Get list of tool names for a specific MCP server.
174
+
175
+ Args:
176
+ server_name (str): The name of the target MCP server.
177
+
178
+ Returns:
179
+ Dict[str, Any]: List of tools available for the specified server.
180
+ """
181
+ endpoint = f"/mcp-server/tools/{server_name}"
182
+ return self._request('GET', endpoint)
183
+
184
+ def get_all_servers(self) -> Dict[str, Any]:
185
+ r"""Get all MCP servers with their basic information.
186
+
187
+ Returns:
188
+ Dict[str, Any]: Information about all available MCP servers.
189
+ """
190
+ endpoint = "/mcp-server/servers"
191
+ return self._request('GET', endpoint)
192
+
193
+ def set_auth_token(
194
+ self, instance_id: str, auth_token: str
195
+ ) -> Dict[str, Any]:
196
+ r"""Sets an authentication token for a specific instance.
197
+
198
+ Args:
199
+ instance_id (str): The ID for the connection instance.
200
+ auth_token (str): The authentication token to save.
201
+
202
+ Returns:
203
+ Dict[str, Any]: Status response for the operation.
204
+ """
205
+ endpoint = "/mcp-server/instance/set-auth-token"
206
+ payload = {"instanceId": instance_id, "authToken": auth_token}
207
+ headers = {'Content-Type': 'application/json'}
208
+ return self._request(
209
+ 'POST', endpoint, payload=payload, additional_headers=headers
210
+ )
211
+
212
+ def get_tools(self) -> List[FunctionTool]:
213
+ r"""Returns a list of FunctionTool objects representing the functions
214
+ in the toolkit.
215
+
216
+ Returns:
217
+ List[FunctionTool]: A list of FunctionTool objects representing
218
+ the functions in the toolkit.
219
+ """
220
+ return [
221
+ FunctionTool(self.create_server_instance),
222
+ FunctionTool(self.get_server_instance),
223
+ FunctionTool(self.delete_auth_data),
224
+ FunctionTool(self.delete_server_instance),
225
+ FunctionTool(self.get_server_tools),
226
+ FunctionTool(self.get_all_servers),
227
+ FunctionTool(self.set_auth_token),
228
+ ]
@@ -60,6 +60,8 @@ class MCPClient(BaseToolkit):
60
60
  timeout (Optional[float]): Connection timeout. (default: :obj:`'None'`)
61
61
  headers (Dict[str, str]): Headers for the HTTP request.
62
62
  (default: :obj:`'None'`)
63
+ strict (Optional[bool]): Whether to enforce strict mode for the
64
+ function call. (default: :obj:`False`)
63
65
  """
64
66
 
65
67
  def __init__(
@@ -69,6 +71,7 @@ class MCPClient(BaseToolkit):
69
71
  env: Optional[Dict[str, str]] = None,
70
72
  timeout: Optional[float] = None,
71
73
  headers: Optional[Dict[str, str]] = None,
74
+ strict: Optional[bool] = False,
72
75
  ):
73
76
  from mcp import Tool
74
77
 
@@ -78,6 +81,7 @@ class MCPClient(BaseToolkit):
78
81
  self.args = args or []
79
82
  self.env = env or {}
80
83
  self.headers = headers or {}
84
+ self.strict = strict
81
85
 
82
86
  self._mcp_tools: List[Tool] = []
83
87
  self._session: Optional['ClientSession'] = None
@@ -317,13 +321,15 @@ class MCPClient(BaseToolkit):
317
321
  "additionalProperties": False,
318
322
  }
319
323
 
324
+ # Because certain parameters in MCP may include keywords that are not
325
+ # supported by OpenAI, it is essential to set "strict" to False.
320
326
  return {
321
327
  "type": "function",
322
328
  "function": {
323
329
  "name": mcp_tool.name,
324
330
  "description": mcp_tool.description
325
331
  or "No description provided.",
326
- "strict": True,
332
+ "strict": self.strict,
327
333
  "parameters": parameters,
328
334
  },
329
335
  }
@@ -363,6 +369,8 @@ class MCPToolkit(BaseToolkit):
363
369
  instances to manage.
364
370
  config_path (Optional[str]): Path to a JSON configuration file
365
371
  defining MCP servers.
372
+ strict (Optional[bool]): Whether to enforce strict mode for the
373
+ function call. (default: :obj:`False`)
366
374
 
367
375
  Note:
368
376
  Either `servers` or `config_path` must be provided. If both are
@@ -397,6 +405,7 @@ class MCPToolkit(BaseToolkit):
397
405
  self,
398
406
  servers: Optional[List[MCPClient]] = None,
399
407
  config_path: Optional[str] = None,
408
+ strict: Optional[bool] = False,
400
409
  ):
401
410
  super().__init__()
402
411
 
@@ -409,16 +418,22 @@ class MCPToolkit(BaseToolkit):
409
418
  self.servers: List[MCPClient] = servers or []
410
419
 
411
420
  if config_path:
412
- self.servers.extend(self._load_servers_from_config(config_path))
421
+ self.servers.extend(
422
+ self._load_servers_from_config(config_path, strict)
423
+ )
413
424
 
414
425
  self._exit_stack = AsyncExitStack()
415
426
  self._connected = False
416
427
 
417
- def _load_servers_from_config(self, config_path: str) -> List[MCPClient]:
428
+ def _load_servers_from_config(
429
+ self, config_path: str, strict: Optional[bool] = False
430
+ ) -> List[MCPClient]:
418
431
  r"""Loads MCP server configurations from a JSON file.
419
432
 
420
433
  Args:
421
434
  config_path (str): Path to the JSON configuration file.
435
+ strict (bool): Whether to enforce strict mode for the
436
+ function call. (default: :obj:`False`)
422
437
 
423
438
  Returns:
424
439
  List[MCPClient]: List of configured MCPClient instances.
@@ -462,6 +477,7 @@ class MCPToolkit(BaseToolkit):
462
477
  args=cfg.get("args", []),
463
478
  env={**os.environ, **cfg.get("env", {})},
464
479
  timeout=cfg.get("timeout", None),
480
+ strict=strict,
465
481
  )
466
482
  all_servers.append(server)
467
483
 
@@ -352,6 +352,8 @@ def api_keys_required(
352
352
  key_way = "https://platform.lingyiwanwu.com/docs"
353
353
  elif env_var_name == 'ZHIPUAI_API_KEY':
354
354
  key_way = "https://www.zhipuai.cn/"
355
+ elif env_var_name == 'KLAVIS_API_KEY':
356
+ key_way = "https://www.klavis.ai/docs"
355
357
 
356
358
  if missing_keys:
357
359
  raise ValueError(
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "camel-ai"
7
- version = "0.2.51"
7
+ version = "0.2.52"
8
8
  description = "Communicative Agents for AI Society Study"
9
9
  authors = [{ name = "CAMEL-AI.org" }]
10
10
  requires-python = ">=3.10,<3.13"
@@ -164,6 +164,7 @@ dev_tools = [
164
164
  "tree-sitter>=0.23.2,<0.24",
165
165
  "typer>=0.15.2",
166
166
  "mcp>=1.3.0",
167
+ "daytona-sdk==0.14.0",
167
168
  ]
168
169
  model_platforms = [
169
170
  "litellm>=1.38.1,<2",
@@ -356,6 +357,7 @@ all = [
356
357
  "pyautogui>=0.9.54,<0.10",
357
358
  "pyobvector>=0.1.18",
358
359
  "scrapegraph-py>=1.12.0,<2",
360
+ "daytona-sdk==0.14.0",
359
361
  "ibm-watsonx-ai>=1.3.11",
360
362
  ]
361
363
 
@@ -543,6 +545,7 @@ module = [
543
545
  "crawl4ai.*",
544
546
  "pyautogui",
545
547
  "pyobvector.*",
548
+ "daytona_sdk",
546
549
  "scrapegraph_py.*",
547
550
  "ibm_watsonx_ai.*",
548
551
  ]
File without changes
File without changes
File without changes