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.
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/PKG-INFO +3 -3
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/__init__.py +1 -1
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/__init__.py +2 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +1 -1
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +46 -17
- camel_ai-0.2.73a1/camel/toolkits/notion_mcp_toolkit.py +234 -0
- camel_ai-0.2.73a1/hatch_build_npm.py +293 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/pyproject.toml +3 -3
- camel_ai-0.2.73a0/hatch_build_npm.py +0 -213
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/.gitignore +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/LICENSE +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/README.md +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/_types.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/_utils.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/chat_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/critic_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/deductive_reasoner_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/embodied_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/knowledge_graph_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/mcp_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/multi_hop_generator_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/programmed_agent_instruction.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/repo_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/role_assignment_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/search_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/task_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/tool_agents/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/tool_agents/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/apibank.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/apibench.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/browsecomp.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/gaia.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/README.md +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/mock_web.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/requirements.txt +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/mock_website/task.json +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/nexus.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/benchmarks/ragbench.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/discord/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/discord/discord_app.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/discord/discord_installation.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/discord/discord_store.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/slack/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/slack/models.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/slack/slack_app.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/bots/telegram_bot.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/aiml_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/anthropic_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/base_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/bedrock_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/cohere_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/crynux_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/deepseek_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/gemini_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/groq_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/internlm_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/litellm_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/lmstudio_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/mistral_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/modelscope_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/moonshot_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/netmind_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/novita_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/nvidia_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/ollama_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/openai_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/openrouter_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/ppio_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/qianfan_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/qwen_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/reka_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/samba_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/sglang_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/siliconflow_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/togetherai_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/vllm_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/watsonx_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/yi_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/configs/zhipuai_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/data_collectors/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/data_collectors/alpaca_collector.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/data_collectors/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/data_collectors/sharegpt_collector.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/cot_datagen.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/evol_instruct/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/evol_instruct/scorer.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/evol_instruct/templates.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_improving_cot.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/filter/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/self_instruct.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/self_instruct/templates.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/source2synth/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/source2synth/data_processor.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/source2synth/models.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datahubs/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datahubs/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datahubs/huggingface.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datahubs/models.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/base_generator.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/few_shot_generator.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/models.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/self_instruct_generator.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/datasets/static_dataset.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/azure_embedding.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/gemini_embedding.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/jina_embedding.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/mistral_embedding.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/openai_compatible_embedding.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/openai_embedding.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/together_embedding.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/embeddings/vlm_embedding.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/models.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/multi_step.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/rlcards_env.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/single_step.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/environments/tic_tac_toe.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/extractors/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/extractors/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/extractors/python_strategies.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/generators.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/human.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/docker/Dockerfile +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/docker_interpreter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/e2b_interpreter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/internal_python_interpreter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/interpreter_error.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/ipython_interpreter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/interpreters/subprocess_interpreter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/apify_reader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/base_io.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/base_loader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/chunkr_reader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/crawl4ai_reader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/firecrawl_reader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/jina_url_reader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/markitdown.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/mineru_extractor.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/mistral_reader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/pandas_reader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/scrapegraph_reader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/loaders/unstructured_io.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/logger.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/agent_memories.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/blocks/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/blocks/chat_history_block.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/blocks/vectordb_block.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/context_creators/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/context_creators/score_based.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/memories/records.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/alpaca.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/conversation_models.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/sharegpt/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/messages/func_message.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/_utils.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/aiml_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/anthropic_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/aws_bedrock_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/azure_openai_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/base_audio_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/base_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/cohere_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/crynux_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/deepseek_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/fish_audio_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/gemini_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/groq_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/internlm_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/litellm_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/lmstudio_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/mistral_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/model_factory.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/model_manager.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/modelscope_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/moonshot_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/nemotron_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/netmind_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/novita_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/nvidia_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/ollama_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/openai_audio_models.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/openai_compatible_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/openai_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/openrouter_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/ppio_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/qianfan_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/qwen_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reka_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/base_reward_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/evaluator.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/nemotron_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/reward/skywork_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/samba_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/sglang_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/siliconflow_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/stub_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/togetherai_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/vllm_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/volcano_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/watsonx_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/yi_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/models/zhipuai_model.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/personas/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/personas/persona.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/personas/persona_hub.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/ai_society.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/code.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/evaluation.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/generate_text_embedding_data.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/image_craft.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/misalignment.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/multi_condition_image_craft.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/object_recognition.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/persona_hub.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/prompt_templates.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/role_description_prompt_template.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/solution_extraction.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/task_prompt_template.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/translation.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/prompts/video_description_prompt.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/py.typed +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/responses/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/responses/agent_responses.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/auto_retriever.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/bm25_retriever.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/cohere_rerank_retriever.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/hybrid_retrival.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/retrievers/vector_retriever.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/api.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/configs.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/daytona_runtime.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/docker_runtime.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/llm_guard_runtime.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/remote_http_runtime.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/utils/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/schemas/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/schemas/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/schemas/openai_converter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/schemas/outlines_converter.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/services/agent_openapi_server.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/babyagi_playing.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/role_playing.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/prompts.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/role_playing_worker.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/single_agent_worker.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/structured_output_handler.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/task_channel.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/utils.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/worker.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/workforce.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/societies/workforce/workforce_logger.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/graph_element.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/nebula_graph.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/graph_storages/neo4j_graph.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/in_memory.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/json.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/key_value_storages/redis.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/amazon_s3.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/azure_blob.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/object_storages/google_cloud.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/chroma.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/faiss.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/milvus.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/oceanbase.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/pgvector.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/qdrant.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/surreal.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/tidb.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/storages/vectordb_storages/weaviate.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/tasks/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/tasks/task.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/tasks/task_prompt.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/terminators/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/terminators/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/terminators/response_terminator.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/terminators/token_limit_terminator.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/aci_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/arxiv_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/ask_news_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/async_browser_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/audio_analysis_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/bohrium_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/browser_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/browser_toolkit_commons.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/code_execution.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/craw4ai_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/dappier_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/data_commons_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/excel_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/file_write_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/function_tool.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/github_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/google_calendar_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/google_maps_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/google_scholar_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/human_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/config_loader.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/package.json +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/image_analysis_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/jina_reranker_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/klavis_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/linkedin_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/markitdown_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/math_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/memory_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/meshy_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/message_agent_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/message_integration.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/mineru_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/networkx_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/note_taking_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/notion_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/security_config.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/open_api_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/openai_agent_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/openai_image_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/openbb_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/origene_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/page_script.js +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/pptx_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/pubmed_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/pyautogui_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/reddit_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/retrieval_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/screenshot_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/search_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/searxng_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/slack_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/stripe_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/sympy_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/task_planning_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/terminal_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/thinking_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/twitter_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/video_analysis_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/video_download_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/weather_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/web_deploy_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/whatsapp_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/toolkits/zapier_toolkit.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/agents/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/agents/tool_calling_record.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/enums.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/mcp_registries.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/openai_types.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/types/unified_model_type.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/async_func.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/chunker/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/chunker/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/chunker/code_chunker.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/chunker/uio_chunker.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/commons.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/constants.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/deduplication.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/filename.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/langfuse.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/mcp.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/mcp_client.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/message_summarizer.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/response_format.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/token_counting.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/utils/tool_result.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/__init__.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/base.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/math_verifier.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/models.py +0 -0
- {camel_ai-0.2.73a0 → camel_ai-0.2.73a1}/camel/verifiers/physics_verifier.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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'
|
|
@@ -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
|
|
56
|
-
|
|
57
|
-
if (
|
|
58
|
-
|
|
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
|
-
//
|
|
63
|
-
|
|
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
|
-
//
|
|
633
|
-
|
|
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
|
-
|
|
636
|
-
|
|
637
|
-
|
|
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)
|