camel-ai 0.2.82__py3-none-any.whl → 0.2.83a6__py3-none-any.whl
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/__init__.py +3 -3
- camel/agents/__init__.py +2 -2
- camel/agents/_types.py +2 -2
- camel/agents/_utils.py +2 -2
- camel/agents/base.py +2 -2
- camel/agents/chat_agent.py +765 -541
- camel/agents/critic_agent.py +2 -2
- camel/agents/deductive_reasoner_agent.py +2 -2
- camel/agents/embodied_agent.py +2 -2
- camel/agents/knowledge_graph_agent.py +2 -2
- camel/agents/mcp_agent.py +2 -2
- camel/agents/multi_hop_generator_agent.py +2 -2
- camel/agents/programmed_agent_instruction.py +2 -2
- camel/agents/repo_agent.py +2 -2
- camel/agents/role_assignment_agent.py +2 -2
- camel/agents/search_agent.py +2 -2
- camel/agents/task_agent.py +2 -2
- camel/agents/tool_agents/__init__.py +2 -2
- camel/agents/tool_agents/base.py +2 -2
- camel/agents/tool_agents/hugging_face_tool_agent.py +2 -2
- camel/benchmarks/__init__.py +2 -2
- camel/benchmarks/apibank.py +2 -2
- camel/benchmarks/apibench.py +2 -2
- camel/benchmarks/base.py +2 -2
- camel/benchmarks/browsecomp.py +2 -2
- camel/benchmarks/gaia.py +2 -2
- camel/benchmarks/mock_website/mock_web.py +2 -2
- camel/benchmarks/mock_website/shopping_mall/app.py +2 -2
- camel/benchmarks/nexus.py +2 -2
- camel/benchmarks/ragbench.py +2 -2
- camel/bots/__init__.py +2 -2
- camel/bots/discord/__init__.py +2 -2
- camel/bots/discord/discord_app.py +2 -2
- camel/bots/discord/discord_installation.py +2 -2
- camel/bots/discord/discord_store.py +2 -2
- camel/bots/slack/__init__.py +2 -2
- camel/bots/slack/models.py +2 -2
- camel/bots/slack/slack_app.py +2 -2
- camel/bots/telegram_bot.py +2 -2
- camel/configs/__init__.py +8 -2
- camel/configs/aihubmix_config.py +2 -2
- camel/configs/aiml_config.py +2 -2
- camel/configs/amd_config.py +2 -2
- camel/configs/anthropic_config.py +2 -2
- camel/configs/base_config.py +2 -2
- camel/configs/bedrock_config.py +2 -2
- camel/configs/cerebras_config.py +2 -2
- camel/configs/cohere_config.py +2 -2
- camel/configs/cometapi_config.py +2 -2
- camel/configs/crynux_config.py +2 -2
- camel/configs/deepseek_config.py +2 -2
- camel/configs/function_gemma_config.py +59 -0
- camel/configs/gemini_config.py +2 -2
- camel/configs/groq_config.py +2 -2
- camel/configs/internlm_config.py +2 -2
- camel/configs/litellm_config.py +2 -2
- camel/configs/lmstudio_config.py +2 -2
- camel/configs/minimax_config.py +2 -2
- camel/configs/mistral_config.py +2 -2
- camel/configs/modelscope_config.py +2 -2
- camel/configs/moonshot_config.py +2 -2
- camel/configs/nebius_config.py +2 -2
- camel/configs/netmind_config.py +2 -2
- camel/configs/novita_config.py +2 -2
- camel/configs/nvidia_config.py +2 -2
- camel/configs/ollama_config.py +2 -2
- camel/configs/openai_config.py +2 -2
- camel/configs/openrouter_config.py +2 -2
- camel/configs/ppio_config.py +2 -2
- camel/configs/qianfan_config.py +2 -2
- camel/configs/qwen_config.py +2 -2
- camel/configs/reka_config.py +2 -2
- camel/configs/samba_config.py +2 -2
- camel/configs/sglang_config.py +2 -2
- camel/configs/siliconflow_config.py +2 -2
- camel/configs/togetherai_config.py +2 -2
- camel/configs/vllm_config.py +2 -2
- camel/configs/watsonx_config.py +2 -2
- camel/configs/yi_config.py +2 -2
- camel/configs/zhipuai_config.py +2 -2
- camel/data_collectors/__init__.py +2 -2
- camel/data_collectors/alpaca_collector.py +2 -2
- camel/data_collectors/base.py +2 -2
- camel/data_collectors/sharegpt_collector.py +2 -2
- camel/datagen/__init__.py +2 -2
- camel/datagen/cot_datagen.py +2 -2
- camel/datagen/evol_instruct/__init__.py +2 -2
- camel/datagen/evol_instruct/evol_instruct.py +2 -2
- camel/datagen/evol_instruct/scorer.py +2 -2
- camel/datagen/evol_instruct/templates.py +2 -2
- camel/datagen/self_improving_cot.py +2 -2
- camel/datagen/self_instruct/__init__.py +2 -2
- camel/datagen/self_instruct/filter/__init__.py +2 -2
- camel/datagen/self_instruct/filter/filter_function.py +2 -2
- camel/datagen/self_instruct/filter/filter_registry.py +2 -2
- camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
- camel/datagen/self_instruct/self_instruct.py +2 -2
- camel/datagen/self_instruct/templates.py +2 -2
- camel/datagen/source2synth/__init__.py +2 -2
- camel/datagen/source2synth/data_processor.py +2 -2
- camel/datagen/source2synth/models.py +2 -2
- camel/datagen/source2synth/user_data_processor_config.py +2 -2
- camel/datahubs/__init__.py +2 -2
- camel/datahubs/base.py +2 -2
- camel/datahubs/huggingface.py +2 -2
- camel/datahubs/models.py +2 -2
- camel/datasets/__init__.py +2 -2
- camel/datasets/base_generator.py +2 -2
- camel/datasets/few_shot_generator.py +2 -2
- camel/datasets/models.py +2 -2
- camel/datasets/self_instruct_generator.py +2 -2
- camel/datasets/static_dataset.py +2 -2
- camel/embeddings/__init__.py +2 -2
- camel/embeddings/azure_embedding.py +2 -2
- camel/embeddings/base.py +2 -2
- camel/embeddings/gemini_embedding.py +2 -2
- camel/embeddings/jina_embedding.py +2 -2
- camel/embeddings/mistral_embedding.py +2 -2
- camel/embeddings/openai_compatible_embedding.py +2 -2
- camel/embeddings/openai_embedding.py +2 -2
- camel/embeddings/sentence_transformers_embeddings.py +2 -2
- camel/embeddings/together_embedding.py +2 -2
- camel/embeddings/vlm_embedding.py +2 -2
- camel/environments/__init__.py +2 -2
- camel/environments/models.py +2 -2
- camel/environments/multi_step.py +2 -2
- camel/environments/rlcards_env.py +2 -2
- camel/environments/single_step.py +2 -2
- camel/environments/tic_tac_toe.py +2 -2
- camel/extractors/__init__.py +2 -2
- camel/extractors/base.py +2 -2
- camel/extractors/python_strategies.py +2 -2
- camel/generators.py +2 -2
- camel/human.py +2 -2
- camel/interpreters/__init__.py +2 -2
- camel/interpreters/base.py +2 -2
- camel/interpreters/docker_interpreter.py +2 -2
- camel/interpreters/e2b_interpreter.py +2 -2
- camel/interpreters/internal_python_interpreter.py +2 -2
- camel/interpreters/interpreter_error.py +2 -2
- camel/interpreters/ipython_interpreter.py +2 -2
- camel/interpreters/microsandbox_interpreter.py +2 -2
- camel/interpreters/subprocess_interpreter.py +2 -2
- camel/loaders/__init__.py +2 -2
- camel/loaders/apify_reader.py +2 -2
- camel/loaders/base_io.py +2 -2
- camel/loaders/base_loader.py +2 -2
- camel/loaders/chunkr_reader.py +2 -2
- camel/loaders/crawl4ai_reader.py +2 -2
- camel/loaders/firecrawl_reader.py +2 -2
- camel/loaders/jina_url_reader.py +2 -2
- camel/loaders/markitdown.py +2 -2
- camel/loaders/mineru_extractor.py +2 -2
- camel/loaders/mistral_reader.py +2 -2
- camel/loaders/scrapegraph_reader.py +2 -2
- camel/loaders/unstructured_io.py +2 -2
- camel/logger.py +2 -2
- camel/memories/__init__.py +2 -2
- camel/memories/agent_memories.py +2 -2
- camel/memories/base.py +2 -2
- camel/memories/blocks/__init__.py +2 -2
- camel/memories/blocks/chat_history_block.py +2 -2
- camel/memories/blocks/vectordb_block.py +2 -2
- camel/memories/context_creators/__init__.py +2 -2
- camel/memories/context_creators/score_based.py +89 -2
- camel/memories/records.py +2 -2
- camel/messages/__init__.py +2 -2
- camel/messages/base.py +2 -2
- camel/messages/conversion/__init__.py +2 -2
- camel/messages/conversion/alpaca.py +2 -2
- camel/messages/conversion/conversation_models.py +2 -2
- camel/messages/conversion/sharegpt/__init__.py +2 -2
- camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
- camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
- camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
- camel/messages/func_message.py +2 -2
- camel/models/__init__.py +4 -2
- camel/models/_utils.py +2 -2
- camel/models/aihubmix_model.py +2 -2
- camel/models/aiml_model.py +2 -2
- camel/models/amd_model.py +2 -2
- camel/models/anthropic_model.py +2 -2
- camel/models/aws_bedrock_model.py +2 -2
- camel/models/azure_openai_model.py +4 -28
- camel/models/base_audio_model.py +2 -2
- camel/models/base_model.py +192 -14
- camel/models/cerebras_model.py +2 -2
- camel/models/cohere_model.py +4 -30
- camel/models/cometapi_model.py +2 -2
- camel/models/crynux_model.py +2 -2
- camel/models/deepseek_model.py +4 -28
- camel/models/fish_audio_model.py +2 -2
- camel/models/function_gemma_model.py +889 -0
- camel/models/gemini_model.py +4 -28
- camel/models/groq_model.py +2 -2
- camel/models/internlm_model.py +2 -2
- camel/models/litellm_model.py +3 -17
- camel/models/lmstudio_model.py +2 -2
- camel/models/minimax_model.py +2 -2
- camel/models/mistral_model.py +4 -30
- camel/models/model_factory.py +4 -2
- camel/models/model_manager.py +2 -2
- camel/models/modelscope_model.py +2 -2
- camel/models/moonshot_model.py +3 -15
- camel/models/nebius_model.py +2 -2
- camel/models/nemotron_model.py +2 -2
- camel/models/netmind_model.py +2 -2
- camel/models/novita_model.py +2 -2
- camel/models/nvidia_model.py +2 -2
- camel/models/ollama_model.py +2 -2
- camel/models/openai_audio_models.py +2 -2
- camel/models/openai_compatible_model.py +4 -28
- camel/models/openai_model.py +4 -43
- camel/models/openrouter_model.py +2 -2
- camel/models/ppio_model.py +2 -2
- camel/models/qianfan_model.py +2 -2
- camel/models/qwen_model.py +2 -2
- camel/models/reka_model.py +4 -30
- camel/models/reward/__init__.py +2 -2
- camel/models/reward/base_reward_model.py +2 -2
- camel/models/reward/evaluator.py +2 -2
- camel/models/reward/nemotron_model.py +2 -2
- camel/models/reward/skywork_model.py +2 -2
- camel/models/samba_model.py +4 -30
- camel/models/sglang_model.py +4 -30
- camel/models/siliconflow_model.py +2 -2
- camel/models/stub_model.py +2 -2
- camel/models/togetherai_model.py +2 -2
- camel/models/vllm_model.py +2 -2
- camel/models/volcano_model.py +147 -4
- camel/models/watsonx_model.py +4 -30
- camel/models/yi_model.py +2 -2
- camel/models/zhipuai_model.py +2 -2
- camel/parsers/__init__.py +2 -2
- camel/parsers/mcp_tool_call_parser.py +2 -2
- camel/personas/__init__.py +2 -2
- camel/personas/persona.py +2 -2
- camel/personas/persona_hub.py +2 -2
- camel/prompts/__init__.py +2 -2
- camel/prompts/ai_society.py +2 -2
- camel/prompts/base.py +2 -2
- camel/prompts/code.py +2 -2
- camel/prompts/evaluation.py +2 -2
- camel/prompts/generate_text_embedding_data.py +2 -2
- camel/prompts/image_craft.py +2 -2
- camel/prompts/misalignment.py +2 -2
- camel/prompts/multi_condition_image_craft.py +2 -2
- camel/prompts/object_recognition.py +2 -2
- camel/prompts/persona_hub.py +2 -2
- camel/prompts/prompt_templates.py +2 -2
- camel/prompts/role_description_prompt_template.py +2 -2
- camel/prompts/solution_extraction.py +2 -2
- camel/prompts/task_prompt_template.py +2 -2
- camel/prompts/translation.py +2 -2
- camel/prompts/video_description_prompt.py +2 -2
- camel/responses/__init__.py +2 -2
- camel/responses/agent_responses.py +2 -2
- camel/retrievers/__init__.py +2 -2
- camel/retrievers/auto_retriever.py +2 -2
- camel/retrievers/base.py +2 -2
- camel/retrievers/bm25_retriever.py +2 -2
- camel/retrievers/cohere_rerank_retriever.py +2 -2
- camel/retrievers/hybrid_retrival.py +2 -2
- camel/retrievers/vector_retriever.py +2 -2
- camel/runtimes/__init__.py +2 -2
- camel/runtimes/api.py +2 -2
- camel/runtimes/base.py +2 -2
- camel/runtimes/configs.py +2 -2
- camel/runtimes/daytona_runtime.py +2 -2
- camel/runtimes/docker_runtime.py +2 -2
- camel/runtimes/llm_guard_runtime.py +2 -2
- camel/runtimes/remote_http_runtime.py +2 -2
- camel/runtimes/ubuntu_docker_runtime.py +2 -2
- camel/runtimes/utils/__init__.py +2 -2
- camel/runtimes/utils/function_risk_toolkit.py +2 -2
- camel/runtimes/utils/ignore_risk_toolkit.py +2 -2
- camel/schemas/__init__.py +2 -2
- camel/schemas/base.py +2 -2
- camel/schemas/openai_converter.py +2 -2
- camel/schemas/outlines_converter.py +2 -2
- camel/services/agent_openapi_server.py +2 -2
- camel/societies/__init__.py +2 -2
- camel/societies/babyagi_playing.py +2 -2
- camel/societies/role_playing.py +2 -2
- camel/societies/workforce/__init__.py +2 -2
- camel/societies/workforce/base.py +2 -2
- camel/societies/workforce/events.py +4 -2
- camel/societies/workforce/prompts.py +9 -8
- camel/societies/workforce/role_playing_worker.py +2 -2
- camel/societies/workforce/single_agent_worker.py +2 -2
- camel/societies/workforce/structured_output_handler.py +2 -2
- camel/societies/workforce/task_channel.py +2 -2
- camel/societies/workforce/utils.py +2 -2
- camel/societies/workforce/worker.py +2 -2
- camel/societies/workforce/workflow_memory_manager.py +2 -2
- camel/societies/workforce/workforce.py +132 -71
- camel/societies/workforce/workforce_callback.py +2 -2
- camel/societies/workforce/workforce_logger.py +2 -2
- camel/societies/workforce/workforce_metrics.py +2 -2
- camel/storages/__init__.py +2 -2
- camel/storages/graph_storages/__init__.py +2 -2
- camel/storages/graph_storages/base.py +2 -2
- camel/storages/graph_storages/graph_element.py +2 -2
- camel/storages/graph_storages/nebula_graph.py +2 -2
- camel/storages/graph_storages/neo4j_graph.py +2 -2
- camel/storages/key_value_storages/__init__.py +2 -2
- camel/storages/key_value_storages/base.py +2 -2
- camel/storages/key_value_storages/in_memory.py +2 -2
- camel/storages/key_value_storages/json.py +2 -2
- camel/storages/key_value_storages/mem0_cloud.py +2 -2
- camel/storages/key_value_storages/redis.py +2 -2
- camel/storages/object_storages/__init__.py +2 -2
- camel/storages/object_storages/amazon_s3.py +2 -2
- camel/storages/object_storages/azure_blob.py +2 -2
- camel/storages/object_storages/base.py +2 -2
- camel/storages/object_storages/google_cloud.py +2 -2
- camel/storages/vectordb_storages/__init__.py +2 -2
- camel/storages/vectordb_storages/base.py +2 -2
- camel/storages/vectordb_storages/chroma.py +2 -2
- camel/storages/vectordb_storages/faiss.py +2 -2
- camel/storages/vectordb_storages/milvus.py +2 -2
- camel/storages/vectordb_storages/oceanbase.py +2 -2
- camel/storages/vectordb_storages/pgvector.py +2 -2
- camel/storages/vectordb_storages/qdrant.py +2 -2
- camel/storages/vectordb_storages/surreal.py +2 -2
- camel/storages/vectordb_storages/tidb.py +2 -2
- camel/storages/vectordb_storages/weaviate.py +2 -2
- camel/tasks/__init__.py +2 -2
- camel/tasks/task.py +2 -2
- camel/tasks/task_prompt.py +2 -2
- camel/terminators/__init__.py +2 -2
- camel/terminators/base.py +2 -2
- camel/terminators/response_terminator.py +2 -2
- camel/terminators/token_limit_terminator.py +2 -2
- camel/toolkits/__init__.py +6 -3
- camel/toolkits/aci_toolkit.py +2 -2
- camel/toolkits/arxiv_toolkit.py +2 -2
- camel/toolkits/ask_news_toolkit.py +2 -2
- camel/toolkits/async_browser_toolkit.py +2 -2
- camel/toolkits/audio_analysis_toolkit.py +2 -2
- camel/toolkits/base.py +47 -5
- camel/toolkits/bohrium_toolkit.py +2 -2
- camel/toolkits/browser_toolkit.py +2 -2
- camel/toolkits/browser_toolkit_commons.py +2 -2
- camel/toolkits/code_execution.py +2 -2
- camel/toolkits/context_summarizer_toolkit.py +2 -2
- camel/toolkits/craw4ai_toolkit.py +2 -2
- camel/toolkits/dappier_toolkit.py +2 -2
- camel/toolkits/data_commons_toolkit.py +2 -2
- camel/toolkits/dingtalk.py +2 -2
- camel/toolkits/earth_science_toolkit.py +2 -2
- camel/toolkits/edgeone_pages_mcp_toolkit.py +2 -2
- camel/toolkits/excel_toolkit.py +2 -2
- camel/toolkits/file_toolkit.py +2 -2
- camel/toolkits/function_tool.py +95 -25
- camel/toolkits/github_toolkit.py +2 -2
- camel/toolkits/gmail_toolkit.py +2 -2
- camel/toolkits/google_calendar_toolkit.py +2 -2
- camel/toolkits/google_drive_mcp_toolkit.py +2 -2
- camel/toolkits/google_maps_toolkit.py +2 -2
- camel/toolkits/google_scholar_toolkit.py +2 -2
- camel/toolkits/human_toolkit.py +2 -2
- camel/toolkits/hybrid_browser_toolkit/__init__.py +2 -2
- camel/toolkits/hybrid_browser_toolkit/config_loader.py +2 -2
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +2 -2
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +89 -104
- camel/toolkits/hybrid_browser_toolkit/installer.py +2 -2
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +25 -14
- camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +6 -0
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +2 -2
- camel/toolkits/hybrid_browser_toolkit_py/__init__.py +2 -2
- camel/toolkits/hybrid_browser_toolkit_py/actions.py +2 -2
- camel/toolkits/hybrid_browser_toolkit_py/agent.py +2 -2
- camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +2 -2
- camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +2 -2
- camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2 -2
- camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +2 -2
- camel/toolkits/image_analysis_toolkit.py +2 -2
- camel/toolkits/image_generation_toolkit.py +2 -2
- camel/toolkits/jina_reranker_toolkit.py +2 -2
- camel/toolkits/klavis_toolkit.py +2 -2
- camel/toolkits/linkedin_toolkit.py +2 -2
- camel/toolkits/markitdown_toolkit.py +2 -2
- camel/toolkits/math_toolkit.py +2 -2
- camel/toolkits/mcp_toolkit.py +2 -2
- camel/toolkits/memory_toolkit.py +2 -2
- camel/toolkits/meshy_toolkit.py +2 -2
- camel/toolkits/message_agent_toolkit.py +2 -2
- camel/toolkits/message_integration.py +6 -2
- camel/toolkits/microsoft_outlook_mail_toolkit.py +1885 -0
- camel/toolkits/mineru_toolkit.py +2 -2
- camel/toolkits/minimax_mcp_toolkit.py +2 -2
- camel/toolkits/networkx_toolkit.py +2 -2
- camel/toolkits/note_taking_toolkit.py +2 -2
- camel/toolkits/notion_mcp_toolkit.py +2 -2
- camel/toolkits/notion_toolkit.py +2 -2
- camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
- camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
- camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
- camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
- camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
- camel/toolkits/open_api_specs/security_config.py +2 -2
- camel/toolkits/open_api_specs/speak/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
- camel/toolkits/open_api_toolkit.py +2 -2
- camel/toolkits/openbb_toolkit.py +2 -2
- camel/toolkits/origene_mcp_toolkit.py +2 -2
- camel/toolkits/playwright_mcp_toolkit.py +2 -2
- camel/toolkits/pptx_toolkit.py +2 -2
- camel/toolkits/pubmed_toolkit.py +2 -2
- camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
- camel/toolkits/pyautogui_toolkit.py +2 -2
- camel/toolkits/reddit_toolkit.py +2 -2
- camel/toolkits/resend_toolkit.py +2 -2
- camel/toolkits/retrieval_toolkit.py +2 -2
- camel/toolkits/screenshot_toolkit.py +2 -2
- camel/toolkits/search_toolkit.py +70 -13
- camel/toolkits/searxng_toolkit.py +2 -2
- camel/toolkits/semantic_scholar_toolkit.py +2 -2
- camel/toolkits/slack_toolkit.py +2 -2
- camel/toolkits/sql_toolkit.py +2 -2
- camel/toolkits/stripe_toolkit.py +2 -2
- camel/toolkits/sympy_toolkit.py +2 -2
- camel/toolkits/task_planning_toolkit.py +2 -2
- camel/toolkits/terminal_toolkit/__init__.py +2 -2
- camel/toolkits/terminal_toolkit/terminal_toolkit.py +323 -112
- camel/toolkits/terminal_toolkit/utils.py +179 -52
- camel/toolkits/thinking_toolkit.py +2 -2
- camel/toolkits/twitter_toolkit.py +2 -2
- camel/toolkits/vertex_ai_veo_toolkit.py +2 -2
- camel/toolkits/video_analysis_toolkit.py +2 -2
- camel/toolkits/video_download_toolkit.py +2 -2
- camel/toolkits/weather_toolkit.py +2 -2
- camel/toolkits/web_deploy_toolkit.py +2 -2
- camel/toolkits/wechat_official_toolkit.py +2 -2
- camel/toolkits/whatsapp_toolkit.py +2 -2
- camel/toolkits/wolfram_alpha_toolkit.py +2 -2
- camel/toolkits/zapier_toolkit.py +2 -2
- camel/types/__init__.py +2 -2
- camel/types/agents/__init__.py +2 -2
- camel/types/agents/tool_calling_record.py +2 -2
- camel/types/enums.py +5 -4
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +2 -2
- camel/types/unified_model_type.py +10 -6
- camel/utils/__init__.py +5 -2
- camel/utils/agent_context.py +41 -0
- camel/utils/async_func.py +2 -2
- camel/utils/chunker/__init__.py +2 -2
- camel/utils/chunker/base.py +2 -2
- camel/utils/chunker/code_chunker.py +2 -2
- camel/utils/chunker/uio_chunker.py +2 -2
- camel/utils/commons.py +2 -2
- camel/utils/constants.py +2 -2
- camel/utils/context_utils.py +2 -2
- camel/utils/deduplication.py +2 -2
- camel/utils/filename.py +2 -2
- camel/utils/langfuse.py +18 -10
- camel/utils/mcp.py +2 -2
- camel/utils/mcp_client.py +2 -2
- camel/utils/message_summarizer.py +2 -2
- camel/utils/response_format.py +2 -2
- camel/utils/token_counting.py +2 -2
- camel/utils/tool_result.py +2 -2
- camel/verifiers/__init__.py +2 -2
- camel/verifiers/base.py +2 -2
- camel/verifiers/math_verifier.py +2 -2
- camel/verifiers/models.py +2 -2
- camel/verifiers/physics_verifier.py +2 -2
- camel/verifiers/python_verifier.py +2 -2
- {camel_ai-0.2.82.dist-info → camel_ai-0.2.83a6.dist-info}/METADATA +34 -29
- camel_ai-0.2.83a6.dist-info/RECORD +511 -0
- camel_ai-0.2.82.dist-info/RECORD +0 -507
- {camel_ai-0.2.82.dist-info → camel_ai-0.2.83a6.dist-info}/WHEEL +0 -0
- {camel_ai-0.2.82.dist-info → camel_ai-0.2.83a6.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
16
|
import asyncio
|
|
@@ -48,7 +48,7 @@ if TYPE_CHECKING:
|
|
|
48
48
|
from camel.agents import ChatAgent
|
|
49
49
|
from camel.logger import get_logger
|
|
50
50
|
from camel.messages.base import BaseMessage
|
|
51
|
-
from camel.models import
|
|
51
|
+
from camel.models import BaseModelBackend, ModelManager
|
|
52
52
|
from camel.societies.workforce.base import BaseNode
|
|
53
53
|
from camel.societies.workforce.prompts import (
|
|
54
54
|
ASSIGN_TASK_PROMPT,
|
|
@@ -91,7 +91,6 @@ from camel.toolkits import (
|
|
|
91
91
|
SearchToolkit,
|
|
92
92
|
ThinkingToolkit,
|
|
93
93
|
)
|
|
94
|
-
from camel.types import ModelPlatformType, ModelType
|
|
95
94
|
from camel.utils import dependencies_required
|
|
96
95
|
|
|
97
96
|
from .events import (
|
|
@@ -201,6 +200,11 @@ class Workforce(BaseNode):
|
|
|
201
200
|
handle failed tasks. If None, workers will be created with default
|
|
202
201
|
settings including SearchToolkit, CodeExecutionToolkit, and
|
|
203
202
|
ThinkingToolkit. (default: :obj:`None`)
|
|
203
|
+
default_model (Optional[Union[BaseModelBackend, ModelManager]],
|
|
204
|
+
optional): Model backend or manager to use when creating default
|
|
205
|
+
coordinator, task, or dynamic worker agents. If None, agents
|
|
206
|
+
will be created using ModelPlatformType.DEFAULT and
|
|
207
|
+
ModelType.DEFAULT settings. (default: :obj:`None`)
|
|
204
208
|
graceful_shutdown_timeout (float, optional): The timeout in seconds
|
|
205
209
|
for graceful shutdown when a task fails 3 times. During this
|
|
206
210
|
period, the workforce remains active for debugging.
|
|
@@ -311,6 +315,7 @@ class Workforce(BaseNode):
|
|
|
311
315
|
coordinator_agent: Optional[ChatAgent] = None,
|
|
312
316
|
task_agent: Optional[ChatAgent] = None,
|
|
313
317
|
new_worker_agent: Optional[ChatAgent] = None,
|
|
318
|
+
default_model: Optional[Union[BaseModelBackend, ModelManager]] = None,
|
|
314
319
|
graceful_shutdown_timeout: float = 15.0,
|
|
315
320
|
share_memory: bool = False,
|
|
316
321
|
use_structured_output_handler: bool = True,
|
|
@@ -327,6 +332,7 @@ class Workforce(BaseNode):
|
|
|
327
332
|
] = deque()
|
|
328
333
|
self._children = children or []
|
|
329
334
|
self.new_worker_agent = new_worker_agent
|
|
335
|
+
self.default_model = default_model
|
|
330
336
|
self.graceful_shutdown_timeout = graceful_shutdown_timeout
|
|
331
337
|
self.share_memory = share_memory
|
|
332
338
|
self.use_structured_output_handler = use_structured_output_handler
|
|
@@ -391,7 +397,10 @@ class Workforce(BaseNode):
|
|
|
391
397
|
"ChatAgent settings (ModelPlatformType.DEFAULT, "
|
|
392
398
|
"ModelType.DEFAULT) with default system message."
|
|
393
399
|
)
|
|
394
|
-
self.coordinator_agent = ChatAgent(
|
|
400
|
+
self.coordinator_agent = ChatAgent(
|
|
401
|
+
coord_agent_sys_msg,
|
|
402
|
+
model=self.default_model,
|
|
403
|
+
)
|
|
395
404
|
else:
|
|
396
405
|
logger.info(
|
|
397
406
|
"Custom coordinator_agent provided. Preserving user's "
|
|
@@ -450,6 +459,7 @@ class Workforce(BaseNode):
|
|
|
450
459
|
)
|
|
451
460
|
self.task_agent = ChatAgent(
|
|
452
461
|
task_sys_msg,
|
|
462
|
+
model=self.default_model,
|
|
453
463
|
)
|
|
454
464
|
else:
|
|
455
465
|
logger.info(
|
|
@@ -578,11 +588,19 @@ class Workforce(BaseNode):
|
|
|
578
588
|
metadata: Optional[Dict[str, Any]] = None,
|
|
579
589
|
) -> None:
|
|
580
590
|
r"""Emit a worker-created event to all registered callbacks."""
|
|
591
|
+
if metadata is None:
|
|
592
|
+
_metadata: Dict[str, Any] = {
|
|
593
|
+
'description': worker_node.description
|
|
594
|
+
}
|
|
595
|
+
else:
|
|
596
|
+
_metadata = metadata.copy()
|
|
597
|
+
_metadata.setdefault("description", worker_node.description)
|
|
598
|
+
|
|
581
599
|
event = WorkerCreatedEvent(
|
|
582
600
|
worker_id=worker_node.node_id,
|
|
583
601
|
worker_type=worker_type or type(worker_node).__name__,
|
|
584
602
|
role=role or worker_node.description,
|
|
585
|
-
metadata=
|
|
603
|
+
metadata=_metadata,
|
|
586
604
|
)
|
|
587
605
|
for cb in self._callbacks:
|
|
588
606
|
cb.log_worker_created(event)
|
|
@@ -1546,6 +1564,18 @@ class Workforce(BaseNode):
|
|
|
1546
1564
|
# Generate available strategies text based on config
|
|
1547
1565
|
available_strategies = self._get_available_strategies_text()
|
|
1548
1566
|
|
|
1567
|
+
# Generate strategy options for response format (None means all
|
|
1568
|
+
# enabled)
|
|
1569
|
+
config_strategies = self.failure_handling_config.enabled_strategies
|
|
1570
|
+
strategies = (
|
|
1571
|
+
list(RecoveryStrategy)
|
|
1572
|
+
if config_strategies is None
|
|
1573
|
+
else config_strategies
|
|
1574
|
+
)
|
|
1575
|
+
response_format = response_format.format(
|
|
1576
|
+
strategy_options="|".join(s.value for s in strategies)
|
|
1577
|
+
)
|
|
1578
|
+
|
|
1549
1579
|
# Format the unified analysis prompt
|
|
1550
1580
|
analysis_prompt = str(
|
|
1551
1581
|
TASK_ANALYSIS_PROMPT.format(
|
|
@@ -1607,6 +1637,7 @@ class Workforce(BaseNode):
|
|
|
1607
1637
|
self,
|
|
1608
1638
|
task: Task,
|
|
1609
1639
|
recovery_decision: TaskAnalysisResult,
|
|
1640
|
+
original_assignee: str,
|
|
1610
1641
|
) -> bool:
|
|
1611
1642
|
r"""Apply the recovery strategy from a task analysis result.
|
|
1612
1643
|
|
|
@@ -1617,6 +1648,8 @@ class Workforce(BaseNode):
|
|
|
1617
1648
|
task (Task): The task that needs recovery
|
|
1618
1649
|
recovery_decision (TaskAnalysisResult): The analysis result with
|
|
1619
1650
|
recovery strategy
|
|
1651
|
+
original_assignee (str): The original worker ID that was assigned
|
|
1652
|
+
to this task before cleanup.
|
|
1620
1653
|
|
|
1621
1654
|
Returns:
|
|
1622
1655
|
bool: True if workforce should halt (e.g., decompose needs
|
|
@@ -1630,60 +1663,28 @@ class Workforce(BaseNode):
|
|
|
1630
1663
|
try:
|
|
1631
1664
|
if strategy == RecoveryStrategy.RETRY:
|
|
1632
1665
|
# Simply retry the task by reposting it to the same worker
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1666
|
+
await self._post_task(task, original_assignee)
|
|
1667
|
+
action_taken = f"retried with same worker {original_assignee}"
|
|
1668
|
+
logger.info(
|
|
1669
|
+
f"Task {task.id} retrying with same worker "
|
|
1670
|
+
f"{original_assignee}"
|
|
1636
1671
|
)
|
|
1637
1672
|
|
|
1638
|
-
if assignee_id:
|
|
1639
|
-
# Retry with the same worker - no coordinator call needed
|
|
1640
|
-
await self._post_task(task, assignee_id)
|
|
1641
|
-
action_taken = f"retried with same worker {assignee_id}"
|
|
1642
|
-
logger.info(
|
|
1643
|
-
f"Task {task.id} retrying with same worker "
|
|
1644
|
-
f"{assignee_id} (no coordinator call)"
|
|
1645
|
-
)
|
|
1646
|
-
else:
|
|
1647
|
-
# No previous assignment exists - find a new assignee
|
|
1648
|
-
logger.info(
|
|
1649
|
-
f"Task {task.id} has no previous assignee, "
|
|
1650
|
-
f"calling coordinator"
|
|
1651
|
-
)
|
|
1652
|
-
batch_result = await self._find_assignee([task])
|
|
1653
|
-
assignment = batch_result.assignments[0]
|
|
1654
|
-
self._assignees[task.id] = assignment.assignee_id
|
|
1655
|
-
await self._post_task(task, assignment.assignee_id)
|
|
1656
|
-
action_taken = (
|
|
1657
|
-
f"retried with new worker {assignment.assignee_id}"
|
|
1658
|
-
)
|
|
1659
|
-
|
|
1660
1673
|
elif strategy == RecoveryStrategy.REPLAN:
|
|
1661
1674
|
# Modify the task content and retry
|
|
1662
1675
|
if recovery_decision.modified_task_content:
|
|
1663
1676
|
task.content = recovery_decision.modified_task_content
|
|
1664
1677
|
logger.info(f"Task {task.id} content modified for replan")
|
|
1665
1678
|
|
|
1666
|
-
# Repost the modified task
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
f"replanned and retried with worker {assignee_id}"
|
|
1672
|
-
)
|
|
1673
|
-
else:
|
|
1674
|
-
# Find a new assignee for the replanned task
|
|
1675
|
-
batch_result = await self._find_assignee([task])
|
|
1676
|
-
assignment = batch_result.assignments[0]
|
|
1677
|
-
self._assignees[task.id] = assignment.assignee_id
|
|
1678
|
-
await self._post_task(task, assignment.assignee_id)
|
|
1679
|
-
action_taken = (
|
|
1680
|
-
f"replanned and assigned to "
|
|
1681
|
-
f"worker {assignment.assignee_id}"
|
|
1682
|
-
)
|
|
1679
|
+
# Repost the modified task to the same worker
|
|
1680
|
+
await self._post_task(task, original_assignee)
|
|
1681
|
+
action_taken = (
|
|
1682
|
+
f"replanned and retried with worker {original_assignee}"
|
|
1683
|
+
)
|
|
1683
1684
|
|
|
1684
1685
|
elif strategy == RecoveryStrategy.REASSIGN:
|
|
1685
1686
|
# Reassign to a different worker
|
|
1686
|
-
old_worker =
|
|
1687
|
+
old_worker = original_assignee
|
|
1687
1688
|
logger.info(
|
|
1688
1689
|
f"Task {task.id} will be reassigned from worker "
|
|
1689
1690
|
f"{old_worker}"
|
|
@@ -4030,7 +4031,6 @@ class Workforce(BaseNode):
|
|
|
4030
4031
|
new_node,
|
|
4031
4032
|
worker_type='SingleAgentWorker',
|
|
4032
4033
|
role=new_node_conf.role,
|
|
4033
|
-
metadata={'description': new_node_conf.description},
|
|
4034
4034
|
)
|
|
4035
4035
|
self._child_listening_tasks.append(
|
|
4036
4036
|
asyncio.create_task(new_node.start())
|
|
@@ -4058,15 +4058,9 @@ class Workforce(BaseNode):
|
|
|
4058
4058
|
*ThinkingToolkit().get_tools(),
|
|
4059
4059
|
]
|
|
4060
4060
|
|
|
4061
|
-
model = ModelFactory.create(
|
|
4062
|
-
model_platform=ModelPlatformType.DEFAULT,
|
|
4063
|
-
model_type=ModelType.DEFAULT,
|
|
4064
|
-
model_config_dict={"temperature": 0},
|
|
4065
|
-
)
|
|
4066
|
-
|
|
4067
4061
|
return ChatAgent(
|
|
4068
4062
|
system_message=worker_sys_msg,
|
|
4069
|
-
model=
|
|
4063
|
+
model=self.default_model,
|
|
4070
4064
|
tools=function_list, # type: ignore[arg-type]
|
|
4071
4065
|
pause_event=self._pause_event,
|
|
4072
4066
|
)
|
|
@@ -4313,6 +4307,9 @@ class Workforce(BaseNode):
|
|
|
4313
4307
|
task_failed_event = TaskFailedEvent(
|
|
4314
4308
|
task_id=task.id,
|
|
4315
4309
|
worker_id=task.assigned_worker_id or "unknown",
|
|
4310
|
+
parent_task_id=task.parent.id
|
|
4311
|
+
if task.parent
|
|
4312
|
+
else None,
|
|
4316
4313
|
error_message=task.result,
|
|
4317
4314
|
metadata={
|
|
4318
4315
|
'failure_reason': 'dependency_failure',
|
|
@@ -4388,6 +4385,7 @@ class Workforce(BaseNode):
|
|
|
4388
4385
|
task_failed_event = TaskFailedEvent(
|
|
4389
4386
|
task_id=task.id,
|
|
4390
4387
|
worker_id=worker_id,
|
|
4388
|
+
parent_task_id=task.parent.id if task.parent else None,
|
|
4391
4389
|
error_message=detailed_error,
|
|
4392
4390
|
metadata={
|
|
4393
4391
|
'failure_count': task.failure_count,
|
|
@@ -4497,15 +4495,27 @@ class Workforce(BaseNode):
|
|
|
4497
4495
|
recovery_strategy=single_strategy,
|
|
4498
4496
|
)
|
|
4499
4497
|
|
|
4498
|
+
# Preserve assignee before cleanup
|
|
4499
|
+
original_assignee = self._assignees.get(task.id)
|
|
4500
|
+
if original_assignee is None:
|
|
4501
|
+
logger.error(
|
|
4502
|
+
f"Task {task.id}: No assignee found in _assignees. "
|
|
4503
|
+
f"This indicates a bug in the task assignment chain."
|
|
4504
|
+
)
|
|
4505
|
+
task.state = TaskState.FAILED
|
|
4506
|
+
self._completed_tasks.append(task)
|
|
4507
|
+
return self.failure_handling_config.halt_on_max_retries
|
|
4508
|
+
|
|
4500
4509
|
# Clean up tracking before recovery
|
|
4501
|
-
|
|
4502
|
-
|
|
4510
|
+
# Note: task.id is guaranteed to be in _assignees since we
|
|
4511
|
+
# already checked original_assignee is not None above
|
|
4512
|
+
await self._channel.archive_task(task.id)
|
|
4503
4513
|
self._cleanup_task_tracking(task.id)
|
|
4504
4514
|
|
|
4505
|
-
# Apply the single strategy
|
|
4515
|
+
# Apply the single strategy with preserved assignee
|
|
4506
4516
|
try:
|
|
4507
4517
|
is_decompose = await self._apply_recovery_strategy(
|
|
4508
|
-
task, recovery_decision
|
|
4518
|
+
task, recovery_decision, original_assignee
|
|
4509
4519
|
)
|
|
4510
4520
|
if is_decompose:
|
|
4511
4521
|
self._completed_tasks.append(task)
|
|
@@ -4549,15 +4559,25 @@ class Workforce(BaseNode):
|
|
|
4549
4559
|
f"{recovery_decision.reasoning}"
|
|
4550
4560
|
)
|
|
4551
4561
|
|
|
4562
|
+
# Preserve assignee before cleanup
|
|
4563
|
+
original_assignee = self._assignees.get(task.id)
|
|
4564
|
+
if original_assignee is None:
|
|
4565
|
+
logger.error(
|
|
4566
|
+
f"Task {task.id}: No assignee found in _assignees. "
|
|
4567
|
+
f"This indicates a bug in the task assignment chain."
|
|
4568
|
+
)
|
|
4569
|
+
task.state = TaskState.FAILED
|
|
4570
|
+
self._completed_tasks.append(task)
|
|
4571
|
+
return self.failure_handling_config.halt_on_max_retries
|
|
4572
|
+
|
|
4552
4573
|
# Clean up tracking before attempting recovery
|
|
4553
|
-
|
|
4554
|
-
await self._channel.archive_task(task.id)
|
|
4574
|
+
await self._channel.archive_task(task.id)
|
|
4555
4575
|
self._cleanup_task_tracking(task.id)
|
|
4556
4576
|
|
|
4557
|
-
# Apply recovery strategy
|
|
4577
|
+
# Apply recovery strategy with preserved assignee
|
|
4558
4578
|
try:
|
|
4559
4579
|
is_decompose = await self._apply_recovery_strategy(
|
|
4560
|
-
task, recovery_decision
|
|
4580
|
+
task, recovery_decision, original_assignee
|
|
4561
4581
|
)
|
|
4562
4582
|
|
|
4563
4583
|
# For decompose, we handle it specially
|
|
@@ -4658,6 +4678,7 @@ class Workforce(BaseNode):
|
|
|
4658
4678
|
task_completed_event = TaskCompletedEvent(
|
|
4659
4679
|
task_id=task.id,
|
|
4660
4680
|
worker_id=worker_id,
|
|
4681
|
+
parent_task_id=task.parent.id if task.parent else None,
|
|
4661
4682
|
result_summary=task.result if task.result else "Completed",
|
|
4662
4683
|
processing_time_seconds=processing_time_seconds,
|
|
4663
4684
|
token_usage=token_usage,
|
|
@@ -5256,6 +5277,30 @@ class Workforce(BaseNode):
|
|
|
5256
5277
|
|
|
5257
5278
|
# Mark as failed for recovery
|
|
5258
5279
|
returned_task.failure_count += 1
|
|
5280
|
+
|
|
5281
|
+
task_failed_event = TaskFailedEvent(
|
|
5282
|
+
task_id=returned_task.id,
|
|
5283
|
+
worker_id=returned_task.assigned_worker_id,
|
|
5284
|
+
parent_task_id=returned_task.parent.id
|
|
5285
|
+
if returned_task.parent
|
|
5286
|
+
else None,
|
|
5287
|
+
error_message=(
|
|
5288
|
+
f"⚠️ Task {returned_task.id} "
|
|
5289
|
+
f"failed quality check "
|
|
5290
|
+
f"(score: {score}). "
|
|
5291
|
+
f"Issues: {issues}. "
|
|
5292
|
+
f"Recovery: {recovery_action}"
|
|
5293
|
+
),
|
|
5294
|
+
metadata={
|
|
5295
|
+
'failure_count': returned_task.failure_count, # noqa: E501
|
|
5296
|
+
'task_content': returned_task.content,
|
|
5297
|
+
'result_length': len(returned_task.result)
|
|
5298
|
+
if returned_task.result
|
|
5299
|
+
else 0,
|
|
5300
|
+
},
|
|
5301
|
+
)
|
|
5302
|
+
for cb in self._callbacks:
|
|
5303
|
+
cb.log_task_failed(task_failed_event)
|
|
5259
5304
|
returned_task.state = TaskState.FAILED
|
|
5260
5305
|
returned_task.result = (
|
|
5261
5306
|
f"Quality insufficient (score: "
|
|
@@ -5277,18 +5322,33 @@ class Workforce(BaseNode):
|
|
|
5277
5322
|
config_strategies[0]
|
|
5278
5323
|
)
|
|
5279
5324
|
|
|
5280
|
-
#
|
|
5281
|
-
|
|
5282
|
-
|
|
5283
|
-
|
|
5325
|
+
# Preserve assignee before cleanup - in normal
|
|
5326
|
+
# flow, a task must be assigned before it can fail
|
|
5327
|
+
original_assignee = self._assignees.get(
|
|
5328
|
+
returned_task.id
|
|
5329
|
+
)
|
|
5330
|
+
if original_assignee is None:
|
|
5331
|
+
logger.error(
|
|
5332
|
+
f"Task {returned_task.id}: No assignee "
|
|
5333
|
+
f"found in _assignees. This indicates a "
|
|
5334
|
+
f"bug in the task assignment chain."
|
|
5284
5335
|
)
|
|
5336
|
+
returned_task.state = TaskState.FAILED
|
|
5337
|
+
self._completed_tasks.append(returned_task)
|
|
5338
|
+
continue
|
|
5339
|
+
|
|
5340
|
+
# Clean up tracking before attempting recovery
|
|
5341
|
+
await self._channel.archive_task(returned_task.id)
|
|
5285
5342
|
self._cleanup_task_tracking(returned_task.id)
|
|
5286
5343
|
|
|
5287
|
-
# Apply LLM-recommended recovery strategy
|
|
5344
|
+
# Apply LLM-recommended recovery strategy with
|
|
5345
|
+
# preserved assignee
|
|
5288
5346
|
try:
|
|
5289
5347
|
is_decompose = (
|
|
5290
5348
|
await self._apply_recovery_strategy(
|
|
5291
|
-
returned_task,
|
|
5349
|
+
returned_task,
|
|
5350
|
+
quality_eval,
|
|
5351
|
+
original_assignee,
|
|
5292
5352
|
)
|
|
5293
5353
|
)
|
|
5294
5354
|
|
|
@@ -5496,6 +5556,7 @@ class Workforce(BaseNode):
|
|
|
5496
5556
|
new_worker_agent=self.new_worker_agent.clone(with_memory)
|
|
5497
5557
|
if self.new_worker_agent
|
|
5498
5558
|
else None,
|
|
5559
|
+
default_model=self.default_model,
|
|
5499
5560
|
graceful_shutdown_timeout=self.graceful_shutdown_timeout,
|
|
5500
5561
|
share_memory=self.share_memory,
|
|
5501
5562
|
use_structured_output_handler=self.use_structured_output_handler,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
16
|
import typing
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import json
|
|
15
15
|
from datetime import datetime, timezone
|
|
16
16
|
from typing import Any, Dict, List, Optional
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from abc import ABC, abstractmethod
|
|
15
15
|
from typing import Any, Dict
|
|
16
16
|
|
camel/storages/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from .graph_storages.base import BaseGraphStorage
|
|
16
16
|
from .graph_storages.nebula_graph import NebulaGraph
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from .base import BaseGraphStorage
|
|
16
16
|
from .graph_element import GraphElement
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from abc import ABC, abstractmethod
|
|
16
16
|
from typing import Any, Dict, List, Optional
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
16
|
from typing import List, Optional, Union
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import logging
|
|
16
16
|
import re
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import logging
|
|
15
15
|
import os
|
|
16
16
|
from hashlib import md5
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from .base import BaseKeyValueStorage
|
|
16
16
|
from .in_memory import InMemoryKeyValueStorage
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from abc import ABC, abstractmethod
|
|
16
16
|
from typing import Any, Dict, List
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from copy import deepcopy
|
|
16
16
|
from typing import Any, Dict, List
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
16
|
from enum import EnumMeta
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import logging
|
|
16
16
|
import os
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import asyncio
|
|
16
16
|
import json
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from .amazon_s3 import AmazonS3Storage
|
|
15
15
|
from .azure_blob import AzureBlobStorage
|
|
16
16
|
from .google_cloud import GoogleCloudStorage
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import os
|
|
16
16
|
from pathlib import Path, PurePath
|