camel-ai 0.2.65__tar.gz → 0.2.66__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 (427) hide show
  1. {camel_ai-0.2.65 → camel_ai-0.2.66}/PKG-INFO +1 -1
  2. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/__init__.py +1 -1
  3. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/mcp_agent.py +1 -5
  4. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/role_playing_worker.py +2 -2
  5. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/single_agent_worker.py +2 -2
  6. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/utils.py +0 -51
  7. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/workforce.py +10 -1
  8. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/tasks/task.py +61 -1
  9. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/function_tool.py +79 -7
  10. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/mcp_toolkit.py +70 -19
  11. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/mcp_client.py +1 -35
  12. {camel_ai-0.2.65 → camel_ai-0.2.66}/pyproject.toml +1 -1
  13. {camel_ai-0.2.65 → camel_ai-0.2.66}/.gitignore +0 -0
  14. {camel_ai-0.2.65 → camel_ai-0.2.66}/LICENSE +0 -0
  15. {camel_ai-0.2.65 → camel_ai-0.2.66}/README.md +0 -0
  16. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/__init__.py +0 -0
  17. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/_types.py +0 -0
  18. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/_utils.py +0 -0
  19. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/base.py +0 -0
  20. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/chat_agent.py +0 -0
  21. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/critic_agent.py +0 -0
  22. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/deductive_reasoner_agent.py +0 -0
  23. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/embodied_agent.py +0 -0
  24. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/knowledge_graph_agent.py +0 -0
  25. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/multi_hop_generator_agent.py +0 -0
  26. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/programmed_agent_instruction.py +0 -0
  27. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/repo_agent.py +0 -0
  28. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/role_assignment_agent.py +0 -0
  29. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/search_agent.py +0 -0
  30. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/task_agent.py +0 -0
  31. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/tool_agents/__init__.py +0 -0
  32. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/tool_agents/base.py +0 -0
  33. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  34. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/__init__.py +0 -0
  35. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/apibank.py +0 -0
  36. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/apibench.py +0 -0
  37. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/base.py +0 -0
  38. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/browsecomp.py +0 -0
  39. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/gaia.py +0 -0
  40. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/mock_website/README.md +0 -0
  41. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/mock_website/mock_web.py +0 -0
  42. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/mock_website/requirements.txt +0 -0
  43. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
  44. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/mock_website/task.json +0 -0
  45. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/nexus.py +0 -0
  46. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/benchmarks/ragbench.py +0 -0
  47. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/__init__.py +0 -0
  48. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/discord/__init__.py +0 -0
  49. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/discord/discord_app.py +0 -0
  50. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/discord/discord_installation.py +0 -0
  51. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/discord/discord_store.py +0 -0
  52. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/slack/__init__.py +0 -0
  53. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/slack/models.py +0 -0
  54. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/slack/slack_app.py +0 -0
  55. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/bots/telegram_bot.py +0 -0
  56. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/__init__.py +0 -0
  57. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/aiml_config.py +0 -0
  58. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/anthropic_config.py +0 -0
  59. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/base_config.py +0 -0
  60. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/bedrock_config.py +0 -0
  61. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/cohere_config.py +0 -0
  62. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/crynux_config.py +0 -0
  63. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/deepseek_config.py +0 -0
  64. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/gemini_config.py +0 -0
  65. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/groq_config.py +0 -0
  66. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/internlm_config.py +0 -0
  67. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/litellm_config.py +0 -0
  68. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/lmstudio_config.py +0 -0
  69. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/mistral_config.py +0 -0
  70. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/modelscope_config.py +0 -0
  71. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/moonshot_config.py +0 -0
  72. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/netmind_config.py +0 -0
  73. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/novita_config.py +0 -0
  74. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/nvidia_config.py +0 -0
  75. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/ollama_config.py +0 -0
  76. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/openai_config.py +0 -0
  77. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/openrouter_config.py +0 -0
  78. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/ppio_config.py +0 -0
  79. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/qwen_config.py +0 -0
  80. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/reka_config.py +0 -0
  81. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/samba_config.py +0 -0
  82. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/sglang_config.py +0 -0
  83. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/siliconflow_config.py +0 -0
  84. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/togetherai_config.py +0 -0
  85. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/vllm_config.py +0 -0
  86. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/watsonx_config.py +0 -0
  87. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/yi_config.py +0 -0
  88. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/configs/zhipuai_config.py +0 -0
  89. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/data_collectors/__init__.py +0 -0
  90. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/data_collectors/alpaca_collector.py +0 -0
  91. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/data_collectors/base.py +0 -0
  92. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/data_collectors/sharegpt_collector.py +0 -0
  93. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/__init__.py +0 -0
  94. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/cot_datagen.py +0 -0
  95. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/evol_instruct/__init__.py +0 -0
  96. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
  97. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/evol_instruct/scorer.py +0 -0
  98. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/evol_instruct/templates.py +0 -0
  99. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/self_improving_cot.py +0 -0
  100. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/self_instruct/__init__.py +0 -0
  101. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  102. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  103. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  104. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  105. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/self_instruct/self_instruct.py +0 -0
  106. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/self_instruct/templates.py +0 -0
  107. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/source2synth/__init__.py +0 -0
  108. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/source2synth/data_processor.py +0 -0
  109. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/source2synth/models.py +0 -0
  110. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  111. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datahubs/__init__.py +0 -0
  112. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datahubs/base.py +0 -0
  113. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datahubs/huggingface.py +0 -0
  114. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datahubs/models.py +0 -0
  115. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datasets/__init__.py +0 -0
  116. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datasets/base_generator.py +0 -0
  117. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datasets/few_shot_generator.py +0 -0
  118. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datasets/models.py +0 -0
  119. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datasets/self_instruct_generator.py +0 -0
  120. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/datasets/static_dataset.py +0 -0
  121. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/__init__.py +0 -0
  122. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/azure_embedding.py +0 -0
  123. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/base.py +0 -0
  124. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/gemini_embedding.py +0 -0
  125. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/jina_embedding.py +0 -0
  126. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/mistral_embedding.py +0 -0
  127. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/openai_compatible_embedding.py +0 -0
  128. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/openai_embedding.py +0 -0
  129. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  130. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/together_embedding.py +0 -0
  131. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/embeddings/vlm_embedding.py +0 -0
  132. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/environments/__init__.py +0 -0
  133. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/environments/models.py +0 -0
  134. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/environments/multi_step.py +0 -0
  135. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/environments/single_step.py +0 -0
  136. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/environments/tic_tac_toe.py +0 -0
  137. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/extractors/__init__.py +0 -0
  138. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/extractors/base.py +0 -0
  139. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/extractors/python_strategies.py +0 -0
  140. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/generators.py +0 -0
  141. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/human.py +0 -0
  142. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/__init__.py +0 -0
  143. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/base.py +0 -0
  144. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/docker/Dockerfile +0 -0
  145. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/docker_interpreter.py +0 -0
  146. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/e2b_interpreter.py +0 -0
  147. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/internal_python_interpreter.py +0 -0
  148. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/interpreter_error.py +0 -0
  149. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/ipython_interpreter.py +0 -0
  150. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/interpreters/subprocess_interpreter.py +0 -0
  151. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/__init__.py +0 -0
  152. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/apify_reader.py +0 -0
  153. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/base_io.py +0 -0
  154. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/chunkr_reader.py +0 -0
  155. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/crawl4ai_reader.py +0 -0
  156. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/firecrawl_reader.py +0 -0
  157. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/jina_url_reader.py +0 -0
  158. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/markitdown.py +0 -0
  159. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/mineru_extractor.py +0 -0
  160. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/mistral_reader.py +0 -0
  161. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/pandas_reader.py +0 -0
  162. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/scrapegraph_reader.py +0 -0
  163. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/loaders/unstructured_io.py +0 -0
  164. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/logger.py +0 -0
  165. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/__init__.py +0 -0
  166. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/agent_memories.py +0 -0
  167. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/base.py +0 -0
  168. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/blocks/__init__.py +0 -0
  169. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/blocks/chat_history_block.py +0 -0
  170. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/blocks/vectordb_block.py +0 -0
  171. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/context_creators/__init__.py +0 -0
  172. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/context_creators/score_based.py +0 -0
  173. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/memories/records.py +0 -0
  174. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/__init__.py +0 -0
  175. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/base.py +0 -0
  176. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/conversion/__init__.py +0 -0
  177. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/conversion/alpaca.py +0 -0
  178. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/conversion/conversation_models.py +0 -0
  179. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  180. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  181. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  182. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  183. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/messages/func_message.py +0 -0
  184. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/__init__.py +0 -0
  185. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/_utils.py +0 -0
  186. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/aiml_model.py +0 -0
  187. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/anthropic_model.py +0 -0
  188. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/aws_bedrock_model.py +0 -0
  189. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/azure_openai_model.py +0 -0
  190. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/base_audio_model.py +0 -0
  191. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/base_model.py +0 -0
  192. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/cohere_model.py +0 -0
  193. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/crynux_model.py +0 -0
  194. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/deepseek_model.py +0 -0
  195. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/fish_audio_model.py +0 -0
  196. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/gemini_model.py +0 -0
  197. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/groq_model.py +0 -0
  198. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/internlm_model.py +0 -0
  199. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/litellm_model.py +0 -0
  200. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/lmstudio_model.py +0 -0
  201. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/mistral_model.py +0 -0
  202. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/model_factory.py +0 -0
  203. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/model_manager.py +0 -0
  204. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/modelscope_model.py +0 -0
  205. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/moonshot_model.py +0 -0
  206. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/nemotron_model.py +0 -0
  207. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/netmind_model.py +0 -0
  208. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/novita_model.py +0 -0
  209. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/nvidia_model.py +0 -0
  210. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/ollama_model.py +0 -0
  211. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/openai_audio_models.py +0 -0
  212. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/openai_compatible_model.py +0 -0
  213. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/openai_model.py +0 -0
  214. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/openrouter_model.py +0 -0
  215. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/ppio_model.py +0 -0
  216. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/qwen_model.py +0 -0
  217. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/reka_model.py +0 -0
  218. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/reward/__init__.py +0 -0
  219. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/reward/base_reward_model.py +0 -0
  220. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/reward/evaluator.py +0 -0
  221. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/reward/nemotron_model.py +0 -0
  222. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/reward/skywork_model.py +0 -0
  223. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/samba_model.py +0 -0
  224. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/sglang_model.py +0 -0
  225. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/siliconflow_model.py +0 -0
  226. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/stub_model.py +0 -0
  227. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/togetherai_model.py +0 -0
  228. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/vllm_model.py +0 -0
  229. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/volcano_model.py +0 -0
  230. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/watsonx_model.py +0 -0
  231. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/yi_model.py +0 -0
  232. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/models/zhipuai_model.py +0 -0
  233. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/personas/__init__.py +0 -0
  234. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/personas/persona.py +0 -0
  235. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/personas/persona_hub.py +0 -0
  236. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/__init__.py +0 -0
  237. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/ai_society.py +0 -0
  238. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/base.py +0 -0
  239. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/code.py +0 -0
  240. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/evaluation.py +0 -0
  241. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/generate_text_embedding_data.py +0 -0
  242. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/image_craft.py +0 -0
  243. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/misalignment.py +0 -0
  244. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/multi_condition_image_craft.py +0 -0
  245. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/object_recognition.py +0 -0
  246. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/persona_hub.py +0 -0
  247. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/prompt_templates.py +0 -0
  248. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/role_description_prompt_template.py +0 -0
  249. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/solution_extraction.py +0 -0
  250. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/task_prompt_template.py +0 -0
  251. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/translation.py +0 -0
  252. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/prompts/video_description_prompt.py +0 -0
  253. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/py.typed +0 -0
  254. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/responses/__init__.py +0 -0
  255. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/responses/agent_responses.py +0 -0
  256. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/retrievers/__init__.py +0 -0
  257. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/retrievers/auto_retriever.py +0 -0
  258. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/retrievers/base.py +0 -0
  259. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/retrievers/bm25_retriever.py +0 -0
  260. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  261. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/retrievers/hybrid_retrival.py +0 -0
  262. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/retrievers/vector_retriever.py +0 -0
  263. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/__init__.py +0 -0
  264. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/api.py +0 -0
  265. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/base.py +0 -0
  266. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/configs.py +0 -0
  267. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/daytona_runtime.py +0 -0
  268. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/docker_runtime.py +0 -0
  269. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/llm_guard_runtime.py +0 -0
  270. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/remote_http_runtime.py +0 -0
  271. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
  272. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/utils/__init__.py +0 -0
  273. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
  274. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
  275. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/schemas/__init__.py +0 -0
  276. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/schemas/base.py +0 -0
  277. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/schemas/openai_converter.py +0 -0
  278. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/schemas/outlines_converter.py +0 -0
  279. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/__init__.py +0 -0
  280. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/babyagi_playing.py +0 -0
  281. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/role_playing.py +0 -0
  282. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/__init__.py +0 -0
  283. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/base.py +0 -0
  284. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/prompts.py +0 -0
  285. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/task_channel.py +0 -0
  286. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/societies/workforce/worker.py +0 -0
  287. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/__init__.py +0 -0
  288. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/graph_storages/__init__.py +0 -0
  289. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/graph_storages/base.py +0 -0
  290. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/graph_storages/graph_element.py +0 -0
  291. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/graph_storages/nebula_graph.py +0 -0
  292. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  293. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/key_value_storages/__init__.py +0 -0
  294. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/key_value_storages/base.py +0 -0
  295. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/key_value_storages/in_memory.py +0 -0
  296. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/key_value_storages/json.py +0 -0
  297. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
  298. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/key_value_storages/redis.py +0 -0
  299. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/object_storages/__init__.py +0 -0
  300. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/object_storages/amazon_s3.py +0 -0
  301. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/object_storages/azure_blob.py +0 -0
  302. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/object_storages/base.py +0 -0
  303. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/object_storages/google_cloud.py +0 -0
  304. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/vectordb_storages/__init__.py +0 -0
  305. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/vectordb_storages/base.py +0 -0
  306. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/vectordb_storages/faiss.py +0 -0
  307. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/vectordb_storages/milvus.py +0 -0
  308. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/vectordb_storages/oceanbase.py +0 -0
  309. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/vectordb_storages/qdrant.py +0 -0
  310. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/vectordb_storages/tidb.py +0 -0
  311. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/storages/vectordb_storages/weaviate.py +0 -0
  312. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/tasks/__init__.py +0 -0
  313. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/tasks/task_prompt.py +0 -0
  314. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/terminators/__init__.py +0 -0
  315. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/terminators/base.py +0 -0
  316. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/terminators/response_terminator.py +0 -0
  317. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/terminators/token_limit_terminator.py +0 -0
  318. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/__init__.py +0 -0
  319. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/aci_toolkit.py +0 -0
  320. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/arxiv_toolkit.py +0 -0
  321. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/ask_news_toolkit.py +0 -0
  322. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/async_browser_toolkit.py +0 -0
  323. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  324. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/base.py +0 -0
  325. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/bohrium_toolkit.py +0 -0
  326. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/browser_toolkit.py +0 -0
  327. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/browser_toolkit_commons.py +0 -0
  328. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/code_execution.py +0 -0
  329. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/dalle_toolkit.py +0 -0
  330. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/dappier_toolkit.py +0 -0
  331. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/data_commons_toolkit.py +0 -0
  332. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/excel_toolkit.py +0 -0
  333. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/file_write_toolkit.py +0 -0
  334. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/github_toolkit.py +0 -0
  335. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/google_calendar_toolkit.py +0 -0
  336. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/google_maps_toolkit.py +0 -0
  337. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/google_scholar_toolkit.py +0 -0
  338. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/human_toolkit.py +0 -0
  339. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/image_analysis_toolkit.py +0 -0
  340. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/jina_reranker_toolkit.py +0 -0
  341. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/klavis_toolkit.py +0 -0
  342. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/linkedin_toolkit.py +0 -0
  343. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/math_toolkit.py +0 -0
  344. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/memory_toolkit.py +0 -0
  345. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/meshy_toolkit.py +0 -0
  346. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/mineru_toolkit.py +0 -0
  347. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/networkx_toolkit.py +0 -0
  348. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/notion_toolkit.py +0 -0
  349. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  350. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  351. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  352. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  353. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  354. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  355. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  356. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  357. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  358. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  359. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  360. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  361. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  362. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  363. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  364. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  365. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  366. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/security_config.py +0 -0
  367. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  368. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  369. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  370. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  371. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  372. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  373. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  374. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/open_api_toolkit.py +0 -0
  375. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/openai_agent_toolkit.py +0 -0
  376. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/openbb_toolkit.py +0 -0
  377. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/page_script.js +0 -0
  378. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
  379. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/pptx_toolkit.py +0 -0
  380. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/pubmed_toolkit.py +0 -0
  381. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
  382. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/pyautogui_toolkit.py +0 -0
  383. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/reddit_toolkit.py +0 -0
  384. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/retrieval_toolkit.py +0 -0
  385. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/search_toolkit.py +0 -0
  386. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/searxng_toolkit.py +0 -0
  387. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  388. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/slack_toolkit.py +0 -0
  389. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/stripe_toolkit.py +0 -0
  390. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/sympy_toolkit.py +0 -0
  391. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/task_planning_toolkit.py +0 -0
  392. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/terminal_toolkit.py +0 -0
  393. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/thinking_toolkit.py +0 -0
  394. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/twitter_toolkit.py +0 -0
  395. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/video_analysis_toolkit.py +0 -0
  396. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/video_download_toolkit.py +0 -0
  397. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/weather_toolkit.py +0 -0
  398. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/whatsapp_toolkit.py +0 -0
  399. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
  400. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/toolkits/zapier_toolkit.py +0 -0
  401. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/types/__init__.py +0 -0
  402. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/types/agents/__init__.py +0 -0
  403. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/types/agents/tool_calling_record.py +0 -0
  404. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/types/enums.py +0 -0
  405. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/types/mcp_registries.py +0 -0
  406. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/types/openai_types.py +0 -0
  407. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/types/unified_model_type.py +0 -0
  408. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/__init__.py +0 -0
  409. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/async_func.py +0 -0
  410. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/chunker/__init__.py +0 -0
  411. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/chunker/base.py +0 -0
  412. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/chunker/code_chunker.py +0 -0
  413. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/chunker/uio_chunker.py +0 -0
  414. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/commons.py +0 -0
  415. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/constants.py +0 -0
  416. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/deduplication.py +0 -0
  417. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/filename.py +0 -0
  418. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/langfuse.py +0 -0
  419. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/mcp.py +0 -0
  420. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/response_format.py +0 -0
  421. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/utils/token_counting.py +0 -0
  422. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/verifiers/__init__.py +0 -0
  423. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/verifiers/base.py +0 -0
  424. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/verifiers/math_verifier.py +0 -0
  425. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/verifiers/models.py +0 -0
  426. {camel_ai-0.2.65 → camel_ai-0.2.66}/camel/verifiers/physics_verifier.py +0 -0
  427. {camel_ai-0.2.65 → camel_ai-0.2.66}/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.65
