camel-ai 0.2.69a4__tar.gz → 0.2.69a7__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.69a4 → camel_ai-0.2.69a7}/PKG-INFO +5 -6
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/__init__.py +1 -1
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/chat_agent.py +220 -7
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/internal_python_interpreter.py +51 -2
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/context_creators/score_based.py +11 -6
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/base.py +2 -2
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/base_model.py +91 -2
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/workforce.py +214 -22
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/__init__.py +2 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/__init__.py +2 -0
- camel_ai-0.2.69a7/camel/storages/vectordb_storages/chroma.py +731 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/tasks/task.py +30 -2
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/__init__.py +8 -1
- camel_ai-0.2.69a7/camel/toolkits/craw4ai_toolkit.py +73 -0
- camel_ai-0.2.69a7/camel/toolkits/edgeone_pages_mcp_toolkit.py +69 -0
- camel_ai-0.2.69a7/camel/toolkits/excel_toolkit.py +939 -0
- camel_ai-0.2.69a7/camel/toolkits/google_drive_mcp_toolkit.py +73 -0
- camel_ai-0.2.69a7/camel/toolkits/markitdown_toolkit.py +78 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/mcp_toolkit.py +31 -1
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/browser_non_visual_toolkit.py +91 -57
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/types/enums.py +6 -6
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/pyproject.toml +8 -10
- camel_ai-0.2.69a4/camel/toolkits/excel_toolkit.py +0 -194
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/.gitignore +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/LICENSE +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/README.md +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/_types.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/_utils.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/critic_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/deductive_reasoner_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/embodied_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/knowledge_graph_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/mcp_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/multi_hop_generator_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/programmed_agent_instruction.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/repo_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/role_assignment_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/search_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/task_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/tool_agents/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/tool_agents/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/apibank.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/apibench.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/browsecomp.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/gaia.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/README.md +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/mock_web.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/requirements.txt +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/mock_website/task.json +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/nexus.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/benchmarks/ragbench.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/discord/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/discord/discord_app.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/discord/discord_installation.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/discord/discord_store.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/slack/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/slack/models.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/slack/slack_app.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/bots/telegram_bot.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/aiml_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/anthropic_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/base_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/bedrock_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/cohere_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/crynux_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/deepseek_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/gemini_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/groq_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/internlm_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/litellm_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/lmstudio_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/mistral_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/modelscope_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/moonshot_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/netmind_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/novita_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/nvidia_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/ollama_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/openai_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/openrouter_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/ppio_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/qianfan_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/qwen_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/reka_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/samba_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/sglang_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/siliconflow_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/togetherai_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/vllm_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/watsonx_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/yi_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/configs/zhipuai_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/data_collectors/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/data_collectors/alpaca_collector.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/data_collectors/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/data_collectors/sharegpt_collector.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/cot_datagen.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/evol_instruct/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/evol_instruct/scorer.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/evol_instruct/templates.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/self_improving_cot.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/filter/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/self_instruct.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/self_instruct/templates.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/source2synth/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/source2synth/data_processor.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/source2synth/models.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datahubs/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datahubs/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datahubs/huggingface.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datahubs/models.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datasets/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datasets/base_generator.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datasets/few_shot_generator.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datasets/models.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datasets/self_instruct_generator.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/datasets/static_dataset.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/azure_embedding.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/gemini_embedding.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/jina_embedding.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/mistral_embedding.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/openai_compatible_embedding.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/openai_embedding.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/together_embedding.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/embeddings/vlm_embedding.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/environments/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/environments/models.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/environments/multi_step.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/environments/rlcards_env.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/environments/single_step.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/environments/tic_tac_toe.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/extractors/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/extractors/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/extractors/python_strategies.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/generators.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/human.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/docker/Dockerfile +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/docker_interpreter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/e2b_interpreter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/interpreter_error.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/ipython_interpreter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/interpreters/subprocess_interpreter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/apify_reader.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/base_io.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/chunkr_reader.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/crawl4ai_reader.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/firecrawl_reader.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/jina_url_reader.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/markitdown.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/mineru_extractor.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/mistral_reader.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/pandas_reader.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/scrapegraph_reader.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/loaders/unstructured_io.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/logger.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/agent_memories.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/blocks/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/blocks/chat_history_block.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/blocks/vectordb_block.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/context_creators/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/memories/records.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/conversion/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/conversion/alpaca.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/conversion/conversation_models.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/conversion/sharegpt/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/messages/func_message.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/_utils.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/aiml_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/anthropic_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/aws_bedrock_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/azure_openai_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/base_audio_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/cohere_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/crynux_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/deepseek_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/fish_audio_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/gemini_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/groq_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/internlm_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/litellm_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/lmstudio_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/mistral_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/model_factory.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/model_manager.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/modelscope_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/moonshot_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/nemotron_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/netmind_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/novita_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/nvidia_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/ollama_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/openai_audio_models.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/openai_compatible_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/openai_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/openrouter_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/ppio_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/qianfan_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/qwen_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/reka_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/reward/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/reward/base_reward_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/reward/evaluator.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/reward/nemotron_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/reward/skywork_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/samba_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/sglang_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/siliconflow_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/stub_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/togetherai_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/vllm_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/volcano_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/watsonx_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/yi_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/models/zhipuai_model.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/personas/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/personas/persona.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/personas/persona_hub.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/ai_society.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/code.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/evaluation.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/generate_text_embedding_data.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/image_craft.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/misalignment.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/multi_condition_image_craft.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/object_recognition.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/persona_hub.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/prompt_templates.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/role_description_prompt_template.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/solution_extraction.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/task_prompt_template.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/translation.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/prompts/video_description_prompt.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/py.typed +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/responses/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/responses/agent_responses.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/retrievers/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/retrievers/auto_retriever.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/retrievers/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/retrievers/bm25_retriever.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/retrievers/cohere_rerank_retriever.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/retrievers/hybrid_retrival.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/retrievers/vector_retriever.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/api.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/configs.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/daytona_runtime.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/docker_runtime.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/llm_guard_runtime.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/remote_http_runtime.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/utils/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/schemas/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/schemas/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/schemas/openai_converter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/schemas/outlines_converter.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/babyagi_playing.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/role_playing.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/prompts.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/role_playing_worker.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/single_agent_worker.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/task_channel.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/utils.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/worker.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/societies/workforce/workforce_logger.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/graph_storages/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/graph_storages/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/graph_storages/graph_element.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/graph_storages/nebula_graph.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/graph_storages/neo4j_graph.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/in_memory.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/json.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/key_value_storages/redis.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/object_storages/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/object_storages/amazon_s3.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/object_storages/azure_blob.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/object_storages/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/object_storages/google_cloud.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/faiss.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/milvus.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/oceanbase.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/qdrant.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/tidb.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/storages/vectordb_storages/weaviate.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/tasks/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/tasks/task_prompt.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/terminators/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/terminators/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/terminators/response_terminator.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/terminators/token_limit_terminator.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/aci_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/arxiv_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/ask_news_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/async_browser_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/audio_analysis_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/bohrium_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/browser_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/browser_toolkit_commons.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/code_execution.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/dalle_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/dappier_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/data_commons_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/file_write_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/function_tool.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/github_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/google_calendar_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/google_maps_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/google_scholar_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/human_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/image_analysis_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/jina_reranker_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/klavis_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/linkedin_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/math_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/memory_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/meshy_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/mineru_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/networkx_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/actions.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/agent.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/nv_browser_session.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/snapshot.js +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/non_visual_browser_toolkit/snapshot.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/notion_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/security_config.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/open_api_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/openai_agent_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/openbb_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/page_script.js +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/pptx_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/pubmed_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/pyautogui_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/reddit_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/retrieval_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/search_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/searxng_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/slack_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/stripe_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/sympy_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/task_planning_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/terminal_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/thinking_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/twitter_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/video_analysis_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/video_download_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/weather_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/whatsapp_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/toolkits/zapier_toolkit.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/types/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/types/agents/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/types/agents/tool_calling_record.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/types/mcp_registries.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/types/openai_types.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/types/unified_model_type.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/async_func.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/chunker/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/chunker/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/chunker/code_chunker.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/chunker/uio_chunker.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/commons.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/constants.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/deduplication.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/filename.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/langfuse.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/mcp.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/mcp_client.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/response_format.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/utils/token_counting.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/verifiers/__init__.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/verifiers/base.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/verifiers/math_verifier.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/verifiers/models.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/camel/verifiers/physics_verifier.py +0 -0
- {camel_ai-0.2.69a4 → camel_ai-0.2.69a7}/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.69a7
|
|
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
|
|
@@ -31,6 +31,7 @@ Requires-Dist: arxiv<3,>=2.1.3; extra == 'all'
|
|
|
31
31
|
Requires-Dist: azure-storage-blob<13,>=12.21.0; extra == 'all'
|
|
32
32
|
Requires-Dist: beautifulsoup4<5,>=4; extra == 'all'
|
|
33
33
|
Requires-Dist: botocore<2,>=1.35.3; extra == 'all'
|
|
34
|
+
Requires-Dist: chromadb<1.0.0,>=0.6.0; extra == 'all'
|
|
34
35
|
Requires-Dist: chunkr-ai>=0.0.50; extra == 'all'
|
|
35
36
|
Requires-Dist: cohere<6,>=5.11.0; extra == 'all'
|
|
36
37
|
Requires-Dist: crawl4ai>=0.3.745; extra == 'all'
|
|
@@ -176,7 +177,7 @@ Requires-Dist: types-pyyaml<7,>=6.0.12; extra == 'dev'
|
|
|
176
177
|
Requires-Dist: types-requests<3,>=2.31.0; extra == 'dev'
|
|
177
178
|
Requires-Dist: types-setuptools<70,>=69.2.0; extra == 'dev'
|
|
178
179
|
Requires-Dist: types-tqdm<5,>=4.66.0; extra == 'dev'
|
|
179
|
-
Requires-Dist: uv
|
|
180
|
+
Requires-Dist: uv<0.8,>=0.7.0; extra == 'dev'
|
|
180
181
|
Provides-Extra: dev-tools
|
|
181
182
|
Requires-Dist: aci-sdk>=1.0.0b1; extra == 'dev-tools'
|
|
182
183
|
Requires-Dist: agentops<0.4,>=0.3.21; extra == 'dev-tools'
|
|
@@ -288,6 +289,7 @@ Requires-Dist: wikipedia<2,>=1; extra == 'owl'
|
|
|
288
289
|
Requires-Dist: xls2xlsx>=0.2.0; extra == 'owl'
|
|
289
290
|
Requires-Dist: yt-dlp<2025,>=2024.11.4; extra == 'owl'
|
|
290
291
|
Provides-Extra: rag
|
|
292
|
+
Requires-Dist: chromadb<1.0.0,>=0.6.0; extra == 'rag'
|
|
291
293
|
Requires-Dist: chunkr-ai>=0.0.50; extra == 'rag'
|
|
292
294
|
Requires-Dist: cohere<6,>=5.11.0; extra == 'rag'
|
|
293
295
|
Requires-Dist: crawl4ai>=0.3.745; extra == 'rag'
|
|
@@ -311,6 +313,7 @@ Requires-Dist: scholarly[tor]==1.7.11; extra == 'research-tools'
|
|
|
311
313
|
Provides-Extra: storage
|
|
312
314
|
Requires-Dist: azure-storage-blob<13,>=12.21.0; extra == 'storage'
|
|
313
315
|
Requires-Dist: botocore<2,>=1.35.3; extra == 'storage'
|
|
316
|
+
Requires-Dist: chromadb<1.0.0,>=0.6.0; extra == 'storage'
|
|
314
317
|
Requires-Dist: faiss-cpu<2,>=1.7.2; extra == 'storage'
|
|
315
318
|
Requires-Dist: google-cloud-storage<3,>=2.18.0; extra == 'storage'
|
|
316
319
|
Requires-Dist: mem0ai>=0.1.73; extra == 'storage'
|
|
@@ -322,10 +325,6 @@ Requires-Dist: pytidb-experimental==0.0.1.dev4; extra == 'storage'
|
|
|
322
325
|
Requires-Dist: qdrant-client<2,>=1.9.0; extra == 'storage'
|
|
323
326
|
Requires-Dist: redis<6,>=5.0.6; extra == 'storage'
|
|
324
327
|
Requires-Dist: weaviate-client>=4.15.0; extra == 'storage'
|
|
325
|
-
Provides-Extra: test
|
|
326
|
-
Requires-Dist: mock<6,>=5; extra == 'test'
|
|
327
|
-
Requires-Dist: pytest-asyncio<0.24,>=0.23.0; extra == 'test'
|
|
328
|
-
Requires-Dist: pytest<8,>=7; extra == 'test'
|
|
329
328
|
Provides-Extra: web-tools
|
|
330
329
|
Requires-Dist: apify-client<2,>=1.8.1; extra == 'web-tools'
|
|
331
330
|
Requires-Dist: beautifulsoup4<5,>=4; extra == 'web-tools'
|
|
@@ -406,7 +406,10 @@ class ChatAgent(BaseAgent):
|
|
|
406
406
|
# List of tuples (platform, type)
|
|
407
407
|
resolved_models_list = []
|
|
408
408
|
for model_spec in model_list:
|
|
409
|
-
platform, type_ =
|
|
409
|
+
platform, type_ = ( # type: ignore[index]
|
|
410
|
+
model_spec[0],
|
|
411
|
+
model_spec[1],
|
|
412
|
+
)
|
|
410
413
|
resolved_models_list.append(
|
|
411
414
|
ModelFactory.create(
|
|
412
415
|
model_platform=platform, model_type=type_
|
|
@@ -846,6 +849,185 @@ class ChatAgent(BaseAgent):
|
|
|
846
849
|
except ValidationError:
|
|
847
850
|
return False
|
|
848
851
|
|
|
852
|
+
def _check_tools_strict_compatibility(self) -> bool:
|
|
853
|
+
r"""Check if all tools are compatible with OpenAI strict mode.
|
|
854
|
+
|
|
855
|
+
Returns:
|
|
856
|
+
bool: True if all tools are strict mode compatible,
|
|
857
|
+
False otherwise.
|
|
858
|
+
"""
|
|
859
|
+
tool_schemas = self._get_full_tool_schemas()
|
|
860
|
+
for schema in tool_schemas:
|
|
861
|
+
if not schema.get("function", {}).get("strict", True):
|
|
862
|
+
return False
|
|
863
|
+
return True
|
|
864
|
+
|
|
865
|
+
def _convert_response_format_to_prompt(
|
|
866
|
+
self, response_format: Type[BaseModel]
|
|
867
|
+
) -> str:
|
|
868
|
+
r"""Convert a Pydantic response format to a prompt instruction.
|
|
869
|
+
|
|
870
|
+
Args:
|
|
871
|
+
response_format (Type[BaseModel]): The Pydantic model class.
|
|
872
|
+
|
|
873
|
+
Returns:
|
|
874
|
+
str: A prompt instruction requesting the specific format.
|
|
875
|
+
"""
|
|
876
|
+
try:
|
|
877
|
+
# Get the JSON schema from the Pydantic model
|
|
878
|
+
schema = response_format.model_json_schema()
|
|
879
|
+
|
|
880
|
+
# Create a prompt based on the schema
|
|
881
|
+
format_instruction = (
|
|
882
|
+
"\n\nPlease respond in the following JSON format:\n" "{\n"
|
|
883
|
+
)
|
|
884
|
+
|
|
885
|
+
properties = schema.get("properties", {})
|
|
886
|
+
for field_name, field_info in properties.items():
|
|
887
|
+
field_type = field_info.get("type", "string")
|
|
888
|
+
description = field_info.get("description", "")
|
|
889
|
+
|
|
890
|
+
if field_type == "array":
|
|
891
|
+
format_instruction += (
|
|
892
|
+
f' "{field_name}": ["array of values"]'
|
|
893
|
+
)
|
|
894
|
+
elif field_type == "object":
|
|
895
|
+
format_instruction += f' "{field_name}": {{"object"}}'
|
|
896
|
+
elif field_type == "boolean":
|
|
897
|
+
format_instruction += f' "{field_name}": true'
|
|
898
|
+
elif field_type == "number":
|
|
899
|
+
format_instruction += f' "{field_name}": 0'
|
|
900
|
+
else:
|
|
901
|
+
format_instruction += f' "{field_name}": "string value"'
|
|
902
|
+
|
|
903
|
+
if description:
|
|
904
|
+
format_instruction += f' // {description}'
|
|
905
|
+
|
|
906
|
+
# Add comma if not the last item
|
|
907
|
+
if field_name != list(properties.keys())[-1]:
|
|
908
|
+
format_instruction += ","
|
|
909
|
+
format_instruction += "\n"
|
|
910
|
+
|
|
911
|
+
format_instruction += "}"
|
|
912
|
+
return format_instruction
|
|
913
|
+
|
|
914
|
+
except Exception as e:
|
|
915
|
+
logger.warning(
|
|
916
|
+
f"Failed to convert response_format to prompt: {e}. "
|
|
917
|
+
f"Using generic format instruction."
|
|
918
|
+
)
|
|
919
|
+
return (
|
|
920
|
+
"\n\nPlease respond in a structured JSON format "
|
|
921
|
+
"that matches the requested schema."
|
|
922
|
+
)
|
|
923
|
+
|
|
924
|
+
def _handle_response_format_with_non_strict_tools(
|
|
925
|
+
self,
|
|
926
|
+
input_message: Union[BaseMessage, str],
|
|
927
|
+
response_format: Optional[Type[BaseModel]] = None,
|
|
928
|
+
) -> Tuple[Union[BaseMessage, str], Optional[Type[BaseModel]], bool]:
|
|
929
|
+
r"""Handle response format when tools are not strict mode compatible.
|
|
930
|
+
|
|
931
|
+
Args:
|
|
932
|
+
input_message: The original input message.
|
|
933
|
+
response_format: The requested response format.
|
|
934
|
+
|
|
935
|
+
Returns:
|
|
936
|
+
Tuple: (modified_message, modified_response_format,
|
|
937
|
+
used_prompt_formatting)
|
|
938
|
+
"""
|
|
939
|
+
if response_format is None:
|
|
940
|
+
return input_message, response_format, False
|
|
941
|
+
|
|
942
|
+
# Check if tools are strict mode compatible
|
|
943
|
+
if self._check_tools_strict_compatibility():
|
|
944
|
+
return input_message, response_format, False
|
|
945
|
+
|
|
946
|
+
# Tools are not strict compatible, convert to prompt
|
|
947
|
+
logger.info(
|
|
948
|
+
"Non-strict tools detected. Converting response_format to "
|
|
949
|
+
"prompt-based formatting."
|
|
950
|
+
)
|
|
951
|
+
|
|
952
|
+
format_prompt = self._convert_response_format_to_prompt(
|
|
953
|
+
response_format
|
|
954
|
+
)
|
|
955
|
+
|
|
956
|
+
# Modify the message to include format instruction
|
|
957
|
+
modified_message: Union[BaseMessage, str]
|
|
958
|
+
if isinstance(input_message, str):
|
|
959
|
+
modified_message = input_message + format_prompt
|
|
960
|
+
else:
|
|
961
|
+
modified_message = input_message.create_new_instance(
|
|
962
|
+
input_message.content + format_prompt
|
|
963
|
+
)
|
|
964
|
+
|
|
965
|
+
# Return None for response_format to avoid strict mode conflicts
|
|
966
|
+
# and True to indicate we used prompt formatting
|
|
967
|
+
return modified_message, None, True
|
|
968
|
+
|
|
969
|
+
def _apply_prompt_based_parsing(
|
|
970
|
+
self,
|
|
971
|
+
response: ModelResponse,
|
|
972
|
+
original_response_format: Type[BaseModel],
|
|
973
|
+
) -> None:
|
|
974
|
+
r"""Apply manual parsing when using prompt-based formatting.
|
|
975
|
+
|
|
976
|
+
Args:
|
|
977
|
+
response: The model response to parse.
|
|
978
|
+
original_response_format: The original response format class.
|
|
979
|
+
"""
|
|
980
|
+
for message in response.output_messages:
|
|
981
|
+
if message.content:
|
|
982
|
+
try:
|
|
983
|
+
# Try to extract JSON from the response content
|
|
984
|
+
import json
|
|
985
|
+
import re
|
|
986
|
+
|
|
987
|
+
from pydantic import ValidationError
|
|
988
|
+
|
|
989
|
+
# Try to find JSON in the content
|
|
990
|
+
content = message.content.strip()
|
|
991
|
+
|
|
992
|
+
# Try direct parsing first
|
|
993
|
+
try:
|
|
994
|
+
parsed_json = json.loads(content)
|
|
995
|
+
message.parsed = (
|
|
996
|
+
original_response_format.model_validate(
|
|
997
|
+
parsed_json
|
|
998
|
+
)
|
|
999
|
+
)
|
|
1000
|
+
continue
|
|
1001
|
+
except (json.JSONDecodeError, ValidationError):
|
|
1002
|
+
pass
|
|
1003
|
+
|
|
1004
|
+
# Try to extract JSON from text
|
|
1005
|
+
json_pattern = r'\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}'
|
|
1006
|
+
json_matches = re.findall(json_pattern, content, re.DOTALL)
|
|
1007
|
+
|
|
1008
|
+
for json_str in json_matches:
|
|
1009
|
+
try:
|
|
1010
|
+
parsed_json = json.loads(json_str)
|
|
1011
|
+
message.parsed = (
|
|
1012
|
+
original_response_format.model_validate(
|
|
1013
|
+
parsed_json
|
|
1014
|
+
)
|
|
1015
|
+
)
|
|
1016
|
+
# Update content to just the JSON for consistency
|
|
1017
|
+
message.content = json.dumps(parsed_json)
|
|
1018
|
+
break
|
|
1019
|
+
except (json.JSONDecodeError, ValidationError):
|
|
1020
|
+
continue
|
|
1021
|
+
|
|
1022
|
+
if not message.parsed:
|
|
1023
|
+
logger.warning(
|
|
1024
|
+
f"Failed to parse JSON from response: "
|
|
1025
|
+
f"{content[:100]}..."
|
|
1026
|
+
)
|
|
1027
|
+
|
|
1028
|
+
except Exception as e:
|
|
1029
|
+
logger.warning(f"Error during prompt-based parsing: {e}")
|
|
1030
|
+
|
|
849
1031
|
def _format_response_if_needed(
|
|
850
1032
|
self,
|
|
851
1033
|
response: ModelResponse,
|
|
@@ -932,6 +1114,14 @@ class ChatAgent(BaseAgent):
|
|
|
932
1114
|
except ImportError:
|
|
933
1115
|
pass # Langfuse not available
|
|
934
1116
|
|
|
1117
|
+
# Handle response format compatibility with non-strict tools
|
|
1118
|
+
original_response_format = response_format
|
|
1119
|
+
input_message, response_format, used_prompt_formatting = (
|
|
1120
|
+
self._handle_response_format_with_non_strict_tools(
|
|
1121
|
+
input_message, response_format
|
|
1122
|
+
)
|
|
1123
|
+
)
|
|
1124
|
+
|
|
935
1125
|
# Convert input message to BaseMessage if necessary
|
|
936
1126
|
if isinstance(input_message, str):
|
|
937
1127
|
input_message = BaseMessage.make_user_message(
|
|
@@ -1014,6 +1204,13 @@ class ChatAgent(BaseAgent):
|
|
|
1014
1204
|
break
|
|
1015
1205
|
|
|
1016
1206
|
self._format_response_if_needed(response, response_format)
|
|
1207
|
+
|
|
1208
|
+
# Apply manual parsing if we used prompt-based formatting
|
|
1209
|
+
if used_prompt_formatting and original_response_format:
|
|
1210
|
+
self._apply_prompt_based_parsing(
|
|
1211
|
+
response, original_response_format
|
|
1212
|
+
)
|
|
1213
|
+
|
|
1017
1214
|
self._record_final_output(response.output_messages)
|
|
1018
1215
|
|
|
1019
1216
|
return self._convert_to_chatagent_response(
|
|
@@ -1065,6 +1262,14 @@ class ChatAgent(BaseAgent):
|
|
|
1065
1262
|
except ImportError:
|
|
1066
1263
|
pass # Langfuse not available
|
|
1067
1264
|
|
|
1265
|
+
# Handle response format compatibility with non-strict tools
|
|
1266
|
+
original_response_format = response_format
|
|
1267
|
+
input_message, response_format, used_prompt_formatting = (
|
|
1268
|
+
self._handle_response_format_with_non_strict_tools(
|
|
1269
|
+
input_message, response_format
|
|
1270
|
+
)
|
|
1271
|
+
)
|
|
1272
|
+
|
|
1068
1273
|
if isinstance(input_message, str):
|
|
1069
1274
|
input_message = BaseMessage.make_user_message(
|
|
1070
1275
|
role_name="User", content=input_message
|
|
@@ -1098,6 +1303,11 @@ class ChatAgent(BaseAgent):
|
|
|
1098
1303
|
)
|
|
1099
1304
|
iteration_count += 1
|
|
1100
1305
|
|
|
1306
|
+
# Accumulate API token usage
|
|
1307
|
+
self._update_token_usage_tracker(
|
|
1308
|
+
step_token_usage, response.usage_dict
|
|
1309
|
+
)
|
|
1310
|
+
|
|
1101
1311
|
# Terminate Agent if stop_event is set
|
|
1102
1312
|
if self.stop_event and self.stop_event.is_set():
|
|
1103
1313
|
# Use the _step_terminate to terminate the agent with reason
|
|
@@ -1139,13 +1349,14 @@ class ChatAgent(BaseAgent):
|
|
|
1139
1349
|
break
|
|
1140
1350
|
|
|
1141
1351
|
await self._aformat_response_if_needed(response, response_format)
|
|
1142
|
-
self._record_final_output(response.output_messages)
|
|
1143
1352
|
|
|
1144
|
-
#
|
|
1145
|
-
|
|
1353
|
+
# Apply manual parsing if we used prompt-based formatting
|
|
1354
|
+
if used_prompt_formatting and original_response_format:
|
|
1355
|
+
self._apply_prompt_based_parsing(
|
|
1356
|
+
response, original_response_format
|
|
1357
|
+
)
|
|
1146
1358
|
|
|
1147
|
-
|
|
1148
|
-
self._update_token_usage_tracker(step_token_usage, response.usage_dict)
|
|
1359
|
+
self._record_final_output(response.output_messages)
|
|
1149
1360
|
|
|
1150
1361
|
return self._convert_to_chatagent_response(
|
|
1151
1362
|
response,
|
|
@@ -1924,7 +2135,9 @@ class ChatAgent(BaseAgent):
|
|
|
1924
2135
|
schema for schema in self._external_tool_schemas.values()
|
|
1925
2136
|
],
|
|
1926
2137
|
response_terminators=self.response_terminators,
|
|
1927
|
-
scheduling_strategy=
|
|
2138
|
+
scheduling_strategy=(
|
|
2139
|
+
self.model_backend.scheduling_strategy.__name__
|
|
2140
|
+
),
|
|
1928
2141
|
max_iteration=self.max_iteration,
|
|
1929
2142
|
stop_event=self.stop_event,
|
|
1930
2143
|
)
|
|
@@ -79,6 +79,9 @@ class InternalPythonInterpreter(BaseInterpreter):
|
|
|
79
79
|
(default: :obj:`False`)
|
|
80
80
|
raise_error (bool, optional): Raise error if the interpreter fails.
|
|
81
81
|
(default: :obj:`False`)
|
|
82
|
+
allow_builtins (bool, optional): If `True`, safe built-in functions
|
|
83
|
+
like print, len, str, etc. are added to the action space.
|
|
84
|
+
(default: :obj:`True`)
|
|
82
85
|
"""
|
|
83
86
|
|
|
84
87
|
_CODE_TYPES: ClassVar[List[str]] = ["python", "py", "python3", "python2"]
|
|
@@ -89,16 +92,62 @@ class InternalPythonInterpreter(BaseInterpreter):
|
|
|
89
92
|
import_white_list: Optional[List[str]] = None,
|
|
90
93
|
unsafe_mode: bool = False,
|
|
91
94
|
raise_error: bool = False,
|
|
95
|
+
allow_builtins: bool = True,
|
|
92
96
|
) -> None:
|
|
93
97
|
self.action_space = action_space or dict()
|
|
94
|
-
# Add print to action space
|
|
95
|
-
self.action_space['print'] = print
|
|
96
98
|
self.state = self.action_space.copy()
|
|
97
99
|
self.fuzz_state: Dict[str, Any] = dict()
|
|
98
100
|
self.import_white_list = import_white_list or list()
|
|
99
101
|
self.raise_error = raise_error
|
|
100
102
|
self.unsafe_mode = unsafe_mode
|
|
101
103
|
|
|
104
|
+
# Add safe built-in functions if allowed
|
|
105
|
+
if allow_builtins:
|
|
106
|
+
self._add_safe_builtins()
|
|
107
|
+
|
|
108
|
+
def _add_safe_builtins(self):
|
|
109
|
+
r"""Add safe built-in functions to the action space."""
|
|
110
|
+
safe_builtins = {
|
|
111
|
+
'print': print,
|
|
112
|
+
'len': len,
|
|
113
|
+
'str': str,
|
|
114
|
+
'int': int,
|
|
115
|
+
'float': float,
|
|
116
|
+
'bool': bool,
|
|
117
|
+
'list': list,
|
|
118
|
+
'dict': dict,
|
|
119
|
+
'tuple': tuple,
|
|
120
|
+
'set': set,
|
|
121
|
+
'abs': abs,
|
|
122
|
+
'min': min,
|
|
123
|
+
'max': max,
|
|
124
|
+
'sum': sum,
|
|
125
|
+
'sorted': sorted,
|
|
126
|
+
'reversed': reversed,
|
|
127
|
+
'enumerate': enumerate,
|
|
128
|
+
'zip': zip,
|
|
129
|
+
'range': range,
|
|
130
|
+
'round': round,
|
|
131
|
+
'type': type,
|
|
132
|
+
'isinstance': isinstance,
|
|
133
|
+
'hasattr': hasattr,
|
|
134
|
+
'getattr': getattr,
|
|
135
|
+
'setattr': setattr,
|
|
136
|
+
'dir': dir,
|
|
137
|
+
'help': help,
|
|
138
|
+
'map': map,
|
|
139
|
+
'filter': filter,
|
|
140
|
+
'any': any,
|
|
141
|
+
'all': all,
|
|
142
|
+
'ord': ord,
|
|
143
|
+
'chr': chr,
|
|
144
|
+
'bin': bin,
|
|
145
|
+
'oct': oct,
|
|
146
|
+
'hex': hex,
|
|
147
|
+
}
|
|
148
|
+
self.action_space.update(safe_builtins)
|
|
149
|
+
self.state.update(safe_builtins)
|
|
150
|
+
|
|
102
151
|
def run(self, code: str, code_type: str = "python") -> str:
|
|
103
152
|
r"""Executes the given code with specified code type in the
|
|
104
153
|
interpreter.
|
|
@@ -155,16 +155,21 @@ class ScoreBasedContextCreator(BaseContextCreator):
|
|
|
155
155
|
# ======================
|
|
156
156
|
# 6. Truncation Logic with Tool Call Awareness
|
|
157
157
|
# ======================
|
|
158
|
-
logger.warning(
|
|
159
|
-
f"Context truncation required "
|
|
160
|
-
f"({total_tokens} > {self.token_limit}), "
|
|
161
|
-
f"pruning low-score messages."
|
|
162
|
-
)
|
|
163
|
-
|
|
164
158
|
remaining_units = self._truncate_with_tool_call_awareness(
|
|
165
159
|
regular_units, tool_call_groups, system_tokens
|
|
166
160
|
)
|
|
167
161
|
|
|
162
|
+
# Log only after truncation is actually performed so that both
|
|
163
|
+
# the original and the final token counts are visible.
|
|
164
|
+
tokens_after = system_tokens + sum(
|
|
165
|
+
u.num_tokens for u in remaining_units
|
|
166
|
+
)
|
|
167
|
+
logger.warning(
|
|
168
|
+
"Context truncation performed: "
|
|
169
|
+
f"before={total_tokens}, after={tokens_after}, "
|
|
170
|
+
f"limit={self.token_limit}"
|
|
171
|
+
)
|
|
172
|
+
|
|
168
173
|
# ======================
|
|
169
174
|
# 7. Output Assembly
|
|
170
175
|
# ======================
|
|
@@ -69,7 +69,7 @@ class BaseMessage:
|
|
|
69
69
|
image_detail (Literal["auto", "low", "high"]): Detail level of the
|
|
70
70
|
images associated with the message. (default: :obj:`auto`)
|
|
71
71
|
video_detail (Literal["auto", "low", "high"]): Detail level of the
|
|
72
|
-
videos associated with the message. (default: :obj:`
|
|
72
|
+
videos associated with the message. (default: :obj:`auto`)
|
|
73
73
|
parsed: Optional[Union[Type[BaseModel], dict]]: Optional object which
|
|
74
74
|
is parsed from the content. (default: :obj:`None`)
|
|
75
75
|
"""
|
|
@@ -82,7 +82,7 @@ class BaseMessage:
|
|
|
82
82
|
video_bytes: Optional[bytes] = None
|
|
83
83
|
image_list: Optional[List[Image.Image]] = None
|
|
84
84
|
image_detail: Literal["auto", "low", "high"] = "auto"
|
|
85
|
-
video_detail: Literal["auto", "low", "high"] = "
|
|
85
|
+
video_detail: Literal["auto", "low", "high"] = "auto"
|
|
86
86
|
parsed: Optional[Union[BaseModel, dict]] = None
|
|
87
87
|
|
|
88
88
|
@classmethod
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
# limitations under the License.
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import abc
|
|
15
|
+
import os
|
|
15
16
|
import re
|
|
16
17
|
from abc import ABC, abstractmethod
|
|
17
18
|
from typing import Any, Dict, List, Optional, Type, Union
|
|
@@ -94,6 +95,12 @@ class BaseModelBackend(ABC, metaclass=ModelBackendMeta):
|
|
|
94
95
|
self._token_counter = token_counter
|
|
95
96
|
self._timeout = timeout
|
|
96
97
|
self._max_retries = max_retries
|
|
98
|
+
# Initialize logging configuration
|
|
99
|
+
self._log_enabled = (
|
|
100
|
+
os.environ.get("CAMEL_MODEL_LOG_ENABLED", "False").lower()
|
|
101
|
+
== "true"
|
|
102
|
+
)
|
|
103
|
+
self._log_dir = os.environ.get("CAMEL_LOG_DIR", "camel_logs")
|
|
97
104
|
self.check_model_config()
|
|
98
105
|
|
|
99
106
|
@property
|
|
@@ -232,6 +239,68 @@ class BaseModelBackend(ABC, metaclass=ModelBackendMeta):
|
|
|
232
239
|
|
|
233
240
|
return formatted_messages
|
|
234
241
|
|
|
242
|
+
def _log_request(self, messages: List[OpenAIMessage]) -> Optional[str]:
|
|
243
|
+
r"""Log the request messages to a JSON file if logging is enabled.
|
|
244
|
+
|
|
245
|
+
Args:
|
|
246
|
+
messages (List[OpenAIMessage]): The messages to log.
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
Optional[str]: The path to the log file if logging is enabled,
|
|
250
|
+
None otherwise.
|
|
251
|
+
"""
|
|
252
|
+
if not self._log_enabled:
|
|
253
|
+
return None
|
|
254
|
+
|
|
255
|
+
import json
|
|
256
|
+
from datetime import datetime
|
|
257
|
+
|
|
258
|
+
os.makedirs(self._log_dir, exist_ok=True)
|
|
259
|
+
|
|
260
|
+
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S_%f')
|
|
261
|
+
log_file_path = os.path.join(self._log_dir, f"conv_{timestamp}.json")
|
|
262
|
+
|
|
263
|
+
log_entry = {
|
|
264
|
+
"request_timestamp": datetime.now().isoformat(),
|
|
265
|
+
"model": str(self.model_type),
|
|
266
|
+
"request": {"messages": messages},
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
with open(log_file_path, "w") as f:
|
|
270
|
+
json.dump(log_entry, f, indent=4)
|
|
271
|
+
|
|
272
|
+
return log_file_path
|
|
273
|
+
|
|
274
|
+
def _log_response(self, log_path: str, response: Any) -> None:
|
|
275
|
+
r"""Log the response to the existing log file.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
log_path (str): The path to the log file.
|
|
279
|
+
response (Any): The response to log.
|
|
280
|
+
"""
|
|
281
|
+
if not self._log_enabled or not log_path:
|
|
282
|
+
return
|
|
283
|
+
|
|
284
|
+
import json
|
|
285
|
+
from datetime import datetime
|
|
286
|
+
|
|
287
|
+
with open(log_path, "r+") as f:
|
|
288
|
+
log_data = json.load(f)
|
|
289
|
+
|
|
290
|
+
log_data["response_timestamp"] = datetime.now().isoformat()
|
|
291
|
+
if isinstance(response, BaseModel):
|
|
292
|
+
log_data["response"] = response.model_dump()
|
|
293
|
+
else:
|
|
294
|
+
try:
|
|
295
|
+
json.dumps(response)
|
|
296
|
+
log_data["response"] = response
|
|
297
|
+
except TypeError:
|
|
298
|
+
log_data["response"] = str(response)
|
|
299
|
+
|
|
300
|
+
f.seek(0)
|
|
301
|
+
json.dump(log_data, f, indent=4)
|
|
302
|
+
f.truncate()
|
|
303
|
+
|
|
235
304
|
@abstractmethod
|
|
236
305
|
def _run(
|
|
237
306
|
self,
|
|
@@ -273,13 +342,23 @@ class BaseModelBackend(ABC, metaclass=ModelBackendMeta):
|
|
|
273
342
|
`ChatCompletion` in the non-stream mode, or
|
|
274
343
|
`Stream[ChatCompletionChunk]` in the stream mode.
|
|
275
344
|
"""
|
|
345
|
+
# Log the request if logging is enabled
|
|
346
|
+
log_path = self._log_request(messages)
|
|
347
|
+
|
|
276
348
|
# None -> use default tools
|
|
277
349
|
if tools is None:
|
|
278
350
|
tools = self.model_config_dict.get("tools", None)
|
|
279
351
|
# Empty -> use no tools
|
|
280
352
|
elif not tools:
|
|
281
353
|
tools = None
|
|
282
|
-
|
|
354
|
+
|
|
355
|
+
result = self._run(messages, response_format, tools)
|
|
356
|
+
|
|
357
|
+
# Log the response if logging is enabled
|
|
358
|
+
if log_path:
|
|
359
|
+
self._log_response(log_path, result)
|
|
360
|
+
|
|
361
|
+
return result
|
|
283
362
|
|
|
284
363
|
async def arun(
|
|
285
364
|
self,
|
|
@@ -304,11 +383,21 @@ class BaseModelBackend(ABC, metaclass=ModelBackendMeta):
|
|
|
304
383
|
`ChatCompletion` in the non-stream mode, or
|
|
305
384
|
`AsyncStream[ChatCompletionChunk]` in the stream mode.
|
|
306
385
|
"""
|
|
386
|
+
# Log the request if logging is enabled
|
|
387
|
+
log_path = self._log_request(messages)
|
|
388
|
+
|
|
307
389
|
if tools is None:
|
|
308
390
|
tools = self.model_config_dict.get("tools", None)
|
|
309
391
|
elif not tools:
|
|
310
392
|
tools = None
|
|
311
|
-
|
|
393
|
+
|
|
394
|
+
result = await self._arun(messages, response_format, tools)
|
|
395
|
+
|
|
396
|
+
# Log the response if logging is enabled
|
|
397
|
+
if log_path:
|
|
398
|
+
self._log_response(log_path, result)
|
|
399
|
+
|
|
400
|
+
return result
|
|
312
401
|
|
|
313
402
|
@abstractmethod
|
|
314
403
|
def check_model_config(self):
|