camel-ai 0.2.59__py3-none-any.whl → 0.2.82__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 +9 -4
- camel/agents/_utils.py +40 -2
- camel/agents/base.py +2 -2
- camel/agents/chat_agent.py +5012 -902
- camel/agents/critic_agent.py +2 -2
- camel/agents/deductive_reasoner_agent.py +56 -56
- camel/agents/embodied_agent.py +2 -2
- camel/agents/knowledge_graph_agent.py +20 -20
- camel/agents/mcp_agent.py +39 -36
- camel/agents/multi_hop_generator_agent.py +3 -3
- camel/agents/programmed_agent_instruction.py +2 -2
- camel/agents/repo_agent.py +4 -3
- 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 +3 -3
- camel/benchmarks/__init__.py +2 -2
- camel/benchmarks/apibank.py +5 -5
- camel/benchmarks/apibench.py +2 -2
- camel/benchmarks/base.py +2 -2
- camel/benchmarks/browsecomp.py +44 -33
- camel/benchmarks/gaia.py +17 -13
- camel/benchmarks/mock_website/README.md +94 -0
- camel/benchmarks/mock_website/mock_web.py +299 -0
- camel/benchmarks/mock_website/requirements.txt +3 -0
- camel/benchmarks/mock_website/shopping_mall/app.py +465 -0
- camel/benchmarks/mock_website/task.json +104 -0
- camel/benchmarks/nexus.py +3 -3
- 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 +3 -3
- camel/bots/slack/__init__.py +2 -2
- camel/bots/slack/models.py +4 -4
- camel/bots/slack/slack_app.py +2 -2
- camel/bots/telegram_bot.py +2 -2
- camel/configs/__init__.py +26 -2
- camel/configs/aihubmix_config.py +90 -0
- camel/configs/aiml_config.py +2 -2
- camel/configs/amd_config.py +70 -0
- camel/configs/anthropic_config.py +8 -7
- camel/configs/base_config.py +2 -2
- camel/configs/bedrock_config.py +5 -3
- camel/configs/cerebras_config.py +98 -0
- camel/configs/cohere_config.py +3 -3
- camel/configs/cometapi_config.py +106 -0
- camel/configs/crynux_config.py +94 -0
- camel/configs/deepseek_config.py +9 -8
- camel/configs/gemini_config.py +6 -4
- camel/configs/groq_config.py +6 -4
- camel/configs/internlm_config.py +6 -4
- camel/configs/litellm_config.py +2 -2
- camel/configs/lmstudio_config.py +6 -4
- camel/configs/minimax_config.py +95 -0
- camel/configs/mistral_config.py +3 -3
- camel/configs/modelscope_config.py +5 -3
- camel/configs/moonshot_config.py +2 -2
- camel/configs/nebius_config.py +105 -0
- 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 +8 -3
- camel/configs/openrouter_config.py +6 -4
- camel/configs/ppio_config.py +2 -2
- camel/configs/qianfan_config.py +85 -0
- camel/configs/qwen_config.py +2 -2
- camel/configs/reka_config.py +3 -3
- camel/configs/samba_config.py +8 -6
- 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 +4 -2
- camel/configs/watsonx_config.py +2 -2
- camel/configs/yi_config.py +6 -4
- camel/configs/zhipuai_config.py +6 -4
- camel/{data_collector → data_collectors}/__init__.py +2 -2
- camel/{data_collector → data_collectors}/alpaca_collector.py +19 -10
- camel/{data_collector → data_collectors}/base.py +2 -2
- camel/{data_collector → data_collectors}/sharegpt_collector.py +3 -3
- camel/datagen/__init__.py +2 -2
- camel/datagen/cot_datagen.py +32 -37
- camel/datagen/evol_instruct/__init__.py +2 -2
- camel/datagen/evol_instruct/evol_instruct.py +2 -2
- camel/datagen/evol_instruct/scorer.py +24 -25
- camel/datagen/evol_instruct/templates.py +48 -48
- camel/datagen/self_improving_cot.py +5 -5
- 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 +47 -47
- 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 +41 -12
- camel/datasets/few_shot_generator.py +18 -18
- camel/datasets/models.py +3 -3
- camel/datasets/self_instruct_generator.py +2 -2
- camel/datasets/static_dataset.py +152 -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 +10 -3
- 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 +4 -4
- camel/embeddings/together_embedding.py +2 -2
- camel/embeddings/vlm_embedding.py +11 -4
- camel/environments/__init__.py +14 -2
- camel/environments/models.py +2 -2
- camel/environments/multi_step.py +2 -2
- camel/environments/rlcards_env.py +860 -0
- camel/environments/single_step.py +30 -5
- camel/environments/tic_tac_toe.py +3 -3
- 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 +4 -2
- camel/interpreters/base.py +16 -3
- camel/interpreters/docker/Dockerfile +53 -7
- camel/interpreters/docker_interpreter.py +70 -11
- camel/interpreters/e2b_interpreter.py +59 -11
- camel/interpreters/internal_python_interpreter.py +81 -4
- camel/interpreters/interpreter_error.py +2 -2
- camel/interpreters/ipython_interpreter.py +23 -5
- camel/interpreters/microsandbox_interpreter.py +395 -0
- camel/interpreters/subprocess_interpreter.py +36 -4
- camel/loaders/__init__.py +17 -5
- camel/loaders/apify_reader.py +2 -2
- camel/loaders/base_io.py +2 -2
- camel/loaders/base_loader.py +85 -0
- camel/loaders/chunkr_reader.py +128 -93
- camel/loaders/crawl4ai_reader.py +2 -2
- camel/loaders/firecrawl_reader.py +6 -6
- 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 +148 -0
- camel/loaders/scrapegraph_reader.py +2 -2
- camel/loaders/unstructured_io.py +2 -2
- camel/logger.py +5 -5
- camel/memories/__init__.py +2 -2
- camel/memories/agent_memories.py +86 -3
- camel/memories/base.py +36 -2
- camel/memories/blocks/__init__.py +2 -2
- camel/memories/blocks/chat_history_block.py +126 -9
- camel/memories/blocks/vectordb_block.py +10 -3
- camel/memories/context_creators/__init__.py +2 -2
- camel/memories/context_creators/score_based.py +31 -239
- camel/memories/records.py +98 -13
- camel/messages/__init__.py +2 -2
- camel/messages/base.py +193 -46
- 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 +54 -17
- camel/models/__init__.py +18 -2
- camel/models/_utils.py +3 -3
- camel/models/aihubmix_model.py +83 -0
- camel/models/aiml_model.py +11 -18
- camel/models/amd_model.py +101 -0
- camel/models/anthropic_model.py +127 -20
- camel/models/aws_bedrock_model.py +12 -35
- camel/models/azure_openai_model.py +263 -63
- camel/models/base_audio_model.py +5 -3
- camel/models/base_model.py +195 -26
- camel/models/cerebras_model.py +83 -0
- camel/models/cohere_model.py +81 -21
- camel/models/cometapi_model.py +83 -0
- camel/models/crynux_model.py +87 -0
- camel/models/deepseek_model.py +61 -59
- camel/models/fish_audio_model.py +8 -2
- camel/models/gemini_model.py +439 -30
- camel/models/groq_model.py +11 -19
- camel/models/internlm_model.py +11 -18
- camel/models/litellm_model.py +94 -34
- camel/models/lmstudio_model.py +17 -20
- camel/models/minimax_model.py +83 -0
- camel/models/mistral_model.py +84 -19
- camel/models/model_factory.py +49 -6
- camel/models/model_manager.py +33 -11
- camel/models/modelscope_model.py +13 -193
- camel/models/moonshot_model.py +195 -21
- camel/models/nebius_model.py +83 -0
- camel/models/nemotron_model.py +19 -9
- camel/models/netmind_model.py +11 -18
- camel/models/novita_model.py +11 -18
- camel/models/nvidia_model.py +11 -18
- camel/models/ollama_model.py +14 -21
- camel/models/openai_audio_models.py +2 -2
- camel/models/openai_compatible_model.py +234 -27
- camel/models/openai_model.py +255 -39
- camel/models/openrouter_model.py +11 -19
- camel/models/ppio_model.py +11 -18
- camel/models/qianfan_model.py +89 -0
- camel/models/qwen_model.py +13 -193
- camel/models/reka_model.py +90 -21
- 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 +117 -49
- camel/models/sglang_model.py +162 -42
- camel/models/siliconflow_model.py +12 -35
- camel/models/stub_model.py +10 -7
- camel/models/togetherai_model.py +11 -18
- camel/models/vllm_model.py +10 -18
- camel/models/volcano_model.py +16 -20
- camel/models/watsonx_model.py +69 -19
- camel/models/yi_model.py +11 -18
- camel/models/zhipuai_model.py +70 -18
- camel/parsers/__init__.py +18 -0
- camel/parsers/mcp_tool_call_parser.py +176 -0
- 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 +3 -3
- camel/prompts/prompt_templates.py +2 -2
- camel/prompts/role_description_prompt_template.py +2 -2
- camel/prompts/solution_extraction.py +8 -8
- camel/prompts/task_prompt_template.py +2 -2
- camel/prompts/translation.py +2 -2
- camel/prompts/video_description_prompt.py +3 -3
- camel/responses/__init__.py +2 -2
- camel/responses/agent_responses.py +2 -2
- camel/retrievers/__init__.py +2 -2
- camel/retrievers/auto_retriever.py +23 -3
- camel/retrievers/base.py +2 -2
- camel/retrievers/bm25_retriever.py +3 -4
- camel/retrievers/cohere_rerank_retriever.py +2 -2
- camel/retrievers/hybrid_retrival.py +4 -4
- camel/retrievers/vector_retriever.py +2 -2
- camel/runtimes/Dockerfile.multi-toolkit +90 -0
- camel/{runtime → runtimes}/__init__.py +2 -2
- camel/runtimes/api.py +153 -0
- camel/{runtime → runtimes}/base.py +2 -2
- camel/{runtime → runtimes}/configs.py +13 -13
- camel/{runtime → runtimes}/daytona_runtime.py +18 -19
- camel/{runtime → runtimes}/docker_runtime.py +13 -13
- camel/{runtime → runtimes}/llm_guard_runtime.py +28 -28
- camel/{runtime → runtimes}/remote_http_runtime.py +12 -12
- camel/{runtime → runtimes}/ubuntu_docker_runtime.py +3 -3
- camel/{runtime → runtimes}/utils/__init__.py +2 -2
- camel/{runtime → runtimes}/utils/function_risk_toolkit.py +2 -2
- camel/{runtime → 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 +3 -3
- camel/schemas/outlines_converter.py +2 -2
- camel/services/agent_openapi_server.py +380 -0
- camel/societies/__init__.py +4 -2
- camel/societies/babyagi_playing.py +2 -2
- camel/societies/role_playing.py +201 -80
- camel/societies/workforce/__init__.py +10 -3
- camel/societies/workforce/base.py +9 -5
- camel/societies/workforce/events.py +143 -0
- camel/societies/workforce/prompts.py +258 -33
- camel/societies/workforce/role_playing_worker.py +95 -30
- camel/societies/workforce/single_agent_worker.py +659 -30
- camel/societies/workforce/structured_output_handler.py +512 -0
- camel/societies/workforce/task_channel.py +182 -38
- camel/societies/workforce/utils.py +784 -18
- camel/societies/workforce/worker.py +96 -28
- camel/societies/workforce/workflow_memory_manager.py +1746 -0
- camel/societies/workforce/workforce.py +5730 -366
- camel/societies/workforce/workforce_callback.py +103 -0
- camel/societies/workforce/workforce_logger.py +647 -0
- camel/societies/workforce/workforce_metrics.py +33 -0
- camel/storages/__init__.py +10 -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 +4 -4
- camel/storages/graph_storages/neo4j_graph.py +7 -7
- 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 +17 -4
- camel/storages/key_value_storages/mem0_cloud.py +50 -49
- 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 +3 -3
- camel/storages/vectordb_storages/__init__.py +12 -2
- camel/storages/vectordb_storages/base.py +2 -2
- camel/storages/vectordb_storages/chroma.py +731 -0
- camel/storages/vectordb_storages/faiss.py +712 -0
- camel/storages/vectordb_storages/milvus.py +2 -2
- camel/storages/vectordb_storages/oceanbase.py +16 -17
- camel/storages/vectordb_storages/pgvector.py +349 -0
- camel/storages/vectordb_storages/qdrant.py +6 -6
- camel/storages/vectordb_storages/surreal.py +372 -0
- camel/storages/vectordb_storages/tidb.py +11 -8
- camel/storages/vectordb_storages/weaviate.py +714 -0
- camel/tasks/__init__.py +2 -2
- camel/tasks/task.py +366 -27
- camel/tasks/task_prompt.py +3 -3
- 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 +58 -10
- camel/toolkits/aci_toolkit.py +66 -21
- camel/toolkits/arxiv_toolkit.py +8 -8
- camel/toolkits/ask_news_toolkit.py +2 -2
- camel/toolkits/async_browser_toolkit.py +174 -575
- camel/toolkits/audio_analysis_toolkit.py +3 -3
- camel/toolkits/base.py +65 -7
- camel/toolkits/bohrium_toolkit.py +318 -0
- camel/toolkits/browser_toolkit.py +306 -566
- camel/toolkits/browser_toolkit_commons.py +568 -0
- camel/toolkits/code_execution.py +67 -11
- camel/toolkits/context_summarizer_toolkit.py +684 -0
- camel/toolkits/craw4ai_toolkit.py +93 -0
- camel/toolkits/dappier_toolkit.py +12 -8
- camel/toolkits/data_commons_toolkit.py +2 -2
- camel/toolkits/dingtalk.py +1135 -0
- camel/toolkits/earth_science_toolkit.py +5367 -0
- camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
- camel/toolkits/excel_toolkit.py +910 -70
- camel/toolkits/file_toolkit.py +1402 -0
- camel/toolkits/function_tool.py +128 -20
- camel/toolkits/github_toolkit.py +148 -43
- camel/toolkits/gmail_toolkit.py +1839 -0
- camel/toolkits/google_calendar_toolkit.py +40 -6
- camel/toolkits/google_drive_mcp_toolkit.py +54 -0
- camel/toolkits/google_maps_toolkit.py +2 -2
- camel/toolkits/google_scholar_toolkit.py +2 -2
- camel/toolkits/human_toolkit.py +36 -12
- camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
- camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1973 -0
- camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1929 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
- camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
- camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +319 -0
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
- camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
- camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
- camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
- camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
- camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
- camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
- camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
- camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
- camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
- camel/toolkits/image_analysis_toolkit.py +3 -3
- camel/toolkits/image_generation_toolkit.py +390 -0
- camel/toolkits/jina_reranker_toolkit.py +195 -79
- camel/toolkits/klavis_toolkit.py +7 -3
- camel/toolkits/linkedin_toolkit.py +2 -2
- camel/toolkits/markitdown_toolkit.py +104 -0
- camel/toolkits/math_toolkit.py +66 -12
- camel/toolkits/mcp_toolkit.py +841 -600
- camel/toolkits/memory_toolkit.py +7 -3
- camel/toolkits/meshy_toolkit.py +2 -2
- camel/toolkits/message_agent_toolkit.py +608 -0
- camel/toolkits/message_integration.py +724 -0
- camel/toolkits/mineru_toolkit.py +2 -2
- camel/toolkits/minimax_mcp_toolkit.py +195 -0
- camel/toolkits/networkx_toolkit.py +2 -2
- camel/toolkits/note_taking_toolkit.py +277 -0
- camel/toolkits/notion_mcp_toolkit.py +224 -0
- camel/toolkits/notion_toolkit.py +2 -2
- camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
- camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
- 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/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
- 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/ai-plugin.json +1 -1
- 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 +7 -3
- camel/toolkits/origene_mcp_toolkit.py +56 -0
- camel/toolkits/page_script.js +86 -74
- camel/toolkits/playwright_mcp_toolkit.py +27 -32
- camel/toolkits/pptx_toolkit.py +790 -0
- 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 +168 -0
- camel/toolkits/retrieval_toolkit.py +2 -2
- camel/toolkits/screenshot_toolkit.py +213 -0
- camel/toolkits/search_toolkit.py +539 -146
- camel/toolkits/searxng_toolkit.py +2 -2
- camel/toolkits/semantic_scholar_toolkit.py +2 -2
- camel/toolkits/slack_toolkit.py +108 -58
- camel/toolkits/sql_toolkit.py +712 -0
- camel/toolkits/stripe_toolkit.py +2 -2
- camel/toolkits/sympy_toolkit.py +3 -3
- camel/toolkits/task_planning_toolkit.py +134 -0
- camel/toolkits/terminal_toolkit/__init__.py +18 -0
- camel/toolkits/terminal_toolkit/terminal_toolkit.py +1070 -0
- camel/toolkits/terminal_toolkit/utils.py +532 -0
- camel/toolkits/thinking_toolkit.py +3 -3
- camel/toolkits/twitter_toolkit.py +8 -3
- camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
- camel/toolkits/video_analysis_toolkit.py +112 -29
- camel/toolkits/video_download_toolkit.py +22 -16
- camel/toolkits/weather_toolkit.py +2 -2
- camel/toolkits/web_deploy_toolkit.py +1219 -0
- camel/toolkits/wechat_official_toolkit.py +483 -0
- camel/toolkits/whatsapp_toolkit.py +2 -2
- camel/toolkits/wolfram_alpha_toolkit.py +53 -25
- camel/toolkits/zapier_toolkit.py +7 -3
- camel/types/__init__.py +4 -4
- camel/types/agents/__init__.py +2 -2
- camel/types/agents/tool_calling_record.py +6 -3
- camel/types/enums.py +454 -35
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +4 -4
- camel/types/unified_model_type.py +43 -6
- camel/utils/__init__.py +20 -2
- 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 +65 -7
- camel/utils/constants.py +5 -2
- camel/utils/context_utils.py +1134 -0
- camel/utils/deduplication.py +2 -2
- camel/utils/filename.py +2 -2
- camel/utils/langfuse.py +258 -0
- camel/utils/mcp.py +140 -6
- camel/utils/mcp_client.py +1056 -0
- camel/utils/message_summarizer.py +148 -0
- camel/utils/response_format.py +2 -2
- camel/utils/token_counting.py +45 -22
- camel/utils/tool_result.py +44 -0
- 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.59.dist-info → camel_ai-0.2.82.dist-info}/METADATA +349 -108
- camel_ai-0.2.82.dist-info/RECORD +507 -0
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/WHEEL +1 -1
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/licenses/LICENSE +1 -1
- camel/loaders/pandas_reader.py +0 -368
- camel/runtime/api.py +0 -97
- camel/toolkits/dalle_toolkit.py +0 -171
- camel/toolkits/file_write_toolkit.py +0 -395
- camel/toolkits/openai_agent_toolkit.py +0 -135
- camel/toolkits/terminal_toolkit.py +0 -1037
- camel_ai-0.2.59.dist-info/RECORD +0 -410
camel/toolkits/page_script.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
2
2
|
let nextLabel = 10;
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
let roleMapping = {
|
|
5
5
|
"a": "link",
|
|
6
6
|
"area": "link",
|
|
@@ -22,23 +22,23 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
22
22
|
"option": "option",
|
|
23
23
|
"textarea": "textbox"
|
|
24
24
|
};
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
let getCursor = function(elm) {
|
|
27
27
|
return window.getComputedStyle(elm)["cursor"];
|
|
28
28
|
};
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
let getInteractiveElements = function() {
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
let results = []
|
|
33
33
|
let roles = ["scrollbar", "searchbox", "slider", "spinbutton", "switch", "tab", "treeitem", "button", "checkbox", "gridcell", "link", "menuitem", "menuitemcheckbox", "menuitemradio", "option", "progressbar", "radio", "textbox", "combobox", "menu", "tree", "treegrid", "grid", "listbox", "radiogroup", "widget"];
|
|
34
34
|
let inertCursors = ["auto", "default", "none", "text", "vertical-text", "not-allowed", "no-drop"];
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
// Get the main interactive elements
|
|
37
37
|
let nodeList = document.querySelectorAll("input, select, textarea, button, [href], [onclick], [contenteditable], [tabindex]:not([tabindex='-1'])");
|
|
38
38
|
for (let i=0; i<nodeList.length; i++) { // Copy to something mutable
|
|
39
39
|
results.push(nodeList[i]);
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
// Anything not already included that has a suitable role
|
|
43
43
|
nodeList = document.querySelectorAll("[role]");
|
|
44
44
|
for (let i=0; i<nodeList.length; i++) { // Copy to something mutable
|
|
@@ -49,34 +49,34 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
// Any element that changes the cursor to something implying interactivity
|
|
54
54
|
nodeList = document.querySelectorAll("*");
|
|
55
55
|
for (let i=0; i<nodeList.length; i++) {
|
|
56
56
|
let node = nodeList[i];
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
// Cursor is default, or does not suggest interactivity
|
|
59
59
|
let cursor = getCursor(node);
|
|
60
60
|
if (inertCursors.indexOf(cursor) >= 0) {
|
|
61
61
|
continue;
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
|
|
64
64
|
// Move up to the first instance of this cursor change
|
|
65
65
|
parent = node.parentNode;
|
|
66
66
|
while (parent && getCursor(parent) == cursor) {
|
|
67
67
|
node = parent;
|
|
68
68
|
parent = node.parentNode;
|
|
69
69
|
}
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
// Add the node if it is new
|
|
72
72
|
if (results.indexOf(node) == -1) {
|
|
73
73
|
results.push(node);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
return results;
|
|
78
78
|
};
|
|
79
|
-
|
|
79
|
+
|
|
80
80
|
let labelElements = function(elements) {
|
|
81
81
|
for (let i=0; i<elements.length; i++) {
|
|
82
82
|
if (!elements[i].hasAttribute("__elementId")) {
|
|
@@ -84,22 +84,22 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
};
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
let isTopmost = function(element, x, y) {
|
|
89
89
|
let hit = document.elementFromPoint(x, y);
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
// Hack to handle elements outside the viewport
|
|
92
92
|
if (hit === null) {
|
|
93
|
-
return true;
|
|
93
|
+
return true;
|
|
94
94
|
}
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
while (hit) {
|
|
97
97
|
if (hit == element) return true;
|
|
98
98
|
hit = hit.parentNode;
|
|
99
99
|
}
|
|
100
100
|
return false;
|
|
101
101
|
};
|
|
102
|
-
|
|
102
|
+
|
|
103
103
|
let getFocusedElementId = function() {
|
|
104
104
|
let elm = document.activeElement;
|
|
105
105
|
while (elm) {
|
|
@@ -110,7 +110,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
110
110
|
}
|
|
111
111
|
return null;
|
|
112
112
|
};
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
let trimmedInnerText = function(element) {
|
|
115
115
|
if (!element) {
|
|
116
116
|
return "";
|
|
@@ -121,7 +121,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
121
121
|
}
|
|
122
122
|
return text.trim();
|
|
123
123
|
};
|
|
124
|
-
|
|
124
|
+
|
|
125
125
|
let getApproximateAriaName = function(element) {
|
|
126
126
|
// Check for aria labels
|
|
127
127
|
if (element.hasAttribute("aria-labelledby")) {
|
|
@@ -135,11 +135,11 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
135
135
|
}
|
|
136
136
|
return buffer.trim();
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
if (element.hasAttribute("aria-label")) {
|
|
140
140
|
return element.getAttribute("aria-label");
|
|
141
141
|
}
|
|
142
|
-
|
|
142
|
+
|
|
143
143
|
// Check for labels
|
|
144
144
|
if (element.hasAttribute("id")) {
|
|
145
145
|
let label_id = element.getAttribute("id");
|
|
@@ -153,29 +153,29 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
153
153
|
return label;
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
if (element.parentElement && element.parentElement.tagName == "LABEL") {
|
|
158
158
|
return element.parentElement.innerText;
|
|
159
159
|
}
|
|
160
|
-
|
|
160
|
+
|
|
161
161
|
// Check for alt text or titles
|
|
162
162
|
if (element.hasAttribute("alt")) {
|
|
163
163
|
return element.getAttribute("alt")
|
|
164
164
|
}
|
|
165
|
-
|
|
165
|
+
|
|
166
166
|
if (element.hasAttribute("title")) {
|
|
167
167
|
return element.getAttribute("title")
|
|
168
168
|
}
|
|
169
|
-
|
|
169
|
+
|
|
170
170
|
return trimmedInnerText(element);
|
|
171
171
|
};
|
|
172
|
-
|
|
172
|
+
|
|
173
173
|
let getApproximateAriaRole = function(element) {
|
|
174
174
|
let tag = element.tagName.toLowerCase();
|
|
175
175
|
if (tag == "input" && element.hasAttribute("type")) {
|
|
176
176
|
tag = tag + ", type=" + element.getAttribute("type");
|
|
177
177
|
}
|
|
178
|
-
|
|
178
|
+
|
|
179
179
|
if (element.hasAttribute("role")) {
|
|
180
180
|
return [element.getAttribute("role"), tag];
|
|
181
181
|
}
|
|
@@ -186,41 +186,53 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
186
186
|
return ["", tag];
|
|
187
187
|
}
|
|
188
188
|
};
|
|
189
|
-
|
|
189
|
+
|
|
190
190
|
let getInteractiveRects = function() {
|
|
191
191
|
labelElements(getInteractiveElements());
|
|
192
192
|
let elements = document.querySelectorAll("[__elementId]");
|
|
193
193
|
let results = {};
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
194
|
+
let scale = window.devicePixelRatio || 1;
|
|
195
|
+
|
|
196
|
+
for (let i = 0; i < elements.length; i++) {
|
|
197
|
+
let key = elements[i].getAttribute("__elementId");
|
|
198
|
+
let rects = elements[i].getClientRects();
|
|
199
|
+
let ariaRole = getApproximateAriaRole(elements[i]);
|
|
200
|
+
let ariaName = getApproximateAriaName(elements[i]);
|
|
201
|
+
let vScrollable = elements[i].scrollHeight - elements[i].clientHeight >= 1;
|
|
202
|
+
|
|
203
|
+
let record = {
|
|
204
|
+
"tag_name": ariaRole[1],
|
|
205
|
+
"role": ariaRole[0],
|
|
206
|
+
"aria-name": ariaName,
|
|
207
|
+
"v-scrollable": vScrollable,
|
|
208
|
+
"rects": []
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
for (const rect of rects) {
|
|
212
|
+
let x = rect.left + rect.width / 2;
|
|
213
|
+
let y = rect.top + rect.height / 2;
|
|
214
|
+
if (isTopmost(elements[i], x, y)) {
|
|
215
|
+
record["rects"].push({
|
|
216
|
+
x: rect.x * scale,
|
|
217
|
+
y: rect.y * scale,
|
|
218
|
+
width: rect.width * scale,
|
|
219
|
+
height: rect.height * scale,
|
|
220
|
+
top: rect.top * scale,
|
|
221
|
+
left: rect.left * scale,
|
|
222
|
+
right: rect.right * scale,
|
|
223
|
+
bottom: rect.bottom * scale
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if (record["rects"].length > 0) {
|
|
229
|
+
results[key] = record;
|
|
230
|
+
}
|
|
220
231
|
}
|
|
232
|
+
|
|
221
233
|
return results;
|
|
222
234
|
};
|
|
223
|
-
|
|
235
|
+
|
|
224
236
|
let getVisualViewport = function() {
|
|
225
237
|
let vv = window.visualViewport;
|
|
226
238
|
let de = document.documentElement;
|
|
@@ -238,7 +250,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
238
250
|
"scrollHeight": de ? de.scrollHeight : 0
|
|
239
251
|
};
|
|
240
252
|
};
|
|
241
|
-
|
|
253
|
+
|
|
242
254
|
let _getMetaTags = function() {
|
|
243
255
|
let meta = document.querySelectorAll("meta");
|
|
244
256
|
let results = {};
|
|
@@ -259,7 +271,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
259
271
|
}
|
|
260
272
|
return results;
|
|
261
273
|
};
|
|
262
|
-
|
|
274
|
+
|
|
263
275
|
let _getJsonLd = function() {
|
|
264
276
|
let jsonld = [];
|
|
265
277
|
let scripts = document.querySelectorAll('script[type="application/ld+json"]');
|
|
@@ -268,13 +280,13 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
268
280
|
}
|
|
269
281
|
return jsonld;
|
|
270
282
|
};
|
|
271
|
-
|
|
283
|
+
|
|
272
284
|
// From: https://www.stevefenton.co.uk/blog/2022/12/parse-microdata-with-javascript/
|
|
273
285
|
let _getMicrodata = function() {
|
|
274
286
|
function sanitize(input) {
|
|
275
287
|
return input.replace(/\s/gi, ' ').trim();
|
|
276
288
|
}
|
|
277
|
-
|
|
289
|
+
|
|
278
290
|
function addValue(information, name, value) {
|
|
279
291
|
if (information[name]) {
|
|
280
292
|
if (typeof information[name] === 'array') {
|
|
@@ -289,29 +301,29 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
289
301
|
information[name] = value;
|
|
290
302
|
}
|
|
291
303
|
}
|
|
292
|
-
|
|
304
|
+
|
|
293
305
|
function traverseItem(item, information) {
|
|
294
306
|
const children = item.children;
|
|
295
|
-
|
|
307
|
+
|
|
296
308
|
for (let i = 0; i < children.length; i++) {
|
|
297
309
|
const child = children[i];
|
|
298
|
-
|
|
310
|
+
|
|
299
311
|
if (child.hasAttribute('itemscope')) {
|
|
300
312
|
if (child.hasAttribute('itemprop')) {
|
|
301
313
|
const itemProp = child.getAttribute('itemprop');
|
|
302
314
|
const itemType = child.getAttribute('itemtype');
|
|
303
|
-
|
|
315
|
+
|
|
304
316
|
const childInfo = {
|
|
305
317
|
itemType: itemType
|
|
306
318
|
};
|
|
307
|
-
|
|
319
|
+
|
|
308
320
|
traverseItem(child, childInfo);
|
|
309
|
-
|
|
321
|
+
|
|
310
322
|
itemProp.split(' ').forEach(propName => {
|
|
311
323
|
addValue(information, propName, childInfo);
|
|
312
324
|
});
|
|
313
325
|
}
|
|
314
|
-
|
|
326
|
+
|
|
315
327
|
} else if (child.hasAttribute('itemprop')) {
|
|
316
328
|
const itemProp = child.getAttribute('itemprop');
|
|
317
329
|
itemProp.split(' ').forEach(propName => {
|
|
@@ -327,9 +339,9 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
327
339
|
}
|
|
328
340
|
}
|
|
329
341
|
}
|
|
330
|
-
|
|
342
|
+
|
|
331
343
|
const microdata = [];
|
|
332
|
-
|
|
344
|
+
|
|
333
345
|
document.querySelectorAll("[itemscope]").forEach(function(elem, i) {
|
|
334
346
|
const itemType = elem.getAttribute('itemtype');
|
|
335
347
|
const information = {
|
|
@@ -338,10 +350,10 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
338
350
|
traverseItem(elem, information);
|
|
339
351
|
microdata.push(information);
|
|
340
352
|
});
|
|
341
|
-
|
|
353
|
+
|
|
342
354
|
return microdata;
|
|
343
355
|
};
|
|
344
|
-
|
|
356
|
+
|
|
345
357
|
let getPageMetadata = function() {
|
|
346
358
|
let jsonld = _getJsonLd();
|
|
347
359
|
let metaTags = _getMetaTags();
|
|
@@ -350,7 +362,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
350
362
|
if (jsonld.length > 0) {
|
|
351
363
|
try {
|
|
352
364
|
results["jsonld"] = JSON.parse(jsonld);
|
|
353
|
-
}
|
|
365
|
+
}
|
|
354
366
|
catch (e) {
|
|
355
367
|
results["jsonld"] = jsonld;
|
|
356
368
|
}
|
|
@@ -365,12 +377,12 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
365
377
|
}
|
|
366
378
|
}
|
|
367
379
|
return results;
|
|
368
|
-
};
|
|
369
|
-
|
|
380
|
+
};
|
|
381
|
+
|
|
370
382
|
return {
|
|
371
383
|
getInteractiveRects: getInteractiveRects,
|
|
372
384
|
getVisualViewport: getVisualViewport,
|
|
373
385
|
getFocusedElementId: getFocusedElementId,
|
|
374
386
|
getPageMetadata: getPageMetadata,
|
|
375
387
|
};
|
|
376
|
-
})();
|
|
388
|
+
})();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ 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,16 +10,14 @@
|
|
|
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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from typing import List, Optional
|
|
16
16
|
|
|
17
|
-
from camel.toolkits import BaseToolkit, FunctionTool
|
|
18
|
-
|
|
19
17
|
from .mcp_toolkit import MCPToolkit
|
|
20
18
|
|
|
21
19
|
|
|
22
|
-
class PlaywrightMCPToolkit(
|
|
20
|
+
class PlaywrightMCPToolkit(MCPToolkit):
|
|
23
21
|
r"""PlaywrightMCPToolkit provides an interface for interacting with web
|
|
24
22
|
browsers using the Playwright automation library through the Model Context
|
|
25
23
|
Protocol (MCP).
|
|
@@ -27,43 +25,40 @@ class PlaywrightMCPToolkit(BaseToolkit):
|
|
|
27
25
|
Attributes:
|
|
28
26
|
timeout (Optional[float]): Connection timeout in seconds.
|
|
29
27
|
(default: :obj:`None`)
|
|
28
|
+
additional_args (Optional[List[str]]): Additional command-line
|
|
29
|
+
arguments to pass to the Playwright MCP server. For example,
|
|
30
|
+
`["--cdp-endpoint=http://localhost:9222"]`.
|
|
31
|
+
(default: :obj:`None`)
|
|
30
32
|
|
|
31
33
|
Note:
|
|
32
34
|
Currently only supports asynchronous operation mode.
|
|
33
35
|
"""
|
|
34
36
|
|
|
35
|
-
def __init__(
|
|
36
|
-
|
|
37
|
+
def __init__(
|
|
38
|
+
self,
|
|
39
|
+
timeout: Optional[float] = None,
|
|
40
|
+
additional_args: Optional[List[str]] = None,
|
|
41
|
+
) -> None:
|
|
42
|
+
r"""Initializes the PlaywrightMCPToolkit.
|
|
37
43
|
|
|
38
44
|
Args:
|
|
39
45
|
timeout (Optional[float]): Connection timeout in seconds.
|
|
40
46
|
(default: :obj:`None`)
|
|
47
|
+
additional_args (Optional[List[str]]): Additional command-line
|
|
48
|
+
arguments to pass to the Playwright MCP server. For example,
|
|
49
|
+
`["--cdp-endpoint=http://localhost:9222"]`.
|
|
50
|
+
(default: :obj:`None`)
|
|
41
51
|
"""
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
"args": ["@playwright/mcp@latest"],
|
|
50
|
-
}
|
|
52
|
+
# Create config for Playwright MCP server
|
|
53
|
+
config_dict = {
|
|
54
|
+
"mcpServers": {
|
|
55
|
+
"playwright": {
|
|
56
|
+
"command": "npx",
|
|
57
|
+
"args": ["@playwright/mcp@latest"]
|
|
58
|
+
+ (additional_args or []),
|
|
51
59
|
}
|
|
52
60
|
}
|
|
53
|
-
|
|
61
|
+
}
|
|
54
62
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
await self._mcp_toolkit.connect()
|
|
58
|
-
|
|
59
|
-
async def disconnect(self):
|
|
60
|
-
r"""Explicitly disconnect from the Playwright MCP server."""
|
|
61
|
-
await self._mcp_toolkit.disconnect()
|
|
62
|
-
|
|
63
|
-
def get_tools(self) -> List[FunctionTool]:
|
|
64
|
-
r"""Returns a list of tools provided by the PlaywrightMCPToolkit.
|
|
65
|
-
|
|
66
|
-
Returns:
|
|
67
|
-
List[FunctionTool]: List of available tools.
|
|
68
|
-
"""
|
|
69
|
-
return self._mcp_toolkit.get_tools()
|
|
63
|
+
# Initialize parent MCPToolkit with Playwright configuration
|
|
64
|
+
super().__init__(config_dict=config_dict, timeout=timeout)
|