3
+ Version: 0.2.66
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
@@ -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.65'
17
+ __version__ = '0.2.66'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -125,7 +125,6 @@ class MCPAgent(ChatAgent):
125
125
  local_config_path: Optional[str] = None,
126
126
  tools: Optional[List[Union[FunctionTool, Callable]]] = None,
127
127
  function_calling_available: bool = True,
128
- strict: bool = False,
129
128
  **kwargs,
130
129
  ):
131
130
  if model is None:
@@ -145,7 +144,6 @@ class MCPAgent(ChatAgent):
145
144
 
146
145
  self.local_config = local_config
147
146
  self.function_calling_available = function_calling_available
148
- self.strict = strict
149
147
 
150
148
  if function_calling_available:
151
149
  sys_msg_content = "You are a helpful assistant, and you prefer "
@@ -179,7 +177,7 @@ class MCPAgent(ChatAgent):
179
177
  if self.local_config:
180
178
  config_dict.update(self.local_config)
181
179
 
182
- return MCPToolkit(config_dict=config_dict, strict=self.strict)
180
+ return MCPToolkit(config_dict=config_dict)
183
181
 
184
182
  def add_registry(self, registry_config: BaseMCPRegistryConfig) -> None:
185
183
  r"""Add a new registry configuration to the agent.
@@ -213,7 +211,6 @@ class MCPAgent(ChatAgent):
213
211
  ] = None,
214
212
  model: Optional[BaseModelBackend] = None,
215
213
  function_calling_available: bool = False,
216
- strict: bool = False,
217
214
  **kwargs,
218
215
  ) -> "MCPAgent":
219
216
  r"""Create and connect an MCPAgent instance.
