camel-ai 0.2.72a6__tar.gz → 0.2.72a10__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.72a6 → camel_ai-0.2.72a10}/PKG-INFO +3 -3
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/__init__.py +1 -1
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/chat_agent.py +25 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/agent_memories.py +38 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/base.py +8 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/__init__.py +1 -0
- camel_ai-0.2.72a10/camel/storages/vectordb_storages/surreal.py +415 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/__init__.py +4 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/human_toolkit.py +5 -1
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/markitdown_toolkit.py +2 -2
- camel_ai-0.2.72a10/camel/toolkits/note_taking_toolkit.py +268 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/openai_image_toolkit.py +5 -5
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/origene_mcp_toolkit.py +13 -11
- camel_ai-0.2.72a10/camel/toolkits/screenshot_toolkit.py +128 -0
- camel_ai-0.2.72a10/camel/toolkits/web_deploy_toolkit.py +1024 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/pyproject.toml +3 -3
- camel_ai-0.2.72a6/camel/toolkits/note_taking_toolkit.py +0 -99
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/.gitignore +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/LICENSE +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/README.md +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/_types.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/_utils.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/critic_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/deductive_reasoner_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/embodied_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/knowledge_graph_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/mcp_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/multi_hop_generator_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/programmed_agent_instruction.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/repo_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/role_assignment_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/search_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/task_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/tool_agents/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/tool_agents/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/apibank.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/apibench.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/browsecomp.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/gaia.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/mock_website/README.md +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/mock_website/mock_web.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/mock_website/requirements.txt +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/mock_website/task.json +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/nexus.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/benchmarks/ragbench.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/discord/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/discord/discord_app.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/discord/discord_installation.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/discord/discord_store.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/slack/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/slack/models.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/slack/slack_app.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/bots/telegram_bot.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/aiml_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/anthropic_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/base_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/bedrock_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/cohere_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/crynux_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/deepseek_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/gemini_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/groq_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/internlm_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/litellm_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/lmstudio_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/mistral_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/modelscope_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/moonshot_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/netmind_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/novita_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/nvidia_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/ollama_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/openai_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/openrouter_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/ppio_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/qianfan_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/qwen_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/reka_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/samba_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/sglang_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/siliconflow_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/togetherai_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/vllm_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/watsonx_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/yi_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/configs/zhipuai_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/data_collectors/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/data_collectors/alpaca_collector.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/data_collectors/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/data_collectors/sharegpt_collector.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/cot_datagen.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/evol_instruct/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/evol_instruct/scorer.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/evol_instruct/templates.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/self_improving_cot.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/self_instruct/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/self_instruct/filter/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/self_instruct/self_instruct.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/self_instruct/templates.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/source2synth/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/source2synth/data_processor.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/source2synth/models.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datahubs/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datahubs/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datahubs/huggingface.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datahubs/models.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datasets/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datasets/base_generator.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datasets/few_shot_generator.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datasets/models.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datasets/self_instruct_generator.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/datasets/static_dataset.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/azure_embedding.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/gemini_embedding.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/jina_embedding.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/mistral_embedding.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/openai_compatible_embedding.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/openai_embedding.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/together_embedding.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/embeddings/vlm_embedding.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/environments/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/environments/models.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/environments/multi_step.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/environments/rlcards_env.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/environments/single_step.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/environments/tic_tac_toe.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/extractors/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/extractors/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/extractors/python_strategies.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/generators.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/human.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/docker/Dockerfile +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/docker_interpreter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/e2b_interpreter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/internal_python_interpreter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/interpreter_error.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/ipython_interpreter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/interpreters/subprocess_interpreter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/apify_reader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/base_io.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/base_loader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/chunkr_reader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/crawl4ai_reader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/firecrawl_reader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/jina_url_reader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/markitdown.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/mineru_extractor.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/mistral_reader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/pandas_reader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/scrapegraph_reader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/loaders/unstructured_io.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/logger.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/blocks/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/blocks/chat_history_block.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/blocks/vectordb_block.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/context_creators/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/context_creators/score_based.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/memories/records.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/conversion/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/conversion/alpaca.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/conversion/conversation_models.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/conversion/sharegpt/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/messages/func_message.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/_utils.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/aiml_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/anthropic_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/aws_bedrock_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/azure_openai_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/base_audio_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/base_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/cohere_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/crynux_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/deepseek_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/fish_audio_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/gemini_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/groq_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/internlm_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/litellm_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/lmstudio_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/mistral_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/model_factory.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/model_manager.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/modelscope_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/moonshot_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/nemotron_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/netmind_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/novita_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/nvidia_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/ollama_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/openai_audio_models.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/openai_compatible_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/openai_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/openrouter_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/ppio_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/qianfan_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/qwen_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/reka_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/reward/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/reward/base_reward_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/reward/evaluator.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/reward/nemotron_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/reward/skywork_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/samba_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/sglang_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/siliconflow_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/stub_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/togetherai_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/vllm_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/volcano_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/watsonx_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/yi_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/models/zhipuai_model.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/personas/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/personas/persona.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/personas/persona_hub.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/ai_society.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/code.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/evaluation.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/generate_text_embedding_data.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/image_craft.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/misalignment.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/multi_condition_image_craft.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/object_recognition.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/persona_hub.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/prompt_templates.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/role_description_prompt_template.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/solution_extraction.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/task_prompt_template.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/translation.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/prompts/video_description_prompt.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/py.typed +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/responses/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/responses/agent_responses.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/retrievers/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/retrievers/auto_retriever.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/retrievers/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/retrievers/bm25_retriever.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/retrievers/cohere_rerank_retriever.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/retrievers/hybrid_retrival.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/retrievers/vector_retriever.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/api.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/configs.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/daytona_runtime.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/docker_runtime.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/llm_guard_runtime.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/remote_http_runtime.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/utils/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/schemas/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/schemas/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/schemas/openai_converter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/schemas/outlines_converter.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/services/agent_openapi_server.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/babyagi_playing.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/role_playing.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/prompts.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/role_playing_worker.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/single_agent_worker.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/structured_output_handler.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/task_channel.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/utils.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/worker.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/workforce.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/societies/workforce/workforce_logger.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/graph_storages/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/graph_storages/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/graph_storages/graph_element.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/graph_storages/nebula_graph.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/graph_storages/neo4j_graph.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/key_value_storages/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/key_value_storages/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/key_value_storages/in_memory.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/key_value_storages/json.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/key_value_storages/redis.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/object_storages/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/object_storages/amazon_s3.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/object_storages/azure_blob.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/object_storages/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/object_storages/google_cloud.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/chroma.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/faiss.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/milvus.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/oceanbase.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/pgvector.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/qdrant.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/tidb.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/storages/vectordb_storages/weaviate.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/tasks/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/tasks/task.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/tasks/task_prompt.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/terminators/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/terminators/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/terminators/response_terminator.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/terminators/token_limit_terminator.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/aci_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/arxiv_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/ask_news_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/async_browser_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/audio_analysis_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/bohrium_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/browser_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/browser_toolkit_commons.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/code_execution.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/craw4ai_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/dappier_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/data_commons_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/excel_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/file_write_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/function_tool.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/github_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/google_calendar_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/google_maps_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/google_scholar_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/actions.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/agent.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/browser_session.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/config_loader.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/snapshot.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/stealth_script.js +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/hybrid_browser_toolkit/unified_analyzer.js +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/image_analysis_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/jina_reranker_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/klavis_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/linkedin_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/math_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/mcp_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/memory_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/meshy_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/message_agent_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/mineru_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/networkx_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/notion_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/security_config.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/open_api_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/openai_agent_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/openbb_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/page_script.js +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/pptx_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/pubmed_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/pyautogui_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/reddit_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/retrieval_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/search_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/searxng_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/slack_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/stripe_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/sympy_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/task_planning_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/terminal_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/thinking_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/twitter_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/video_analysis_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/video_download_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/weather_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/whatsapp_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/toolkits/zapier_toolkit.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/types/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/types/agents/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/types/agents/tool_calling_record.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/types/enums.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/types/mcp_registries.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/types/openai_types.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/types/unified_model_type.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/async_func.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/chunker/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/chunker/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/chunker/code_chunker.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/chunker/uio_chunker.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/commons.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/constants.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/deduplication.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/filename.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/langfuse.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/mcp.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/mcp_client.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/message_summarizer.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/response_format.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/token_counting.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/utils/tool_result.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/verifiers/__init__.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/verifiers/base.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/verifiers/math_verifier.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/verifiers/models.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/camel/verifiers/physics_verifier.py +0 -0
- {camel_ai-0.2.72a6 → camel_ai-0.2.72a10}/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.72a10
|
|
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
|
|
@@ -127,7 +127,7 @@ Requires-Dist: sympy<2,>=1.13.3; extra == 'all'
|
|
|
127
127
|
Requires-Dist: tabulate>=0.9.0; extra == 'all'
|
|
128
128
|
Requires-Dist: tavily-python<0.6,>=0.5.0; extra == 'all'
|
|
129
129
|
Requires-Dist: textblob<0.18,>=0.17.1; extra == 'all'
|
|
130
|
-
Requires-Dist: traceroot==0.0.
|
|
130
|
+
Requires-Dist: traceroot==0.0.4a4; extra == 'all'
|
|
131
131
|
Requires-Dist: transformers<5,>=4; extra == 'all'
|
|
132
132
|
Requires-Dist: tree-sitter-python<0.24,>=0.23.6; extra == 'all'
|
|
133
133
|
Requires-Dist: tree-sitter<0.24,>=0.23.2; extra == 'all'
|
|
@@ -191,7 +191,7 @@ Requires-Dist: ipykernel<7,>=6.0.0; extra == 'dev-tools'
|
|
|
191
191
|
Requires-Dist: jupyter-client<9,>=8.6.2; extra == 'dev-tools'
|
|
192
192
|
Requires-Dist: langfuse>=2.60.5; extra == 'dev-tools'
|
|
193
193
|
Requires-Dist: mcp>=1.3.0; extra == 'dev-tools'
|
|
194
|
-
Requires-Dist: traceroot==0.0.
|
|
194
|
+
Requires-Dist: traceroot==0.0.4a4; extra == 'dev-tools'
|
|
195
195
|
Requires-Dist: tree-sitter-python<0.24,>=0.23.6; extra == 'dev-tools'
|
|
196
196
|
Requires-Dist: tree-sitter<0.24,>=0.23.2; extra == 'dev-tools'
|
|
197
197
|
Requires-Dist: typer>=0.15.2; extra == 'dev-tools'
|
|
@@ -375,6 +375,11 @@ class ChatAgent(BaseAgent):
|
|
|
375
375
|
pause_event (Optional[asyncio.Event]): Event to signal pause of the
|
|
376
376
|
agent's operation. When clear, the agent will pause its execution.
|
|
377
377
|
(default: :obj:`None`)
|
|
378
|
+
prune_tool_calls_from_memory (bool): Whether to clean tool
|
|
379
|
+
call messages from memory after response generation to save token
|
|
380
|
+
usage. When enabled, removes FUNCTION/TOOL role messages and
|
|
381
|
+
ASSISTANT messages with tool_calls after each step.
|
|
382
|
+
(default: :obj:`False`)
|
|
378
383
|
"""
|
|
379
384
|
|
|
380
385
|
def __init__(
|
|
@@ -411,6 +416,7 @@ class ChatAgent(BaseAgent):
|
|
|
411
416
|
tool_execution_timeout: Optional[float] = None,
|
|
412
417
|
mask_tool_output: bool = False,
|
|
413
418
|
pause_event: Optional[asyncio.Event] = None,
|
|
419
|
+
prune_tool_calls_from_memory: bool = False,
|
|
414
420
|
) -> None:
|
|
415
421
|
if isinstance(model, ModelManager):
|
|
416
422
|
self.model_backend = model
|
|
@@ -492,6 +498,7 @@ class ChatAgent(BaseAgent):
|
|
|
492
498
|
self._image_retry_count: Dict[str, int] = {}
|
|
493
499
|
# Store images to attach to next user message
|
|
494
500
|
self.pause_event = pause_event
|
|
501
|
+
self.prune_tool_calls_from_memory = prune_tool_calls_from_memory
|
|
495
502
|
|
|
496
503
|
def reset(self):
|
|
497
504
|
r"""Resets the :obj:`ChatAgent` to its initial state."""
|
|
@@ -1472,6 +1479,10 @@ class ChatAgent(BaseAgent):
|
|
|
1472
1479
|
|
|
1473
1480
|
self._record_final_output(response.output_messages)
|
|
1474
1481
|
|
|
1482
|
+
# Clean tool call messages from memory after response generation
|
|
1483
|
+
if self.prune_tool_calls_from_memory and tool_call_records:
|
|
1484
|
+
self.memory.clean_tool_calls()
|
|
1485
|
+
|
|
1475
1486
|
return self._convert_to_chatagent_response(
|
|
1476
1487
|
response,
|
|
1477
1488
|
tool_call_records,
|
|
@@ -1730,6 +1741,10 @@ class ChatAgent(BaseAgent):
|
|
|
1730
1741
|
|
|
1731
1742
|
self._record_final_output(response.output_messages)
|
|
1732
1743
|
|
|
1744
|
+
# Clean tool call messages from memory after response generation
|
|
1745
|
+
if self.prune_tool_calls_from_memory and tool_call_records:
|
|
1746
|
+
self.memory.clean_tool_calls()
|
|
1747
|
+
|
|
1733
1748
|
return self._convert_to_chatagent_response(
|
|
1734
1749
|
response,
|
|
1735
1750
|
tool_call_records,
|
|
@@ -3270,11 +3285,20 @@ class ChatAgent(BaseAgent):
|
|
|
3270
3285
|
return
|
|
3271
3286
|
|
|
3272
3287
|
# Start async streaming response
|
|
3288
|
+
last_response = None
|
|
3273
3289
|
async for response in self._astream_response(
|
|
3274
3290
|
openai_messages, num_tokens, response_format
|
|
3275
3291
|
):
|
|
3292
|
+
last_response = response
|
|
3276
3293
|
yield response
|
|
3277
3294
|
|
|
3295
|
+
# Clean tool call messages from memory after response generation
|
|
3296
|
+
if self.prune_tool_calls_from_memory and last_response:
|
|
3297
|
+
# Extract tool_calls from the last response info
|
|
3298
|
+
tool_calls = last_response.info.get("tool_calls", [])
|
|
3299
|
+
if tool_calls:
|
|
3300
|
+
self.memory.clean_tool_calls()
|
|
3301
|
+
|
|
3278
3302
|
async def _astream_response(
|
|
3279
3303
|
self,
|
|
3280
3304
|
openai_messages: List[OpenAIMessage],
|
|
@@ -3799,6 +3823,7 @@ class ChatAgent(BaseAgent):
|
|
|
3799
3823
|
stop_event=self.stop_event,
|
|
3800
3824
|
tool_execution_timeout=self.tool_execution_timeout,
|
|
3801
3825
|
pause_event=self.pause_event,
|
|
3826
|
+
prune_tool_calls_from_memory=self.prune_tool_calls_from_memory,
|
|
3802
3827
|
)
|
|
3803
3828
|
|
|
3804
3829
|
# Copy memory if requested
|
|
@@ -88,6 +88,44 @@ class ChatHistoryMemory(AgentMemory):
|
|
|
88
88
|
def clear(self) -> None:
|
|
89
89
|
self._chat_history_block.clear()
|
|
90
90
|
|
|
91
|
+
def clean_tool_calls(self) -> None:
|
|
92
|
+
r"""Removes tool call messages from memory.
|
|
93
|
+
This method removes all FUNCTION/TOOL role messages and any ASSISTANT
|
|
94
|
+
messages that contain tool_calls in their meta_dict to save token
|
|
95
|
+
usage.
|
|
96
|
+
"""
|
|
97
|
+
from camel.types import OpenAIBackendRole
|
|
98
|
+
|
|
99
|
+
# Get all messages from storage
|
|
100
|
+
record_dicts = self._chat_history_block.storage.load()
|
|
101
|
+
if not record_dicts:
|
|
102
|
+
return
|
|
103
|
+
|
|
104
|
+
# Filter out tool-related messages
|
|
105
|
+
cleaned_records = []
|
|
106
|
+
for record in record_dicts:
|
|
107
|
+
role = record.get('role_at_backend')
|
|
108
|
+
|
|
109
|
+
# Skip FUNCTION messages
|
|
110
|
+
if role == OpenAIBackendRole.FUNCTION.value:
|
|
111
|
+
continue
|
|
112
|
+
|
|
113
|
+
# Skip TOOL messages
|
|
114
|
+
if role == OpenAIBackendRole.TOOL.value:
|
|
115
|
+
continue
|
|
116
|
+
|
|
117
|
+
# Skip ASSISTANT messages with tool_calls
|
|
118
|
+
if role == OpenAIBackendRole.ASSISTANT.value:
|
|
119
|
+
meta_dict = record.get('meta_dict', {})
|
|
120
|
+
if meta_dict and 'tool_calls' in meta_dict:
|
|
121
|
+
continue
|
|
122
|
+
|
|
123
|
+
# Keep all other messages
|
|
124
|
+
cleaned_records.append(record)
|
|
125
|
+
|
|
126
|
+
# Save the cleaned records back to storage
|
|
127
|
+
self._chat_history_block.storage.save(cleaned_records)
|
|
128
|
+
|
|
91
129
|
|
|
92
130
|
class VectorDBMemory(AgentMemory):
|
|
93
131
|
r"""An agent memory wrapper of :obj:`VectorDBBlock`. This memory queries
|
|
@@ -149,6 +149,14 @@ class AgentMemory(MemoryBlock, ABC):
|
|
|
149
149
|
"""
|
|
150
150
|
return self.get_context_creator().create_context(self.retrieve())
|
|
151
151
|
|
|
152
|
+
def clean_tool_calls(self) -> None:
|
|
153
|
+
r"""Removes tool call messages from memory.
|
|
154
|
+
This is an optional method that can be overridden by subclasses
|
|
155
|
+
to implement cleaning of tool-related messages. By default, it
|
|
156
|
+
does nothing, maintaining backward compatibility.
|
|
157
|
+
"""
|
|
158
|
+
pass
|
|
159
|
+
|
|
152
160
|
def __repr__(self) -> str:
|
|
153
161
|
r"""Returns a string representation of the AgentMemory.
|
|
154
162
|
|
|
@@ -0,0 +1,415 @@
|
|
|
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
|
+
import re
|
|
15
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional
|
|
16
|
+
|
|
17
|
+
from camel.logger import get_logger
|
|
18
|
+
from camel.storages.vectordb_storages import (
|
|
19
|
+
BaseVectorStorage,
|
|
20
|
+
VectorDBQuery,
|
|
21
|
+
VectorDBQueryResult,
|
|
22
|
+
VectorDBStatus,
|
|
23
|
+
VectorRecord,
|
|
24
|
+
)
|
|
25
|
+
from camel.types import VectorDistance
|
|
26
|
+
from camel.utils import dependencies_required
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
30
|
+
|
|
31
|
+
logger = get_logger(__name__)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class SurrealStorage(BaseVectorStorage):
|
|
35
|
+
r"""An implementation of the `BaseVectorStorage` using SurrealDB,
|
|
36
|
+
a scalable, distributed database with WebSocket support, for
|
|
37
|
+
efficient vector storage and similarity search.
|
|
38
|
+
|
|
39
|
+
SurrealDB official site and documentation can be found at:
|
|
40
|
+
`SurrealDB <https://surrealdb.com>`_
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
url (str): WebSocket URL for connecting to SurrealDB
|
|
44
|
+
(default: "ws://localhost:8000/rpc").
|
|
45
|
+
table (str): Name of the table used for storing vectors
|
|
46
|
+
(default: "vector_store").
|
|
47
|
+
vector_dim (int): Dimensionality of the stored vectors.
|
|
48
|
+
distance (VectorDistance): Distance metric used for similarity
|
|
49
|
+
comparisons (default: VectorDistance.COSINE).
|
|
50
|
+
namespace (str): SurrealDB namespace to use (default: "default").
|
|
51
|
+
database (str): SurrealDB database name (default: "demo").
|
|
52
|
+
user (str): Username for authentication (default: "root").
|
|
53
|
+
password (str): Password for authentication (default: "root").
|
|
54
|
+
|
|
55
|
+
Notes:
|
|
56
|
+
- SurrealDB supports flexible schema and powerful querying capabilities
|
|
57
|
+
via SQL-like syntax over WebSocket.
|
|
58
|
+
- This implementation manages connection setup and ensures the target
|
|
59
|
+
table exists.
|
|
60
|
+
- Suitable for applications requiring distributed vector storage and
|
|
61
|
+
search with real-time updates.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
@dependencies_required('surrealdb')
|
|
65
|
+
def __init__(
|
|
66
|
+
self,
|
|
67
|
+
*,
|
|
68
|
+
url: str = "ws://localhost:8000/rpc",
|
|
69
|
+
table: str = "vector_store",
|
|
70
|
+
vector_dim: int = 786,
|
|
71
|
+
distance: VectorDistance = VectorDistance.COSINE,
|
|
72
|
+
namespace: str = "default",
|
|
73
|
+
database: str = "demo",
|
|
74
|
+
user: str = "root",
|
|
75
|
+
password: str = "root",
|
|
76
|
+
) -> None:
|
|
77
|
+
r"""Initialize SurrealStorage with connection settings and ensure
|
|
78
|
+
the target table exists.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
url (str): WebSocket URL for connecting to SurrealDB.
|
|
82
|
+
(default: :obj:`"ws://localhost:8000/rpc"`)
|
|
83
|
+
table (str): Name of the table used for vector storage.
|
|
84
|
+
(default: :obj:`"vector_store"`)
|
|
85
|
+
vector_dim (int): Dimensionality of the stored vectors.
|
|
86
|
+
(default: :obj:`786`)
|
|
87
|
+
distance (VectorDistance): Distance metric for similarity
|
|
88
|
+
searches. (default: :obj:`VectorDistance.COSINE`)
|
|
89
|
+
namespace (str): SurrealDB namespace to use.
|
|
90
|
+
(default: :obj:`"default"`)
|
|
91
|
+
database (str): SurrealDB database name.
|
|
92
|
+
(default: :obj:`"demo"`)
|
|
93
|
+
user (str): Username for authentication.
|
|
94
|
+
(default: :obj:`"root"`)
|
|
95
|
+
password (str): Password for authentication.
|
|
96
|
+
(default: :obj:`"root"`)
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
self.url = url
|
|
100
|
+
self.table = table
|
|
101
|
+
self.ns = namespace
|
|
102
|
+
self.db = database
|
|
103
|
+
self.user = user
|
|
104
|
+
self.password = password
|
|
105
|
+
self.vector_dim = vector_dim
|
|
106
|
+
self.distance = distance
|
|
107
|
+
self._check_and_create_table()
|
|
108
|
+
self._surreal_client = None
|
|
109
|
+
|
|
110
|
+
def _table_exists(self) -> bool:
|
|
111
|
+
r"""Check whether the target table exists in the database.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
bool: True if the table exists, False otherwise.
|
|
115
|
+
"""
|
|
116
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
117
|
+
|
|
118
|
+
with Surreal(self.url) as db:
|
|
119
|
+
db.signin({"username": self.user, "password": self.password})
|
|
120
|
+
db.use(self.ns, self.db)
|
|
121
|
+
res = db.query_raw("INFO FOR DB;")
|
|
122
|
+
tables = res['result'][0]['result'].get('tables', {})
|
|
123
|
+
return self.table in tables
|
|
124
|
+
|
|
125
|
+
def _get_table_info(self) -> Dict[str, int]:
|
|
126
|
+
r"""Retrieve dimension and record count from the table metadata.
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
Dict[str, int]: A dictionary with 'dim' and 'count' keys.
|
|
130
|
+
"""
|
|
131
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
132
|
+
|
|
133
|
+
if not self._table_exists():
|
|
134
|
+
return {"dim": self.vector_dim, "count": 0}
|
|
135
|
+
with Surreal(self.url) as db:
|
|
136
|
+
db.signin({"username": self.user, "password": self.password})
|
|
137
|
+
db.use(self.ns, self.db)
|
|
138
|
+
res = db.query_raw(f"INFO FOR TABLE {self.table};")
|
|
139
|
+
|
|
140
|
+
indexes = res['result'][0]['result'].get("indexes", {})
|
|
141
|
+
|
|
142
|
+
dim = self.vector_dim
|
|
143
|
+
idx_def = indexes.get("hnsw_idx")
|
|
144
|
+
if idx_def and isinstance(idx_def, str):
|
|
145
|
+
m = re.search(r"DIMENSION\s+(\d+)", idx_def)
|
|
146
|
+
if m:
|
|
147
|
+
dim = int(m.group(1))
|
|
148
|
+
cnt = db.query_raw(f"SELECT COUNT() AS count FROM {self.table};")
|
|
149
|
+
try:
|
|
150
|
+
count = cnt['result'][0]['result'][0]['count']
|
|
151
|
+
except (KeyError, IndexError, TypeError):
|
|
152
|
+
logger.warning(
|
|
153
|
+
"Unexpected result format when counting records: %s", cnt
|
|
154
|
+
)
|
|
155
|
+
count = 0
|
|
156
|
+
|
|
157
|
+
return {"dim": dim, "count": count}
|
|
158
|
+
|
|
159
|
+
def _create_table(self):
|
|
160
|
+
r"""Define and create the vector storage table with HNSW index."""
|
|
161
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
162
|
+
|
|
163
|
+
with Surreal(self.url) as db:
|
|
164
|
+
db.signin({"username": self.user, "password": self.password})
|
|
165
|
+
db.use(self.ns, self.db)
|
|
166
|
+
db.query_raw(
|
|
167
|
+
f"""DEFINE TABLE {self.table} SCHEMALESS;
|
|
168
|
+
DEFINE FIELD payload ON {self.table} TYPE object;
|
|
169
|
+
DEFINE FIELD embedding ON {self.table} TYPE array;
|
|
170
|
+
DEFINE INDEX hnsw_idx ON {self.table}
|
|
171
|
+
FIELDS embedding HNSW DIMENSION {self.vector_dim};
|
|
172
|
+
"""
|
|
173
|
+
)
|
|
174
|
+
logger.info(f"Table '{self.table}' created successfully.")
|
|
175
|
+
|
|
176
|
+
def _drop_table(self):
|
|
177
|
+
r"""Drop the vector storage table if it exists."""
|
|
178
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
179
|
+
|
|
180
|
+
with Surreal(self.url) as db:
|
|
181
|
+
db.signin({"username": self.user, "password": self.password})
|
|
182
|
+
db.use(self.ns, self.db)
|
|
183
|
+
db.query_raw(f"REMOVE TABLE IF EXISTS {self.table};")
|
|
184
|
+
logger.info(f"Table '{self.table}' deleted successfully.")
|
|
185
|
+
|
|
186
|
+
def _check_and_create_table(self):
|
|
187
|
+
r"""Check if the table exists and matches the expected vector
|
|
188
|
+
dimension. If not, create a new table.
|
|
189
|
+
"""
|
|
190
|
+
if self._table_exists():
|
|
191
|
+
in_dim = self._get_table_info()["dim"]
|
|
192
|
+
if in_dim != self.vector_dim:
|
|
193
|
+
raise ValueError(
|
|
194
|
+
f"Table {self.table} exists with dimension {in_dim}, "
|
|
195
|
+
f"expected {self.vector_dim}"
|
|
196
|
+
)
|
|
197
|
+
else:
|
|
198
|
+
self._create_table()
|
|
199
|
+
|
|
200
|
+
def _validate_and_convert_records(
|
|
201
|
+
self, records: List[VectorRecord]
|
|
202
|
+
) -> List[Dict]:
|
|
203
|
+
r"""Validate and convert VectorRecord instances into
|
|
204
|
+
SurrealDB-compatible dictionaries.
|
|
205
|
+
|
|
206
|
+
Args:
|
|
207
|
+
records (List[VectorRecord]): List of vector records to insert.
|
|
208
|
+
|
|
209
|
+
Returns:
|
|
210
|
+
List[Dict]: Transformed list of dicts ready for insertion.
|
|
211
|
+
"""
|
|
212
|
+
validate_data = []
|
|
213
|
+
for record in records:
|
|
214
|
+
if len(record.vector) != self.vector_dim:
|
|
215
|
+
raise ValueError(
|
|
216
|
+
f"Vector dimension mismatch: expected {self.vector_dim}, "
|
|
217
|
+
f"got {len(record.vector)}"
|
|
218
|
+
)
|
|
219
|
+
record_dict = {
|
|
220
|
+
"payload": record.payload if record.payload else {},
|
|
221
|
+
"embedding": record.vector,
|
|
222
|
+
}
|
|
223
|
+
validate_data.append(record_dict)
|
|
224
|
+
|
|
225
|
+
return validate_data
|
|
226
|
+
|
|
227
|
+
def query(
|
|
228
|
+
self,
|
|
229
|
+
query: VectorDBQuery,
|
|
230
|
+
**kwargs: Any,
|
|
231
|
+
) -> List[VectorDBQueryResult]:
|
|
232
|
+
r"""Perform a top-k similarity search using the configured distance
|
|
233
|
+
metric.
|
|
234
|
+
|
|
235
|
+
Args:
|
|
236
|
+
query (VectorDBQuery): Query containing the query vector
|
|
237
|
+
and top_k value.
|
|
238
|
+
|
|
239
|
+
Returns:
|
|
240
|
+
List[VectorDBQueryResult]: Ranked list of matching records
|
|
241
|
+
with similarity scores.
|
|
242
|
+
"""
|
|
243
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
244
|
+
|
|
245
|
+
metric = {
|
|
246
|
+
VectorDistance.COSINE: "cosine",
|
|
247
|
+
VectorDistance.EUCLIDEAN: "euclidean",
|
|
248
|
+
VectorDistance.DOT: "dot",
|
|
249
|
+
}[self.distance]
|
|
250
|
+
|
|
251
|
+
metric_func = {
|
|
252
|
+
VectorDistance.COSINE: "vector::similarity::cosine",
|
|
253
|
+
VectorDistance.EUCLIDEAN: "vector::distance::euclidean",
|
|
254
|
+
VectorDistance.DOT: "vector::dot",
|
|
255
|
+
}.get(self.distance)
|
|
256
|
+
|
|
257
|
+
if not metric_func:
|
|
258
|
+
raise ValueError(f"Unsupported distance metric: {self.distance}")
|
|
259
|
+
|
|
260
|
+
with Surreal(self.url) as db:
|
|
261
|
+
db.signin({"username": self.user, "password": self.password})
|
|
262
|
+
db.use(self.ns, self.db)
|
|
263
|
+
|
|
264
|
+
# Use parameterized query to prevent SQL injection
|
|
265
|
+
sql_query = f"""SELECT payload, embedding,
|
|
266
|
+
{metric_func}(embedding, $query_vec) AS score
|
|
267
|
+
FROM {self.table}
|
|
268
|
+
WHERE embedding <|{query.top_k},{metric}|> $query_vec
|
|
269
|
+
ORDER BY score;
|
|
270
|
+
"""
|
|
271
|
+
|
|
272
|
+
response = db.query_raw(
|
|
273
|
+
sql_query, {"query_vec": query.query_vector}
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
if not response.get("result") or not response["result"]:
|
|
277
|
+
return []
|
|
278
|
+
|
|
279
|
+
results = response["result"][0]
|
|
280
|
+
|
|
281
|
+
if "result" not in results:
|
|
282
|
+
return []
|
|
283
|
+
|
|
284
|
+
return [
|
|
285
|
+
VectorDBQueryResult(
|
|
286
|
+
record=VectorRecord(
|
|
287
|
+
vector=row["embedding"], payload=row.get("payload", {})
|
|
288
|
+
),
|
|
289
|
+
similarity=(
|
|
290
|
+
1.0 - row["score"]
|
|
291
|
+
if self.distance == VectorDistance.COSINE
|
|
292
|
+
else 1.0 / (1.0 + row["score"])
|
|
293
|
+
if self.distance == VectorDistance.EUCLIDEAN
|
|
294
|
+
else row["score"]
|
|
295
|
+
),
|
|
296
|
+
)
|
|
297
|
+
for row in results["result"]
|
|
298
|
+
]
|
|
299
|
+
|
|
300
|
+
def add(self, records: List[VectorRecord], **kwargs) -> None:
|
|
301
|
+
r"""Insert validated vector records into the SurrealDB table.
|
|
302
|
+
|
|
303
|
+
Args:
|
|
304
|
+
records (List[VectorRecord]): List of vector records to add.
|
|
305
|
+
"""
|
|
306
|
+
logger.info(
|
|
307
|
+
"Adding %d records to table '%s'.", len(records), self.table
|
|
308
|
+
)
|
|
309
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
310
|
+
|
|
311
|
+
try:
|
|
312
|
+
with Surreal(self.url) as db:
|
|
313
|
+
db.signin({"username": self.user, "password": self.password})
|
|
314
|
+
db.use(self.ns, self.db)
|
|
315
|
+
|
|
316
|
+
validated_records = self._validate_and_convert_records(records)
|
|
317
|
+
for record in validated_records:
|
|
318
|
+
db.create(self.table, record)
|
|
319
|
+
|
|
320
|
+
logger.info(
|
|
321
|
+
"Successfully added %d records to table '%s'.",
|
|
322
|
+
len(records),
|
|
323
|
+
self.table,
|
|
324
|
+
)
|
|
325
|
+
except Exception as e:
|
|
326
|
+
logger.error(
|
|
327
|
+
"Failed to add records to table '%s': %s",
|
|
328
|
+
self.table,
|
|
329
|
+
str(e),
|
|
330
|
+
exc_info=True,
|
|
331
|
+
)
|
|
332
|
+
raise
|
|
333
|
+
|
|
334
|
+
def delete(
|
|
335
|
+
self, ids: Optional[List[str]] = None, if_all: bool = False, **kwargs
|
|
336
|
+
) -> None:
|
|
337
|
+
r"""Delete specific records by ID or clear the entire table.
|
|
338
|
+
|
|
339
|
+
Args:
|
|
340
|
+
ids (Optional[List[str]]): List of record IDs to delete.
|
|
341
|
+
if_all (bool): Whether to delete all records in the table.
|
|
342
|
+
"""
|
|
343
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
344
|
+
from surrealdb.data.types.record_id import ( # type: ignore[import-not-found]
|
|
345
|
+
RecordID,
|
|
346
|
+
)
|
|
347
|
+
|
|
348
|
+
try:
|
|
349
|
+
with Surreal(self.url) as db:
|
|
350
|
+
db.signin({"username": self.user, "password": self.password})
|
|
351
|
+
db.use(self.ns, self.db)
|
|
352
|
+
|
|
353
|
+
if if_all:
|
|
354
|
+
db.delete(self.table, **kwargs)
|
|
355
|
+
logger.info(
|
|
356
|
+
f"Deleted all records from table '{self.table}'"
|
|
357
|
+
)
|
|
358
|
+
return
|
|
359
|
+
|
|
360
|
+
if not ids:
|
|
361
|
+
raise ValueError(
|
|
362
|
+
"Either `ids` must be provided or `if_all=True`"
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
for id_str in ids:
|
|
366
|
+
rec = RecordID(self.table, id_str)
|
|
367
|
+
db.delete(rec, **kwargs)
|
|
368
|
+
logger.info(f"Deleted record {rec}")
|
|
369
|
+
|
|
370
|
+
except Exception as e:
|
|
371
|
+
logger.exception("Error deleting records from SurrealDB")
|
|
372
|
+
raise RuntimeError(f"Failed to delete records {ids!r}") from e
|
|
373
|
+
|
|
374
|
+
def status(self) -> VectorDBStatus:
|
|
375
|
+
r"""Retrieve the status of the vector table including dimension and
|
|
376
|
+
count.
|
|
377
|
+
|
|
378
|
+
Returns:
|
|
379
|
+
VectorDBStatus: Object containing vector table metadata.
|
|
380
|
+
"""
|
|
381
|
+
status = self._get_table_info()
|
|
382
|
+
|
|
383
|
+
dim = status.get("dim")
|
|
384
|
+
count = status.get("count")
|
|
385
|
+
|
|
386
|
+
if dim is None or count is None:
|
|
387
|
+
raise ValueError("Vector dimension and count cannot be None")
|
|
388
|
+
|
|
389
|
+
return VectorDBStatus(
|
|
390
|
+
vector_dim=dim,
|
|
391
|
+
vector_count=count,
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
def clear(self) -> None:
|
|
395
|
+
r"""Reset the vector table by dropping and recreating it."""
|
|
396
|
+
self._drop_table()
|
|
397
|
+
self._create_table()
|
|
398
|
+
|
|
399
|
+
def load(self) -> None:
|
|
400
|
+
r"""Load the collection hosted on cloud service."""
|
|
401
|
+
# SurrealDB doesn't require explicit loading
|
|
402
|
+
raise NotImplementedError("SurrealDB does not support loading")
|
|
403
|
+
|
|
404
|
+
@property
|
|
405
|
+
def client(self) -> "Surreal":
|
|
406
|
+
r"""Provides access to the underlying SurrealDB client."""
|
|
407
|
+
if self._surreal_client is None:
|
|
408
|
+
from surrealdb import Surreal # type: ignore[import-not-found]
|
|
409
|
+
|
|
410
|
+
self._surreal_client = Surreal(self.url)
|
|
411
|
+
self._surreal_client.signin( # type: ignore[attr-defined]
|
|
412
|
+
{"username": self.user, "password": self.password}
|
|
413
|
+
)
|
|
414
|
+
self._surreal_client.use(self.ns, self.db) # type: ignore[attr-defined]
|
|
415
|
+
return self._surreal_client
|
|
@@ -85,6 +85,8 @@ from .craw4ai_toolkit import Crawl4AIToolkit
|
|
|
85
85
|
from .markitdown_toolkit import MarkItDownToolkit
|
|
86
86
|
from .note_taking_toolkit import NoteTakingToolkit
|
|
87
87
|
from .message_agent_toolkit import AgentCommunicationToolkit
|
|
88
|
+
from .web_deploy_toolkit import WebDeployToolkit
|
|
89
|
+
from .screenshot_toolkit import ScreenshotToolkit
|
|
88
90
|
|
|
89
91
|
__all__ = [
|
|
90
92
|
'BaseToolkit',
|
|
@@ -158,4 +160,6 @@ __all__ = [
|
|
|
158
160
|
'MarkItDownToolkit',
|
|
159
161
|
'NoteTakingToolkit',
|
|
160
162
|
'AgentCommunicationToolkit',
|
|
163
|
+
'WebDeployToolkit',
|
|
164
|
+
'ScreenshotToolkit',
|
|
161
165
|
]
|
|
@@ -52,7 +52,7 @@ class HumanToolkit(BaseToolkit):
|
|
|
52
52
|
logger.info(f"User reply: {reply}")
|
|
53
53
|
return reply
|
|
54
54
|
|
|
55
|
-
def send_message_to_user(self, message: str) ->
|
|
55
|
+
def send_message_to_user(self, message: str) -> str:
|
|
56
56
|
r"""Use this tool to send a tidy message to the user in one short
|
|
57
57
|
sentence.
|
|
58
58
|
|
|
@@ -68,9 +68,13 @@ class HumanToolkit(BaseToolkit):
|
|
|
68
68
|
|
|
69
69
|
Args:
|
|
70
70
|
message (str): The tidy and informative message for the user.
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
str: Confirmation that the message was successfully sent.
|
|
71
74
|
"""
|
|
72
75
|
print(f"\nAgent Message:\n{message}")
|
|
73
76
|
logger.info(f"\nAgent Message:\n{message}")
|
|
77
|
+
return f"Message successfully sent to user: '{message}'"
|
|
74
78
|
|
|
75
79
|
def get_tools(self) -> List[FunctionTool]:
|
|
76
80
|
r"""Returns a list of FunctionTool objects representing the
|
|
@@ -33,7 +33,7 @@ class MarkItDownToolkit(BaseToolkit):
|
|
|
33
33
|
):
|
|
34
34
|
super().__init__(timeout=timeout)
|
|
35
35
|
|
|
36
|
-
def
|
|
36
|
+
def read_files(self, file_paths: List[str]) -> Dict[str, str]:
|
|
37
37
|
r"""Scrapes content from a list of files and converts it to Markdown.
|
|
38
38
|
|
|
39
39
|
This function takes a list of local file paths, attempts to convert
|
|
@@ -74,5 +74,5 @@ class MarkItDownToolkit(BaseToolkit):
|
|
|
74
74
|
representing the functions in the toolkit.
|
|
75
75
|
"""
|
|
76
76
|
return [
|
|
77
|
-
FunctionTool(self.
|
|
77
|
+
FunctionTool(self.read_files),
|
|
78
78
|
]
|