camel-ai 0.2.73a6__tar.gz → 0.2.73a8__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.73a6 → camel_ai-0.2.73a8}/PKG-INFO +1 -1
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/__init__.py +1 -1
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/__init__.py +2 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/mcp_toolkit.py +341 -46
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/terminal_toolkit.py +201 -20
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/pyproject.toml +1 -1
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/.gitignore +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/LICENSE +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/README.md +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/_types.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/_utils.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/chat_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/critic_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/deductive_reasoner_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/embodied_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/knowledge_graph_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/mcp_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/multi_hop_generator_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/programmed_agent_instruction.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/repo_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/role_assignment_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/search_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/task_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/tool_agents/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/tool_agents/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/apibank.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/apibench.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/browsecomp.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/gaia.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/mock_website/README.md +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/mock_website/mock_web.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/mock_website/requirements.txt +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/mock_website/task.json +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/nexus.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/benchmarks/ragbench.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/discord/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/discord/discord_app.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/discord/discord_installation.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/discord/discord_store.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/slack/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/slack/models.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/slack/slack_app.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/bots/telegram_bot.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/aiml_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/anthropic_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/base_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/bedrock_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/cohere_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/crynux_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/deepseek_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/gemini_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/groq_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/internlm_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/litellm_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/lmstudio_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/mistral_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/modelscope_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/moonshot_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/netmind_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/novita_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/nvidia_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/ollama_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/openai_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/openrouter_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/ppio_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/qianfan_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/qwen_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/reka_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/samba_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/sglang_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/siliconflow_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/togetherai_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/vllm_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/watsonx_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/yi_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/configs/zhipuai_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/data_collectors/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/data_collectors/alpaca_collector.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/data_collectors/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/data_collectors/sharegpt_collector.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/cot_datagen.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/evol_instruct/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/evol_instruct/scorer.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/evol_instruct/templates.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/self_improving_cot.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/self_instruct/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/self_instruct/filter/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/self_instruct/self_instruct.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/self_instruct/templates.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/source2synth/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/source2synth/data_processor.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/source2synth/models.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datahubs/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datahubs/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datahubs/huggingface.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datahubs/models.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datasets/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datasets/base_generator.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datasets/few_shot_generator.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datasets/models.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datasets/self_instruct_generator.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/datasets/static_dataset.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/azure_embedding.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/gemini_embedding.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/jina_embedding.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/mistral_embedding.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/openai_compatible_embedding.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/openai_embedding.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/together_embedding.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/embeddings/vlm_embedding.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/environments/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/environments/models.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/environments/multi_step.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/environments/rlcards_env.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/environments/single_step.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/environments/tic_tac_toe.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/extractors/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/extractors/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/extractors/python_strategies.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/generators.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/human.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/docker/Dockerfile +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/docker_interpreter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/e2b_interpreter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/internal_python_interpreter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/interpreter_error.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/ipython_interpreter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/interpreters/subprocess_interpreter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/apify_reader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/base_io.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/base_loader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/chunkr_reader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/crawl4ai_reader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/firecrawl_reader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/jina_url_reader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/markitdown.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/mineru_extractor.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/mistral_reader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/pandas_reader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/scrapegraph_reader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/loaders/unstructured_io.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/logger.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/agent_memories.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/blocks/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/blocks/chat_history_block.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/blocks/vectordb_block.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/context_creators/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/context_creators/score_based.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/memories/records.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/conversion/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/conversion/alpaca.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/conversion/conversation_models.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/conversion/sharegpt/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/messages/func_message.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/_utils.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/aiml_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/anthropic_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/aws_bedrock_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/azure_openai_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/base_audio_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/base_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/cohere_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/crynux_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/deepseek_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/fish_audio_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/gemini_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/groq_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/internlm_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/litellm_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/lmstudio_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/mistral_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/model_factory.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/model_manager.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/modelscope_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/moonshot_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/nemotron_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/netmind_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/novita_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/nvidia_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/ollama_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/openai_audio_models.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/openai_compatible_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/openai_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/openrouter_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/ppio_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/qianfan_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/qwen_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/reka_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/reward/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/reward/base_reward_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/reward/evaluator.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/reward/nemotron_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/reward/skywork_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/samba_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/sglang_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/siliconflow_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/stub_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/togetherai_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/vllm_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/volcano_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/watsonx_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/yi_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/models/zhipuai_model.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/personas/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/personas/persona.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/personas/persona_hub.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/ai_society.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/code.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/evaluation.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/generate_text_embedding_data.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/image_craft.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/misalignment.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/multi_condition_image_craft.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/object_recognition.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/persona_hub.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/prompt_templates.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/role_description_prompt_template.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/solution_extraction.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/task_prompt_template.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/translation.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/prompts/video_description_prompt.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/py.typed +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/responses/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/responses/agent_responses.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/retrievers/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/retrievers/auto_retriever.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/retrievers/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/retrievers/bm25_retriever.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/retrievers/cohere_rerank_retriever.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/retrievers/hybrid_retrival.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/retrievers/vector_retriever.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/api.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/configs.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/daytona_runtime.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/docker_runtime.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/llm_guard_runtime.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/remote_http_runtime.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/utils/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/schemas/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/schemas/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/schemas/openai_converter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/schemas/outlines_converter.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/services/agent_openapi_server.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/babyagi_playing.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/role_playing.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/prompts.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/role_playing_worker.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/single_agent_worker.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/structured_output_handler.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/task_channel.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/utils.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/worker.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/workforce.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/societies/workforce/workforce_logger.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/graph_storages/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/graph_storages/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/graph_storages/graph_element.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/graph_storages/nebula_graph.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/graph_storages/neo4j_graph.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/key_value_storages/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/key_value_storages/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/key_value_storages/in_memory.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/key_value_storages/json.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/key_value_storages/redis.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/object_storages/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/object_storages/amazon_s3.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/object_storages/azure_blob.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/object_storages/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/object_storages/google_cloud.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/chroma.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/faiss.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/milvus.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/oceanbase.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/pgvector.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/qdrant.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/surreal.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/tidb.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/storages/vectordb_storages/weaviate.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/tasks/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/tasks/task.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/tasks/task_prompt.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/terminators/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/terminators/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/terminators/response_terminator.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/terminators/token_limit_terminator.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/aci_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/arxiv_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/ask_news_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/async_browser_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/audio_analysis_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/bohrium_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/browser_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/browser_toolkit_commons.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/code_execution.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/craw4ai_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/dappier_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/data_commons_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/excel_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/file_write_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/function_tool.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/github_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/google_calendar_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/google_maps_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/google_scholar_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/human_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/config_loader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/package.json +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/actions.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/agent.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/image_analysis_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/jina_reranker_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/klavis_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/linkedin_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/markitdown_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/math_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/memory_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/meshy_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/message_agent_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/message_integration.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/mineru_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/networkx_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/note_taking_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/notion_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/notion_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/security_config.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/open_api_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/openai_agent_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/openai_image_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/openbb_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/origene_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/page_script.js +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/pptx_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/pubmed_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/pyautogui_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/reddit_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/retrieval_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/screenshot_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/search_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/searxng_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/slack_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/stripe_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/sympy_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/task_planning_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/thinking_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/twitter_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/video_analysis_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/video_download_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/weather_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/web_deploy_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/whatsapp_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/toolkits/zapier_toolkit.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/types/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/types/agents/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/types/agents/tool_calling_record.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/types/enums.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/types/mcp_registries.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/types/openai_types.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/types/unified_model_type.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/async_func.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/chunker/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/chunker/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/chunker/code_chunker.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/chunker/uio_chunker.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/commons.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/constants.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/deduplication.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/filename.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/langfuse.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/mcp.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/mcp_client.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/message_summarizer.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/response_format.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/token_counting.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/utils/tool_result.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/verifiers/__init__.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/verifiers/base.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/verifiers/math_verifier.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/verifiers/models.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/verifiers/physics_verifier.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/camel/verifiers/python_verifier.py +0 -0
- {camel_ai-0.2.73a6 → camel_ai-0.2.73a8}/hatch_build_npm.py +0 -0
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from .babyagi_playing import BabyAGI
|
|
15
15
|
from .role_playing import RolePlaying
|
|
16
|
+
from .workforce import Workforce
|
|
16
17
|
|
|
17
18
|
__all__ = [
|
|
18
19
|
'RolePlaying',
|
|
19
20
|
'BabyAGI',
|
|
21
|
+
'Workforce',
|
|
20
22
|
]
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
16
|
import os
|
|
17
|
+
import warnings
|
|
17
18
|
from contextlib import AsyncExitStack
|
|
18
19
|
from typing import Any, Dict, List, Optional
|
|
19
20
|
|
|
@@ -24,6 +25,11 @@ from camel.utils.mcp_client import MCPClient, create_mcp_client
|
|
|
24
25
|
|
|
25
26
|
logger = get_logger(__name__)
|
|
26
27
|
|
|
28
|
+
# Suppress parameter description warnings for MCP tools
|
|
29
|
+
warnings.filterwarnings(
|
|
30
|
+
"ignore", message="Parameter description is missing", category=UserWarning
|
|
31
|
+
)
|
|
32
|
+
|
|
27
33
|
|
|
28
34
|
class MCPConnectionError(Exception):
|
|
29
35
|
r"""Raised when MCP connection fails."""
|
|
@@ -446,7 +452,7 @@ class MCPToolkit(BaseToolkit):
|
|
|
446
452
|
|
|
447
453
|
def _ensure_strict_tool_schema(self, tool: FunctionTool) -> FunctionTool:
|
|
448
454
|
r"""Ensure a tool has a strict schema compatible with OpenAI's
|
|
449
|
-
requirements.
|
|
455
|
+
requirements according to the structured outputs specification.
|
|
450
456
|
|
|
451
457
|
Args:
|
|
452
458
|
tool (FunctionTool): The tool to check and update if necessary.
|
|
@@ -457,60 +463,333 @@ class MCPToolkit(BaseToolkit):
|
|
|
457
463
|
try:
|
|
458
464
|
schema = tool.get_openai_tool_schema()
|
|
459
465
|
|
|
460
|
-
#
|
|
461
|
-
def
|
|
462
|
-
r"""Recursively
|
|
466
|
+
# Helper functions for validation and transformation
|
|
467
|
+
def _validate_and_fix_schema(obj, path="", in_root=True):
|
|
468
|
+
r"""Recursively validate and fix schema to meet strict
|
|
469
|
+
requirements.
|
|
470
|
+
"""
|
|
463
471
|
if isinstance(obj, dict):
|
|
464
|
-
if
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
if
|
|
468
|
-
|
|
472
|
+
# Check if this is the root object
|
|
473
|
+
if in_root and path == "":
|
|
474
|
+
# Root must be an object, not anyOf
|
|
475
|
+
if "anyOf" in obj and "type" not in obj:
|
|
476
|
+
raise ValueError(
|
|
477
|
+
"Root object must not be anyOf and must "
|
|
478
|
+
"be an object"
|
|
479
|
+
)
|
|
480
|
+
if obj.get("type") and obj["type"] != "object":
|
|
481
|
+
raise ValueError(
|
|
482
|
+
"Root object must have type 'object'"
|
|
483
|
+
)
|
|
484
|
+
|
|
485
|
+
# Handle object types
|
|
486
|
+
if obj.get("type") == "object":
|
|
487
|
+
# Ensure additionalProperties is false
|
|
488
|
+
obj["additionalProperties"] = False
|
|
489
|
+
|
|
490
|
+
# Process properties
|
|
491
|
+
if "properties" in obj:
|
|
492
|
+
props = obj["properties"]
|
|
493
|
+
# Only set required if it doesn't exist or needs
|
|
494
|
+
# updating
|
|
495
|
+
if "required" not in obj:
|
|
496
|
+
# If no required field exists, make all fields
|
|
497
|
+
# required
|
|
498
|
+
obj["required"] = list(props.keys())
|
|
499
|
+
else:
|
|
500
|
+
# Ensure required field only contains valid
|
|
501
|
+
# property names
|
|
502
|
+
existing_required = obj.get("required", [])
|
|
503
|
+
valid_required = [
|
|
504
|
+
req
|
|
505
|
+
for req in existing_required
|
|
506
|
+
if req in props
|
|
507
|
+
]
|
|
508
|
+
# Add any missing properties to required
|
|
509
|
+
for prop_name in props:
|
|
510
|
+
if prop_name not in valid_required:
|
|
511
|
+
valid_required.append(prop_name)
|
|
512
|
+
obj["required"] = valid_required
|
|
513
|
+
|
|
514
|
+
# Recursively process each property
|
|
515
|
+
for prop_name, prop_schema in props.items():
|
|
516
|
+
_validate_and_fix_schema(
|
|
517
|
+
prop_schema, f"{path}.{prop_name}", False
|
|
518
|
+
)
|
|
519
|
+
|
|
520
|
+
# Handle arrays
|
|
521
|
+
elif obj.get("type") == "array":
|
|
522
|
+
if "items" in obj:
|
|
523
|
+
_validate_and_fix_schema(
|
|
524
|
+
obj["items"], f"{path}.items", False
|
|
525
|
+
)
|
|
526
|
+
|
|
527
|
+
# Handle anyOf
|
|
528
|
+
elif "anyOf" in obj:
|
|
529
|
+
# Validate anyOf schemas
|
|
530
|
+
for i, schema in enumerate(obj["anyOf"]):
|
|
531
|
+
_validate_and_fix_schema(
|
|
532
|
+
schema, f"{path}.anyOf[{i}]", False
|
|
533
|
+
)
|
|
534
|
+
|
|
535
|
+
# Handle string format validation
|
|
536
|
+
elif obj.get("type") == "string":
|
|
537
|
+
if "format" in obj:
|
|
538
|
+
allowed_formats = [
|
|
539
|
+
"date-time",
|
|
540
|
+
"time",
|
|
541
|
+
"date",
|
|
542
|
+
"duration",
|
|
543
|
+
"email",
|
|
544
|
+
"hostname",
|
|
545
|
+
"ipv4",
|
|
546
|
+
"ipv6",
|
|
547
|
+
"uuid",
|
|
548
|
+
]
|
|
549
|
+
if obj["format"] not in allowed_formats:
|
|
550
|
+
del obj["format"] # Remove unsupported format
|
|
551
|
+
|
|
552
|
+
# Handle number/integer validation
|
|
553
|
+
elif obj.get("type") in ["number", "integer"]:
|
|
554
|
+
# These properties are supported
|
|
555
|
+
supported_props = [
|
|
556
|
+
"multipleOf",
|
|
557
|
+
"maximum",
|
|
558
|
+
"exclusiveMaximum",
|
|
559
|
+
"minimum",
|
|
560
|
+
"exclusiveMinimum",
|
|
561
|
+
]
|
|
562
|
+
# Remove any unsupported properties
|
|
563
|
+
for key in list(obj.keys()):
|
|
564
|
+
if key not in [
|
|
565
|
+
*supported_props,
|
|
566
|
+
"type",
|
|
567
|
+
"description",
|
|
568
|
+
"default",
|
|
569
|
+
]:
|
|
570
|
+
del obj[key]
|
|
571
|
+
|
|
572
|
+
# Process nested structures
|
|
573
|
+
for key in ["allOf", "oneOf", "$defs", "definitions"]:
|
|
574
|
+
if key in obj:
|
|
575
|
+
if isinstance(obj[key], list):
|
|
576
|
+
for i, item in enumerate(obj[key]):
|
|
577
|
+
_validate_and_fix_schema(
|
|
578
|
+
item, f"{path}.{key}[{i}]", False
|
|
579
|
+
)
|
|
580
|
+
elif isinstance(obj[key], dict):
|
|
581
|
+
for def_name, def_schema in obj[key].items():
|
|
582
|
+
_validate_and_fix_schema(
|
|
583
|
+
def_schema,
|
|
584
|
+
f"{path}.{key}.{def_name}",
|
|
585
|
+
False,
|
|
586
|
+
)
|
|
587
|
+
|
|
469
588
|
elif isinstance(obj, list):
|
|
470
|
-
for item in obj:
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
589
|
+
for i, item in enumerate(obj):
|
|
590
|
+
_validate_and_fix_schema(item, f"{path}[{i}]", False)
|
|
591
|
+
|
|
592
|
+
def _check_schema_limits(obj, counts=None):
|
|
593
|
+
r"""Check if schema exceeds OpenAI limits."""
|
|
594
|
+
if counts is None:
|
|
595
|
+
counts = {
|
|
596
|
+
"properties": 0,
|
|
597
|
+
"depth": 0,
|
|
598
|
+
"enums": 0,
|
|
599
|
+
"string_length": 0,
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
def _count_properties(o, depth=0):
|
|
603
|
+
if isinstance(o, dict):
|
|
604
|
+
if depth > 5:
|
|
605
|
+
raise ValueError(
|
|
606
|
+
"Schema exceeds maximum nesting depth of 5"
|
|
607
|
+
)
|
|
608
|
+
|
|
609
|
+
if o.get("type") == "object" and "properties" in o:
|
|
610
|
+
counts["properties"] += len(o["properties"])
|
|
611
|
+
for prop in o["properties"].values():
|
|
612
|
+
_count_properties(prop, depth + 1)
|
|
613
|
+
|
|
614
|
+
if "enum" in o:
|
|
615
|
+
counts["enums"] += len(o["enum"])
|
|
616
|
+
if isinstance(o["enum"], list):
|
|
617
|
+
for val in o["enum"]:
|
|
618
|
+
if isinstance(val, str):
|
|
619
|
+
counts["string_length"] += len(val)
|
|
620
|
+
|
|
621
|
+
# Count property names
|
|
622
|
+
if "properties" in o:
|
|
623
|
+
for name in o["properties"].keys():
|
|
624
|
+
counts["string_length"] += len(name)
|
|
625
|
+
|
|
626
|
+
# Process nested structures
|
|
627
|
+
for key in ["items", "allOf", "oneOf", "anyOf"]:
|
|
628
|
+
if key in o:
|
|
629
|
+
if isinstance(o[key], dict):
|
|
630
|
+
_count_properties(o[key], depth)
|
|
631
|
+
elif isinstance(o[key], list):
|
|
632
|
+
for item in o[key]:
|
|
633
|
+
_count_properties(item, depth)
|
|
634
|
+
|
|
635
|
+
_count_properties(obj)
|
|
636
|
+
|
|
637
|
+
# Check limits, reference: https://platform.openai.com/docs/guides/structured-outputs?api-mode=responses#objects-have-limitations-on-nesting-depth-and-size # noqa: E501
|
|
638
|
+
if counts["properties"] > 5000:
|
|
639
|
+
raise ValueError(
|
|
640
|
+
"Schema exceeds maximum of 5000 properties"
|
|
641
|
+
)
|
|
642
|
+
if counts["enums"] > 1000:
|
|
643
|
+
raise ValueError(
|
|
644
|
+
"Schema exceeds maximum of 1000 enum values"
|
|
645
|
+
)
|
|
646
|
+
if counts["string_length"] > 120000:
|
|
647
|
+
raise ValueError(
|
|
648
|
+
"Schema exceeds maximum total string length of 120000"
|
|
649
|
+
)
|
|
488
650
|
|
|
489
|
-
|
|
490
|
-
|
|
651
|
+
return True
|
|
652
|
+
|
|
653
|
+
# Check if schema has any issues that prevent strict mode
|
|
654
|
+
def _has_strict_mode_issues(obj):
|
|
655
|
+
r"""Check for any issues that would prevent strict mode."""
|
|
656
|
+
issues = []
|
|
657
|
+
|
|
658
|
+
def _check_issues(o, path=""):
|
|
659
|
+
if isinstance(o, dict):
|
|
660
|
+
# Check for additionalProperties: true
|
|
661
|
+
if o.get("additionalProperties") is True:
|
|
662
|
+
issues.append(
|
|
663
|
+
f"additionalProperties: true at {path}"
|
|
664
|
+
)
|
|
665
|
+
|
|
666
|
+
# Check for unsupported keywords
|
|
667
|
+
unsupported = [
|
|
668
|
+
"not",
|
|
669
|
+
"dependentRequired",
|
|
670
|
+
"dependentSchemas",
|
|
671
|
+
"if",
|
|
672
|
+
"then",
|
|
673
|
+
"else",
|
|
674
|
+
"patternProperties",
|
|
675
|
+
]
|
|
676
|
+
for keyword in unsupported:
|
|
677
|
+
if keyword in o:
|
|
678
|
+
issues.append(
|
|
679
|
+
f"Unsupported keyword '{keyword}' "
|
|
680
|
+
f"at {path}"
|
|
681
|
+
)
|
|
682
|
+
|
|
683
|
+
# Recursively check
|
|
684
|
+
for key, value in o.items():
|
|
685
|
+
if isinstance(value, (dict, list)):
|
|
686
|
+
_check_issues(value, f"{path}.{key}")
|
|
687
|
+
|
|
688
|
+
elif isinstance(o, list):
|
|
689
|
+
for i, item in enumerate(o):
|
|
690
|
+
_check_issues(item, f"{path}[{i}]")
|
|
691
|
+
|
|
692
|
+
_check_issues(obj)
|
|
693
|
+
return issues
|
|
694
|
+
|
|
695
|
+
# Check if already strict and compliant
|
|
491
696
|
if schema.get("function", {}).get("strict") is True:
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
697
|
+
# Validate it's actually compliant
|
|
698
|
+
try:
|
|
699
|
+
params = schema["function"].get("parameters", {})
|
|
700
|
+
if params:
|
|
701
|
+
_validate_and_fix_schema(params)
|
|
702
|
+
_check_schema_limits(params)
|
|
703
|
+
return tool
|
|
704
|
+
except Exception:
|
|
705
|
+
# Not actually compliant, continue to fix it
|
|
706
|
+
pass
|
|
707
|
+
|
|
708
|
+
# Apply sanitization first to handle optional fields properly
|
|
495
709
|
if "function" in schema:
|
|
710
|
+
# Apply the sanitization function first
|
|
711
|
+
from camel.toolkits.function_tool import (
|
|
712
|
+
sanitize_and_enforce_required,
|
|
713
|
+
)
|
|
714
|
+
|
|
715
|
+
schema = sanitize_and_enforce_required(schema)
|
|
716
|
+
|
|
717
|
+
# Special handling for schemas with additionalProperties that
|
|
718
|
+
# aren't false These can't use strict mode
|
|
719
|
+
def _has_open_props(obj, path=""):
|
|
720
|
+
"""Check if any object has additionalProperties that
|
|
721
|
+
isn't false."""
|
|
722
|
+
if isinstance(obj, dict):
|
|
723
|
+
if (
|
|
724
|
+
obj.get("type") == "object"
|
|
725
|
+
and "additionalProperties" in obj
|
|
726
|
+
):
|
|
727
|
+
if obj["additionalProperties"] is not False:
|
|
728
|
+
return True
|
|
729
|
+
|
|
730
|
+
# Recurse through the schema
|
|
731
|
+
for key, value in obj.items():
|
|
732
|
+
if key in [
|
|
733
|
+
"properties",
|
|
734
|
+
"items",
|
|
735
|
+
"allOf",
|
|
736
|
+
"oneOf",
|
|
737
|
+
"anyOf",
|
|
738
|
+
]:
|
|
739
|
+
if isinstance(value, dict):
|
|
740
|
+
if _has_open_props(value, f"{path}.{key}"):
|
|
741
|
+
return True
|
|
742
|
+
elif isinstance(value, list):
|
|
743
|
+
for i, item in enumerate(value):
|
|
744
|
+
if _has_open_props(
|
|
745
|
+
item,
|
|
746
|
+
f"{path}.{key}[{i}]",
|
|
747
|
+
):
|
|
748
|
+
return True
|
|
749
|
+
elif isinstance(value, dict) and key not in [
|
|
750
|
+
"description",
|
|
751
|
+
"type",
|
|
752
|
+
"enum",
|
|
753
|
+
]:
|
|
754
|
+
if _has_open_props(value, f"{path}.{key}"):
|
|
755
|
+
return True
|
|
756
|
+
return False
|
|
757
|
+
|
|
758
|
+
# Check if schema has dynamic additionalProperties
|
|
759
|
+
if _has_open_props(schema["function"].get("parameters", {})):
|
|
760
|
+
# Can't use strict mode with dynamic additionalProperties
|
|
761
|
+
schema["function"]["strict"] = False
|
|
762
|
+
tool.set_openai_tool_schema(schema)
|
|
763
|
+
logger.warning(
|
|
764
|
+
f"Tool '{tool.get_function_name()}' has "
|
|
765
|
+
f"dynamic additionalProperties and cannot use "
|
|
766
|
+
f"strict mode"
|
|
767
|
+
)
|
|
768
|
+
return tool
|
|
769
|
+
|
|
770
|
+
# Now check for blocking issues after sanitization
|
|
771
|
+
issues = _has_strict_mode_issues(schema)
|
|
772
|
+
if issues:
|
|
773
|
+
# Can't use strict mode
|
|
774
|
+
schema["function"]["strict"] = False
|
|
775
|
+
tool.set_openai_tool_schema(schema)
|
|
776
|
+
logger.warning(
|
|
777
|
+
f"Tool '{tool.get_function_name()}' has "
|
|
778
|
+
f"issues preventing strict mode: "
|
|
779
|
+
f"{'; '.join(issues[:3])}{'...' if len(issues) > 3 else ''}" # noqa: E501
|
|
780
|
+
)
|
|
781
|
+
return tool
|
|
782
|
+
|
|
783
|
+
# Enable strict mode
|
|
496
784
|
schema["function"]["strict"] = True
|
|
497
785
|
|
|
498
|
-
# Ensure parameters have proper strict mode configuration
|
|
499
786
|
parameters = schema["function"].get("parameters", {})
|
|
500
787
|
if parameters:
|
|
501
|
-
#
|
|
502
|
-
parameters
|
|
503
|
-
|
|
504
|
-
# Process properties to handle optional fields
|
|
505
|
-
properties = parameters.get("properties", {})
|
|
506
|
-
parameters["required"] = list(properties.keys())
|
|
507
|
-
|
|
508
|
-
# Apply the sanitization function from function_tool
|
|
509
|
-
from camel.toolkits.function_tool import (
|
|
510
|
-
sanitize_and_enforce_required,
|
|
511
|
-
)
|
|
788
|
+
# Validate and fix the parameters schema
|
|
789
|
+
_validate_and_fix_schema(parameters)
|
|
512
790
|
|
|
513
|
-
|
|
791
|
+
# Check schema limits
|
|
792
|
+
_check_schema_limits(parameters)
|
|
514
793
|
|
|
515
794
|
tool.set_openai_tool_schema(schema)
|
|
516
795
|
logger.debug(
|
|
@@ -518,7 +797,23 @@ class MCPToolkit(BaseToolkit):
|
|
|
518
797
|
)
|
|
519
798
|
|
|
520
799
|
except Exception as e:
|
|
521
|
-
|
|
800
|
+
# If we can't make it strict, disable strict mode
|
|
801
|
+
try:
|
|
802
|
+
if "function" in schema:
|
|
803
|
+
schema["function"]["strict"] = False
|
|
804
|
+
tool.set_openai_tool_schema(schema)
|
|
805
|
+
logger.warning(
|
|
806
|
+
f"Failed to ensure strict schema for "
|
|
807
|
+
f"tool '{tool.get_function_name()}': {str(e)[:100]}. "
|
|
808
|
+
f"Setting strict=False."
|
|
809
|
+
)
|
|
810
|
+
except Exception as inner_e:
|
|
811
|
+
# If even setting strict=False fails, log the error
|
|
812
|
+
logger.error(
|
|
813
|
+
f"Critical error processing "
|
|
814
|
+
f"tool '{tool.get_function_name()}': {inner_e}. "
|
|
815
|
+
f"Tool may not function correctly."
|
|
816
|
+
)
|
|
522
817
|
|
|
523
818
|
return tool
|
|
524
819
|
|