camel-ai 0.2.71a7__tar.gz → 0.2.71a8__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.71a7 → camel_ai-0.2.71a8}/PKG-INFO +1 -1
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/__init__.py +1 -1
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/task_channel.py +4 -1
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/workforce.py +17 -3
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/file_write_toolkit.py +19 -8
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/hybrid_browser_toolkit/actions.py +28 -18
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/hybrid_browser_toolkit/agent.py +7 -1
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/hybrid_browser_toolkit/browser_session.py +48 -18
- camel_ai-0.2.71a8/camel/toolkits/hybrid_browser_toolkit/config_loader.py +447 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +272 -85
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/hybrid_browser_toolkit/snapshot.py +5 -4
- camel_ai-0.2.71a8/camel/toolkits/hybrid_browser_toolkit/unified_analyzer.js +1002 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/note_taking_toolkit.py +24 -9
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/pptx_toolkit.py +21 -8
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/search_toolkit.py +15 -5
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/pyproject.toml +1 -1
- camel_ai-0.2.71a7/camel/toolkits/hybrid_browser_toolkit/stealth_config.py +0 -116
- camel_ai-0.2.71a7/camel/toolkits/hybrid_browser_toolkit/unified_analyzer.js +0 -447
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/.gitignore +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/LICENSE +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/README.md +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/_types.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/_utils.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/chat_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/critic_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/deductive_reasoner_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/embodied_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/knowledge_graph_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/mcp_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/multi_hop_generator_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/programmed_agent_instruction.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/repo_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/role_assignment_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/search_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/task_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/tool_agents/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/tool_agents/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/agents/tool_agents/hugging_face_tool_agent.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/apibank.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/apibench.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/browsecomp.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/gaia.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/mock_website/README.md +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/mock_website/mock_web.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/mock_website/requirements.txt +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/mock_website/shopping_mall/app.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/mock_website/task.json +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/nexus.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/benchmarks/ragbench.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/discord/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/discord/discord_app.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/discord/discord_installation.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/discord/discord_store.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/slack/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/slack/models.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/slack/slack_app.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/bots/telegram_bot.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/aiml_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/anthropic_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/base_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/bedrock_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/cohere_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/crynux_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/deepseek_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/gemini_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/groq_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/internlm_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/litellm_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/lmstudio_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/mistral_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/modelscope_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/moonshot_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/netmind_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/novita_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/nvidia_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/ollama_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/openai_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/openrouter_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/ppio_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/qianfan_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/qwen_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/reka_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/samba_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/sglang_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/siliconflow_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/togetherai_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/vllm_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/watsonx_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/yi_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/configs/zhipuai_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/data_collectors/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/data_collectors/alpaca_collector.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/data_collectors/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/data_collectors/sharegpt_collector.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/cot_datagen.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/evol_instruct/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/evol_instruct/evol_instruct.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/evol_instruct/scorer.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/evol_instruct/templates.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/self_improving_cot.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/self_instruct/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/self_instruct/filter/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/self_instruct/filter/filter_function.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/self_instruct/filter/filter_registry.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/self_instruct/filter/instruction_filter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/self_instruct/self_instruct.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/self_instruct/templates.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/source2synth/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/source2synth/data_processor.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/source2synth/models.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datagen/source2synth/user_data_processor_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datahubs/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datahubs/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datahubs/huggingface.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datahubs/models.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datasets/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datasets/base_generator.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datasets/few_shot_generator.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datasets/models.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datasets/self_instruct_generator.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/datasets/static_dataset.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/azure_embedding.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/gemini_embedding.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/jina_embedding.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/mistral_embedding.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/openai_compatible_embedding.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/openai_embedding.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/sentence_transformers_embeddings.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/together_embedding.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/embeddings/vlm_embedding.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/environments/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/environments/models.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/environments/multi_step.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/environments/rlcards_env.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/environments/single_step.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/environments/tic_tac_toe.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/extractors/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/extractors/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/extractors/python_strategies.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/generators.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/human.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/docker/Dockerfile +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/docker_interpreter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/e2b_interpreter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/internal_python_interpreter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/interpreter_error.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/ipython_interpreter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/interpreters/subprocess_interpreter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/apify_reader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/base_io.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/base_loader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/chunkr_reader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/crawl4ai_reader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/firecrawl_reader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/jina_url_reader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/markitdown.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/mineru_extractor.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/mistral_reader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/pandas_reader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/scrapegraph_reader.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/loaders/unstructured_io.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/logger.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/agent_memories.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/blocks/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/blocks/chat_history_block.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/blocks/vectordb_block.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/context_creators/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/context_creators/score_based.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/memories/records.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/conversion/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/conversion/alpaca.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/conversion/conversation_models.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/conversion/sharegpt/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/conversion/sharegpt/function_call_formatter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/conversion/sharegpt/hermes/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/messages/func_message.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/_utils.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/aiml_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/anthropic_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/aws_bedrock_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/azure_openai_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/base_audio_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/base_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/cohere_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/crynux_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/deepseek_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/fish_audio_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/gemini_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/groq_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/internlm_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/litellm_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/lmstudio_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/mistral_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/model_factory.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/model_manager.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/modelscope_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/moonshot_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/nemotron_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/netmind_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/novita_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/nvidia_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/ollama_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/openai_audio_models.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/openai_compatible_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/openai_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/openrouter_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/ppio_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/qianfan_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/qwen_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/reka_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/reward/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/reward/base_reward_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/reward/evaluator.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/reward/nemotron_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/reward/skywork_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/samba_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/sglang_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/siliconflow_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/stub_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/togetherai_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/vllm_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/volcano_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/watsonx_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/yi_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/models/zhipuai_model.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/personas/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/personas/persona.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/personas/persona_hub.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/ai_society.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/code.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/evaluation.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/generate_text_embedding_data.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/image_craft.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/misalignment.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/multi_condition_image_craft.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/object_recognition.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/persona_hub.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/prompt_templates.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/role_description_prompt_template.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/solution_extraction.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/task_prompt_template.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/translation.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/prompts/video_description_prompt.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/py.typed +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/responses/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/responses/agent_responses.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/retrievers/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/retrievers/auto_retriever.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/retrievers/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/retrievers/bm25_retriever.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/retrievers/cohere_rerank_retriever.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/retrievers/hybrid_retrival.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/retrievers/vector_retriever.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/api.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/configs.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/daytona_runtime.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/docker_runtime.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/llm_guard_runtime.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/remote_http_runtime.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/ubuntu_docker_runtime.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/utils/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/utils/function_risk_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/runtimes/utils/ignore_risk_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/schemas/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/schemas/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/schemas/openai_converter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/schemas/outlines_converter.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/services/agent_openapi_server.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/babyagi_playing.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/role_playing.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/prompts.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/role_playing_worker.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/single_agent_worker.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/structured_output_handler.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/utils.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/worker.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/societies/workforce/workforce_logger.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/graph_storages/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/graph_storages/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/graph_storages/graph_element.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/graph_storages/nebula_graph.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/graph_storages/neo4j_graph.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/key_value_storages/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/key_value_storages/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/key_value_storages/in_memory.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/key_value_storages/json.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/key_value_storages/mem0_cloud.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/key_value_storages/redis.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/object_storages/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/object_storages/amazon_s3.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/object_storages/azure_blob.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/object_storages/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/object_storages/google_cloud.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/chroma.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/faiss.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/milvus.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/oceanbase.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/pgvector.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/qdrant.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/tidb.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/storages/vectordb_storages/weaviate.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/tasks/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/tasks/task.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/tasks/task_prompt.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/terminators/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/terminators/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/terminators/response_terminator.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/terminators/token_limit_terminator.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/aci_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/arxiv_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/ask_news_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/async_browser_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/audio_analysis_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/bohrium_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/browser_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/browser_toolkit_commons.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/code_execution.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/craw4ai_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/dappier_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/data_commons_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/edgeone_pages_mcp_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/excel_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/function_tool.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/github_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/google_calendar_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/google_drive_mcp_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/google_maps_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/google_scholar_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/human_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/hybrid_browser_toolkit/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/hybrid_browser_toolkit/stealth_script.js +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/image_analysis_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/jina_reranker_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/klavis_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/linkedin_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/markitdown_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/math_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/mcp_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/memory_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/meshy_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/message_agent_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/mineru_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/networkx_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/notion_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/biztoc/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/biztoc/ai-plugin.json +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/biztoc/openapi.yaml +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/coursera/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/coursera/openapi.yaml +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/create_qr_code/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/create_qr_code/openapi.yaml +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/klarna/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/klarna/openapi.yaml +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/nasa_apod/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/nasa_apod/openapi.yaml +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/outschool/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/outschool/ai-plugin.json +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/outschool/openapi.yaml +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/outschool/paths/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/outschool/paths/get_classes.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/security_config.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/speak/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/speak/openapi.yaml +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/web_scraper/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/web_scraper/openapi.yaml +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/open_api_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/openai_agent_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/openai_image_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/openbb_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/page_script.js +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/playwright_mcp_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/pubmed_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/pulse_mcp_search_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/pyautogui_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/reddit_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/retrieval_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/searxng_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/semantic_scholar_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/slack_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/stripe_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/sympy_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/task_planning_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/terminal_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/thinking_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/twitter_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/video_analysis_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/video_download_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/weather_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/whatsapp_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/wolfram_alpha_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/zapier_toolkit.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/types/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/types/agents/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/types/agents/tool_calling_record.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/types/enums.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/types/mcp_registries.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/types/openai_types.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/types/unified_model_type.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/async_func.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/chunker/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/chunker/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/chunker/code_chunker.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/chunker/uio_chunker.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/commons.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/constants.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/deduplication.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/filename.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/langfuse.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/mcp.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/mcp_client.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/message_summarizer.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/response_format.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/token_counting.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/utils/tool_result.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/verifiers/__init__.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/verifiers/base.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/verifiers/math_verifier.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/verifiers/models.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/verifiers/physics_verifier.py +0 -0
- {camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/verifiers/python_verifier.py +0 -0
|
@@ -91,11 +91,14 @@ class TaskChannel:
|
|
|
91
91
|
"""
|
|
92
92
|
async with self._condition:
|
|
93
93
|
while True:
|
|
94
|
-
for packet in self._task_dict.
|
|
94
|
+
for task_id, packet in list(self._task_dict.items()):
|
|
95
95
|
if packet.publisher_id != publisher_id:
|
|
96
96
|
continue
|
|
97
97
|
if packet.status != PacketStatus.RETURNED:
|
|
98
98
|
continue
|
|
99
|
+
# Remove the task to prevent returning it again
|
|
100
|
+
del self._task_dict[task_id]
|
|
101
|
+
self._condition.notify_all()
|
|
99
102
|
return packet.task
|
|
100
103
|
await self._condition.wait()
|
|
101
104
|
|
|
@@ -551,6 +551,10 @@ class Workforce(BaseNode):
|
|
|
551
551
|
continue
|
|
552
552
|
|
|
553
553
|
if not memory_records:
|
|
554
|
+
logger.warning(
|
|
555
|
+
"No valid memory records could be reconstructed "
|
|
556
|
+
"for sharing"
|
|
557
|
+
)
|
|
554
558
|
return
|
|
555
559
|
|
|
556
560
|
# Share with coordinator agent
|
|
@@ -668,6 +672,12 @@ class Workforce(BaseNode):
|
|
|
668
672
|
if task_id in self._task_start_times:
|
|
669
673
|
del self._task_start_times[task_id]
|
|
670
674
|
|
|
675
|
+
if task_id in self._task_dependencies:
|
|
676
|
+
del self._task_dependencies[task_id]
|
|
677
|
+
|
|
678
|
+
if task_id in self._assignees:
|
|
679
|
+
del self._assignees[task_id]
|
|
680
|
+
|
|
671
681
|
def _decompose_task(self, task: Task) -> List[Task]:
|
|
672
682
|
r"""Decompose the task into subtasks. This method will also set the
|
|
673
683
|
relationship between the task and its subtasks.
|
|
@@ -991,8 +1001,13 @@ class Workforce(BaseNode):
|
|
|
991
1001
|
tasks_dict = {task.id: task for task in self._pending_tasks}
|
|
992
1002
|
|
|
993
1003
|
# Check if all provided IDs exist
|
|
994
|
-
|
|
995
|
-
|
|
1004
|
+
invalid_ids = [
|
|
1005
|
+
task_id for task_id in task_ids if task_id not in tasks_dict
|
|
1006
|
+
]
|
|
1007
|
+
if invalid_ids:
|
|
1008
|
+
logger.warning(
|
|
1009
|
+
f"Task IDs not found in pending tasks: {invalid_ids}"
|
|
1010
|
+
)
|
|
996
1011
|
return False
|
|
997
1012
|
|
|
998
1013
|
# Check if we have the same number of tasks
|
|
@@ -2057,7 +2072,6 @@ class Workforce(BaseNode):
|
|
|
2057
2072
|
logger.error(
|
|
2058
2073
|
f"JSON parsing error in worker creation: Invalid "
|
|
2059
2074
|
f"response format - {e}. Response content: "
|
|
2060
|
-
f"format - {e}. Response content: "
|
|
2061
2075
|
f"{response.msg.content[:100]}..."
|
|
2062
2076
|
)
|
|
2063
2077
|
raise RuntimeError(
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
13
|
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
+
import os
|
|
14
15
|
import re
|
|
15
16
|
from datetime import datetime
|
|
16
17
|
from pathlib import Path
|
|
@@ -37,7 +38,7 @@ class FileWriteToolkit(BaseToolkit):
|
|
|
37
38
|
|
|
38
39
|
def __init__(
|
|
39
40
|
self,
|
|
40
|
-
|
|
41
|
+
working_directory: Optional[str] = None,
|
|
41
42
|
timeout: Optional[float] = None,
|
|
42
43
|
default_encoding: str = "utf-8",
|
|
43
44
|
backup_enabled: bool = True,
|
|
@@ -45,8 +46,11 @@ class FileWriteToolkit(BaseToolkit):
|
|
|
45
46
|
r"""Initialize the FileWriteToolkit.
|
|
46
47
|
|
|
47
48
|
Args:
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
working_directory (str, optional): The default directory for
|
|
50
|
+
output files. If not provided, it will be determined by the
|
|
51
|
+
`CAMEL_WORKDIR` environment variable (if set). If the
|
|
52
|
+
environment variable is not set, it defaults to
|
|
53
|
+
`camel_working_dir`.
|
|
50
54
|
timeout (Optional[float]): The timeout for the toolkit.
|
|
51
55
|
(default: :obj:`None`)
|
|
52
56
|
default_encoding (str): Default character encoding for text
|
|
@@ -55,13 +59,20 @@ class FileWriteToolkit(BaseToolkit):
|
|
|
55
59
|
before overwriting. (default: :obj:`True`)
|
|
56
60
|
"""
|
|
57
61
|
super().__init__(timeout=timeout)
|
|
58
|
-
|
|
59
|
-
|
|
62
|
+
if working_directory:
|
|
63
|
+
self.working_directory = Path(working_directory).resolve()
|
|
64
|
+
else:
|
|
65
|
+
camel_workdir = os.environ.get("CAMEL_WORKDIR")
|
|
66
|
+
if camel_workdir:
|
|
67
|
+
self.working_directory = Path(camel_workdir).resolve()
|
|
68
|
+
else:
|
|
69
|
+
self.working_directory = Path("./camel_working_dir").resolve()
|
|
70
|
+
self.working_directory.mkdir(parents=True, exist_ok=True)
|
|
60
71
|
self.default_encoding = default_encoding
|
|
61
72
|
self.backup_enabled = backup_enabled
|
|
62
73
|
logger.info(
|
|
63
74
|
f"FileWriteToolkit initialized with output directory"
|
|
64
|
-
f": {self.
|
|
75
|
+
f": {self.working_directory}, encoding: {default_encoding}"
|
|
65
76
|
)
|
|
66
77
|
|
|
67
78
|
def _resolve_filepath(self, file_path: str) -> Path:
|
|
@@ -80,7 +91,7 @@ class FileWriteToolkit(BaseToolkit):
|
|
|
80
91
|
"""
|
|
81
92
|
path_obj = Path(file_path)
|
|
82
93
|
if not path_obj.is_absolute():
|
|
83
|
-
path_obj = self.
|
|
94
|
+
path_obj = self.working_directory / path_obj
|
|
84
95
|
|
|
85
96
|
sanitized_filename = self._sanitize_filename(path_obj.name)
|
|
86
97
|
path_obj = path_obj.parent / sanitized_filename
|
|
@@ -916,7 +927,7 @@ class FileWriteToolkit(BaseToolkit):
|
|
|
916
927
|
- CSV: string or list of lists
|
|
917
928
|
- JSON: string or serializable object
|
|
918
929
|
filename (str): The name or path of the file. If a relative path is
|
|
919
|
-
supplied, it is resolved to self.
|
|
930
|
+
supplied, it is resolved to self.working_directory.
|
|
920
931
|
encoding (Optional[str]): The character encoding to use. (default:
|
|
921
932
|
:obj: `None`)
|
|
922
933
|
use_latex (bool): Whether to use LaTeX for math rendering.
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
import asyncio
|
|
15
15
|
from typing import TYPE_CHECKING, Any, Dict, Optional
|
|
16
16
|
|
|
17
|
+
from .config_loader import ConfigLoader
|
|
18
|
+
|
|
17
19
|
if TYPE_CHECKING:
|
|
18
20
|
from playwright.async_api import Page
|
|
19
21
|
|
|
@@ -21,15 +23,24 @@ if TYPE_CHECKING:
|
|
|
21
23
|
class ActionExecutor:
|
|
22
24
|
r"""Executes high-level actions (click, type …) on a Playwright Page."""
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
page: "Page",
|
|
29
|
+
session: Optional[Any] = None,
|
|
30
|
+
default_timeout: Optional[int] = None,
|
|
31
|
+
short_timeout: Optional[int] = None,
|
|
32
|
+
max_scroll_amount: Optional[int] = None,
|
|
33
|
+
):
|
|
30
34
|
self.page = page
|
|
31
35
|
self.session = session # HybridBrowserSession instance
|
|
32
36
|
|
|
37
|
+
# Configure timeouts using the config file with optional overrides
|
|
38
|
+
self.default_timeout = ConfigLoader.get_action_timeout(default_timeout)
|
|
39
|
+
self.short_timeout = ConfigLoader.get_short_timeout(short_timeout)
|
|
40
|
+
self.max_scroll_amount = ConfigLoader.get_max_scroll_amount(
|
|
41
|
+
max_scroll_amount
|
|
42
|
+
)
|
|
43
|
+
|
|
33
44
|
# ------------------------------------------------------------------
|
|
34
45
|
# Public helpers
|
|
35
46
|
# ------------------------------------------------------------------
|
|
@@ -139,7 +150,7 @@ class ActionExecutor:
|
|
|
139
150
|
try:
|
|
140
151
|
if self.session:
|
|
141
152
|
async with self.page.context.expect_page(
|
|
142
|
-
timeout=self.
|
|
153
|
+
timeout=self.short_timeout
|
|
143
154
|
) as new_page_info:
|
|
144
155
|
await element.click(modifiers=["ControlOrMeta"])
|
|
145
156
|
new_page = await new_page_info.value
|
|
@@ -188,7 +199,7 @@ class ActionExecutor:
|
|
|
188
199
|
|
|
189
200
|
# Fallback to normal force click if ctrl+click fails
|
|
190
201
|
try:
|
|
191
|
-
await element.click(force=True, timeout=self.
|
|
202
|
+
await element.click(force=True, timeout=self.default_timeout)
|
|
192
203
|
details["click_method"] = "playwright_force_click"
|
|
193
204
|
return {
|
|
194
205
|
"message": f"Fallback clicked element: {found_selector}",
|
|
@@ -224,7 +235,7 @@ class ActionExecutor:
|
|
|
224
235
|
}
|
|
225
236
|
|
|
226
237
|
try:
|
|
227
|
-
await self.page.fill(target, text, timeout=self.
|
|
238
|
+
await self.page.fill(target, text, timeout=self.short_timeout)
|
|
228
239
|
return {
|
|
229
240
|
"message": f"Typed '{text}' into {target}",
|
|
230
241
|
"details": details,
|
|
@@ -254,7 +265,7 @@ class ActionExecutor:
|
|
|
254
265
|
|
|
255
266
|
try:
|
|
256
267
|
await self.page.select_option(
|
|
257
|
-
target, value, timeout=self.
|
|
268
|
+
target, value, timeout=self.default_timeout
|
|
258
269
|
)
|
|
259
270
|
return {
|
|
260
271
|
"message": f"Selected '{value}' in {target}",
|
|
@@ -283,7 +294,7 @@ class ActionExecutor:
|
|
|
283
294
|
details["wait_type"] = "selector"
|
|
284
295
|
details["selector"] = sel
|
|
285
296
|
await self.page.wait_for_selector(
|
|
286
|
-
sel, timeout=self.
|
|
297
|
+
sel, timeout=self.default_timeout
|
|
287
298
|
)
|
|
288
299
|
return {"message": f"Waited for {sel}", "details": details}
|
|
289
300
|
return {
|
|
@@ -303,7 +314,7 @@ class ActionExecutor:
|
|
|
303
314
|
target = f"[aria-ref='{ref}']"
|
|
304
315
|
details = {"ref": ref, "target": target}
|
|
305
316
|
|
|
306
|
-
await self.page.wait_for_selector(target, timeout=self.
|
|
317
|
+
await self.page.wait_for_selector(target, timeout=self.default_timeout)
|
|
307
318
|
txt = await self.page.text_content(target)
|
|
308
319
|
|
|
309
320
|
details["extracted_text"] = txt
|
|
@@ -337,9 +348,9 @@ class ActionExecutor:
|
|
|
337
348
|
# Safely convert amount to integer and clamp to reasonable range
|
|
338
349
|
amount_int = int(amount)
|
|
339
350
|
amount_int = max(
|
|
340
|
-
-self.
|
|
341
|
-
min(self.
|
|
342
|
-
) # Clamp to
|
|
351
|
+
-self.max_scroll_amount,
|
|
352
|
+
min(self.max_scroll_amount, amount_int),
|
|
353
|
+
) # Clamp to max_scroll_amount range
|
|
343
354
|
details["actual_amount"] = amount_int
|
|
344
355
|
except (ValueError, TypeError):
|
|
345
356
|
return {
|
|
@@ -366,7 +377,6 @@ class ActionExecutor:
|
|
|
366
377
|
|
|
367
378
|
# Press Enter on whatever element currently has focus
|
|
368
379
|
await self.page.keyboard.press("Enter")
|
|
369
|
-
await asyncio.sleep(0.3)
|
|
370
380
|
return {
|
|
371
381
|
"message": "Pressed Enter on focused element",
|
|
372
382
|
"details": details,
|
|
@@ -378,13 +388,13 @@ class ActionExecutor:
|
|
|
378
388
|
try:
|
|
379
389
|
# Wait for basic DOM content loading
|
|
380
390
|
await self.page.wait_for_load_state(
|
|
381
|
-
'domcontentloaded', timeout=self.
|
|
391
|
+
'domcontentloaded', timeout=self.short_timeout
|
|
382
392
|
)
|
|
383
393
|
|
|
384
394
|
# Try to wait for network idle briefly
|
|
385
395
|
try:
|
|
386
396
|
await self.page.wait_for_load_state(
|
|
387
|
-
'networkidle', timeout=self.
|
|
397
|
+
'networkidle', timeout=self.short_timeout
|
|
388
398
|
)
|
|
389
399
|
except Exception:
|
|
390
400
|
pass # Network idle is optional
|
|
@@ -81,9 +81,15 @@ what was accomplished
|
|
|
81
81
|
headless: bool = False,
|
|
82
82
|
stealth: bool = False,
|
|
83
83
|
model_backend: Optional[BaseModelBackend] = None,
|
|
84
|
+
default_timeout: Optional[int] = None,
|
|
85
|
+
short_timeout: Optional[int] = None,
|
|
84
86
|
):
|
|
85
87
|
self._session = HybridBrowserSession(
|
|
86
|
-
headless=headless,
|
|
88
|
+
headless=headless,
|
|
89
|
+
user_data_dir=user_data_dir,
|
|
90
|
+
stealth=stealth,
|
|
91
|
+
default_timeout=default_timeout,
|
|
92
|
+
short_timeout=short_timeout,
|
|
87
93
|
)
|
|
88
94
|
from camel.agents import ChatAgent
|
|
89
95
|
|
{camel_ai-0.2.71a7 → camel_ai-0.2.71a8}/camel/toolkits/hybrid_browser_toolkit/browser_session.py
RENAMED
|
@@ -19,8 +19,8 @@ from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Optional, Tuple
|
|
|
19
19
|
from camel.logger import get_logger
|
|
20
20
|
|
|
21
21
|
from .actions import ActionExecutor
|
|
22
|
+
from .config_loader import ConfigLoader
|
|
22
23
|
from .snapshot import PageSnapshot
|
|
23
|
-
from .stealth_config import StealthConfig
|
|
24
24
|
|
|
25
25
|
if TYPE_CHECKING:
|
|
26
26
|
from playwright.async_api import (
|
|
@@ -44,10 +44,6 @@ class HybridBrowserSession:
|
|
|
44
44
|
This class is a singleton per event-loop and session-id combination.
|
|
45
45
|
"""
|
|
46
46
|
|
|
47
|
-
# Configuration constants
|
|
48
|
-
DEFAULT_NAVIGATION_TIMEOUT = 10000 # 10 seconds
|
|
49
|
-
NETWORK_IDLE_TIMEOUT = 5000 # 5 seconds
|
|
50
|
-
|
|
51
47
|
# Class-level registry for singleton instances
|
|
52
48
|
# Format: {(loop_id, session_id): HybridBrowserSession}
|
|
53
49
|
_instances: ClassVar[Dict[Tuple[Any, str], "HybridBrowserSession"]] = {}
|
|
@@ -63,6 +59,10 @@ class HybridBrowserSession:
|
|
|
63
59
|
user_data_dir: Optional[str] = None,
|
|
64
60
|
stealth: bool = False,
|
|
65
61
|
session_id: Optional[str] = None,
|
|
62
|
+
default_timeout: Optional[int] = None,
|
|
63
|
+
short_timeout: Optional[int] = None,
|
|
64
|
+
navigation_timeout: Optional[int] = None,
|
|
65
|
+
network_idle_timeout: Optional[int] = None,
|
|
66
66
|
) -> "HybridBrowserSession":
|
|
67
67
|
# Create a unique key for this event loop and session combination
|
|
68
68
|
# We defer the event loop lookup to avoid issues with creation
|
|
@@ -75,6 +75,10 @@ class HybridBrowserSession:
|
|
|
75
75
|
"user_data_dir": user_data_dir,
|
|
76
76
|
"stealth": stealth,
|
|
77
77
|
"session_id": session_id,
|
|
78
|
+
"default_timeout": default_timeout,
|
|
79
|
+
"short_timeout": short_timeout,
|
|
80
|
+
"navigation_timeout": navigation_timeout,
|
|
81
|
+
"network_idle_timeout": network_idle_timeout,
|
|
78
82
|
}
|
|
79
83
|
return instance
|
|
80
84
|
|
|
@@ -126,6 +130,10 @@ class HybridBrowserSession:
|
|
|
126
130
|
user_data_dir: Optional[str] = None,
|
|
127
131
|
stealth: bool = False,
|
|
128
132
|
session_id: Optional[str] = None,
|
|
133
|
+
default_timeout: Optional[int] = None,
|
|
134
|
+
short_timeout: Optional[int] = None,
|
|
135
|
+
navigation_timeout: Optional[int] = None,
|
|
136
|
+
network_idle_timeout: Optional[int] = None,
|
|
129
137
|
):
|
|
130
138
|
if self._initialized:
|
|
131
139
|
return
|
|
@@ -136,12 +144,27 @@ class HybridBrowserSession:
|
|
|
136
144
|
self._stealth = stealth
|
|
137
145
|
self._session_id = session_id or "default"
|
|
138
146
|
|
|
147
|
+
# Store timeout configuration for ActionExecutor instances and
|
|
148
|
+
# browser operations
|
|
149
|
+
self._default_timeout = default_timeout
|
|
150
|
+
self._short_timeout = short_timeout
|
|
151
|
+
self._navigation_timeout = ConfigLoader.get_navigation_timeout(
|
|
152
|
+
navigation_timeout
|
|
153
|
+
)
|
|
154
|
+
self._network_idle_timeout = ConfigLoader.get_network_idle_timeout(
|
|
155
|
+
network_idle_timeout
|
|
156
|
+
)
|
|
157
|
+
|
|
139
158
|
# Initialize _creation_params to fix linter error
|
|
140
159
|
self._creation_params = {
|
|
141
160
|
"headless": headless,
|
|
142
161
|
"user_data_dir": user_data_dir,
|
|
143
162
|
"stealth": stealth,
|
|
144
163
|
"session_id": session_id,
|
|
164
|
+
"default_timeout": default_timeout,
|
|
165
|
+
"short_timeout": short_timeout,
|
|
166
|
+
"navigation_timeout": navigation_timeout,
|
|
167
|
+
"network_idle_timeout": network_idle_timeout,
|
|
145
168
|
}
|
|
146
169
|
|
|
147
170
|
self._playwright: Optional[Playwright] = None
|
|
@@ -164,7 +187,8 @@ class HybridBrowserSession:
|
|
|
164
187
|
self._stealth_config: Optional[Dict[str, Any]] = None
|
|
165
188
|
if self._stealth:
|
|
166
189
|
self._stealth_script = self._load_stealth_script()
|
|
167
|
-
|
|
190
|
+
stealth_config_class = ConfigLoader.get_stealth_config()
|
|
191
|
+
self._stealth_config = stealth_config_class.get_stealth_config()
|
|
168
192
|
|
|
169
193
|
def _load_stealth_script(self) -> str:
|
|
170
194
|
r"""Load the stealth JavaScript script from file."""
|
|
@@ -231,9 +255,7 @@ class HybridBrowserSession:
|
|
|
231
255
|
# Navigate if URL provided
|
|
232
256
|
if url:
|
|
233
257
|
try:
|
|
234
|
-
await new_page.goto(
|
|
235
|
-
url, timeout=self.DEFAULT_NAVIGATION_TIMEOUT
|
|
236
|
-
)
|
|
258
|
+
await new_page.goto(url, timeout=self._navigation_timeout)
|
|
237
259
|
await new_page.wait_for_load_state('domcontentloaded')
|
|
238
260
|
except Exception as e:
|
|
239
261
|
logger.warning(f"Failed to navigate new tab to {url}: {e}")
|
|
@@ -319,7 +341,12 @@ class HybridBrowserSession:
|
|
|
319
341
|
await self._page.bring_to_front()
|
|
320
342
|
|
|
321
343
|
# Update executor and snapshot for new tab
|
|
322
|
-
self.executor = ActionExecutor(
|
|
344
|
+
self.executor = ActionExecutor(
|
|
345
|
+
self._page,
|
|
346
|
+
self,
|
|
347
|
+
default_timeout=self._default_timeout,
|
|
348
|
+
short_timeout=self._short_timeout,
|
|
349
|
+
)
|
|
323
350
|
self.snapshot = PageSnapshot(self._page)
|
|
324
351
|
|
|
325
352
|
logger.info(f"Switched to tab {tab_index}")
|
|
@@ -506,14 +533,17 @@ class HybridBrowserSession:
|
|
|
506
533
|
logger.warning(f"Failed to apply stealth script: {e}")
|
|
507
534
|
|
|
508
535
|
# Set up timeout for navigation
|
|
509
|
-
self._page.set_default_navigation_timeout(
|
|
510
|
-
|
|
511
|
-
)
|
|
512
|
-
self._page.set_default_timeout(self.DEFAULT_NAVIGATION_TIMEOUT)
|
|
536
|
+
self._page.set_default_navigation_timeout(self._navigation_timeout)
|
|
537
|
+
self._page.set_default_timeout(self._navigation_timeout)
|
|
513
538
|
|
|
514
539
|
# Initialize utilities
|
|
515
540
|
self.snapshot = PageSnapshot(self._page)
|
|
516
|
-
self.executor = ActionExecutor(
|
|
541
|
+
self.executor = ActionExecutor(
|
|
542
|
+
self._page,
|
|
543
|
+
self,
|
|
544
|
+
default_timeout=self._default_timeout,
|
|
545
|
+
short_timeout=self._short_timeout,
|
|
546
|
+
)
|
|
517
547
|
self._current_tab_index = 0
|
|
518
548
|
|
|
519
549
|
logger.info("Browser session initialized successfully")
|
|
@@ -579,7 +609,7 @@ class HybridBrowserSession:
|
|
|
579
609
|
await page.close()
|
|
580
610
|
logger.debug(
|
|
581
611
|
f"Closed page: "
|
|
582
|
-
f"{page.url if hasattr(page, 'url') else 'unknown'}" # noqa:
|
|
612
|
+
f"{page.url if hasattr(page, 'url') else 'unknown'}" # noqa:E501
|
|
583
613
|
)
|
|
584
614
|
except Exception as e:
|
|
585
615
|
logger.warning(f"Error closing page: {e}")
|
|
@@ -668,13 +698,13 @@ class HybridBrowserSession:
|
|
|
668
698
|
await self.ensure_browser()
|
|
669
699
|
page = await self.get_page()
|
|
670
700
|
|
|
671
|
-
await page.goto(url, timeout=self.
|
|
701
|
+
await page.goto(url, timeout=self._navigation_timeout)
|
|
672
702
|
await page.wait_for_load_state('domcontentloaded')
|
|
673
703
|
|
|
674
704
|
# Try to wait for network idle
|
|
675
705
|
try:
|
|
676
706
|
await page.wait_for_load_state(
|
|
677
|
-
'networkidle', timeout=self.
|
|
707
|
+
'networkidle', timeout=self._network_idle_timeout
|
|
678
708
|
)
|
|
679
709
|
except Exception:
|
|
680
710
|
logger.debug("Network idle timeout - continuing anyway")
|