camel-ai 0.2.73a0__tar.gz → 0.2.73a1__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 (466) hide show
  1. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/PKG-INFO +3 -3
  2. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/__init__.py +1 -1
  3. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/__init__.py +2 -0
  4. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +1 -1
  5. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +46 -17
  6. camel_ai-0.2.73a1/camel/toolkits/notion_mcp_toolkit.py +234 -0
  7. camel_ai-0.2.73a1/hatch_build_npm.py +293 -0
  8. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/pyproject.toml +3 -3
  9. camel_ai-0.2.73a0/hatch_build_npm.py +0 -213
  10. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/.gitignore +0 -0
  11. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/LICENSE +0 -0
  12. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/README.md +0 -0
  13. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/__init__.py +0 -0
  14. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/_types.py +0 -0
  15. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/_utils.py +0 -0
  16. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/base.py +0 -0
  17. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/chat_agent.py +0 -0
  18. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/critic_agent.py +0 -0
  19. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/deductive_reasoner_agent.py +0 -0
  20. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/embodied_agent.py +0 -0
  21. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/knowledge_graph_agent.py +0 -0
  22. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/mcp_agent.py +0 -0
  23. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/multi_hop_generator_agent.py +0 -0
  24. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/programmed_agent_instruction.py +0 -0
  25. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/repo_agent.py +0 -0
  26. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/role_assignment_agent.py +0 -0
  27. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/search_agent.py +0 -0
  28. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/task_agent.py +0 -0
  29. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/tool_agents/__init__.py +0 -0
  30. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/tool_agents/base.py +0 -0
  31. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
  32. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/__init__.py +0 -0
  33. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/apibank.py +0 -0
  34. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/apibench.py +0 -0
  35. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/base.py +0 -0
  36. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/browsecomp.py +0 -0
  37. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/gaia.py +0 -0
  38. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/README.md +0 -0
  39. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/mock_web.py +0 -0
  40. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/requirements.txt +0 -0
  41. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
  42. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/task.json +0 -0
  43. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/nexus.py +0 -0
  44. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/ragbench.py +0 -0
  45. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/__init__.py +0 -0
  46. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/discord/__init__.py +0 -0
  47. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/discord/discord_app.py +0 -0
  48. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/discord/discord_installation.py +0 -0
  49. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/discord/discord_store.py +0 -0
  50. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/slack/__init__.py +0 -0
  51. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/slack/models.py +0 -0
  52. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/slack/slack_app.py +0 -0
  53. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/telegram_bot.py +0 -0
  54. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/__init__.py +0 -0
  55. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/aiml_config.py +0 -0
  56. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/anthropic_config.py +0 -0
  57. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/base_config.py +0 -0
  58. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/bedrock_config.py +0 -0
  59. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/cohere_config.py +0 -0
  60. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/crynux_config.py +0 -0
  61. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/deepseek_config.py +0 -0
  62. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/gemini_config.py +0 -0
  63. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/groq_config.py +0 -0
  64. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/internlm_config.py +0 -0
  65. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/litellm_config.py +0 -0
  66. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/lmstudio_config.py +0 -0
  67. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/mistral_config.py +0 -0
  68. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/modelscope_config.py +0 -0
  69. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/moonshot_config.py +0 -0
  70. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/netmind_config.py +0 -0
  71. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/novita_config.py +0 -0
  72. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/nvidia_config.py +0 -0
  73. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/ollama_config.py +0 -0
  74. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/openai_config.py +0 -0
  75. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/openrouter_config.py +0 -0
  76. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/ppio_config.py +0 -0
  77. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/qianfan_config.py +0 -0
  78. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/qwen_config.py +0 -0
  79. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/reka_config.py +0 -0
  80. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/samba_config.py +0 -0
  81. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/sglang_config.py +0 -0
  82. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/siliconflow_config.py +0 -0
  83. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/togetherai_config.py +0 -0
  84. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/vllm_config.py +0 -0
  85. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/watsonx_config.py +0 -0
  86. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/yi_config.py +0 -0
  87. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/zhipuai_config.py +0 -0
  88. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/data_collectors/__init__.py +0 -0
  89. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/data_collectors/alpaca_collector.py +0 -0
  90. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/data_collectors/base.py +0 -0
  91. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/data_collectors/sharegpt_collector.py +0 -0
  92. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/__init__.py +0 -0
  93. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/cot_datagen.py +0 -0
  94. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/evol_instruct/__init__.py +0 -0
  95. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
  96. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/evol_instruct/scorer.py +0 -0
  97. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/evol_instruct/templates.py +0 -0
  98. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_improving_cot.py +0 -0
  99. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/__init__.py +0 -0
  100. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/filter/__init__.py +0 -0
  101. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
  102. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
  103. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
  104. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/self_instruct.py +0 -0
  105. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/templates.py +0 -0
  106. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/source2synth/__init__.py +0 -0
  107. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/source2synth/data_processor.py +0 -0
  108. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/source2synth/models.py +0 -0
  109. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
  110. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datahubs/__init__.py +0 -0
  111. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datahubs/base.py +0 -0
  112. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datahubs/huggingface.py +0 -0
  113. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datahubs/models.py +0 -0
  114. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/__init__.py +0 -0
  115. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/base_generator.py +0 -0
  116. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/few_shot_generator.py +0 -0
  117. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/models.py +0 -0
  118. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/self_instruct_generator.py +0 -0
  119. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/static_dataset.py +0 -0
  120. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/__init__.py +0 -0
  121. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/azure_embedding.py +0 -0
  122. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/base.py +0 -0
  123. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/gemini_embedding.py +0 -0
  124. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/jina_embedding.py +0 -0
  125. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/mistral_embedding.py +0 -0
  126. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/openai_compatible_embedding.py +0 -0
  127. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/openai_embedding.py +0 -0
  128. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
  129. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/together_embedding.py +0 -0
  130. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/vlm_embedding.py +0 -0
  131. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/__init__.py +0 -0
  132. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/models.py +0 -0
  133. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/multi_step.py +0 -0
  134. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/rlcards_env.py +0 -0
  135. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/single_step.py +0 -0
  136. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/tic_tac_toe.py +0 -0
  137. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/extractors/__init__.py +0 -0
  138. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/extractors/base.py +0 -0
  139. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/extractors/python_strategies.py +0 -0
  140. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/generators.py +0 -0
  141. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/human.py +0 -0
  142. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/__init__.py +0 -0
  143. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/base.py +0 -0
  144. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/docker/Dockerfile +0 -0
  145. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/docker_interpreter.py +0 -0
  146. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/e2b_interpreter.py +0 -0
  147. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/internal_python_interpreter.py +0 -0
  148. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/interpreter_error.py +0 -0
  149. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/ipython_interpreter.py +0 -0
  150. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/subprocess_interpreter.py +0 -0
  151. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/__init__.py +0 -0
  152. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/apify_reader.py +0 -0
  153. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/base_io.py +0 -0
  154. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/base_loader.py +0 -0
  155. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/chunkr_reader.py +0 -0
  156. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/crawl4ai_reader.py +0 -0
  157. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/firecrawl_reader.py +0 -0
  158. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/jina_url_reader.py +0 -0
  159. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/markitdown.py +0 -0
  160. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/mineru_extractor.py +0 -0
  161. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/mistral_reader.py +0 -0
  162. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/pandas_reader.py +0 -0
  163. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/scrapegraph_reader.py +0 -0
  164. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/unstructured_io.py +0 -0
  165. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/logger.py +0 -0
  166. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/__init__.py +0 -0
  167. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/agent_memories.py +0 -0
  168. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/base.py +0 -0
  169. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/blocks/__init__.py +0 -0
  170. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/blocks/chat_history_block.py +0 -0
  171. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/blocks/vectordb_block.py +0 -0
  172. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/context_creators/__init__.py +0 -0
  173. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/context_creators/score_based.py +0 -0
  174. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/records.py +0 -0
  175. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/__init__.py +0 -0
  176. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/base.py +0 -0
  177. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/__init__.py +0 -0
  178. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/alpaca.py +0 -0
  179. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/conversation_models.py +0 -0
  180. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/sharegpt/__init__.py +0 -0
  181. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
  182. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
  183. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
  184. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/func_message.py +0 -0
  185. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/__init__.py +0 -0
  186. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/_utils.py +0 -0
  187. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/aiml_model.py +0 -0
  188. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/anthropic_model.py +0 -0
  189. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/aws_bedrock_model.py +0 -0
  190. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/azure_openai_model.py +0 -0
  191. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/base_audio_model.py +0 -0
  192. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/base_model.py +0 -0
  193. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/cohere_model.py +0 -0
  194. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/crynux_model.py +0 -0
  195. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/deepseek_model.py +0 -0
  196. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/fish_audio_model.py +0 -0
  197. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/gemini_model.py +0 -0
  198. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/groq_model.py +0 -0
  199. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/internlm_model.py +0 -0
  200. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/litellm_model.py +0 -0
  201. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/lmstudio_model.py +0 -0
  202. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/mistral_model.py +0 -0
  203. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/model_factory.py +0 -0
  204. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/model_manager.py +0 -0
  205. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/modelscope_model.py +0 -0
  206. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/moonshot_model.py +0 -0
  207. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/nemotron_model.py +0 -0
  208. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/netmind_model.py +0 -0
  209. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/novita_model.py +0 -0
  210. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/nvidia_model.py +0 -0
  211. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/ollama_model.py +0 -0
  212. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/openai_audio_models.py +0 -0
  213. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/openai_compatible_model.py +0 -0
  214. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/openai_model.py +0 -0
  215. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/openrouter_model.py +0 -0
  216. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/ppio_model.py +0 -0
  217. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/qianfan_model.py +0 -0
  218. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/qwen_model.py +0 -0
  219. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reka_model.py +0 -0
  220. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/__init__.py +0 -0
  221. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/base_reward_model.py +0 -0
  222. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/evaluator.py +0 -0
  223. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/nemotron_model.py +0 -0
  224. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/skywork_model.py +0 -0
  225. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/samba_model.py +0 -0
  226. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/sglang_model.py +0 -0
  227. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/siliconflow_model.py +0 -0
  228. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/stub_model.py +0 -0
  229. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/togetherai_model.py +0 -0
  230. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/vllm_model.py +0 -0
  231. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/volcano_model.py +0 -0
  232. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/watsonx_model.py +0 -0
  233. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/yi_model.py +0 -0
  234. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/zhipuai_model.py +0 -0
  235. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/personas/__init__.py +0 -0
  236. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/personas/persona.py +0 -0
  237. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/personas/persona_hub.py +0 -0
  238. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/__init__.py +0 -0
  239. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/ai_society.py +0 -0
  240. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/base.py +0 -0
  241. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/code.py +0 -0
  242. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/evaluation.py +0 -0
  243. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/generate_text_embedding_data.py +0 -0
  244. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/image_craft.py +0 -0
  245. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/misalignment.py +0 -0
  246. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/multi_condition_image_craft.py +0 -0
  247. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/object_recognition.py +0 -0
  248. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/persona_hub.py +0 -0
  249. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/prompt_templates.py +0 -0
  250. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/role_description_prompt_template.py +0 -0
  251. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/solution_extraction.py +0 -0
  252. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/task_prompt_template.py +0 -0
  253. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/translation.py +0 -0
  254. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/video_description_prompt.py +0 -0
  255. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/py.typed +0 -0
  256. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/responses/__init__.py +0 -0
  257. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/responses/agent_responses.py +0 -0
  258. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/__init__.py +0 -0
  259. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/auto_retriever.py +0 -0
  260. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/base.py +0 -0
  261. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/bm25_retriever.py +0 -0
  262. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/cohere_rerank_retriever.py +0 -0
  263. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/hybrid_retrival.py +0 -0
  264. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/vector_retriever.py +0 -0
  265. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/__init__.py +0 -0
  266. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/api.py +0 -0
  267. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/base.py +0 -0
  268. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/configs.py +0 -0
  269. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/daytona_runtime.py +0 -0
  270. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/docker_runtime.py +0 -0
  271. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/llm_guard_runtime.py +0 -0
  272. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/remote_http_runtime.py +0 -0
  273. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
  274. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/utils/__init__.py +0 -0
  275. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
  276. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
  277. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/schemas/__init__.py +0 -0
  278. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/schemas/base.py +0 -0
  279. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/schemas/openai_converter.py +0 -0
  280. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/schemas/outlines_converter.py +0 -0
  281. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/services/agent_openapi_server.py +0 -0
  282. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/__init__.py +0 -0
  283. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/babyagi_playing.py +0 -0
  284. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/role_playing.py +0 -0
  285. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/__init__.py +0 -0
  286. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/base.py +0 -0
  287. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/prompts.py +0 -0
  288. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/role_playing_worker.py +0 -0
  289. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/single_agent_worker.py +0 -0
  290. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/structured_output_handler.py +0 -0
  291. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/task_channel.py +0 -0
  292. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/utils.py +0 -0
  293. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/worker.py +0 -0
  294. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/workforce.py +0 -0
  295. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/workforce_logger.py +0 -0
  296. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/__init__.py +0 -0
  297. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/__init__.py +0 -0
  298. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/base.py +0 -0
  299. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/graph_element.py +0 -0
  300. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/nebula_graph.py +0 -0
  301. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/neo4j_graph.py +0 -0
  302. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/__init__.py +0 -0
  303. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/base.py +0 -0
  304. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/in_memory.py +0 -0
  305. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/json.py +0 -0
  306. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
  307. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/redis.py +0 -0
  308. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/__init__.py +0 -0
  309. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/amazon_s3.py +0 -0
  310. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/azure_blob.py +0 -0
  311. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/base.py +0 -0
  312. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/google_cloud.py +0 -0
  313. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/__init__.py +0 -0
  314. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/base.py +0 -0
  315. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/chroma.py +0 -0
  316. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/faiss.py +0 -0
  317. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/milvus.py +0 -0
  318. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/oceanbase.py +0 -0
  319. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/pgvector.py +0 -0
  320. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/qdrant.py +0 -0
  321. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/surreal.py +0 -0
  322. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/tidb.py +0 -0
  323. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/weaviate.py +0 -0
  324. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/tasks/__init__.py +0 -0
  325. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/tasks/task.py +0 -0
  326. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/tasks/task_prompt.py +0 -0
  327. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/terminators/__init__.py +0 -0
  328. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/terminators/base.py +0 -0
  329. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/terminators/response_terminator.py +0 -0
  330. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/terminators/token_limit_terminator.py +0 -0
  331. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/aci_toolkit.py +0 -0
  332. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/arxiv_toolkit.py +0 -0
  333. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/ask_news_toolkit.py +0 -0
  334. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/async_browser_toolkit.py +0 -0
  335. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/audio_analysis_toolkit.py +0 -0
  336. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/base.py +0 -0
  337. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/bohrium_toolkit.py +0 -0
  338. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/browser_toolkit.py +0 -0
  339. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/browser_toolkit_commons.py +0 -0
  340. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/code_execution.py +0 -0
  341. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/craw4ai_toolkit.py +0 -0
  342. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/dappier_toolkit.py +0 -0
  343. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/data_commons_toolkit.py +0 -0
  344. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
  345. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/excel_toolkit.py +0 -0
  346. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/file_write_toolkit.py +0 -0
  347. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/function_tool.py +0 -0
  348. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/github_toolkit.py +0 -0
  349. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/google_calendar_toolkit.py +0 -0
  350. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
  351. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/google_maps_toolkit.py +0 -0
  352. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/google_scholar_toolkit.py +0 -0
  353. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/human_toolkit.py +0 -0
  354. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
  355. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/config_loader.py +0 -0
  356. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +0 -0
  357. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/package.json +0 -0
  358. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +0 -0
  359. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +0 -0
  360. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +0 -0
  361. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +0 -0
  362. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +0 -0
  363. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +0 -0
  364. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +0 -0
  365. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +0 -0
  366. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/image_analysis_toolkit.py +0 -0
  367. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/jina_reranker_toolkit.py +0 -0
  368. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/klavis_toolkit.py +0 -0
  369. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/linkedin_toolkit.py +0 -0
  370. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/markitdown_toolkit.py +0 -0
  371. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/math_toolkit.py +0 -0
  372. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/mcp_toolkit.py +0 -0
  373. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/memory_toolkit.py +0 -0
  374. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/meshy_toolkit.py +0 -0
  375. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/message_agent_toolkit.py +0 -0
  376. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/message_integration.py +0 -0
  377. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/mineru_toolkit.py +0 -0
  378. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/networkx_toolkit.py +0 -0
  379. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/note_taking_toolkit.py +0 -0
  380. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/notion_toolkit.py +0 -0
  381. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
  382. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
  383. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
  384. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
  385. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
  386. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
  387. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
  388. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
  389. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
  390. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
  391. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
  392. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
  393. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
  394. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
  395. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
  396. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
  397. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
  398. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/security_config.py +0 -0
  399. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
  400. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
  401. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
  402. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
  403. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
  404. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
  405. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
  406. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_toolkit.py +0 -0
  407. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/openai_agent_toolkit.py +0 -0
  408. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/openai_image_toolkit.py +0 -0
  409. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/openbb_toolkit.py +0 -0
  410. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/origene_mcp_toolkit.py +0 -0
  411. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/page_script.js +0 -0
  412. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
  413. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/pptx_toolkit.py +0 -0
  414. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/pubmed_toolkit.py +0 -0
  415. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
  416. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/pyautogui_toolkit.py +0 -0
  417. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/reddit_toolkit.py +0 -0
  418. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/retrieval_toolkit.py +0 -0
  419. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/screenshot_toolkit.py +0 -0
  420. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/search_toolkit.py +0 -0
  421. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/searxng_toolkit.py +0 -0
  422. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
  423. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/slack_toolkit.py +0 -0
  424. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/stripe_toolkit.py +0 -0
  425. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/sympy_toolkit.py +0 -0
  426. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/task_planning_toolkit.py +0 -0
  427. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/terminal_toolkit.py +0 -0
  428. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/thinking_toolkit.py +0 -0
  429. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/twitter_toolkit.py +0 -0
  430. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/video_analysis_toolkit.py +0 -0
  431. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/video_download_toolkit.py +0 -0
  432. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/weather_toolkit.py +0 -0
  433. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/web_deploy_toolkit.py +0 -0
  434. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/whatsapp_toolkit.py +0 -0
  435. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
  436. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/zapier_toolkit.py +0 -0
  437. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/__init__.py +0 -0
  438. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/agents/__init__.py +0 -0
  439. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/agents/tool_calling_record.py +0 -0
  440. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/enums.py +0 -0
  441. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/mcp_registries.py +0 -0
  442. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/openai_types.py +0 -0
  443. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/unified_model_type.py +0 -0
  444. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/__init__.py +0 -0
  445. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/async_func.py +0 -0
  446. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/chunker/__init__.py +0 -0
  447. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/chunker/base.py +0 -0
  448. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/chunker/code_chunker.py +0 -0
  449. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/chunker/uio_chunker.py +0 -0
  450. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/commons.py +0 -0
  451. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/constants.py +0 -0
  452. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/deduplication.py +0 -0
  453. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/filename.py +0 -0
  454. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/langfuse.py +0 -0
  455. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/mcp.py +0 -0
  456. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/mcp_client.py +0 -0
  457. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/message_summarizer.py +0 -0
  458. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/response_format.py +0 -0
  459. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/token_counting.py +0 -0
  460. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/tool_result.py +0 -0
  461. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/__init__.py +0 -0
  462. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/base.py +0 -0
  463. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/math_verifier.py +0 -0
  464. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/models.py +0 -0
  465. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/physics_verifier.py +0 -0
  466. {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/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.73a0
3
+ Version: 0.2.73a1
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
@@ -128,7 +128,7 @@ Requires-Dist: sympy<2,>=1.13.3; extra == 'all'
128
128
  Requires-Dist: tabulate>=0.9.0; extra == 'all'
129
129
  Requires-Dist: tavily-python<0.6,>=0.5.0; extra == 'all'
130
130
  Requires-Dist: textblob<0.18,>=0.17.1; extra == 'all'
131
- Requires-Dist: traceroot==0.0.4a4; extra == 'all'
131
+ Requires-Dist: traceroot==0.0.4a5; extra == 'all'
132
132
  Requires-Dist: transformers<5,>=4; extra == 'all'
133
133
  Requires-Dist: tree-sitter-python<0.24,>=0.23.6; extra == 'all'
134
134
  Requires-Dist: tree-sitter<0.24,>=0.23.2; extra == 'all'
@@ -193,7 +193,7 @@ Requires-Dist: ipykernel<7,>=6.0.0; extra == 'dev-tools'
193
193
  Requires-Dist: jupyter-client<9,>=8.6.2; extra == 'dev-tools'
194
194
  Requires-Dist: langfuse>=2.60.5; extra == 'dev-tools'
195
195
  Requires-Dist: mcp>=1.3.0; extra == 'dev-tools'
196
- Requires-Dist: traceroot==0.0.4a4; extra == 'dev-tools'
196
+ Requires-Dist: traceroot==0.0.4a5; extra == 'dev-tools'
197
197
  Requires-Dist: tree-sitter-python<0.24,>=0.23.6; extra == 'dev-tools'
198
198
  Requires-Dist: tree-sitter<0.24,>=0.23.2; extra == 'dev-tools'
199
199
  Requires-Dist: typer>=0.15.2; 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.73a0'
17
+ __version__ = '0.2.73a1'
18
18
 
19
19
  __all__ = [
20
20
  '__version__',
@@ -88,6 +88,7 @@ from .message_agent_toolkit import AgentCommunicationToolkit
88
88
  from .web_deploy_toolkit import WebDeployToolkit
89
89
  from .screenshot_toolkit import ScreenshotToolkit
90
90
  from .message_integration import ToolkitMessageIntegration
91
+ from .notion_mcp_toolkit import NotionMCPToolkit
91
92
 
92
93
  __all__ = [
93
94
  'BaseToolkit',
@@ -165,4 +166,5 @@ __all__ = [
165
166
  'ScreenshotToolkit',
166
167
  'RegisteredAgentToolkit',
167
168
  'ToolkitMessageIntegration',
169
+ 'NotionMCPToolkit',
168
170
  ]
@@ -518,7 +518,7 @@ class HybridBrowserToolkit(BaseToolkit, RegisteredAgentToolkit):
518
518
 
519
519
  Returns:
520
520
  str: A confirmation message indicating the screenshot was
521
- captured, the file path where it was saved, and optionally the
521
+ captured, the file path where it was saved, and optionally the
522
522
  agent's analysis if `read_image` is `True`.
523
523
  """
524
524
  import base64
@@ -50,20 +50,28 @@ export class HybridBrowserSession {
50
50
  // Handle existing pages
51
51
  const pages = this.context.pages();
52
52
  if (pages.length > 0) {
53
- // Map existing pages
53
+ // Map existing pages - for CDP, only use pages with about:blank URL
54
+ let availablePageFound = false;
54
55
  for (const page of pages) {
55
- const tabId = this.generateTabId();
56
- this.pages.set(tabId, page);
57
- if (!this.currentTabId) {
58
- this.currentTabId = tabId;
56
+ const pageUrl = page.url();
57
+ // In CDP mode, only consider pages with about:blank as available
58
+ if (pageUrl === 'about:blank') {
59
+ const tabId = this.generateTabId();
60
+ this.pages.set(tabId, page);
61
+ if (!this.currentTabId) {
62
+ this.currentTabId = tabId;
63
+ availablePageFound = true;
64
+ }
59
65
  }
60
66
  }
67
+
68
+ // If no available blank pages found in CDP mode, we cannot create new ones
69
+ if (!availablePageFound) {
70
+ throw new Error('No available blank tabs found in CDP mode. The frontend should have pre-created blank tabs.');
71
+ }
61
72
  } else {
62
- // Create initial page if none exist
63
- const initialPage = await this.context.newPage();
64
- const initialTabId = this.generateTabId();
65
- this.pages.set(initialTabId, initialPage);
66
- this.currentTabId = initialTabId;
73
+ // In CDP mode, newPage is not supported
74
+ throw new Error('No pages available in CDP mode and newPage() is not supported. Ensure the frontend has pre-created blank tabs.');
67
75
  }
68
76
  } else {
69
77
  // Original launch logic
@@ -626,18 +634,39 @@ export class HybridBrowserSession {
626
634
  throw new Error('Browser context not initialized');
627
635
  }
628
636
 
629
-
630
637
  const navigationStart = Date.now();
631
638
 
632
- // Create a new page (tab)
633
- const newPage = await this.context.newPage();
639
+ // In CDP mode, find an available blank tab instead of creating new page
640
+ let newPage: Page | null = null;
641
+ let newTabId: string | null = null;
634
642
 
635
- // Generate tab ID for the new page
636
- const newTabId = this.generateTabId();
637
- this.pages.set(newTabId, newPage);
643
+ const browserConfig = this.configLoader.getBrowserConfig();
644
+ if (browserConfig.connectOverCdp) {
645
+ // CDP mode: find an available blank tab
646
+ const allPages = this.context.pages();
647
+ for (const page of allPages) {
648
+ const pageUrl = page.url();
649
+ // Check if this page is not already tracked and is blank
650
+ const isTracked = Array.from(this.pages.values()).includes(page);
651
+ if (!isTracked && pageUrl === 'about:blank') {
652
+ newPage = page;
653
+ newTabId = this.generateTabId();
654
+ this.pages.set(newTabId, newPage);
655
+ break;
656
+ }
657
+ }
658
+
659
+ if (!newPage || !newTabId) {
660
+ throw new Error('No available blank tabs in CDP mode. Frontend should create more blank tabs when half are used.');
661
+ }
662
+ } else {
663
+ // Non-CDP mode: create new page as usual
664
+ newPage = await this.context.newPage();
665
+ newTabId = this.generateTabId();
666
+ this.pages.set(newTabId, newPage);
667
+ }
638
668
 
639
669
  // Set up page properties
640
- const browserConfig = this.configLoader.getBrowserConfig();
641
670
  newPage.setDefaultNavigationTimeout(browserConfig.navigationTimeout);
642
671
  newPage.setDefaultTimeout(browserConfig.navigationTimeout);
643
672
 
@@ -0,0 +1,234 @@
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
+ from typing import Any, ClassVar, Dict, List, Optional, Set
16
+
17
+ from camel.toolkits import BaseToolkit, FunctionTool
18
+
19
+ from .mcp_toolkit import MCPToolkit
20
+
21
+
22
+ class NotionMCPToolkit(BaseToolkit):
23
+ r"""NotionMCPToolkit provides an interface for interacting with Notion
24
+ through the Model Context Protocol (MCP).
25
+
26
+ Attributes:
27
+ timeout (Optional[float]): Connection timeout in seconds.
28
+ (default: :obj:`None`)
29
+
30
+ Note:
31
+ Currently only supports asynchronous operation mode.
32
+ """
33
+
34
+ # TODO: Create unified method to validate and fix the schema
35
+ SCHEMA_KEYWORDS: ClassVar[Set[str]] = {
36
+ "type",
37
+ "properties",
38
+ "items",
39
+ "required",
40
+ "additionalProperties",
41
+ "description",
42
+ "title",
43
+ "default",
44
+ "enum",
45
+ "const",
46
+ "examples",
47
+ "$ref",
48
+ "$defs",
49
+ "definitions",
50
+ "allOf",
51
+ "oneOf",
52
+ "anyOf",
53
+ "not",
54
+ "if",
55
+ "then",
56
+ "else",
57
+ "format",
58
+ "pattern",
59
+ "minimum",
60
+ "maximum",
61
+ "minLength",
62
+ "maxLength",
63
+ "minItems",
64
+ "maxItems",
65
+ "uniqueItems",
66
+ }
67
+
68
+ def __init__(
69
+ self,
70
+ timeout: Optional[float] = None,
71
+ ) -> None:
72
+ r"""Initializes the NotionMCPToolkit.
73
+
74
+ Args:
75
+ timeout (Optional[float]): Connection timeout in seconds.
76
+ (default: :obj:`None`)
77
+ """
78
+ super().__init__(timeout=timeout)
79
+
80
+ self._mcp_toolkit = MCPToolkit(
81
+ config_dict={
82
+ "mcpServers": {
83
+ "notionMCP": {
84
+ "command": "npx",
85
+ "args": [
86
+ "-y",
87
+ "mcp-remote",
88
+ "https://mcp.notion.com/mcp",
89
+ ],
90
+ }
91
+ }
92
+ },
93
+ timeout=timeout,
94
+ )
95
+
96
+ async def connect(self):
97
+ r"""Explicitly connect to the Notion MCP server."""
98
+ await self._mcp_toolkit.connect()
99
+
100
+ async def disconnect(self):
101
+ r"""Explicitly disconnect from the Notion MCP server."""
102
+ await self._mcp_toolkit.disconnect()
103
+
104
+ def get_tools(self) -> List[FunctionTool]:
105
+ r"""Returns a list of tools provided by the NotionMCPToolkit.
106
+
107
+ Returns:
108
+ List[FunctionTool]: List of available tools.
109
+ """
110
+ all_tools = []
111
+ for client in self._mcp_toolkit.clients:
112
+ try:
113
+ original_build_schema = client._build_tool_schema
114
+
115
+ def create_wrapper(orig_func):
116
+ def wrapper(mcp_tool):
117
+ return self._build_notion_tool_schema(
118
+ mcp_tool, orig_func
119
+ )
120
+
121
+ return wrapper
122
+
123
+ client._build_tool_schema = create_wrapper( # type: ignore[method-assign]
124
+ original_build_schema
125
+ )
126
+
127
+ client_tools = client.get_tools()
128
+ all_tools.extend(client_tools)
129
+
130
+ client._build_tool_schema = original_build_schema # type: ignore[method-assign]
131
+
132
+ except Exception as e:
133
+ from camel.logger import get_logger
134
+
135
+ logger = get_logger(__name__)
136
+ logger.error(f"Failed to get tools from client: {e}")
137
+
138
+ return all_tools
139
+
140
+ def _build_notion_tool_schema(self, mcp_tool, original_build_schema):
141
+ r"""Build tool schema with Notion-specific fixes."""
142
+ schema = original_build_schema(mcp_tool)
143
+ self._fix_notion_schema_recursively(schema)
144
+ return schema
145
+
146
+ def _fix_notion_schema_recursively(self, obj: Any) -> None:
147
+ r"""Recursively fix Notion MCP schema issues."""
148
+ if isinstance(obj, dict):
149
+ self._fix_dict_schema(obj)
150
+ self._process_nested_structures(obj)
151
+ elif isinstance(obj, list):
152
+ for item in obj:
153
+ self._fix_notion_schema_recursively(item)
154
+
155
+ def _fix_dict_schema(self, obj: Dict[str, Any]) -> None:
156
+ r"""Fix dictionary schema issues."""
157
+ if "properties" in obj and "type" not in obj:
158
+ self._fix_missing_type_with_properties(obj)
159
+ elif obj.get("type") == "object" and "properties" in obj:
160
+ self._fix_object_with_properties(obj)
161
+
162
+ def _fix_missing_type_with_properties(self, obj: Dict[str, Any]) -> None:
163
+ r"""Fix objects with properties but missing type field."""
164
+ properties = obj.get("properties", {})
165
+ if properties and isinstance(properties, dict):
166
+ obj["type"] = "object"
167
+ obj["additionalProperties"] = False
168
+
169
+ required_properties = self._get_required_properties(
170
+ properties, conservative=True
171
+ )
172
+ if required_properties:
173
+ obj["required"] = required_properties
174
+
175
+ def _fix_object_with_properties(self, obj: Dict[str, Any]) -> None:
176
+ r"""Fix objects with type="object" and properties."""
177
+ properties = obj.get("properties", {})
178
+ if properties and isinstance(properties, dict):
179
+ existing_required = obj.get("required", [])
180
+
181
+ for prop_name, prop_schema in properties.items():
182
+ if (
183
+ prop_name not in existing_required
184
+ and prop_name not in self.SCHEMA_KEYWORDS
185
+ and self._is_property_required(prop_schema)
186
+ ):
187
+ existing_required.append(prop_name)
188
+
189
+ if existing_required:
190
+ obj["required"] = existing_required
191
+
192
+ if "additionalProperties" not in obj:
193
+ obj["additionalProperties"] = False
194
+
195
+ def _get_required_properties(
196
+ self, properties: Dict[str, Any], conservative: bool = False
197
+ ) -> List[str]:
198
+ r"""Get list of required properties from a properties dict."""
199
+ required = []
200
+ for prop_name, prop_schema in properties.items():
201
+ if (
202
+ prop_name not in self.SCHEMA_KEYWORDS
203
+ and isinstance(prop_schema, dict)
204
+ and self._is_property_required(prop_schema)
205
+ ):
206
+ required.append(prop_name)
207
+ return required
208
+
209
+ def _is_property_required(self, prop_schema: Dict[str, Any]) -> bool:
210
+ r"""Check if a property should be marked as required."""
211
+ prop_type = prop_schema.get("type")
212
+ return (
213
+ prop_type is not None
214
+ and prop_type != "null"
215
+ and "default" not in prop_schema
216
+ and not (isinstance(prop_type, list) and "null" in prop_type)
217
+ )
218
+
219
+ def _process_nested_structures(self, obj: Dict[str, Any]) -> None:
220
+ r"""Process all nested structures in a schema object."""
221
+ for key, value in obj.items():
222
+ if key in ["anyOf", "oneOf", "allOf"] and isinstance(value, list):
223
+ for item in value:
224
+ self._fix_notion_schema_recursively(item)
225
+ elif key == "items" and isinstance(value, dict):
226
+ self._fix_notion_schema_recursively(value)
227
+ elif key == "properties" and isinstance(value, dict):
228
+ for prop_value in value.values():
229
+ self._fix_notion_schema_recursively(prop_value)
230
+ elif key == "$defs" and isinstance(value, dict):
231
+ for def_value in value.values():
232
+ self._fix_notion_schema_recursively(def_value)
233
+ elif isinstance(value, (dict, list)):
234
+ self._fix_notion_schema_recursively(value)
@@ -0,0 +1,293 @@
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
+ Hatch build hook for building TypeScript dependencies in
16
+ hybrid_browser_toolkit.
17
+
18
+ This script runs during package building to compile TypeScript code.
19
+ It gracefully handles cases where Node.js/npm is not available.
20
+ """
21
+
22
+ import json
23
+ import re
24
+ import subprocess
25
+ from pathlib import Path
26
+ from typing import Optional, Tuple
27
+
28
+ from hatchling.builders.hooks.plugin.interface import BuildHookInterface
29
+
30
+
31
+ class NpmBuildHook(BuildHookInterface):
32
+ r"""Hatch build hook for TypeScript compilation."""
33
+
34
+ PLUGIN_NAME = "npm-build"
35
+
36
+ def initialize(self, version, build_data):
37
+ r"""Initialize the build hook and run npm build."""
38
+ self.build_npm_dependencies()
39
+
40
+ def finalize(self, version, build_data, artifact_path):
41
+ r"""Finalize the build - ensure TypeScript was built."""
42
+ base_dir = Path(self.root)
43
+ ts_dir = self._get_ts_directory(base_dir)
44
+ dist_dir = ts_dir / "dist"
45
+
46
+ if dist_dir.exists():
47
+ print(f"TypeScript build artifacts found at: {dist_dir}")
48
+ else:
49
+ print("Warning: TypeScript build artifacts not found")
50
+
51
+ def _get_ts_directory(self, base_dir: Path) -> Path:
52
+ r"""Get the TypeScript directory path."""
53
+ return (
54
+ base_dir / "camel" / "toolkits" / "hybrid_browser_toolkit" / "ts"
55
+ )
56
+
57
+ def _parse_version(self, version_str: str) -> Tuple[int, int, int]:
58
+ r"""Parse version string into major, minor, patch numbers."""
59
+ version_str = version_str.strip().lstrip('v')
60
+ match = re.match(r'(\d+)\.(\d+)\.(\d+)', version_str)
61
+ if match:
62
+ return tuple(map(int, match.groups()))
63
+ return (0, 0, 0)
64
+
65
+ def _check_version_requirement(self, current: str, required: str) -> bool:
66
+ r"""Check if current version meets requirement."""
67
+ if required.startswith('>='):
68
+ required_version = self._parse_version(required[2:])
69
+ current_version = self._parse_version(current)
70
+ return current_version >= required_version
71
+ elif required.startswith('^'):
72
+ required_version = self._parse_version(required[1:])
73
+ current_version = self._parse_version(current)
74
+ return (
75
+ current_version[0] == required_version[0]
76
+ and current_version >= required_version
77
+ )
78
+ return True
79
+
80
+ def _get_package_requirements(self, ts_dir: Path) -> Optional[dict]:
81
+ r"""Get Node.js/npm version requirements from package.json or
82
+ package-lock.json.
83
+ """
84
+ package_json = ts_dir / "package.json"
85
+ package_lock = ts_dir / "package-lock.json"
86
+
87
+ try:
88
+ if package_json.exists():
89
+ with open(package_json, 'r') as f:
90
+ data = json.load(f)
91
+ if 'engines' in data:
92
+ return data['engines']
93
+
94
+ if package_lock.exists():
95
+ with open(package_lock, 'r') as f:
96
+ data = json.load(f)
97
+ for pkg_name, pkg_data in data.get('packages', {}).items():
98
+ if not pkg_name and 'engines' in pkg_data:
99
+ return pkg_data['engines']
100
+
101
+ except (json.JSONDecodeError, IOError) as e:
102
+ print(f"Warning: Could not read package requirements: {e}")
103
+
104
+ return None
105
+
106
+ def _check_node_npm_versions(
107
+ self, ts_dir: Path
108
+ ) -> Tuple[Optional[str], Optional[str], bool]:
109
+ r"""Check Node.js and npm versions against requirements."""
110
+ node_version = None
111
+ npm_version = None
112
+ versions_ok = True
113
+
114
+ try:
115
+ result = subprocess.run(
116
+ ["node", "--version"],
117
+ check=True,
118
+ capture_output=True,
119
+ text=True,
120
+ timeout=30,
121
+ )
122
+ node_version = result.stdout.strip()
123
+ print(f"Found Node.js version: {node_version}")
124
+ except (FileNotFoundError, subprocess.CalledProcessError):
125
+ print("Warning: Node.js not found in PATH")
126
+ return None, None, False
127
+
128
+ try:
129
+ result = subprocess.run(
130
+ ["npm", "--version"],
131
+ check=True,
132
+ capture_output=True,
133
+ text=True,
134
+ timeout=30,
135
+ )
136
+ npm_version = result.stdout.strip()
137
+ print(f"Found npm version: {npm_version}")
138
+ except (FileNotFoundError, subprocess.CalledProcessError):
139
+ print("Warning: npm not found in PATH")
140
+ return node_version, None, False
141
+
142
+ requirements = self._get_package_requirements(ts_dir)
143
+ if requirements:
144
+ if 'node' in requirements:
145
+ node_req = requirements['node']
146
+ if not self._check_version_requirement(node_version, node_req):
147
+ print(
148
+ f"Warning: Node.js version {node_version} "
149
+ f"does not meet requirement {node_req}"
150
+ )
151
+ versions_ok = False
152
+ else:
153
+ print(
154
+ f"✓ Node.js version {node_version} meets "
155
+ f"requirement {node_req}"
156
+ )
157
+
158
+ if 'npm' in requirements:
159
+ npm_req = requirements['npm']
160
+ if not self._check_version_requirement(npm_version, npm_req):
161
+ print(
162
+ f"Warning: npm version {npm_version} does not "
163
+ f"meet requirement {npm_req}"
164
+ )
165
+ versions_ok = False
166
+ else:
167
+ print(
168
+ f"✓ npm version {npm_version} meets "
169
+ f"requirement {npm_req}"
170
+ )
171
+
172
+ return node_version, npm_version, versions_ok
173
+
174
+ def _run_npm_build_process(self, ts_dir: Path, dist_dir: Path) -> bool:
175
+ r"""Run the npm build process."""
176
+ try:
177
+ print("Installing npm dependencies...")
178
+ subprocess.run(
179
+ ["npm", "install"],
180
+ cwd=ts_dir,
181
+ check=True,
182
+ text=True,
183
+ timeout=300,
184
+ )
185
+
186
+ print("Building TypeScript...")
187
+ subprocess.run(
188
+ ["npm", "run", "build"],
189
+ cwd=ts_dir,
190
+ check=True,
191
+ text=True,
192
+ timeout=300,
193
+ )
194
+
195
+ print("Installing Playwright browsers...")
196
+ try:
197
+ subprocess.run(
198
+ ["npx", "playwright", "install"],
199
+ cwd=ts_dir,
200
+ check=True,
201
+ text=True,
202
+ timeout=600,
203
+ )
204
+ print("Playwright browsers installed successfully")
205
+ except subprocess.CalledProcessError as e:
206
+ print(f"Warning: Playwright browser installation failed: {e}")
207
+ print(
208
+ "Users will need to run 'npx playwright install' manually"
209
+ )
210
+ print(" npx playwright install")
211
+
212
+ index_js = dist_dir / "index.js"
213
+ if index_js.exists():
214
+ print("TypeScript build completed successfully")
215
+ return True
216
+ else:
217
+ print(
218
+ "Warning: TypeScript build may have failed (index.js "
219
+ "not found)"
220
+ )
221
+ return False
222
+
223
+ except subprocess.CalledProcessError as e:
224
+ print(f"Warning: TypeScript build failed with error: {e}")
225
+ print("Installing without TypeScript support")
226
+ print("This may affect hybrid_browser_toolkit functionality")
227
+ return False
228
+
229
+ except Exception as e:
230
+ print(f"Warning: Unexpected error during TypeScript build: {e}")
231
+ print("Installing without TypeScript support")
232
+ return False
233
+
234
+ def _print_manual_instructions(self, ts_dir: Path):
235
+ r"""Print manual installation instructions."""
236
+ print("Installing without TypeScript support")
237
+ print("To use hybrid_browser_toolkit, please install Node.js and run:")
238
+ print(f" cd {ts_dir}")
239
+ print(" npm install && npm run build")
240
+ print(" npx playwright install")
241
+
242
+ def build_npm_dependencies(self):
243
+ r"""Build TypeScript dependencies during wheel/sdist creation."""
244
+ base_dir = Path(self.root)
245
+ ts_dir = self._get_ts_directory(base_dir)
246
+
247
+ print(f"Checking TypeScript directory: {ts_dir}")
248
+
249
+ if not ts_dir.exists():
250
+ print("TypeScript directory not found, skipping npm build")
251
+ return
252
+
253
+ dist_dir = ts_dir / "dist"
254
+ if dist_dir.exists() and any(dist_dir.iterdir()):
255
+ print(
256
+ "TypeScript already built (dist directory exists), "
257
+ "skipping build"
258
+ )
259
+ return
260
+
261
+ node_version, npm_version, versions_ok = self._check_node_npm_versions(
262
+ ts_dir
263
+ )
264
+
265
+ if node_version is None or npm_version is None:
266
+ print("Warning: npm or node not found in PATH")
267
+ self._print_manual_instructions(ts_dir)
268
+ return
269
+
270
+ if not versions_ok:
271
+ print("Warning: Node.js/npm version requirements not met")
272
+ print("Continuing anyway, but build may fail")
273
+
274
+ self._run_npm_build_process(ts_dir, dist_dir)
275
+
276
+
277
+ def build_npm_dependencies_standalone():
278
+ r"""Standalone function for testing purposes."""
279
+ hook = NpmBuildHook(None, None)
280
+ hook.root = Path(__file__).parent.absolute()
281
+ hook.build_npm_dependencies()
282
+
283
+
284
+ if __name__ == "__main__":
285
+ print("=" * 60)
286
+ print("Running Hatch build hook for TypeScript dependencies")
287
+ print("=" * 60)
288
+
289
+ build_npm_dependencies_standalone()
290
+
291
+ print("=" * 60)
292
+ print("Build hook completed")
293
+ print("=" * 60)