@@ -279,7 +276,6 @@ class MCPAgent(ChatAgent):
279
276
  registry_configs=final_registry_configs,
280
277
  model=model,
281
278
  function_calling_available=function_calling_available,
282
- strict=strict,
283
279
  **kwargs,
284
280
  )
285
281
 
@@ -25,9 +25,9 @@ from camel.societies.workforce.prompts import (
25
25
  ROLEPLAY_PROCESS_TASK_PROMPT,
26
26
  ROLEPLAY_SUMMARIZE_PROMPT,
27
27
  )
28
- from camel.societies.workforce.utils import TaskResult, validate_task_content
28
+ from camel.societies.workforce.utils import TaskResult
29
29
  from camel.societies.workforce.worker import Worker
30
- from camel.tasks.task import Task, TaskState
30
+ from camel.tasks.task import Task, TaskState, validate_task_content
31
31
  from camel.utils import print_text_animated
32
32
 
33
33
 
@@ -21,9 +21,9 @@ from colorama import Fore
21
21
 
22
22
  from camel.agents import ChatAgent
23
23
  from camel.societies.workforce.prompts import PROCESS_TASK_PROMPT
24
- from camel.societies.workforce.utils import TaskResult, validate_task_content
24
+ from camel.societies.workforce.utils import TaskResult
25
25
  from camel.societies.workforce.worker import Worker
