camel-ai 0.2.69a7__tar.gz → 0.2.70__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.69a7 → camel_ai-0.2.70}/PKG-INFO +5 -1
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/__init__.py +1 -1
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/role_playing.py +26 -28
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/workforce.py +226 -118
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/workforce_logger.py +37 -23
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/__init__.py +2 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/__init__.py +2 -0
- camel_ai-0.2.70/camel/storages/vectordb_storages/pgvector.py +349 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/file_write_toolkit.py +21 -7
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/terminal_toolkit.py +11 -4
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/enums.py +3 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/pyproject.toml +8 -1
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/.gitignore +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/LICENSE +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/README.md +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/_types.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/_utils.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/chat_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/critic_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/deductive_reasoner_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/embodied_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/knowledge_graph_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/mcp_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/multi_hop_generator_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/programmed_agent_instruction.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/repo_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/role_assignment_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/search_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/task_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/tool_agents/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/tool_agents/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/apibank.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/apibench.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/browsecomp.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/gaia.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/README.md +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/mock_web.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/requirements.txt +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/mock_website/task.json +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/nexus.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/benchmarks/ragbench.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/discord/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/discord/discord_app.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/discord/discord_installation.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/discord/discord_store.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/slack/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/slack/models.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/slack/slack_app.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/bots/telegram_bot.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/aiml_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/anthropic_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/base_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/bedrock_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/cohere_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/crynux_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/deepseek_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/gemini_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/groq_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/internlm_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/litellm_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/lmstudio_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/mistral_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/modelscope_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/moonshot_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/netmind_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/novita_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/nvidia_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/ollama_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/openai_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/openrouter_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/ppio_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/qianfan_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/qwen_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/reka_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/samba_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/sglang_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/siliconflow_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/togetherai_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/vllm_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/watsonx_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/yi_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/configs/zhipuai_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/data_collectors/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/data_collectors/alpaca_collector.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/data_collectors/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/data_collectors/sharegpt_collector.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/cot_datagen.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/evol_instruct/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/evol_instruct/scorer.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/evol_instruct/templates.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_improving_cot.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/filter/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/self_instruct.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/self_instruct/templates.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/source2synth/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/source2synth/data_processor.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/source2synth/models.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datahubs/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datahubs/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datahubs/huggingface.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datahubs/models.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/base_generator.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/few_shot_generator.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/models.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/self_instruct_generator.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/datasets/static_dataset.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/azure_embedding.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/gemini_embedding.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/jina_embedding.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/mistral_embedding.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/openai_compatible_embedding.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/openai_embedding.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/together_embedding.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/embeddings/vlm_embedding.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/models.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/multi_step.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/rlcards_env.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/single_step.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/environments/tic_tac_toe.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/extractors/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/extractors/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/extractors/python_strategies.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/generators.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/human.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/docker/Dockerfile +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/docker_interpreter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/e2b_interpreter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/internal_python_interpreter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/interpreter_error.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/ipython_interpreter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/interpreters/subprocess_interpreter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/apify_reader.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/base_io.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/chunkr_reader.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/crawl4ai_reader.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/firecrawl_reader.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/jina_url_reader.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/markitdown.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/mineru_extractor.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/mistral_reader.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/pandas_reader.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/scrapegraph_reader.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/loaders/unstructured_io.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/logger.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/agent_memories.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/blocks/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/blocks/chat_history_block.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/blocks/vectordb_block.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/context_creators/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/context_creators/score_based.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/memories/records.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/alpaca.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/conversation_models.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/sharegpt/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/messages/func_message.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/_utils.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/aiml_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/anthropic_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/aws_bedrock_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/azure_openai_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/base_audio_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/base_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/cohere_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/crynux_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/deepseek_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/fish_audio_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/gemini_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/groq_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/internlm_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/litellm_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/lmstudio_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/mistral_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/model_factory.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/model_manager.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/modelscope_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/moonshot_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/nemotron_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/netmind_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/novita_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/nvidia_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/ollama_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/openai_audio_models.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/openai_compatible_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/openai_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/openrouter_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/ppio_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/qianfan_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/qwen_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reka_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/base_reward_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/evaluator.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/nemotron_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/reward/skywork_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/samba_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/sglang_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/siliconflow_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/stub_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/togetherai_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/vllm_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/volcano_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/watsonx_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/yi_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/models/zhipuai_model.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/personas/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/personas/persona.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/personas/persona_hub.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/ai_society.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/code.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/evaluation.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/generate_text_embedding_data.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/image_craft.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/misalignment.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/multi_condition_image_craft.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/object_recognition.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/persona_hub.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/prompt_templates.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/role_description_prompt_template.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/solution_extraction.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/task_prompt_template.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/translation.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/prompts/video_description_prompt.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/py.typed +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/responses/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/responses/agent_responses.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/auto_retriever.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/bm25_retriever.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/cohere_rerank_retriever.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/hybrid_retrival.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/retrievers/vector_retriever.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/api.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/configs.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/daytona_runtime.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/docker_runtime.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/llm_guard_runtime.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/remote_http_runtime.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/utils/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/schemas/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/schemas/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/schemas/openai_converter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/schemas/outlines_converter.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/babyagi_playing.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/prompts.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/role_playing_worker.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/single_agent_worker.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/task_channel.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/utils.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/societies/workforce/worker.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/graph_element.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/nebula_graph.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/graph_storages/neo4j_graph.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/in_memory.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/json.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/key_value_storages/redis.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/amazon_s3.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/azure_blob.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/object_storages/google_cloud.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/chroma.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/faiss.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/milvus.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/oceanbase.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/qdrant.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/tidb.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/storages/vectordb_storages/weaviate.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/tasks/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/tasks/task.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/tasks/task_prompt.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/terminators/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/terminators/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/terminators/response_terminator.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/terminators/token_limit_terminator.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/aci_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/arxiv_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/ask_news_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/async_browser_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/audio_analysis_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/bohrium_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/browser_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/browser_toolkit_commons.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/code_execution.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/craw4ai_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/dalle_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/dappier_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/data_commons_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/excel_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/function_tool.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/github_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/google_calendar_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/google_maps_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/google_scholar_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/human_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/image_analysis_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/jina_reranker_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/klavis_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/linkedin_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/markitdown_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/math_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/mcp_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/memory_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/meshy_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/mineru_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/networkx_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/actions.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/agent.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/browser_non_visual_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/nv_browser_session.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/snapshot.js +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/non_visual_browser_toolkit/snapshot.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/notion_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/security_config.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/open_api_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/openai_agent_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/openbb_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/page_script.js +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/pptx_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/pubmed_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/pyautogui_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/reddit_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/retrieval_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/search_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/searxng_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/slack_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/stripe_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/sympy_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/task_planning_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/thinking_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/twitter_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/video_analysis_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/video_download_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/weather_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/whatsapp_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/toolkits/zapier_toolkit.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/agents/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/agents/tool_calling_record.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/mcp_registries.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/openai_types.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/types/unified_model_type.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/async_func.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/chunker/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/chunker/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/chunker/code_chunker.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/chunker/uio_chunker.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/commons.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/constants.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/deduplication.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/filename.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/langfuse.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/mcp.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/mcp_client.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/response_format.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/utils/token_counting.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/__init__.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/base.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/math_verifier.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/models.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/camel/verifiers/physics_verifier.py +0 -0
- {camel_ai-0.2.69a7 → camel_ai-0.2.70}/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.70
|
|
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
|
|
@@ -87,10 +87,12 @@ Requires-Dist: openapi-spec-validator<0.8,>=0.7.1; extra == 'all'
|
|
|
87
87
|
Requires-Dist: openpyxl>=3.1.5; extra == 'all'
|
|
88
88
|
Requires-Dist: pandas<2,>=1.5.3; extra == 'all'
|
|
89
89
|
Requires-Dist: pandasai<3,>=2.3.0; extra == 'all'
|
|
90
|
+
Requires-Dist: pgvector<0.3,>=0.2.4; extra == 'all'
|
|
90
91
|
Requires-Dist: playwright>=1.50.0; extra == 'all'
|
|
91
92
|
Requires-Dist: prance<24,>=23.6.21.0; extra == 'all'
|
|
92
93
|
Requires-Dist: praw<8,>=7.7.1; extra == 'all'
|
|
93
94
|
Requires-Dist: pre-commit<4,>=3; extra == 'all'
|
|
95
|
+
Requires-Dist: psycopg[binary]<4,>=3.1.18; extra == 'all'
|
|
94
96
|
Requires-Dist: pyautogui<0.10,>=0.9.54; extra == 'all'
|
|
95
97
|
Requires-Dist: pydub<0.26,>=0.25.1; extra == 'all'
|
|
96
98
|
Requires-Dist: pygithub<3,>=2.6.0; extra == 'all'
|
|
@@ -319,6 +321,8 @@ Requires-Dist: google-cloud-storage<3,>=2.18.0; extra == 'storage'
|
|
|
319
321
|
Requires-Dist: mem0ai>=0.1.73; extra == 'storage'
|
|
320
322
|
Requires-Dist: nebula3-python==3.8.2; extra == 'storage'
|
|
321
323
|
Requires-Dist: neo4j<6,>=5.18.0; extra == 'storage'
|
|
324
|
+
Requires-Dist: pgvector<0.3,>=0.2.4; extra == 'storage'
|
|
325
|
+
Requires-Dist: psycopg[binary]<4,>=3.1.18; extra == 'storage'
|
|
322
326
|
Requires-Dist: pymilvus<3,>=2.4.0; extra == 'storage'
|
|
323
327
|
Requires-Dist: pyobvector>=0.1.18; extra == 'storage'
|
|
324
328
|
Requires-Dist: pytidb-experimental==0.0.1.dev4; extra == 'storage'
|
|
@@ -556,13 +556,12 @@ class RolePlaying:
|
|
|
556
556
|
)
|
|
557
557
|
user_msg = self._reduce_message_options(user_response.msgs)
|
|
558
558
|
|
|
559
|
-
# To prevent recording
|
|
560
|
-
#
|
|
561
|
-
#
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
):
|
|
559
|
+
# To prevent recording missing messages: ChatAgent.step automatically
|
|
560
|
+
# saves the response to memory only when a single message is returned.
|
|
561
|
+
# When multi-response support is enabled (n > 1), it is the caller's
|
|
562
|
+
# responsibility to record the selected message. Therefore, we record
|
|
563
|
+
# it here after choosing one message via `_reduce_message_options()`.
|
|
564
|
+
if self._is_multi_response(self.user_agent):
|
|
566
565
|
self.user_agent.record_message(user_msg)
|
|
567
566
|
|
|
568
567
|
assistant_response = self.assistant_agent.step(user_msg)
|
|
@@ -579,13 +578,7 @@ class RolePlaying:
|
|
|
579
578
|
)
|
|
580
579
|
assistant_msg = self._reduce_message_options(assistant_response.msgs)
|
|
581
580
|
|
|
582
|
-
|
|
583
|
-
# step and once in role play), and the model generates only one
|
|
584
|
-
# response when multi-response support is enabled.
|
|
585
|
-
if (
|
|
586
|
-
'n' in self.assistant_agent.model_backend.model_config_dict.keys()
|
|
587
|
-
and self.assistant_agent.model_backend.model_config_dict['n'] > 1
|
|
588
|
-
):
|
|
581
|
+
if self._is_multi_response(self.assistant_agent):
|
|
589
582
|
self.assistant_agent.record_message(assistant_msg)
|
|
590
583
|
|
|
591
584
|
return (
|
|
@@ -639,13 +632,7 @@ class RolePlaying:
|
|
|
639
632
|
)
|
|
640
633
|
user_msg = self._reduce_message_options(user_response.msgs)
|
|
641
634
|
|
|
642
|
-
|
|
643
|
-
# step and once in role play), and the model generates only one
|
|
644
|
-
# response when multi-response support is enabled.
|
|
645
|
-
if (
|
|
646
|
-
'n' in self.user_agent.model_backend.model_config_dict.keys()
|
|
647
|
-
and self.user_agent.model_backend.model_config_dict['n'] > 1
|
|
648
|
-
):
|
|
635
|
+
if self._is_multi_response(self.user_agent):
|
|
649
636
|
self.user_agent.record_message(user_msg)
|
|
650
637
|
|
|
651
638
|
assistant_response = await self.assistant_agent.astep(user_msg)
|
|
@@ -662,13 +649,7 @@ class RolePlaying:
|
|
|
662
649
|
)
|
|
663
650
|
assistant_msg = self._reduce_message_options(assistant_response.msgs)
|
|
664
651
|
|
|
665
|
-
|
|
666
|
-
# step and once in role play), and the model generates only one
|
|
667
|
-
# response when multi-response support is enabled.
|
|
668
|
-
if (
|
|
669
|
-
'n' in self.assistant_agent.model_backend.model_config_dict.keys()
|
|
670
|
-
and self.assistant_agent.model_backend.model_config_dict['n'] > 1
|
|
671
|
-
):
|
|
652
|
+
if self._is_multi_response(self.assistant_agent):
|
|
672
653
|
self.assistant_agent.record_message(assistant_msg)
|
|
673
654
|
|
|
674
655
|
return (
|
|
@@ -730,3 +711,20 @@ class RolePlaying:
|
|
|
730
711
|
new_instance.critic = self.critic.clone(with_memory)
|
|
731
712
|
|
|
732
713
|
return new_instance
|
|
714
|
+
|
|
715
|
+
def _is_multi_response(self, agent: ChatAgent) -> bool:
|
|
716
|
+
r"""Checks if the given agent supports multi-response.
|
|
717
|
+
|
|
718
|
+
Args:
|
|
719
|
+
agent (ChatAgent): The agent to check for multi-response support.
|
|
720
|
+
|
|
721
|
+
Returns:
|
|
722
|
+
bool: True if the agent supports multi-response, False otherwise.
|
|
723
|
+
"""
|
|
724
|
+
if (
|
|
725
|
+
'n' in agent.model_backend.model_config_dict.keys()
|
|
726
|
+
and agent.model_backend.model_config_dict['n'] is not None
|
|
727
|
+
and agent.model_backend.model_config_dict['n'] > 1
|
|
728
|
+
):
|
|
729
|
+
return True
|
|
730
|
+
return False
|
|
@@ -111,27 +111,24 @@ class Workforce(BaseNode):
|
|
|
111
111
|
children (Optional[List[BaseNode]], optional): List of child nodes
|
|
112
112
|
under this node. Each child node can be a worker node or
|
|
113
113
|
another workforce node. (default: :obj:`None`)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
(default: :obj:`None`
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
available parameters.
|
|
133
|
-
(default: :obj:`None` - creates workers with SearchToolkit,
|
|
134
|
-
CodeExecutionToolkit, and ThinkingToolkit)
|
|
114
|
+
coordinator_agent (Optional[ChatAgent], optional): A custom coordinator
|
|
115
|
+
agent instance for task assignment and worker creation. If
|
|
116
|
+
provided, the workforce will create a new agent using this agent's
|
|
117
|
+
model configuration but with the required system message and
|
|
118
|
+
functionality.
|
|
119
|
+
If None, a default agent will be created using DEFAULT model
|
|
120
|
+
settings. (default: :obj:`None`)
|
|
121
|
+
task_agent (Optional[ChatAgent], optional): A custom task planning
|
|
122
|
+
agent instance for task decomposition and composition. If
|
|
123
|
+
provided, the workforce will create a new agent using this agent's
|
|
124
|
+
model configuration but with the required system message and tools
|
|
125
|
+
(TaskPlanningToolkit). If None, a default agent will be created
|
|
126
|
+
using DEFAULT model settings. (default: :obj:`None`)
|
|
127
|
+
new_worker_agent (Optional[ChatAgent], optional): A template agent for
|
|
128
|
+
workers created dynamically at runtime when existing workers cannot
|
|
129
|
+
handle failed tasks. If None, workers will be created with default
|
|
130
|
+
settings including SearchToolkit, CodeExecutionToolkit, and
|
|
131
|
+
ThinkingToolkit. (default: :obj:`None`)
|
|
135
132
|
graceful_shutdown_timeout (float, optional): The timeout in seconds
|
|
136
133
|
for graceful shutdown when a task fails 3 times. During this
|
|
137
134
|
period, the workforce remains active for debugging.
|
|
@@ -147,40 +144,59 @@ class Workforce(BaseNode):
|
|
|
147
144
|
(default: :obj:`False`)
|
|
148
145
|
|
|
149
146
|
Example:
|
|
150
|
-
>>> # Configure with custom model and shared memory
|
|
151
147
|
>>> import asyncio
|
|
148
|
+
>>> from camel.agents import ChatAgent
|
|
149
|
+
>>> from camel.models import ModelFactory
|
|
150
|
+
>>> from camel.types import ModelPlatformType, ModelType
|
|
151
|
+
>>> from camel.tasks import Task
|
|
152
|
+
>>>
|
|
153
|
+
>>> # Simple workforce with default agents
|
|
154
|
+
>>> workforce = Workforce("Research Team")
|
|
155
|
+
>>>
|
|
156
|
+
>>> # Workforce with custom model configuration
|
|
152
157
|
>>> model = ModelFactory.create(
|
|
153
|
-
... ModelPlatformType.OPENAI, ModelType.GPT_4O
|
|
158
|
+
... ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O
|
|
154
159
|
... )
|
|
160
|
+
>>> coordinator_agent = ChatAgent(model=model)
|
|
161
|
+
>>> task_agent = ChatAgent(model=model)
|
|
162
|
+
>>>
|
|
155
163
|
>>> workforce = Workforce(
|
|
156
164
|
... "Research Team",
|
|
157
|
-
...
|
|
158
|
-
...
|
|
159
|
-
... share_memory=True # Enable shared memory
|
|
165
|
+
... coordinator_agent=coordinator_agent,
|
|
166
|
+
... task_agent=task_agent,
|
|
160
167
|
... )
|
|
161
168
|
>>>
|
|
162
169
|
>>> # Process a task
|
|
163
170
|
>>> async def main():
|
|
164
171
|
... task = Task(content="Research AI trends", id="1")
|
|
165
|
-
... result = workforce.
|
|
172
|
+
... result = await workforce.process_task_async(task)
|
|
166
173
|
... return result
|
|
167
|
-
>>>
|
|
174
|
+
>>>
|
|
175
|
+
>>> result_task = asyncio.run(main())
|
|
176
|
+
|
|
177
|
+
Note:
|
|
178
|
+
When custom coordinator_agent or task_agent are provided, the workforce
|
|
179
|
+
will preserve the user's system message and append the required
|
|
180
|
+
workforce coordination or task planning instructions to it. This
|
|
181
|
+
ensures both the user's intent is preserved and proper workforce
|
|
182
|
+
functionality is maintained. All other agent configurations (model,
|
|
183
|
+
memory, tools, etc.) will also be preserved.
|
|
168
184
|
"""
|
|
169
185
|
|
|
170
186
|
def __init__(
|
|
171
187
|
self,
|
|
172
188
|
description: str,
|
|
173
189
|
children: Optional[List[BaseNode]] = None,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
190
|
+
coordinator_agent: Optional[ChatAgent] = None,
|
|
191
|
+
task_agent: Optional[ChatAgent] = None,
|
|
192
|
+
new_worker_agent: Optional[ChatAgent] = None, # TODO: use MCP Agent
|
|
177
193
|
graceful_shutdown_timeout: float = 15.0,
|
|
178
194
|
share_memory: bool = False,
|
|
179
195
|
) -> None:
|
|
180
196
|
super().__init__(description)
|
|
181
197
|
self._child_listening_tasks: Deque[asyncio.Task] = deque()
|
|
182
198
|
self._children = children or []
|
|
183
|
-
self.
|
|
199
|
+
self.new_worker_agent = new_worker_agent
|
|
184
200
|
self.graceful_shutdown_timeout = graceful_shutdown_timeout
|
|
185
201
|
self.share_memory = share_memory
|
|
186
202
|
self.metrics_logger = WorkforceLogger(workforce_id=self.node_id)
|
|
@@ -214,58 +230,72 @@ class Workforce(BaseNode):
|
|
|
214
230
|
role=role_or_desc,
|
|
215
231
|
)
|
|
216
232
|
|
|
217
|
-
#
|
|
218
|
-
if coordinator_agent_kwargs is None:
|
|
219
|
-
logger.warning(
|
|
220
|
-
"No coordinator_agent_kwargs provided. Using default "
|
|
221
|
-
"ChatAgent settings (ModelPlatformType.DEFAULT, "
|
|
222
|
-
"ModelType.DEFAULT). To customize the coordinator agent "
|
|
223
|
-
"that assigns tasks and handles failures, pass a dictionary "
|
|
224
|
-
"with ChatAgent parameters, e.g.: {'model': your_model, "
|
|
225
|
-
"'tools': your_tools, 'token_limit': 8000}. See ChatAgent "
|
|
226
|
-
"documentation for all available options."
|
|
227
|
-
)
|
|
228
|
-
if task_agent_kwargs is None:
|
|
229
|
-
logger.warning(
|
|
230
|
-
"No task_agent_kwargs provided. Using default ChatAgent "
|
|
231
|
-
"settings (ModelPlatformType.DEFAULT, ModelType.DEFAULT). "
|
|
232
|
-
"To customize the task planning agent that "
|
|
233
|
-
"decomposes/composes tasks, pass a dictionary with "
|
|
234
|
-
"ChatAgent parameters, e.g.: {'model': your_model, "
|
|
235
|
-
"'token_limit': 16000}. See ChatAgent documentation for "
|
|
236
|
-
"all available options."
|
|
237
|
-
)
|
|
238
|
-
if new_worker_agent_kwargs is None:
|
|
239
|
-
logger.warning(
|
|
240
|
-
"No new_worker_agent_kwargs provided. Workers created at "
|
|
241
|
-
"runtime will use default ChatAgent settings with "
|
|
242
|
-
"SearchToolkit, CodeExecutionToolkit, and ThinkingToolkit. "
|
|
243
|
-
"To customize runtime worker creation, pass a dictionary "
|
|
244
|
-
"with ChatAgent parameters, e.g.: {'model': your_model, "
|
|
245
|
-
"'tools': your_tools}. See ChatAgent documentation for all "
|
|
246
|
-
"available options."
|
|
247
|
-
)
|
|
248
|
-
|
|
249
|
-
if self.share_memory:
|
|
250
|
-
logger.info(
|
|
251
|
-
"Shared memory enabled. All agents will share their complete "
|
|
252
|
-
"conversation history and function-calling trajectory for "
|
|
253
|
-
"better context continuity during task handoffs."
|
|
254
|
-
)
|
|
255
|
-
|
|
233
|
+
# Set up coordinator agent with default system message
|
|
256
234
|
coord_agent_sys_msg = BaseMessage.make_assistant_message(
|
|
257
235
|
role_name="Workforce Manager",
|
|
258
|
-
content="You are coordinating a group of workers. A worker
|
|
259
|
-
"a group of agents or a single agent. Each worker is "
|
|
236
|
+
content="You are coordinating a group of workers. A worker "
|
|
237
|
+
"can be a group of agents or a single agent. Each worker is "
|
|
260
238
|
"created to solve a specific kind of task. Your job "
|
|
261
239
|
"includes assigning tasks to a existing worker, creating "
|
|
262
240
|
"a new worker for a task, etc.",
|
|
263
241
|
)
|
|
264
|
-
self.coordinator_agent = ChatAgent(
|
|
265
|
-
coord_agent_sys_msg,
|
|
266
|
-
**(coordinator_agent_kwargs or {}),
|
|
267
|
-
)
|
|
268
242
|
|
|
243
|
+
if coordinator_agent is None:
|
|
244
|
+
logger.warning(
|
|
245
|
+
"No coordinator_agent provided. Using default "
|
|
246
|
+
"ChatAgent settings (ModelPlatformType.DEFAULT, "
|
|
247
|
+
"ModelType.DEFAULT) with default system message."
|
|
248
|
+
)
|
|
249
|
+
self.coordinator_agent = ChatAgent(coord_agent_sys_msg)
|
|
250
|
+
else:
|
|
251
|
+
logger.info(
|
|
252
|
+
"Custom coordinator_agent provided. Preserving user's "
|
|
253
|
+
"system message and appending workforce coordination "
|
|
254
|
+
"instructions to ensure proper functionality."
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
if coordinator_agent.system_message is not None:
|
|
258
|
+
user_sys_msg_content = coordinator_agent.system_message.content
|
|
259
|
+
combined_content = (
|
|
260
|
+
f"{user_sys_msg_content}\n\n"
|
|
261
|
+
f"{coord_agent_sys_msg.content}"
|
|
262
|
+
)
|
|
263
|
+
combined_sys_msg = BaseMessage.make_assistant_message(
|
|
264
|
+
role_name=coordinator_agent.system_message.role_name,
|
|
265
|
+
content=combined_content,
|
|
266
|
+
)
|
|
267
|
+
else:
|
|
268
|
+
combined_sys_msg = coord_agent_sys_msg
|
|
269
|
+
|
|
270
|
+
# Create a new agent with the provided agent's configuration
|
|
271
|
+
# but with the combined system message
|
|
272
|
+
self.coordinator_agent = ChatAgent(
|
|
273
|
+
system_message=combined_sys_msg,
|
|
274
|
+
model=coordinator_agent.model_backend,
|
|
275
|
+
memory=coordinator_agent.memory,
|
|
276
|
+
message_window_size=getattr(
|
|
277
|
+
coordinator_agent.memory, "window_size", None
|
|
278
|
+
),
|
|
279
|
+
token_limit=getattr(
|
|
280
|
+
coordinator_agent.memory.get_context_creator(),
|
|
281
|
+
"token_limit",
|
|
282
|
+
None,
|
|
283
|
+
),
|
|
284
|
+
output_language=coordinator_agent.output_language,
|
|
285
|
+
tools=[
|
|
286
|
+
tool.func
|
|
287
|
+
for tool in coordinator_agent._internal_tools.values()
|
|
288
|
+
],
|
|
289
|
+
external_tools=[
|
|
290
|
+
schema
|
|
291
|
+
for schema in coordinator_agent._external_tool_schemas.values() # noqa: E501
|
|
292
|
+
],
|
|
293
|
+
response_terminators=coordinator_agent.response_terminators,
|
|
294
|
+
max_iteration=coordinator_agent.max_iteration,
|
|
295
|
+
stop_event=coordinator_agent.stop_event,
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
# Set up task agent with default system message and required tools
|
|
269
299
|
task_sys_msg = BaseMessage.make_assistant_message(
|
|
270
300
|
role_name="Task Planner",
|
|
271
301
|
content="You are going to compose and decompose tasks. Keep "
|
|
@@ -275,13 +305,83 @@ class Workforce(BaseNode):
|
|
|
275
305
|
"of agents. This ensures efficient execution by minimizing "
|
|
276
306
|
"context switching between agents.",
|
|
277
307
|
)
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
308
|
+
task_planning_tools = TaskPlanningToolkit().get_tools()
|
|
309
|
+
|
|
310
|
+
if task_agent is None:
|
|
311
|
+
logger.warning(
|
|
312
|
+
"No task_agent provided. Using default ChatAgent "
|
|
313
|
+
"settings (ModelPlatformType.DEFAULT, ModelType.DEFAULT) "
|
|
314
|
+
"with default system message and TaskPlanningToolkit."
|
|
315
|
+
)
|
|
316
|
+
self.task_agent = ChatAgent(
|
|
317
|
+
task_sys_msg,
|
|
318
|
+
tools=TaskPlanningToolkit().get_tools(), # type: ignore[arg-type]
|
|
319
|
+
)
|
|
320
|
+
else:
|
|
321
|
+
logger.info(
|
|
322
|
+
"Custom task_agent provided. Preserving user's "
|
|
323
|
+
"system message and appending task planning "
|
|
324
|
+
"instructions to ensure proper functionality."
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
if task_agent.system_message is not None:
|
|
328
|
+
user_task_sys_msg_content = task_agent.system_message.content
|
|
329
|
+
combined_task_content = (
|
|
330
|
+
f"{user_task_sys_msg_content}\n\n"
|
|
331
|
+
f"{task_sys_msg.content}"
|
|
332
|
+
)
|
|
333
|
+
combined_task_sys_msg = BaseMessage.make_assistant_message(
|
|
334
|
+
role_name=task_agent.system_message.role_name,
|
|
335
|
+
content=combined_task_content,
|
|
336
|
+
)
|
|
337
|
+
else:
|
|
338
|
+
combined_task_sys_msg = task_sys_msg
|
|
339
|
+
|
|
340
|
+
# Since ChatAgent constructor uses a dictionary with
|
|
341
|
+
# function names as keys, we don't need to manually deduplicate.
|
|
342
|
+
combined_tools = [
|
|
343
|
+
tool.func for tool in task_agent._internal_tools.values()
|
|
344
|
+
] + [tool.func for tool in task_planning_tools]
|
|
345
|
+
|
|
346
|
+
# Create a new agent with the provided agent's configuration
|
|
347
|
+
# but with the combined system message and tools
|
|
348
|
+
self.task_agent = ChatAgent(
|
|
349
|
+
system_message=combined_task_sys_msg,
|
|
350
|
+
model=task_agent.model_backend,
|
|
351
|
+
memory=task_agent.memory,
|
|
352
|
+
message_window_size=getattr(
|
|
353
|
+
task_agent.memory, "window_size", None
|
|
354
|
+
),
|
|
355
|
+
token_limit=getattr(
|
|
356
|
+
task_agent.memory.get_context_creator(),
|
|
357
|
+
"token_limit",
|
|
358
|
+
None,
|
|
359
|
+
),
|
|
360
|
+
output_language=task_agent.output_language,
|
|
361
|
+
tools=combined_tools,
|
|
362
|
+
external_tools=[
|
|
363
|
+
schema
|
|
364
|
+
for schema in task_agent._external_tool_schemas.values()
|
|
365
|
+
],
|
|
366
|
+
response_terminators=task_agent.response_terminators,
|
|
367
|
+
max_iteration=task_agent.max_iteration,
|
|
368
|
+
stop_event=task_agent.stop_event,
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
if new_worker_agent is None:
|
|
372
|
+
logger.info(
|
|
373
|
+
"No new_worker_agent provided. Workers created at runtime "
|
|
374
|
+
"will use default ChatAgent settings with SearchToolkit, "
|
|
375
|
+
"CodeExecutionToolkit, and ThinkingToolkit. To customize "
|
|
376
|
+
"runtime worker creation, pass a ChatAgent instance."
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
if self.share_memory:
|
|
380
|
+
logger.info(
|
|
381
|
+
"Shared memory enabled. All agents will share their complete "
|
|
382
|
+
"conversation history and function-calling trajectory for "
|
|
383
|
+
"better context continuity during task handoffs."
|
|
384
|
+
)
|
|
285
385
|
|
|
286
386
|
def __repr__(self):
|
|
287
387
|
return (
|
|
@@ -1225,8 +1325,16 @@ class Workforce(BaseNode):
|
|
|
1225
1325
|
)
|
|
1226
1326
|
return TaskAssignResult(assignments=[])
|
|
1227
1327
|
|
|
1228
|
-
|
|
1229
|
-
|
|
1328
|
+
try:
|
|
1329
|
+
result_dict = json.loads(response.msg.content, parse_int=str)
|
|
1330
|
+
return TaskAssignResult(**result_dict)
|
|
1331
|
+
except json.JSONDecodeError as e:
|
|
1332
|
+
logger.error(
|
|
1333
|
+
f"JSON parsing error in task assignment: Invalid response "
|
|
1334
|
+
f"format - {e}. Response content: "
|
|
1335
|
+
f"{response.msg.content[:50]}..."
|
|
1336
|
+
)
|
|
1337
|
+
return TaskAssignResult(assignments=[])
|
|
1230
1338
|
|
|
1231
1339
|
def _validate_assignments(
|
|
1232
1340
|
self, assignments: List[TaskAssignment], valid_ids: Set[str]
|
|
@@ -1450,8 +1558,19 @@ class Workforce(BaseNode):
|
|
|
1450
1558
|
"with various tasks.",
|
|
1451
1559
|
)
|
|
1452
1560
|
else:
|
|
1453
|
-
|
|
1454
|
-
|
|
1561
|
+
try:
|
|
1562
|
+
result_dict = json.loads(response.msg.content)
|
|
1563
|
+
new_node_conf = WorkerConf(**result_dict)
|
|
1564
|
+
except json.JSONDecodeError as e:
|
|
1565
|
+
logger.error(
|
|
1566
|
+
f"JSON parsing error in worker creation: Invalid response "
|
|
1567
|
+
f"format - {e}. Response content: "
|
|
1568
|
+
f"{response.msg.content[:100]}..."
|
|
1569
|
+
)
|
|
1570
|
+
raise RuntimeError(
|
|
1571
|
+
f"Failed to create worker for task {task.id}: "
|
|
1572
|
+
f"Coordinator agent returned malformed JSON response. "
|
|
1573
|
+
)
|
|
1455
1574
|
|
|
1456
1575
|
new_agent = self._create_new_agent(
|
|
1457
1576
|
new_node_conf.role,
|
|
@@ -1486,23 +1605,23 @@ class Workforce(BaseNode):
|
|
|
1486
1605
|
content=sys_msg,
|
|
1487
1606
|
)
|
|
1488
1607
|
|
|
1489
|
-
if self.
|
|
1490
|
-
return
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1608
|
+
if self.new_worker_agent is not None:
|
|
1609
|
+
return self.new_worker_agent
|
|
1610
|
+
else:
|
|
1611
|
+
# Default tools for a new agent
|
|
1612
|
+
function_list = [
|
|
1613
|
+
SearchToolkit().search_duckduckgo,
|
|
1614
|
+
*CodeExecutionToolkit().get_tools(),
|
|
1615
|
+
*ThinkingToolkit().get_tools(),
|
|
1616
|
+
]
|
|
1498
1617
|
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1618
|
+
model = ModelFactory.create(
|
|
1619
|
+
model_platform=ModelPlatformType.DEFAULT,
|
|
1620
|
+
model_type=ModelType.DEFAULT,
|
|
1621
|
+
model_config_dict={"temperature": 0},
|
|
1622
|
+
)
|
|
1504
1623
|
|
|
1505
|
-
|
|
1624
|
+
return ChatAgent(worker_sys_msg, model=model, tools=function_list) # type: ignore[arg-type]
|
|
1506
1625
|
|
|
1507
1626
|
async def _get_returned_task(self) -> Task:
|
|
1508
1627
|
r"""Get the task that's published by this node and just get returned
|
|
@@ -1988,28 +2107,17 @@ class Workforce(BaseNode):
|
|
|
1988
2107
|
"""
|
|
1989
2108
|
|
|
1990
2109
|
# Create a new instance with the same configuration
|
|
1991
|
-
# Extract the original kwargs from the agents to properly clone them
|
|
1992
|
-
coordinator_kwargs = (
|
|
1993
|
-
getattr(self.coordinator_agent, 'init_kwargs', {}) or {}
|
|
1994
|
-
)
|
|
1995
|
-
task_kwargs = getattr(self.task_agent, 'init_kwargs', {}) or {}
|
|
1996
|
-
|
|
1997
2110
|
new_instance = Workforce(
|
|
1998
2111
|
description=self.description,
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
if self.
|
|
2112
|
+
coordinator_agent=self.coordinator_agent.clone(with_memory),
|
|
2113
|
+
task_agent=self.task_agent.clone(with_memory),
|
|
2114
|
+
new_worker_agent=self.new_worker_agent.clone(with_memory)
|
|
2115
|
+
if self.new_worker_agent
|
|
2003
2116
|
else None,
|
|
2004
2117
|
graceful_shutdown_timeout=self.graceful_shutdown_timeout,
|
|
2005
2118
|
share_memory=self.share_memory,
|
|
2006
2119
|
)
|
|
2007
2120
|
|
|
2008
|
-
new_instance.task_agent = self.task_agent.clone(with_memory)
|
|
2009
|
-
new_instance.coordinator_agent = self.coordinator_agent.clone(
|
|
2010
|
-
with_memory
|
|
2011
|
-
)
|
|
2012
|
-
|
|
2013
2121
|
for child in self._children:
|
|
2014
2122
|
if isinstance(child, SingleAgentWorker):
|
|
2015
2123
|
cloned_worker = child.worker.clone(with_memory)
|
|
@@ -499,54 +499,68 @@ class WorkforceLogger:
|
|
|
499
499
|
|
|
500
500
|
tasks_handled_by_worker: Dict[str, int] = {}
|
|
501
501
|
|
|
502
|
+
# Helper function to check if a task is the main task (has no parent)
|
|
503
|
+
def is_main_task(task_id: str) -> bool:
|
|
504
|
+
return (
|
|
505
|
+
task_id in self._task_hierarchy
|
|
506
|
+
and self._task_hierarchy[task_id].get('parent') is None
|
|
507
|
+
)
|
|
508
|
+
|
|
502
509
|
for entry in self.log_entries:
|
|
503
510
|
event_type = entry['event_type']
|
|
504
511
|
timestamp = datetime.fromisoformat(entry['timestamp'])
|
|
512
|
+
task_id = entry.get('task_id', '')
|
|
513
|
+
|
|
505
514
|
if first_timestamp is None or timestamp < first_timestamp:
|
|
506
515
|
first_timestamp = timestamp
|
|
507
516
|
if last_timestamp is None or timestamp > last_timestamp:
|
|
508
517
|
last_timestamp = timestamp
|
|
509
518
|
|
|
510
519
|
if event_type == 'task_created':
|
|
511
|
-
|
|
512
|
-
|
|
520
|
+
# Exclude main task from total count
|
|
521
|
+
if not is_main_task(task_id):
|
|
522
|
+
kpis['total_tasks_created'] += 1
|
|
523
|
+
task_creation_timestamps[task_id] = timestamp
|
|
513
524
|
elif event_type == 'task_assigned':
|
|
514
|
-
task_assignment_timestamps[
|
|
525
|
+
task_assignment_timestamps[task_id] = timestamp
|
|
515
526
|
# Queue time tracking has been removed
|
|
516
527
|
|
|
517
528
|
elif event_type == 'task_started':
|
|
518
529
|
# Store start time for processing time calculation
|
|
519
|
-
task_start_times[
|
|
530
|
+
task_start_times[task_id] = timestamp.timestamp()
|
|
520
531
|
|
|
521
532
|
elif event_type == 'task_completed':
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
533
|
+
# Exclude main task from total count
|
|
534
|
+
if not is_main_task(task_id):
|
|
535
|
+
kpis['total_tasks_completed'] += 1
|
|
536
|
+
# Count tasks handled by worker (only for non-main tasks)
|
|
537
|
+
if 'worker_id' in entry and entry['worker_id'] is not None:
|
|
538
|
+
worker_id = entry['worker_id']
|
|
539
|
+
tasks_handled_by_worker[worker_id] = (
|
|
540
|
+
tasks_handled_by_worker.get(worker_id, 0) + 1
|
|
541
|
+
)
|
|
529
542
|
|
|
530
|
-
if
|
|
543
|
+
if task_id in task_assignment_timestamps:
|
|
531
544
|
completion_time = (
|
|
532
|
-
timestamp
|
|
533
|
-
- task_assignment_timestamps[entry['task_id']]
|
|
545
|
+
timestamp - task_assignment_timestamps[task_id]
|
|
534
546
|
).total_seconds()
|
|
535
547
|
# Store completion time in task hierarchy instead of KPIs
|
|
536
548
|
# array
|
|
537
|
-
if
|
|
538
|
-
self._task_hierarchy[
|
|
549
|
+
if task_id in self._task_hierarchy:
|
|
550
|
+
self._task_hierarchy[task_id][
|
|
539
551
|
'completion_time_seconds'
|
|
540
552
|
] = completion_time
|
|
541
553
|
|
|
542
554
|
elif event_type == 'task_failed':
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
555
|
+
# Exclude main task from total count
|
|
556
|
+
if not is_main_task(task_id):
|
|
557
|
+
kpis['total_tasks_failed'] += 1
|
|
558
|
+
# Count tasks handled by worker (only for non-main tasks)
|
|
559
|
+
if 'worker_id' in entry and entry['worker_id'] is not None:
|
|
560
|
+
worker_id = entry['worker_id']
|
|
561
|
+
tasks_handled_by_worker[worker_id] = (
|
|
562
|
+
tasks_handled_by_worker.get(worker_id, 0) + 1
|
|
563
|
+
)
|
|
550
564
|
error_type = entry['error_type']
|
|
551
565
|
kpis['error_types_count'][error_type] = (
|
|
552
566
|
kpis['error_types_count'].get(error_type, 0) + 1
|