camel-ai 0.2.72a5__tar.gz → 0.2.72a8__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.72a5 → camel_ai-0.2.72a8}/PKG-INFO +3 -3
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/__init__.py +1 -1
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/chat_agent.py +59 -136
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/agent_memories.py +38 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/base.py +8 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/gemini_model.py +30 -2
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/__init__.py +1 -0
- camel_ai-0.2.72a8/camel/storages/vectordb_storages/surreal.py +415 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/__init__.py +4 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/human_toolkit.py +5 -1
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/markitdown_toolkit.py +2 -2
- camel_ai-0.2.72a8/camel/toolkits/note_taking_toolkit.py +279 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/openai_image_toolkit.py +5 -5
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/origene_mcp_toolkit.py +13 -11
- camel_ai-0.2.72a8/camel/toolkits/screenshot_toolkit.py +128 -0
- camel_ai-0.2.72a8/camel/toolkits/web_deploy_toolkit.py +1024 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/pyproject.toml +3 -3
- camel_ai-0.2.72a5/camel/toolkits/note_taking_toolkit.py +0 -99
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/.gitignore +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/LICENSE +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/README.md +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/_types.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/_utils.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/critic_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/deductive_reasoner_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/embodied_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/knowledge_graph_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/mcp_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/multi_hop_generator_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/programmed_agent_instruction.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/repo_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/role_assignment_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/search_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/task_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/tool_agents/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/tool_agents/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/apibank.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/apibench.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/browsecomp.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/gaia.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/mock_website/README.md +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/mock_website/mock_web.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/mock_website/requirements.txt +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/mock_website/task.json +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/nexus.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/benchmarks/ragbench.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/discord/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/discord/discord_app.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/discord/discord_installation.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/discord/discord_store.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/slack/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/slack/models.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/slack/slack_app.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/bots/telegram_bot.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/aiml_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/anthropic_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/base_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/bedrock_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/cohere_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/crynux_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/deepseek_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/gemini_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/groq_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/internlm_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/litellm_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/lmstudio_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/mistral_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/modelscope_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/moonshot_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/netmind_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/novita_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/nvidia_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/ollama_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/openai_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/openrouter_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/ppio_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/qianfan_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/qwen_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/reka_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/samba_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/sglang_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/siliconflow_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/togetherai_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/vllm_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/watsonx_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/yi_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/configs/zhipuai_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/data_collectors/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/data_collectors/alpaca_collector.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/data_collectors/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/data_collectors/sharegpt_collector.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/cot_datagen.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/evol_instruct/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/evol_instruct/scorer.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/evol_instruct/templates.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/self_improving_cot.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/self_instruct/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/self_instruct/filter/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/self_instruct/self_instruct.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/self_instruct/templates.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/source2synth/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/source2synth/data_processor.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/source2synth/models.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datahubs/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datahubs/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datahubs/huggingface.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datahubs/models.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datasets/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datasets/base_generator.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datasets/few_shot_generator.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datasets/models.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datasets/self_instruct_generator.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/datasets/static_dataset.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/azure_embedding.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/gemini_embedding.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/jina_embedding.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/mistral_embedding.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/openai_compatible_embedding.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/openai_embedding.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/together_embedding.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/embeddings/vlm_embedding.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/environments/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/environments/models.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/environments/multi_step.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/environments/rlcards_env.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/environments/single_step.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/environments/tic_tac_toe.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/extractors/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/extractors/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/extractors/python_strategies.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/generators.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/human.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/docker/Dockerfile +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/docker_interpreter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/e2b_interpreter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/internal_python_interpreter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/interpreter_error.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/ipython_interpreter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/interpreters/subprocess_interpreter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/apify_reader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/base_io.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/base_loader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/chunkr_reader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/crawl4ai_reader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/firecrawl_reader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/jina_url_reader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/markitdown.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/mineru_extractor.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/mistral_reader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/pandas_reader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/scrapegraph_reader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/loaders/unstructured_io.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/logger.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/blocks/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/blocks/chat_history_block.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/blocks/vectordb_block.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/context_creators/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/context_creators/score_based.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/memories/records.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/conversion/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/conversion/alpaca.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/conversion/conversation_models.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/conversion/sharegpt/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/messages/func_message.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/_utils.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/aiml_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/anthropic_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/aws_bedrock_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/azure_openai_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/base_audio_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/base_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/cohere_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/crynux_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/deepseek_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/fish_audio_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/groq_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/internlm_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/litellm_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/lmstudio_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/mistral_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/model_factory.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/model_manager.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/modelscope_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/moonshot_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/nemotron_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/netmind_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/novita_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/nvidia_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/ollama_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/openai_audio_models.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/openai_compatible_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/openai_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/openrouter_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/ppio_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/qianfan_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/qwen_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/reka_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/reward/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/reward/base_reward_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/reward/evaluator.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/reward/nemotron_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/reward/skywork_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/samba_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/sglang_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/siliconflow_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/stub_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/togetherai_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/vllm_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/volcano_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/watsonx_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/yi_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/models/zhipuai_model.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/personas/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/personas/persona.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/personas/persona_hub.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/ai_society.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/code.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/evaluation.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/generate_text_embedding_data.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/image_craft.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/misalignment.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/multi_condition_image_craft.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/object_recognition.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/persona_hub.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/prompt_templates.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/role_description_prompt_template.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/solution_extraction.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/task_prompt_template.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/translation.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/prompts/video_description_prompt.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/py.typed +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/responses/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/responses/agent_responses.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/retrievers/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/retrievers/auto_retriever.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/retrievers/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/retrievers/bm25_retriever.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/retrievers/cohere_rerank_retriever.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/retrievers/hybrid_retrival.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/retrievers/vector_retriever.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/api.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/configs.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/daytona_runtime.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/docker_runtime.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/llm_guard_runtime.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/remote_http_runtime.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/utils/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/schemas/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/schemas/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/schemas/openai_converter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/schemas/outlines_converter.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/services/agent_openapi_server.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/babyagi_playing.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/role_playing.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/prompts.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/role_playing_worker.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/single_agent_worker.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/structured_output_handler.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/task_channel.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/utils.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/worker.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/workforce.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/societies/workforce/workforce_logger.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/graph_storages/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/graph_storages/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/graph_storages/graph_element.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/graph_storages/nebula_graph.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/graph_storages/neo4j_graph.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/key_value_storages/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/key_value_storages/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/key_value_storages/in_memory.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/key_value_storages/json.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/key_value_storages/redis.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/object_storages/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/object_storages/amazon_s3.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/object_storages/azure_blob.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/object_storages/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/object_storages/google_cloud.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/chroma.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/faiss.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/milvus.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/oceanbase.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/pgvector.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/qdrant.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/tidb.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/storages/vectordb_storages/weaviate.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/tasks/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/tasks/task.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/tasks/task_prompt.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/terminators/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/terminators/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/terminators/response_terminator.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/terminators/token_limit_terminator.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/aci_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/arxiv_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/ask_news_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/async_browser_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/audio_analysis_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/bohrium_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/browser_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/browser_toolkit_commons.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/code_execution.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/craw4ai_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/dappier_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/data_commons_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/excel_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/file_write_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/function_tool.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/github_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/google_calendar_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/google_maps_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/google_scholar_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/actions.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/agent.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/browser_session.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/config_loader.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/snapshot.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/stealth_script.js +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/hybrid_browser_toolkit/unified_analyzer.js +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/image_analysis_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/jina_reranker_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/klavis_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/linkedin_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/math_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/mcp_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/memory_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/meshy_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/message_agent_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/mineru_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/networkx_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/notion_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/security_config.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/open_api_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/openai_agent_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/openbb_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/page_script.js +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/pptx_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/pubmed_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/pyautogui_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/reddit_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/retrieval_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/search_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/searxng_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/slack_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/stripe_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/sympy_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/task_planning_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/terminal_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/thinking_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/twitter_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/video_analysis_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/video_download_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/weather_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/whatsapp_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/toolkits/zapier_toolkit.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/types/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/types/agents/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/types/agents/tool_calling_record.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/types/enums.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/types/mcp_registries.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/types/openai_types.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/types/unified_model_type.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/async_func.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/chunker/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/chunker/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/chunker/code_chunker.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/chunker/uio_chunker.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/commons.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/constants.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/deduplication.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/filename.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/langfuse.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/mcp.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/mcp_client.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/message_summarizer.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/response_format.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/token_counting.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/utils/tool_result.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/verifiers/__init__.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/verifiers/base.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/verifiers/math_verifier.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/verifiers/models.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/camel/verifiers/physics_verifier.py +0 -0
- {camel_ai-0.2.72a5 → camel_ai-0.2.72a8}/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.72a8
|
|
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,
|
|
@@ -2896,21 +2911,13 @@ class ChatAgent(BaseAgent):
|
|
|
2896
2911
|
status_response
|
|
2897
2912
|
) in self._execute_tools_sync_with_status_accumulator(
|
|
2898
2913
|
accumulated_tool_calls,
|
|
2899
|
-
content_accumulator,
|
|
2900
|
-
step_token_usage,
|
|
2901
2914
|
tool_call_records,
|
|
2902
2915
|
):
|
|
2903
2916
|
yield status_response
|
|
2904
2917
|
|
|
2905
|
-
#
|
|
2918
|
+
# Log sending status instead of adding to content
|
|
2906
2919
|
if tool_call_records:
|
|
2907
|
-
|
|
2908
|
-
content_accumulator,
|
|
2909
|
-
"\n------\n\nSending back result to model\n\n",
|
|
2910
|
-
"tool_sending",
|
|
2911
|
-
step_token_usage,
|
|
2912
|
-
)
|
|
2913
|
-
yield sending_status
|
|
2920
|
+
logger.info("Sending back result to model")
|
|
2914
2921
|
|
|
2915
2922
|
# Record final message only if we have content AND no tool
|
|
2916
2923
|
# calls. If there are tool calls, _record_tool_calling
|
|
@@ -3008,15 +3015,13 @@ class ChatAgent(BaseAgent):
|
|
|
3008
3015
|
def _execute_tools_sync_with_status_accumulator(
|
|
3009
3016
|
self,
|
|
3010
3017
|
accumulated_tool_calls: Dict[str, Any],
|
|
3011
|
-
content_accumulator: StreamContentAccumulator,
|
|
3012
|
-
step_token_usage: Dict[str, int],
|
|
3013
3018
|
tool_call_records: List[ToolCallingRecord],
|
|
3014
3019
|
) -> Generator[ChatAgentResponse, None, None]:
|
|
3015
3020
|
r"""Execute multiple tools synchronously with
|
|
3016
3021
|
proper content accumulation, using threads+queue for
|
|
3017
3022
|
non-blocking status streaming."""
|
|
3018
3023
|
|
|
3019
|
-
def tool_worker(
|
|
3024
|
+
def tool_worker(result_queue, tool_call_data):
|
|
3020
3025
|
try:
|
|
3021
3026
|
tool_call_record = self._execute_tool_from_stream_data(
|
|
3022
3027
|
tool_call_data
|
|
@@ -3052,36 +3057,22 @@ class ChatAgent(BaseAgent):
|
|
|
3052
3057
|
)
|
|
3053
3058
|
thread.start()
|
|
3054
3059
|
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
f"with arguments
|
|
3060
|
+
# Log debug info instead of adding to content
|
|
3061
|
+
logger.info(
|
|
3062
|
+
f"Calling function: {function_name} with arguments: {args}"
|
|
3058
3063
|
)
|
|
3059
|
-
|
|
3060
|
-
content_accumulator,
|
|
3061
|
-
status_message,
|
|
3062
|
-
"tool_calling",
|
|
3063
|
-
step_token_usage,
|
|
3064
|
-
)
|
|
3065
|
-
yield status_status
|
|
3064
|
+
|
|
3066
3065
|
# wait for tool thread to finish with optional timeout
|
|
3067
3066
|
thread.join(self.tool_execution_timeout)
|
|
3068
3067
|
|
|
3069
3068
|
# If timeout occurred, mark as error and continue
|
|
3070
3069
|
if thread.is_alive():
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
f"{
|
|
3074
|
-
|
|
3075
|
-
timeout_status = (
|
|
3076
|
-
self._create_tool_status_response_with_accumulator(
|
|
3077
|
-
content_accumulator,
|
|
3078
|
-
timeout_msg,
|
|
3079
|
-
"tool_timeout",
|
|
3080
|
-
step_token_usage,
|
|
3081
|
-
)
|
|
3070
|
+
# Log timeout info instead of adding to content
|
|
3071
|
+
logger.warning(
|
|
3072
|
+
f"Function '{function_name}' timed out after "
|
|
3073
|
+
f"{self.tool_execution_timeout} seconds"
|
|
3082
3074
|
)
|
|
3083
|
-
|
|
3084
|
-
logger.error(timeout_msg.strip())
|
|
3075
|
+
|
|
3085
3076
|
# Detach thread (it may still finish later). Skip recording.
|
|
3086
3077
|
continue
|
|
3087
3078
|
|
|
@@ -3091,23 +3082,17 @@ class ChatAgent(BaseAgent):
|
|
|
3091
3082
|
tool_call_records.append(tool_call_record)
|
|
3092
3083
|
raw_result = tool_call_record.result
|
|
3093
3084
|
result_str = str(raw_result)
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
)
|
|
3097
|
-
output_status = (
|
|
3098
|
-
self._create_tool_status_response_with_accumulator(
|
|
3099
|
-
content_accumulator,
|
|
3100
|
-
status_message,
|
|
3101
|
-
"tool_output",
|
|
3102
|
-
step_token_usage,
|
|
3103
|
-
[tool_call_record],
|
|
3104
|
-
)
|
|
3105
|
-
)
|
|
3106
|
-
yield output_status
|
|
3085
|
+
|
|
3086
|
+
# Log debug info instead of adding to content
|
|
3087
|
+
logger.info(f"Function output: {result_str}")
|
|
3107
3088
|
else:
|
|
3108
3089
|
# Error already logged
|
|
3109
3090
|
continue
|
|
3110
3091
|
|
|
3092
|
+
# Ensure this function remains a generator (required by type signature)
|
|
3093
|
+
return
|
|
3094
|
+
yield # This line is never reached but makes this a generator function
|
|
3095
|
+
|
|
3111
3096
|
def _execute_tool_from_stream_data(
|
|
3112
3097
|
self, tool_call_data: Dict[str, Any]
|
|
3113
3098
|
) -> Optional[ToolCallingRecord]:
|
|
@@ -3300,11 +3285,20 @@ class ChatAgent(BaseAgent):
|
|
|
3300
3285
|
return
|
|
3301
3286
|
|
|
3302
3287
|
# Start async streaming response
|
|
3288
|
+
last_response = None
|
|
3303
3289
|
async for response in self._astream_response(
|
|
3304
3290
|
openai_messages, num_tokens, response_format
|
|
3305
3291
|
):
|
|
3292
|
+
last_response = response
|
|
3306
3293
|
yield response
|
|
3307
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
|
+
|
|
3308
3302
|
async def _astream_response(
|
|
3309
3303
|
self,
|
|
3310
3304
|
openai_messages: List[OpenAIMessage],
|
|
@@ -3614,15 +3608,9 @@ class ChatAgent(BaseAgent):
|
|
|
3614
3608
|
):
|
|
3615
3609
|
yield status_response
|
|
3616
3610
|
|
|
3617
|
-
#
|
|
3611
|
+
# Log sending status instead of adding to content
|
|
3618
3612
|
if tool_call_records:
|
|
3619
|
-
|
|
3620
|
-
content_accumulator,
|
|
3621
|
-
"\n------\n\nSending back result to model\n\n",
|
|
3622
|
-
"tool_sending",
|
|
3623
|
-
step_token_usage,
|
|
3624
|
-
)
|
|
3625
|
-
yield sending_status
|
|
3613
|
+
logger.info("Sending back result to model")
|
|
3626
3614
|
|
|
3627
3615
|
# Record final message only if we have content AND no tool
|
|
3628
3616
|
# calls. If there are tool calls, _record_tool_calling
|
|
@@ -3669,21 +3657,10 @@ class ChatAgent(BaseAgent):
|
|
|
3669
3657
|
except json.JSONDecodeError:
|
|
3670
3658
|
args = tool_call_data['function']['arguments']
|
|
3671
3659
|
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
f"with arguments
|
|
3675
|
-
)
|
|
3676
|
-
|
|
3677
|
-
# Immediately yield "Calling function" status
|
|
3678
|
-
calling_status = (
|
|
3679
|
-
self._create_tool_status_response_with_accumulator(
|
|
3680
|
-
content_accumulator,
|
|
3681
|
-
status_message,
|
|
3682
|
-
"tool_calling",
|
|
3683
|
-
step_token_usage,
|
|
3684
|
-
)
|
|
3660
|
+
# Log debug info instead of adding to content
|
|
3661
|
+
logger.info(
|
|
3662
|
+
f"Calling function: {function_name} with arguments: {args}"
|
|
3685
3663
|
)
|
|
3686
|
-
yield calling_status
|
|
3687
3664
|
|
|
3688
3665
|
# Start tool execution asynchronously (non-blocking)
|
|
3689
3666
|
if self.tool_execution_timeout is not None:
|
|
@@ -3716,80 +3693,25 @@ class ChatAgent(BaseAgent):
|
|
|
3716
3693
|
# Create output status message
|
|
3717
3694
|
raw_result = tool_call_record.result
|
|
3718
3695
|
result_str = str(raw_result)
|
|
3719
|
-
status_message = (
|
|
3720
|
-
f"\nFunction output: {result_str}\n---------\n"
|
|
3721
|
-
)
|
|
3722
3696
|
|
|
3723
|
-
#
|
|
3724
|
-
|
|
3725
|
-
output_status = (
|
|
3726
|
-
self._create_tool_status_response_with_accumulator(
|
|
3727
|
-
content_accumulator,
|
|
3728
|
-
status_message,
|
|
3729
|
-
"tool_output",
|
|
3730
|
-
step_token_usage,
|
|
3731
|
-
[tool_call_record],
|
|
3732
|
-
)
|
|
3733
|
-
)
|
|
3734
|
-
yield output_status
|
|
3697
|
+
# Log debug info instead of adding to content
|
|
3698
|
+
logger.info(f"Function output: {result_str}")
|
|
3735
3699
|
|
|
3736
3700
|
except Exception as e:
|
|
3737
3701
|
if isinstance(e, asyncio.TimeoutError):
|
|
3738
|
-
|
|
3739
|
-
|
|
3740
|
-
f"
|
|
3741
|
-
f"
|
|
3742
|
-
)
|
|
3743
|
-
timeout_status = (
|
|
3744
|
-
self._create_tool_status_response_with_accumulator(
|
|
3745
|
-
content_accumulator,
|
|
3746
|
-
timeout_msg,
|
|
3747
|
-
"tool_timeout",
|
|
3748
|
-
step_token_usage,
|
|
3749
|
-
)
|
|
3702
|
+
# Log timeout info instead of adding to content
|
|
3703
|
+
logger.warning(
|
|
3704
|
+
f"Function timed out after "
|
|
3705
|
+
f"{self.tool_execution_timeout} seconds"
|
|
3750
3706
|
)
|
|
3751
|
-
yield timeout_status
|
|
3752
|
-
logger.error("Async tool execution timeout")
|
|
3753
3707
|
else:
|
|
3754
3708
|
logger.error(f"Error in async tool execution: {e}")
|
|
3755
3709
|
continue
|
|
3756
3710
|
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
status_type: str,
|
|
3762
|
-
step_token_usage: Dict[str, int],
|
|
3763
|
-
tool_calls: Optional[List[ToolCallingRecord]] = None,
|
|
3764
|
-
) -> ChatAgentResponse:
|
|
3765
|
-
r"""Create a tool status response using content accumulator."""
|
|
3766
|
-
|
|
3767
|
-
# Add this status message to accumulator and get full content
|
|
3768
|
-
accumulator.add_tool_status(status_message)
|
|
3769
|
-
full_content = accumulator.get_full_content()
|
|
3770
|
-
|
|
3771
|
-
message = BaseMessage(
|
|
3772
|
-
role_name=self.role_name,
|
|
3773
|
-
role_type=self.role_type,
|
|
3774
|
-
meta_dict={},
|
|
3775
|
-
content=full_content,
|
|
3776
|
-
)
|
|
3777
|
-
|
|
3778
|
-
return ChatAgentResponse(
|
|
3779
|
-
msgs=[message],
|
|
3780
|
-
terminated=False,
|
|
3781
|
-
info={
|
|
3782
|
-
"id": "",
|
|
3783
|
-
"usage": step_token_usage.copy(),
|
|
3784
|
-
"finish_reasons": [status_type],
|
|
3785
|
-
"num_tokens": self._get_token_count(full_content),
|
|
3786
|
-
"tool_calls": tool_calls or [],
|
|
3787
|
-
"external_tool_requests": None,
|
|
3788
|
-
"streaming": True,
|
|
3789
|
-
"tool_status": status_type,
|
|
3790
|
-
"partial": True,
|
|
3791
|
-
},
|
|
3792
|
-
)
|
|
3711
|
+
# Ensure this function remains an async generator
|
|
3712
|
+
return
|
|
3713
|
+
# This line is never reached but makes this an async generator function
|
|
3714
|
+
yield
|
|
3793
3715
|
|
|
3794
3716
|
def _create_streaming_response_with_accumulator(
|
|
3795
3717
|
self,
|
|
@@ -3901,6 +3823,7 @@ class ChatAgent(BaseAgent):
|
|
|
3901
3823
|
stop_event=self.stop_event,
|
|
3902
3824
|
tool_execution_timeout=self.tool_execution_timeout,
|
|
3903
3825
|
pause_event=self.pause_event,
|
|
3826
|
+
prune_tool_calls_from_memory=self.prune_tool_calls_from_memory,
|
|
3904
3827
|
)
|
|
3905
3828
|
|
|
3906
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
|
|
|
@@ -243,7 +243,7 @@ class GeminiModel(OpenAICompatibleModel):
|
|
|
243
243
|
function_dict = tool.get('function', {})
|
|
244
244
|
function_dict.pop("strict", None)
|
|
245
245
|
|
|
246
|
-
# Process parameters to remove anyOf
|
|
246
|
+
# Process parameters to remove anyOf and handle enum/format
|
|
247
247
|
if 'parameters' in function_dict:
|
|
248
248
|
params = function_dict['parameters']
|
|
249
249
|
if 'properties' in params:
|
|
@@ -260,6 +260,20 @@ class GeminiModel(OpenAICompatibleModel):
|
|
|
260
260
|
'description'
|
|
261
261
|
] = prop_value['description']
|
|
262
262
|
|
|
263
|
+
# Handle enum and format restrictions for Gemini
|
|
264
|
+
# API enum: only allowed for string type
|
|
265
|
+
if prop_value.get('type') != 'string':
|
|
266
|
+
prop_value.pop('enum', None)
|
|
267
|
+
|
|
268
|
+
# format: only allowed for string, integer, and
|
|
269
|
+
# number types
|
|
270
|
+
if prop_value.get('type') not in [
|
|
271
|
+
'string',
|
|
272
|
+
'integer',
|
|
273
|
+
'number',
|
|
274
|
+
]:
|
|
275
|
+
prop_value.pop('format', None)
|
|
276
|
+
|
|
263
277
|
request_config["tools"] = tools
|
|
264
278
|
|
|
265
279
|
return self._client.chat.completions.create(
|
|
@@ -283,7 +297,7 @@ class GeminiModel(OpenAICompatibleModel):
|
|
|
283
297
|
function_dict = tool.get('function', {})
|
|
284
298
|
function_dict.pop("strict", None)
|
|
285
299
|
|
|
286
|
-
# Process parameters to remove anyOf
|
|
300
|
+
# Process parameters to remove anyOf and handle enum/format
|
|
287
301
|
if 'parameters' in function_dict:
|
|
288
302
|
params = function_dict['parameters']
|
|
289
303
|
if 'properties' in params:
|
|
@@ -300,6 +314,20 @@ class GeminiModel(OpenAICompatibleModel):
|
|
|
300
314
|
'description'
|
|
301
315
|
] = prop_value['description']
|
|
302
316
|
|
|
317
|
+
# Handle enum and format restrictions for Gemini
|
|
318
|
+
# API enum: only allowed for string type
|
|
319
|
+
if prop_value.get('type') != 'string':
|
|
320
|
+
prop_value.pop('enum', None)
|
|
321
|
+
|
|
322
|
+
# format: only allowed for string, integer, and
|
|
323
|
+
# number types
|
|
324
|
+
if prop_value.get('type') not in [
|
|
325
|
+
'string',
|
|
326
|
+
'integer',
|
|
327
|
+
'number',
|
|
328
|
+
]:
|
|
329
|
+
prop_value.pop('format', None)
|
|
330
|
+
|
|
303
331
|
request_config["tools"] = tools
|
|
304
332
|
|
|
305
333
|
return await self._async_client.chat.completions.create(
|