26
- from camel.tasks.task import Task, TaskState
26
+ from camel.tasks.task import Task, TaskState, validate_task_content
27
27
  from camel.utils import print_text_animated
28
28
 
29
29
 
@@ -16,10 +16,6 @@ from typing import Callable
16
16
 
17
17
  from pydantic import BaseModel, Field
18
18
 
19
- from camel.logger import get_logger
20
-
21
- logger = get_logger(__name__)
22
-
23
19
 
24
20
  class WorkerConf(BaseModel):
25
21
  r"""The configuration of a worker."""
@@ -75,50 +71,3 @@ def check_if_running(running: bool) -> Callable:
75
71
  return wrapper
76
72
 
77
73
  return decorator
78
-
79
-
80
- def validate_task_content(
81
- content: str, task_id: str = "unknown", min_length: int = 10
82
- ) -> bool:
83
- r"""Validates task result content to avoid silent failures.
84
- It performs basic checks to ensure the content meets minimum
85
- quality standards.
86
-
87
- Args:
88
- content (str): The task result content to validate.
89
- task_id (str): Task ID for logging purposes.
90
- (default: :obj:`"unknown"`)
91
- min_length (int): Minimum content length after stripping whitespace.
92
- (default: :obj:`10`)
93
-
94
- Returns:
95
- bool: True if content passes validation, False otherwise.
96
- """
97
- # 1: Content must not be None
98
- if content is None:
99
- logger.warning(f"Task {task_id}: None content rejected")
100
- return False
101
-
102
- # 2: Content must not be empty after stripping whitespace
103
- stripped_content = content.strip()
104
- if not stripped_content:
105
- logger.warning(
106
- f"Task {task_id}: Empty or whitespace-only content rejected."
107
- )
108
- return False
109
-
110
- # 3: Content must meet minimum meaningful length
111
- if len(stripped_content) < min_length:
112
- logger.warning(
113
- f"Task {task_id}: Content too short ({len(stripped_content)} "
114
- f"chars < {min_length} minimum). Content preview: "
115
- f"'{stripped_content[:50]}...'"
116
- )
117
- return False
118
-
119
- # All validation checks passed
120
- logger.debug(
121
- f"Task {task_id}: Content validation passed "
122
- f"({len(stripped_content)} chars)"
123
- )
124
- return True
@@ -40,7 +40,7 @@ from camel.societies.workforce.utils import (
40
40
  check_if_running,
41
41
  )
