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