camel-ai 0.2.65__py3-none-any.whl → 0.2.83a6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of camel-ai might be problematic. Click here for more details.
- camel/__init__.py +3 -3
- camel/agents/__init__.py +2 -2
- camel/agents/_types.py +9 -4
- camel/agents/_utils.py +40 -2
- camel/agents/base.py +2 -2
- camel/agents/chat_agent.py +5107 -995
- 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 +35 -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 +1 -3
- camel/benchmarks/mock_website/mock_web.py +2 -2
- camel/benchmarks/mock_website/requirements.txt +1 -1
- camel/benchmarks/mock_website/shopping_mall/app.py +2 -2
- camel/benchmarks/mock_website/task.json +1 -1
- 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 +29 -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 +2 -2
- 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 +2 -2
- camel/configs/cometapi_config.py +106 -0
- camel/configs/crynux_config.py +2 -2
- camel/configs/deepseek_config.py +9 -8
- camel/configs/function_gemma_config.py +59 -0
- 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 +2 -2
- 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 +5 -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 +2 -2
- camel/configs/samba_config.py +6 -4
- 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_collectors/__init__.py +2 -2
- camel/data_collectors/alpaca_collector.py +18 -9
- camel/data_collectors/base.py +2 -2
- camel/data_collectors/sharegpt_collector.py +2 -2
- camel/datagen/__init__.py +2 -2
- camel/datagen/cot_datagen.py +3 -3
- camel/datagen/evol_instruct/__init__.py +2 -2
- camel/datagen/evol_instruct/evol_instruct.py +2 -2
- camel/datagen/evol_instruct/scorer.py +12 -12
- camel/datagen/evol_instruct/templates.py +16 -16
- 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 +2 -2
- camel/datasets/self_instruct_generator.py +2 -2
- camel/datasets/static_dataset.py +2 -2
- camel/embeddings/__init__.py +2 -2
- camel/embeddings/azure_embedding.py +2 -2
- camel/embeddings/base.py +2 -2
- camel/embeddings/gemini_embedding.py +2 -2
- camel/embeddings/jina_embedding.py +2 -2
- camel/embeddings/mistral_embedding.py +2 -2
- camel/embeddings/openai_compatible_embedding.py +2 -2
- camel/embeddings/openai_embedding.py +2 -2
- camel/embeddings/sentence_transformers_embeddings.py +2 -2
- camel/embeddings/together_embedding.py +2 -2
- camel/embeddings/vlm_embedding.py +2 -2
- camel/environments/__init__.py +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 +2 -2
- camel/interpreters/docker/Dockerfile +14 -24
- camel/interpreters/docker_interpreter.py +5 -4
- camel/interpreters/e2b_interpreter.py +36 -3
- camel/interpreters/internal_python_interpreter.py +53 -4
- camel/interpreters/interpreter_error.py +2 -2
- camel/interpreters/ipython_interpreter.py +2 -2
- camel/interpreters/microsandbox_interpreter.py +395 -0
- camel/interpreters/subprocess_interpreter.py +2 -2
- camel/loaders/__init__.py +13 -4
- 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 +11 -2
- 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 +2 -2
- 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 +125 -7
- camel/memories/blocks/vectordb_block.py +10 -3
- camel/memories/context_creators/__init__.py +2 -2
- camel/memories/context_creators/score_based.py +109 -230
- camel/memories/records.py +90 -10
- camel/messages/__init__.py +2 -2
- camel/messages/base.py +178 -43
- 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 +214 -115
- camel/models/base_audio_model.py +5 -3
- camel/models/base_model.py +378 -31
- camel/models/cerebras_model.py +83 -0
- camel/models/cohere_model.py +18 -49
- camel/models/cometapi_model.py +83 -0
- camel/models/crynux_model.py +11 -18
- camel/models/deepseek_model.py +20 -84
- camel/models/fish_audio_model.py +8 -2
- camel/models/function_gemma_model.py +889 -0
- camel/models/gemini_model.py +391 -52
- camel/models/groq_model.py +11 -19
- camel/models/internlm_model.py +11 -18
- camel/models/litellm_model.py +57 -49
- camel/models/lmstudio_model.py +17 -20
- camel/models/minimax_model.py +83 -0
- camel/models/mistral_model.py +20 -47
- camel/models/model_factory.py +39 -3
- camel/models/model_manager.py +26 -8
- camel/models/modelscope_model.py +13 -193
- camel/models/moonshot_model.py +183 -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 +190 -71
- camel/models/openai_model.py +192 -86
- 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 +23 -49
- 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 +50 -75
- camel/models/sglang_model.py +90 -68
- 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 +158 -19
- camel/models/watsonx_model.py +9 -47
- 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 +3 -2
- camel/retrievers/base.py +2 -2
- camel/retrievers/bm25_retriever.py +2 -2
- camel/retrievers/cohere_rerank_retriever.py +2 -2
- camel/retrievers/hybrid_retrival.py +2 -2
- camel/retrievers/vector_retriever.py +2 -2
- camel/runtimes/Dockerfile.multi-toolkit +90 -0
- camel/runtimes/__init__.py +2 -2
- camel/runtimes/api.py +79 -23
- camel/runtimes/base.py +2 -2
- camel/runtimes/configs.py +13 -13
- camel/runtimes/daytona_runtime.py +17 -18
- camel/runtimes/docker_runtime.py +12 -12
- camel/runtimes/llm_guard_runtime.py +26 -26
- camel/runtimes/remote_http_runtime.py +11 -11
- camel/runtimes/ubuntu_docker_runtime.py +2 -2
- camel/runtimes/utils/__init__.py +2 -2
- camel/runtimes/utils/function_risk_toolkit.py +2 -2
- camel/runtimes/utils/ignore_risk_toolkit.py +2 -2
- camel/schemas/__init__.py +2 -2
- camel/schemas/base.py +2 -2
- camel/schemas/openai_converter.py +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 +2 -2
- camel/societies/workforce/events.py +145 -0
- camel/societies/workforce/prompts.py +259 -33
- camel/societies/workforce/role_playing_worker.py +88 -31
- camel/societies/workforce/single_agent_worker.py +638 -40
- camel/societies/workforce/structured_output_handler.py +512 -0
- camel/societies/workforce/task_channel.py +182 -38
- camel/societies/workforce/utils.py +780 -65
- camel/societies/workforce/worker.py +92 -26
- camel/societies/workforce/workflow_memory_manager.py +1746 -0
- camel/societies/workforce/workforce.py +5354 -372
- 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 +6 -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 +8 -2
- camel/storages/vectordb_storages/base.py +2 -2
- camel/storages/vectordb_storages/chroma.py +731 -0
- camel/storages/vectordb_storages/faiss.py +2 -2
- camel/storages/vectordb_storages/milvus.py +2 -2
- camel/storages/vectordb_storages/oceanbase.py +15 -15
- 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 +2 -2
- camel/tasks/__init__.py +2 -2
- camel/tasks/task.py +348 -26
- 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 +57 -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 +4 -4
- camel/toolkits/audio_analysis_toolkit.py +3 -3
- camel/toolkits/base.py +106 -6
- camel/toolkits/bohrium_toolkit.py +2 -2
- camel/toolkits/browser_toolkit.py +34 -21
- camel/toolkits/browser_toolkit_commons.py +4 -4
- camel/toolkits/code_execution.py +31 -4
- 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 +905 -71
- camel/toolkits/file_toolkit.py +1402 -0
- camel/toolkits/function_tool.py +205 -27
- camel/toolkits/github_toolkit.py +109 -22
- 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 +1958 -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 +1940 -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 +325 -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 -6
- camel/toolkits/image_generation_toolkit.py +390 -0
- camel/toolkits/jina_reranker_toolkit.py +5 -6
- 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 +412 -36
- 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 +728 -0
- camel/toolkits/microsoft_outlook_mail_toolkit.py +1885 -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 +53 -53
- camel/toolkits/playwright_mcp_toolkit.py +13 -31
- camel/toolkits/pptx_toolkit.py +36 -23
- 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 +606 -156
- 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 +5 -5
- camel/toolkits/terminal_toolkit/__init__.py +18 -0
- camel/toolkits/terminal_toolkit/terminal_toolkit.py +1281 -0
- camel/toolkits/terminal_toolkit/utils.py +659 -0
- camel/toolkits/thinking_toolkit.py +3 -3
- camel/toolkits/twitter_toolkit.py +2 -2
- camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
- camel/toolkits/video_analysis_toolkit.py +109 -29
- camel/toolkits/video_download_toolkit.py +19 -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 +2 -2
- 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 +381 -41
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +4 -4
- camel/types/unified_model_type.py +46 -10
- camel/utils/__init__.py +5 -2
- camel/utils/agent_context.py +41 -0
- camel/utils/async_func.py +2 -2
- camel/utils/chunker/__init__.py +2 -2
- camel/utils/chunker/base.py +2 -2
- camel/utils/chunker/code_chunker.py +2 -2
- camel/utils/chunker/uio_chunker.py +2 -2
- camel/utils/commons.py +38 -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 +18 -10
- camel/utils/mcp.py +140 -6
- camel/utils/mcp_client.py +48 -38
- 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.65.dist-info → camel_ai-0.2.83a6.dist-info}/METADATA +355 -117
- camel_ai-0.2.83a6.dist-info/RECORD +511 -0
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/WHEEL +1 -1
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/licenses/LICENSE +1 -1
- camel/loaders/pandas_reader.py +0 -368
- camel/toolkits/dalle_toolkit.py +0 -175
- camel/toolkits/file_write_toolkit.py +0 -444
- camel/toolkits/openai_agent_toolkit.py +0 -135
- camel/toolkits/terminal_toolkit.py +0 -1037
- camel_ai-0.2.65.dist-info/RECORD +0 -426
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,20 +186,20 @@ 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
194
|
let scale = window.devicePixelRatio || 1;
|
|
195
|
-
|
|
195
|
+
|
|
196
196
|
for (let i = 0; i < elements.length; i++) {
|
|
197
197
|
let key = elements[i].getAttribute("__elementId");
|
|
198
198
|
let rects = elements[i].getClientRects();
|
|
199
199
|
let ariaRole = getApproximateAriaRole(elements[i]);
|
|
200
200
|
let ariaName = getApproximateAriaName(elements[i]);
|
|
201
201
|
let vScrollable = elements[i].scrollHeight - elements[i].clientHeight >= 1;
|
|
202
|
-
|
|
202
|
+
|
|
203
203
|
let record = {
|
|
204
204
|
"tag_name": ariaRole[1],
|
|
205
205
|
"role": ariaRole[0],
|
|
@@ -207,7 +207,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
207
207
|
"v-scrollable": vScrollable,
|
|
208
208
|
"rects": []
|
|
209
209
|
};
|
|
210
|
-
|
|
210
|
+
|
|
211
211
|
for (const rect of rects) {
|
|
212
212
|
let x = rect.left + rect.width / 2;
|
|
213
213
|
let y = rect.top + rect.height / 2;
|
|
@@ -224,15 +224,15 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
224
224
|
});
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
|
-
|
|
227
|
+
|
|
228
228
|
if (record["rects"].length > 0) {
|
|
229
229
|
results[key] = record;
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
|
-
|
|
232
|
+
|
|
233
233
|
return results;
|
|
234
|
-
};
|
|
235
|
-
|
|
234
|
+
};
|
|
235
|
+
|
|
236
236
|
let getVisualViewport = function() {
|
|
237
237
|
let vv = window.visualViewport;
|
|
238
238
|
let de = document.documentElement;
|
|
@@ -250,7 +250,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
250
250
|
"scrollHeight": de ? de.scrollHeight : 0
|
|
251
251
|
};
|
|
252
252
|
};
|
|
253
|
-
|
|
253
|
+
|
|
254
254
|
let _getMetaTags = function() {
|
|
255
255
|
let meta = document.querySelectorAll("meta");
|
|
256
256
|
let results = {};
|
|
@@ -271,7 +271,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
271
271
|
}
|
|
272
272
|
return results;
|
|
273
273
|
};
|
|
274
|
-
|
|
274
|
+
|
|
275
275
|
let _getJsonLd = function() {
|
|
276
276
|
let jsonld = [];
|
|
277
277
|
let scripts = document.querySelectorAll('script[type="application/ld+json"]');
|
|
@@ -280,13 +280,13 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
280
280
|
}
|
|
281
281
|
return jsonld;
|
|
282
282
|
};
|
|
283
|
-
|
|
283
|
+
|
|
284
284
|
// From: https://www.stevefenton.co.uk/blog/2022/12/parse-microdata-with-javascript/
|
|
285
285
|
let _getMicrodata = function() {
|
|
286
286
|
function sanitize(input) {
|
|
287
287
|
return input.replace(/\s/gi, ' ').trim();
|
|
288
288
|
}
|
|
289
|
-
|
|
289
|
+
|
|
290
290
|
function addValue(information, name, value) {
|
|
291
291
|
if (information[name]) {
|
|
292
292
|
if (typeof information[name] === 'array') {
|
|
@@ -301,29 +301,29 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
301
301
|
information[name] = value;
|
|
302
302
|
}
|
|
303
303
|
}
|
|
304
|
-
|
|
304
|
+
|
|
305
305
|
function traverseItem(item, information) {
|
|
306
306
|
const children = item.children;
|
|
307
|
-
|
|
307
|
+
|
|
308
308
|
for (let i = 0; i < children.length; i++) {
|
|
309
309
|
const child = children[i];
|
|
310
|
-
|
|
310
|
+
|
|
311
311
|
if (child.hasAttribute('itemscope')) {
|
|
312
312
|
if (child.hasAttribute('itemprop')) {
|
|
313
313
|
const itemProp = child.getAttribute('itemprop');
|
|
314
314
|
const itemType = child.getAttribute('itemtype');
|
|
315
|
-
|
|
315
|
+
|
|
316
316
|
const childInfo = {
|
|
317
317
|
itemType: itemType
|
|
318
318
|
};
|
|
319
|
-
|
|
319
|
+
|
|
320
320
|
traverseItem(child, childInfo);
|
|
321
|
-
|
|
321
|
+
|
|
322
322
|
itemProp.split(' ').forEach(propName => {
|
|
323
323
|
addValue(information, propName, childInfo);
|
|
324
324
|
});
|
|
325
325
|
}
|
|
326
|
-
|
|
326
|
+
|
|
327
327
|
} else if (child.hasAttribute('itemprop')) {
|
|
328
328
|
const itemProp = child.getAttribute('itemprop');
|
|
329
329
|
itemProp.split(' ').forEach(propName => {
|
|
@@ -339,9 +339,9 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
|
-
|
|
342
|
+
|
|
343
343
|
const microdata = [];
|
|
344
|
-
|
|
344
|
+
|
|
345
345
|
document.querySelectorAll("[itemscope]").forEach(function(elem, i) {
|
|
346
346
|
const itemType = elem.getAttribute('itemtype');
|
|
347
347
|
const information = {
|
|
@@ -350,10 +350,10 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
350
350
|
traverseItem(elem, information);
|
|
351
351
|
microdata.push(information);
|
|
352
352
|
});
|
|
353
|
-
|
|
353
|
+
|
|
354
354
|
return microdata;
|
|
355
355
|
};
|
|
356
|
-
|
|
356
|
+
|
|
357
357
|
let getPageMetadata = function() {
|
|
358
358
|
let jsonld = _getJsonLd();
|
|
359
359
|
let metaTags = _getMetaTags();
|
|
@@ -362,7 +362,7 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
362
362
|
if (jsonld.length > 0) {
|
|
363
363
|
try {
|
|
364
364
|
results["jsonld"] = JSON.parse(jsonld);
|
|
365
|
-
}
|
|
365
|
+
}
|
|
366
366
|
catch (e) {
|
|
367
367
|
results["jsonld"] = jsonld;
|
|
368
368
|
}
|
|
@@ -377,8 +377,8 @@ var MultimodalWebSurfer = MultimodalWebSurfer || (function() {
|
|
|
377
377
|
}
|
|
378
378
|
}
|
|
379
379
|
return results;
|
|
380
|
-
};
|
|
381
|
-
|
|
380
|
+
};
|
|
381
|
+
|
|
382
382
|
return {
|
|
383
383
|
getInteractiveRects: getInteractiveRects,
|
|
384
384
|
getVisualViewport: getVisualViewport,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2026 @ 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).
|
|
@@ -51,32 +49,16 @@ class PlaywrightMCPToolkit(BaseToolkit):
|
|
|
51
49
|
`["--cdp-endpoint=http://localhost:9222"]`.
|
|
52
50
|
(default: :obj:`None`)
|
|
53
51
|
"""
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
"args": ["@playwright/mcp@latest"]
|
|
62
|
-
+ (additional_args or []),
|
|
63
|
-
}
|
|
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 []),
|
|
64
59
|
}
|
|
65
60
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
async def connect(self):
|
|
69
|
-
r"""Explicitly connect to the Playwright MCP server."""
|
|
70
|
-
await self._mcp_toolkit.connect()
|
|
61
|
+
}
|
|
71
62
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
await self._mcp_toolkit.disconnect()
|
|
75
|
-
|
|
76
|
-
def get_tools(self) -> List[FunctionTool]:
|
|
77
|
-
r"""Returns a list of tools provided by the PlaywrightMCPToolkit.
|
|
78
|
-
|
|
79
|
-
Returns:
|
|
80
|
-
List[FunctionTool]: List of available tools.
|
|
81
|
-
"""
|
|
82
|
-
return self._mcp_toolkit.get_tools()
|
|
63
|
+
# Initialize parent MCPToolkit with Playwright configuration
|
|
64
|
+
super().__init__(config_dict=config_dict, timeout=timeout)
|
camel/toolkits/pptx_toolkit.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
import os
|
|
@@ -53,22 +53,35 @@ class PPTXToolkit(BaseToolkit):
|
|
|
53
53
|
|
|
54
54
|
def __init__(
|
|
55
55
|
self,
|
|
56
|
-
|
|
56
|
+
working_directory: Optional[str] = None,
|
|
57
57
|
timeout: Optional[float] = None,
|
|
58
58
|
) -> None:
|
|
59
59
|
r"""Initialize the PPTXToolkit.
|
|
60
60
|
|
|
61
61
|
Args:
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
working_directory (str, optional): The default directory for
|
|
63
|
+
output files. If not provided, it will be determined by the
|
|
64
|
+
`CAMEL_WORKDIR` environment variable (if set). If the
|
|
65
|
+
environment variable is not set, it defaults to
|
|
66
|
+
`camel_working_dir`.
|
|
64
67
|
timeout (Optional[float]): The timeout for the toolkit.
|
|
65
|
-
(default: :obj
|
|
68
|
+
(default: :obj:`None`)
|
|
66
69
|
"""
|
|
67
70
|
super().__init__(timeout=timeout)
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
|
|
72
|
+
if working_directory:
|
|
73
|
+
self.working_directory = Path(working_directory).resolve()
|
|
74
|
+
else:
|
|
75
|
+
camel_workdir = os.environ.get("CAMEL_WORKDIR")
|
|
76
|
+
if camel_workdir:
|
|
77
|
+
self.working_directory = Path(camel_workdir).resolve()
|
|
78
|
+
else:
|
|
79
|
+
self.working_directory = Path("./camel_working_dir").resolve()
|
|
80
|
+
|
|
81
|
+
self.working_directory.mkdir(parents=True, exist_ok=True)
|
|
70
82
|
logger.info(
|
|
71
|
-
f"PPTXToolkit initialized with output directory:
|
|
83
|
+
f"PPTXToolkit initialized with output directory: "
|
|
84
|
+
f"{self.working_directory}"
|
|
72
85
|
)
|
|
73
86
|
|
|
74
87
|
def _resolve_filepath(self, file_path: str) -> Path:
|
|
@@ -87,7 +100,7 @@ class PPTXToolkit(BaseToolkit):
|
|
|
87
100
|
"""
|
|
88
101
|
path_obj = Path(file_path)
|
|
89
102
|
if not path_obj.is_absolute():
|
|
90
|
-
path_obj = self.
|
|
103
|
+
path_obj = self.working_directory / path_obj
|
|
91
104
|
|
|
92
105
|
sanitized_filename = self._sanitize_filename(path_obj.name)
|
|
93
106
|
path_obj = path_obj.parent / sanitized_filename
|
|
@@ -120,7 +133,7 @@ class PPTXToolkit(BaseToolkit):
|
|
|
120
133
|
frame_paragraph: The paragraph to format.
|
|
121
134
|
text (str): The text to format.
|
|
122
135
|
set_color_to_white (bool): Whether to set the color to white.
|
|
123
|
-
(default: :obj
|
|
136
|
+
(default: :obj:`False`)
|
|
124
137
|
"""
|
|
125
138
|
from pptx.dml.color import RGBColor
|
|
126
139
|
|
|
@@ -170,7 +183,7 @@ class PPTXToolkit(BaseToolkit):
|
|
|
170
183
|
flat_items_list (List[Tuple[str, int]]): The list of items to be
|
|
171
184
|
displayed.
|
|
172
185
|
set_color_to_white (bool): Whether to set the font color to white.
|
|
173
|
-
(default: :obj
|
|
186
|
+
(default: :obj:`False`)
|
|
174
187
|
"""
|
|
175
188
|
if not flat_items_list:
|
|
176
189
|
logger.warning("Empty bullet point list provided")
|
|
@@ -260,7 +273,7 @@ class PPTXToolkit(BaseToolkit):
|
|
|
260
273
|
provided, the default template will be used. (default: :obj:
|
|
261
274
|
`None`)
|
|
262
275
|
"""
|
|
263
|
-
import
|
|
276
|
+
from pptx import Presentation
|
|
264
277
|
|
|
265
278
|
# Use template if provided, otherwise create new presentation
|
|
266
279
|
if template is not None:
|
|
@@ -270,9 +283,9 @@ class PPTXToolkit(BaseToolkit):
|
|
|
270
283
|
f"Template file not found: {template_path}, using "
|
|
271
284
|
"default template"
|
|
272
285
|
)
|
|
273
|
-
presentation =
|
|
286
|
+
presentation = Presentation()
|
|
274
287
|
else:
|
|
275
|
-
presentation =
|
|
288
|
+
presentation = Presentation(str(template_path))
|
|
276
289
|
# Clear all existing slides by removing them from the slide
|
|
277
290
|
# list
|
|
278
291
|
while len(presentation.slides) > 0:
|
|
@@ -280,7 +293,7 @@ class PPTXToolkit(BaseToolkit):
|
|
|
280
293
|
presentation.part.drop_rel(rId)
|
|
281
294
|
del presentation.slides._sldIdLst[-1]
|
|
282
295
|
else:
|
|
283
|
-
presentation =
|
|
296
|
+
presentation = Presentation()
|
|
284
297
|
|
|
285
298
|
slide_width_inch, slide_height_inch = (
|
|
286
299
|
self._get_slide_width_height_inches(presentation)
|
|
@@ -365,10 +378,10 @@ class PPTXToolkit(BaseToolkit):
|
|
|
365
378
|
* Table slides: {"heading": str, "table": {"headers": list
|
|
366
379
|
of str, "rows": list of list of str}}
|
|
367
380
|
filename (str): The name or path of the file. If a relative path is
|
|
368
|
-
supplied, it is resolved to self.
|
|
381
|
+
supplied, it is resolved to self.working_directory.
|
|
369
382
|
template (Optional[str]): The path to the template PPTX file.
|
|
370
383
|
Initializes a presentation from a given template file Or PPTX
|
|
371
|
-
file. (default: :obj
|
|
384
|
+
file. (default: :obj:`None`)
|
|
372
385
|
|
|
373
386
|
Returns:
|
|
374
387
|
str: A success message indicating the file was created.
|
|
@@ -667,8 +680,8 @@ class PPTXToolkit(BaseToolkit):
|
|
|
667
680
|
slide_width_inch (float): The width of the slide in inches.
|
|
668
681
|
slide_height_inch (float): The height of the slide in inches.
|
|
669
682
|
"""
|
|
670
|
-
import pptx
|
|
671
683
|
from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE
|
|
684
|
+
from pptx.enum.text import MSO_ANCHOR, PP_ALIGN
|
|
672
685
|
from pptx.util import Inches, Pt
|
|
673
686
|
|
|
674
687
|
steps = slide_json['bullet_points']
|
|
@@ -697,8 +710,8 @@ class PPTXToolkit(BaseToolkit):
|
|
|
697
710
|
text_frame = shape.text_frame
|
|
698
711
|
text_frame.clear()
|
|
699
712
|
paragraph = text_frame.paragraphs[0]
|
|
700
|
-
paragraph.alignment =
|
|
701
|
-
text_frame.vertical_anchor =
|
|
713
|
+
paragraph.alignment = PP_ALIGN.CENTER
|
|
714
|
+
text_frame.vertical_anchor = MSO_ANCHOR.MIDDLE
|
|
702
715
|
self._format_text(
|
|
703
716
|
paragraph, step.removeprefix(STEP_BY_STEP_PROCESS_MARKER)
|
|
704
717
|
)
|
|
@@ -719,8 +732,8 @@ class PPTXToolkit(BaseToolkit):
|
|
|
719
732
|
text_frame = shape.text_frame
|
|
720
733
|
text_frame.clear()
|
|
721
734
|
paragraph = text_frame.paragraphs[0]
|
|
722
|
-
paragraph.alignment =
|
|
723
|
-
text_frame.vertical_anchor =
|
|
735
|
+
paragraph.alignment = PP_ALIGN.CENTER
|
|
736
|
+
text_frame.vertical_anchor = MSO_ANCHOR.MIDDLE
|
|
724
737
|
self._format_text(
|
|
725
738
|
paragraph, step.removeprefix(STEP_BY_STEP_PROCESS_MARKER)
|
|
726
739
|
)
|
camel/toolkits/pubmed_toolkit.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from typing import Any, Dict, List, Optional, Union, cast
|
|
16
16
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from typing import Any, Dict, List, Optional
|
|
15
15
|
|
|
16
16
|
import requests
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import os
|
|
16
16
|
import time
|
camel/toolkits/reddit_toolkit.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import os
|
|
16
16
|
import time
|