42
42
  from camel.societies.workforce.worker import Worker
43
- from camel.tasks.task import Task, TaskState
43
+ from camel.tasks.task import Task, TaskState, validate_task_content
44
44
  from camel.toolkits import CodeExecutionToolkit, SearchToolkit, ThinkingToolkit
45
45
  from camel.types import ModelPlatformType, ModelType
46
46
  from camel.utils import dependencies_required
@@ -211,6 +211,15 @@ class Workforce(BaseNode):
211
211
  Returns:
212
212
  Task: The updated task.
213
213
  """
214
+ if not validate_task_content(task.content, task.id):
215
+ task.state = TaskState.FAILED
216
+ task.result = "Task failed: Invalid or empty content provided"
217
+ logger.warning(
218
+ f"Task {task.id} rejected: Invalid or empty content. "
219
+ f"Content preview: '{task.content[:50]}...'"
220
+ )
221
+ return task
222
+
214
223
  self.reset()
215
224
  self._task = task
216
225
  task.state = TaskState.FAILED
@@ -19,15 +19,66 @@ from typing import Any, Callable, Dict, List, Literal, Optional, Union
19
19
  from pydantic import BaseModel
20
20
 
21
21
  from camel.agents import ChatAgent
22
+ from camel.logger import get_logger
22
23
  from camel.messages import BaseMessage
23
24
  from camel.prompts import TextPrompt
24
25
 
26
+ # Note: validate_task_content moved here to avoid circular imports
25
27
  from .task_prompt import (
26
28
  TASK_COMPOSE_PROMPT,
27
29
  TASK_DECOMPOSE_PROMPT,
28
30
  TASK_EVOLVE_PROMPT,
29
31
  )
30
32
 
33
+ logger = get_logger(__name__)
34
+
35
+
36
+ def validate_task_content(
37
+ content: str, task_id: str = "unknown", min_length: int = 10
38
+ ) -> bool:
39
+ r"""Validates task result content to avoid silent failures.
40
+ It performs basic checks to ensure the content meets minimum
41
+ quality standards.
42
+
43
+ Args:
44
+ content (str): The task result content to validate.
45
+ task_id (str): Task ID for logging purposes.
46
+ (default: :obj:`"unknown"`)
47
+ min_length (int): Minimum content length after stripping whitespace.
48
+ (default: :obj:`10`)
49
+
50
+ Returns:
51
+ bool: True if content passes validation, False otherwise.
52
+ """
53
+ # 1: Content must not be None
54
+ if content is None:
55
+ logger.warning(f"Task {task_id}: None content rejected")
56
+ return False
57
+
58
+ # 2: Content must not be empty after stripping whitespace
59
+ stripped_content = content.strip()
60
+ if not stripped_content:
61
+ logger.warning(
62
+ f"Task {task_id}: Empty or whitespace-only content rejected."
63
+ )
64
+ return False
65
+
66
+ # 3: Content must meet minimum meaningful length
67
+ if len(stripped_content) < min_length:
68
+ logger.warning(
69
+ f"Task {task_id}: Content too short ({len(stripped_content)} "
70
+ f"chars < {min_length} minimum). Content preview: "
71
+ f"'{stripped_content[:50]}...'"
72
+ )
73
+ return False
74
+
75
+ # All validation checks passed
76
+ logger.debug(
77
+ f"Task {task_id}: Content validation passed "
78
+ f"({len(stripped_content)} chars)"
79
+ )
80
+ return True
81
+
31
82
 
32
83
  def parse_response(
33
84
  response: str, task_id: Optional[str] = None
@@ -49,7 +100,16 @@ def parse_response(
49
100
  if task_id is None:
50
101
  task_id = "0"
51
102
  for i, content in enumerate(tasks_content):
52
- tasks.append(Task(content=content.strip(), id=f"{task_id}.{i}"))
103
+ stripped_content = content.strip()
104
+ # validate subtask content before creating the task
105
+ if validate_task_content(stripped_content, f"{task_id}.{i}"):
106
+ tasks.append(Task(content=stripped_content, id=f"{task_id}.{i}"))
107
+ else:
108
+ logger.warning(
109
+ f"Skipping invalid subtask {task_id}.{i} "
110
+ f"during decomposition: "
111
+ f"Content '{stripped_content[:50]}...' failed validation"
112
+ )
53
113
  return tasks
54
114
 
55
115
 
@@ -190,7 +190,9 @@ def sanitize_and_enforce_required(parameters_dict):
190
190
  r"""Cleans and updates the function schema to conform with OpenAI's
191
191
  requirements:
192
192
  - Removes invalid 'default' fields from the parameters schema.
193
- - Ensures all fields or function parameters are marked as required.
193
+ - Ensures all fields are marked as required or have null type for optional
194
+ fields.
195
+ - Recursively adds additionalProperties: false to all nested objects.
194
196
 
195
197
  Args:
196
198
  parameters_dict (dict): The dictionary representing the function
@@ -198,8 +200,38 @@ def sanitize_and_enforce_required(parameters_dict):
198
200
 
199
201
  Returns:
200
202
  dict: The updated dictionary with invalid defaults removed and all
201
- fields set as required.
203
+ fields properly configured for strict mode.
202
204
  """
205
+
206
+ def _add_additional_properties_false(obj):
207
+ r"""Recursively add additionalProperties: false to all objects."""
208
+ if isinstance(obj, dict):
209
+ if (
210
+ obj.get("type") == "object"
211
+ and "additionalProperties" not in obj
212
+ ):
213
+ obj["additionalProperties"] = False
214
+
215
+ # Process nested structures
216
+ for key, value in obj.items():
217
+ if key == "properties" and isinstance(value, dict):
218
+ for prop_value in value.values():
219
+ _add_additional_properties_false(prop_value)
220
+ elif key in [
221
+ "items",
222
+ "allOf",
223
+ "oneOf",
224
+ "anyOf",
225
+ ] and isinstance(value, (dict, list)):
226
+ if isinstance(value, dict):
227
+ _add_additional_properties_false(value)
228
+ elif isinstance(value, list):
229
+ for item in value:
230
+ _add_additional_properties_false(item)
231
+ elif key == "$defs" and isinstance(value, dict):
232
+ for def_value in value.values():
233
+ _add_additional_properties_false(def_value)
234
+
203
235
  # Check if 'function' and 'parameters' exist
204
236
  if (
205
237
  'function' in parameters_dict
@@ -209,12 +241,52 @@ def sanitize_and_enforce_required(parameters_dict):
209
241
  parameters = parameters_dict['function']['parameters']
210
242
  properties = parameters.get('properties', {})
211
243
 
212
- # Remove 'default' key from each property
213
- for field in properties.values():
214
- field.pop('default', None)
244
+ # Track which fields should be required vs optional
245
+ required_fields = []
246
+
247
+ # Process each property
248
+ for field_name, field_schema in properties.items():
249
+ # Check if this field had a default value (making it optional)
250
+ had_default = 'default' in field_schema
251
+
252
+ # Remove 'default' key from field schema as required by OpenAI
253
+ field_schema.pop('default', None)
254
+
255
+ if had_default:
256
+ # This field is optional - add null to its type
257
+ current_type = field_schema.get('type')
258
+ has_ref = '$ref' in field_schema
259
+
260
+ if has_ref:
261
+ # Fields with $ref shouldn't have additional type field
262
+ # The $ref itself defines the type structure
263
+ pass
264
+ elif current_type:
265
+ if isinstance(current_type, str):
266
+ # Single type - convert to array with null
267
+ field_schema['type'] = [current_type, 'null']
268
+ elif (
269
+ isinstance(current_type, list)
270
+ and 'null' not in current_type
271
+ ):
272
+ # Array of types - add null if not present
273
+ field_schema['type'] = [*current_type, 'null']
274
+ else:
275
+ # No type specified, add null type
276
+ field_schema['type'] = ['null']
277
+
278
+ # Optional fields are still marked as required in strict mode
279
+ # but with null type to indicate they can be omitted
280
+ required_fields.append(field_name)
281
+ else:
282
+ # This field is required
283
+ required_fields.append(field_name)
284
+
285
+ # Set all fields as required (strict mode requirement)
286
+ parameters['required'] = required_fields
215
287
 
216
- # Mark all keys in 'properties' as required
217
- parameters['required'] = list(properties.keys())
288
+ # Recursively add additionalProperties: false to all objects
289
+ _add_additional_properties_false(parameters)
218
290
 
219
291
  return parameters_dict
220
292
 
@@ -98,8 +98,6 @@ class MCPToolkit(BaseToolkit):
98
98
  timeout (Optional[float], optional): Timeout for connection attempts
99
99
  in seconds. This timeout applies to individual client connections.
100
100
  (default: :obj:`None`)
101
- strict (Optional[bool], optional): Flag to indicate strict mode.
102
- (default: :obj:`False`)
103
101
 
104
102
  Note:
105
103
  At least one of :obj:`clients`, :obj:`config_path`, or
@@ -148,7 +146,6 @@ class MCPToolkit(BaseToolkit):
148
146
  config_path: Optional[str] = None,
149
147
  config_dict: Optional[Dict[str, Any]] = None,
150
148
  timeout: Optional[float] = None,
151
- strict: Optional[bool] = False,
152
149
  ):
153
150
  # Call parent constructor first
154
151
  super().__init__(timeout=timeout)
@@ -165,7 +162,6 @@ class MCPToolkit(BaseToolkit):
165
162
  raise ValueError(error_msg)
166
163
 
167
164
  self.clients: List[MCPClient] = clients or []
168
- self.strict = strict # Store strict parameter
169
165
  self._is_connected = False
170
166
  self._exit_stack: Optional[AsyncExitStack] = None
171
167
 
@@ -313,7 +309,6 @@ class MCPToolkit(BaseToolkit):
313
309
  config_path: Optional[str] = None,
314
310
  config_dict: Optional[Dict[str, Any]] = None,
315
311
  timeout: Optional[float] = None,
316
- strict: Optional[bool] = False,
317
312
  ) -> "MCPToolkit":
318
313
  r"""Factory method that creates and connects to all MCP servers.
319
314
 
@@ -331,8 +326,6 @@ class MCPToolkit(BaseToolkit):
331
326
  config file. (default: :obj:`None`)
332
327
  timeout (Optional[float], optional): Timeout for connection
333
328
  attempts in seconds. (default: :obj:`None`)
334
- strict (Optional[bool], optional): Flag to indicate strict mode.
335
- (default: :obj:`False`)
336
329
 
337
330
  Returns:
338
331
  MCPToolkit: A fully initialized and connected :obj:`MCPToolkit`
@@ -361,7 +354,6 @@ class MCPToolkit(BaseToolkit):
361
354
  config_path=config_path,
362
355
  config_dict=config_dict,
363
356
  timeout=timeout,
364
- strict=strict,
365
357
  )
366
358
  try:
367
359
  await toolkit.connect()
@@ -381,11 +373,10 @@ class MCPToolkit(BaseToolkit):
381
373
  config_path: Optional[str] = None,
382
374
  config_dict: Optional[Dict[str, Any]] = None,
383
375
  timeout: Optional[float] = None,
384
- strict: Optional[bool] = False,
385
376
  ) -> "MCPToolkit":
386
377
  r"""Synchronously create and connect to all MCP servers."""
387
378
  return run_async(cls.create)(
388
- clients, config_path, config_dict, timeout, strict
379
+ clients, config_path, config_dict, timeout
389
380
  )
390
381
 
391
382
  def _load_clients_from_config(self, config_path: str) -> List[MCPClient]:
@@ -442,12 +433,10 @@ class MCPToolkit(BaseToolkit):
442
433
 
443
434
  try:
444
435
  # Use the new mcp_client factory function
445
- # Pass timeout and strict from toolkit if available
436
+ # Pass timeout from toolkit if available
446
437
  kwargs = {}
447
438
  if hasattr(self, "timeout") and self.timeout is not None:
448
439
  kwargs["timeout"] = self.timeout
449
- if hasattr(self, "strict") and self.strict is not None:
450
- kwargs["strict"] = self.strict
451
440
 
452
441
  client = create_mcp_client(cfg, **kwargs)
453
442
  return client
@@ -455,17 +444,68 @@ class MCPToolkit(BaseToolkit):
455
444
  error_msg = f"Failed to create client for server '{name}': {e}"
456
445
  raise ValueError(error_msg) from e
457
446
 
447
+ def _ensure_strict_tool_schema(self, tool: FunctionTool) -> FunctionTool:
448
+ r"""Ensure a tool has a strict schema compatible with OpenAI's
449
+ requirements.
450
+
451
+ Args:
452
+ tool (FunctionTool): The tool to check and update if necessary.
453
+
454
+ Returns:
455
+ FunctionTool: The tool with a strict schema.
456
+ """
457
+ try:
458
+ schema = tool.get_openai_tool_schema()
459
+
460
+ # Check if the tool already has strict mode enabled
461
+ if schema.get("function", {}).get("strict") is True:
462
+ return tool
463
+
464
+ # Update the schema to be strict
465
+ if "function" in schema:
466
+ schema["function"]["strict"] = True
467
+
468
+ # Ensure parameters have proper strict mode configuration
469
+ parameters = schema["function"].get("parameters", {})
470
+ if parameters:
471
+ # Ensure additionalProperties is false
472
+ parameters["additionalProperties"] = False
473
+
474
+ # Process properties to handle optional fields
475
+ properties = parameters.get("properties", {})
476
+ parameters["required"] = list(properties.keys())
477
+
478
+ # Apply the sanitization function from function_tool
479
+ from camel.toolkits.function_tool import (
480
+ sanitize_and_enforce_required,
481
+ )
482
+
483
+ schema = sanitize_and_enforce_required(schema)
484
+
485
+ tool.set_openai_tool_schema(schema)
486
+ logger.debug(
487
+ f"Updated tool '{tool.get_function_name()}' to strict mode"
488
+ )
489
+
490
+ except Exception as e:
491
+ logger.warning(f"Failed to ensure strict schema for tool: {e}")
492
+
493
+ return tool
494
+
458
495
  def get_tools(self) -> List[FunctionTool]:
459
496
  r"""Aggregates all tools from the managed MCP client instances.
460
497
 
461
498
  Collects and combines tools from all connected MCP clients into a
462
499
  single unified list. Each tool is converted to a CAMEL-compatible
463
- :obj:`FunctionTool` that can be used with CAMEL agents.
500
+ :obj:`FunctionTool` that can be used with CAMEL agents. All tools
501
+ are ensured to have strict schemas compatible with OpenAI's
502
+ requirements.
464
503
 
465
504
  Returns:
466
505
  List[FunctionTool]: Combined list of all available function tools
467
- from all connected MCP servers. Returns an empty list if no
468
- clients are connected or if no tools are available.
506
+ from all connected MCP servers with strict schemas. Returns an
507
+ empty list if no clients are connected or if no tools are
508
+ available.
469
509
 
470
510
  Note:
471
511
  This method can be called even when the toolkit is not connected,
@@ -492,14 +532,25 @@ class MCPToolkit(BaseToolkit):
492
532
  for i, client in enumerate(self.clients):
493
533
  try:
494
534
  client_tools = client.get_tools()
495
- all_tools.extend(client_tools)
535
+
536
+ # Ensure all tools have strict schemas
537
+ strict_tools = []
538
+ for tool in client_tools:
539
+ strict_tool = self._ensure_strict_tool_schema(tool)
540
+ strict_tools.append(strict_tool)
541
+
542
+ all_tools.extend(strict_tools)
496
543
  logger.debug(
497
- f"Client {i+1} contributed {len(client_tools)} tools"
544
+ f"Client {i+1} contributed {len(strict_tools)} "
545
+ f"tools (strict mode enabled)"
498
546
  )
499
547
  except Exception as e:
500
548
  logger.error(f"Failed to get tools from client {i+1}: {e}")
501
549
 
502
- logger.info(f"Total tools available: {len(all_tools)}")
550
+ logger.info(
551
+ f"Total tools available: {len(all_tools)} (all with strict "
552
+ f"schemas)"
553
+ )
503
554
  return all_tools
504
555
 
505
556
  def get_text_tools(self) -> str:
@@ -173,8 +173,6 @@ class MCPClient:
173
173
  initialization. (default: :obj:`None`)
174
174
  timeout (Optional[float], optional): Timeout for waiting for messages
175
175
  from the server in seconds. (default: :obj:`10.0`)
176
- strict (Optional[bool], optional): Strict mode for generating
177
- FunctionTool objects. (default: :obj:`False`)
178
176
 
179
177
  Examples:
180
178
  STDIO server:
@@ -209,20 +207,6 @@ class MCPClient:
209
207
  async with MCPClient({"url": "ws://localhost:8080/mcp"}) as client:
210
208
  tools = client.get_tools()
211
209
 
212
- With strict mode enabled:
213
-
214
- .. code-block:: python
215
-
216
- async with MCPClient({
217
- "command": "npx",
218
- "args": [
219
- "-y",
220
- "@modelcontextprotocol/server-filesystem",
221
- "/path"
222
- ]
223
- }, strict=True) as client:
224
- tools = client.get_tools()
225
-
226
210
  Attributes:
227
211
  config (ServerConfig): The server configuration object.
228
212
  client_info (Optional[types.Implementation]): Client implementation
@@ -235,14 +219,12 @@ class MCPClient:
235
219
  config: Union[ServerConfig, Dict[str, Any]],
236
220
  client_info: Optional[types.Implementation] = None,
237
221
  timeout: Optional[float] = 10.0,
238
- strict: Optional[bool] = False,
239
222
  ):
240
223
  # Convert dict config to ServerConfig if needed
241
224
  if isinstance(config, dict):
242
225
  config = ServerConfig(**config)
243
226
 
244
227
  self.config = config
245
- self.strict = strict
246
228
 
247
229
  # Validate transport type early (this will raise ValueError if invalid)
248
230
  _ = self.config.transport_type
@@ -766,7 +748,6 @@ class MCPClient:
766
748
  "name": mcp_tool.name,
767
749
  "description": mcp_tool.description
768
750
  or "No description provided.",
769
- "strict": self.strict,
770
751
  "parameters": parameters,
771
752
  },
772
753
  }
@@ -932,8 +913,7 @@ def create_mcp_client(
932
913
  dictionary is provided, it will be automatically converted to
933
914
  a :obj:`ServerConfig`.
934
915
  **kwargs: Additional keyword arguments passed to the :obj:`MCPClient`
935
- constructor, such as :obj:`client_info`, :obj:`timeout`, and
936
- :obj:`strict`.
916
+ constructor, such as :obj:`client_info`, :obj:`timeout`.
937
917
 
938
918
  Returns:
939
919
  MCPClient: A configured :obj:`MCPClient` instance ready for use as
@@ -972,20 +952,6 @@ def create_mcp_client(
972
952
  "url": "ws://localhost:8080/mcp"
973
953
  }) as client:
974
954
  tools = client.get_tools()
975
-
976
- With strict mode enabled:
977
-
978
- .. code-block:: python
979
-
980
- async with create_mcp_client({
981
- "command": "npx",
982
- "args": [
983
- "-y",
984
- "@modelcontextprotocol/server-filesystem",
985
- "/path",
986
- ],
987
- }, strict=True) as client:
988
- tools = client.get_tools()
989
955
  """
990
956
  return MCPClient(config, **kwargs)
991
957
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "camel-ai"
7
- version = "0.2.65"
7
+ version = "0.2.66"
8
8
  description = "Communicative Agents for AI Society Study"
9
9
  authors = [{ name = "CAMEL-AI.org" }]
10
10
  requires-python = ">=3.10,<3.13"
File without changes
File without changes
File without changes