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
|
@@ -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,10 +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-
|
|
14
|
-
|
|
15
|
-
# Enables postponed evaluation of annotations (for string-based type hints)
|
|
16
|
-
from __future__ import annotations
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
17
14
|
|
|
18
15
|
from io import BytesIO
|
|
19
16
|
from typing import List, Optional
|
|
@@ -79,7 +76,7 @@ class ImageAnalysisToolkit(BaseToolkit):
|
|
|
79
76
|
Returns:
|
|
80
77
|
str: Natural language description of the image.
|
|
81
78
|
"""
|
|
82
|
-
default_content = '''You are an image analysis expert. Provide a
|
|
79
|
+
default_content = '''You are an image analysis expert. Provide a
|
|
83
80
|
detailed description including text if present.'''
|
|
84
81
|
|
|
85
82
|
system_msg = BaseMessage.make_assistant_message(
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
+
|
|
15
|
+
import base64
|
|
16
|
+
import os
|
|
17
|
+
from io import BytesIO
|
|
18
|
+
from typing import ClassVar, List, Literal, Optional, Tuple, Union
|
|
19
|
+
|
|
20
|
+
from openai import OpenAI
|
|
21
|
+
from PIL import Image
|
|
22
|
+
|
|
23
|
+
from camel.logger import get_logger
|
|
24
|
+
from camel.toolkits import FunctionTool
|
|
25
|
+
from camel.toolkits.base import BaseToolkit
|
|
26
|
+
from camel.utils import MCPServer, api_keys_required
|
|
27
|
+
|
|
28
|
+
logger = get_logger(__name__)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@MCPServer()
|
|
32
|
+
class ImageGenToolkit(BaseToolkit):
|
|
33
|
+
r"""A class toolkit for image generation using Grok and OpenAI models."""
|
|
34
|
+
|
|
35
|
+
GROK_MODELS: ClassVar[List[str]] = [
|
|
36
|
+
"grok-2-image",
|
|
37
|
+
"grok-2-image-latest",
|
|
38
|
+
"grok-2-image-1212",
|
|
39
|
+
]
|
|
40
|
+
OPENAI_MODELS: ClassVar[List[str]] = [
|
|
41
|
+
"gpt-image-1",
|
|
42
|
+
"dall-e-3",
|
|
43
|
+
"dall-e-2",
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
def __init__(
|
|
47
|
+
self,
|
|
48
|
+
model: Optional[
|
|
49
|
+
Literal[
|
|
50
|
+
"gpt-image-1",
|
|
51
|
+
"dall-e-3",
|
|
52
|
+
"dall-e-2",
|
|
53
|
+
"grok-2-image",
|
|
54
|
+
"grok-2-image-latest",
|
|
55
|
+
"grok-2-image-1212",
|
|
56
|
+
]
|
|
57
|
+
] = "dall-e-3",
|
|
58
|
+
timeout: Optional[float] = None,
|
|
59
|
+
api_key: Optional[str] = None,
|
|
60
|
+
url: Optional[str] = None,
|
|
61
|
+
size: Optional[
|
|
62
|
+
Literal[
|
|
63
|
+
"256x256",
|
|
64
|
+
"512x512",
|
|
65
|
+
"1024x1024",
|
|
66
|
+
"1536x1024",
|
|
67
|
+
"1024x1536",
|
|
68
|
+
"1792x1024",
|
|
69
|
+
"1024x1792",
|
|
70
|
+
"auto",
|
|
71
|
+
]
|
|
72
|
+
] = "1024x1024",
|
|
73
|
+
quality: Optional[
|
|
74
|
+
Literal["auto", "low", "medium", "high", "standard", "hd"]
|
|
75
|
+
] = "standard",
|
|
76
|
+
response_format: Optional[Literal["url", "b64_json"]] = "b64_json",
|
|
77
|
+
background: Optional[
|
|
78
|
+
Literal["transparent", "opaque", "auto"]
|
|
79
|
+
] = "auto",
|
|
80
|
+
style: Optional[Literal["vivid", "natural"]] = None,
|
|
81
|
+
working_directory: Optional[str] = "image_save",
|
|
82
|
+
):
|
|
83
|
+
# NOTE: Some arguments are set in the constructor to prevent the agent
|
|
84
|
+
# from making invalid API calls with model-specific parameters. For
|
|
85
|
+
# example, the 'style' argument is only supported by 'dall-e-3'.
|
|
86
|
+
r"""Initializes a new instance of the ImageGenToolkit class.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
api_key (Optional[str]): The API key for authenticating
|
|
90
|
+
with the image model service. (default: :obj:`None`)
|
|
91
|
+
url (Optional[str]): The url to the image model service.
|
|
92
|
+
(default: :obj:`None`)
|
|
93
|
+
model (Optional[str]): The model to use.
|
|
94
|
+
(default: :obj:`"dall-e-3"`)
|
|
95
|
+
timeout (Optional[float]): The timeout value for API requests
|
|
96
|
+
in seconds. If None, no timeout is applied.
|
|
97
|
+
(default: :obj:`None`)
|
|
98
|
+
size (Optional[Literal["256x256", "512x512", "1024x1024",
|
|
99
|
+
"1536x1024", "1024x1536", "1792x1024", "1024x1792",
|
|
100
|
+
"auto"]]):
|
|
101
|
+
The size of the image to generate.
|
|
102
|
+
(default: :obj:`"1024x1024"`)
|
|
103
|
+
quality (Optional[Literal["auto", "low", "medium", "high",
|
|
104
|
+
"standard", "hd"]]):The quality of the image to
|
|
105
|
+
generate. Different models support different values.
|
|
106
|
+
(default: :obj:`"standard"`)
|
|
107
|
+
response_format (Optional[Literal["url", "b64_json"]]):
|
|
108
|
+
The format of the response.(default: :obj:`"b64_json"`)
|
|
109
|
+
background (Optional[Literal["transparent", "opaque", "auto"]]):
|
|
110
|
+
The background of the image.(default: :obj:`"auto"`)
|
|
111
|
+
style (Optional[Literal["vivid", "natural"]]): The style of the
|
|
112
|
+
image.(default: :obj:`None`)
|
|
113
|
+
working_directory (Optional[str]): The path to save the generated
|
|
114
|
+
image.(default: :obj:`"image_save"`)
|
|
115
|
+
"""
|
|
116
|
+
super().__init__(timeout=timeout)
|
|
117
|
+
if model not in self.GROK_MODELS + self.OPENAI_MODELS:
|
|
118
|
+
available_models = sorted(self.OPENAI_MODELS + self.GROK_MODELS)
|
|
119
|
+
raise ValueError(
|
|
120
|
+
f"Unsupported model: {model}. "
|
|
121
|
+
f"Supported models are: {available_models}"
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Set default url for Grok models
|
|
125
|
+
url = "https://api.x.ai/v1" if model in self.GROK_MODELS else url
|
|
126
|
+
|
|
127
|
+
api_key, base_url = (
|
|
128
|
+
self.get_openai_credentials(url, api_key)
|
|
129
|
+
if model in self.OPENAI_MODELS
|
|
130
|
+
else self.get_grok_credentials(url, api_key)
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
self.client = OpenAI(api_key=api_key, base_url=base_url)
|
|
134
|
+
self.model = model
|
|
135
|
+
self.size = size
|
|
136
|
+
self.quality = quality
|
|
137
|
+
self.response_format = response_format
|
|
138
|
+
self.background = background
|
|
139
|
+
self.style = style
|
|
140
|
+
self.working_directory: str = working_directory or "image_save"
|
|
141
|
+
|
|
142
|
+
def base64_to_image(self, base64_string: str) -> Optional[Image.Image]:
|
|
143
|
+
r"""Converts a base64 encoded string into a PIL Image object.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
base64_string (str): The base64 encoded string of the image.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
Optional[Image.Image]: The PIL Image object or None if conversion
|
|
150
|
+
fails.
|
|
151
|
+
"""
|
|
152
|
+
try:
|
|
153
|
+
# decode the base64 string to get the image data
|
|
154
|
+
image_data = base64.b64decode(base64_string)
|
|
155
|
+
# create a memory buffer for the image data
|
|
156
|
+
image_buffer = BytesIO(image_data)
|
|
157
|
+
# open the image with PIL
|
|
158
|
+
image = Image.open(image_buffer)
|
|
159
|
+
return image
|
|
160
|
+
except Exception as e:
|
|
161
|
+
logger.error(
|
|
162
|
+
f"An error occurred while converting base64 to image: {e}"
|
|
163
|
+
)
|
|
164
|
+
return None
|
|
165
|
+
|
|
166
|
+
def _build_base_params(self, prompt: str, n: Optional[int] = None) -> dict:
|
|
167
|
+
r"""Build base parameters dict for Image Model API calls.
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
prompt (str): The text prompt for the image operation.
|
|
171
|
+
n (Optional[int]): The number of images to generate.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
dict: Parameters dictionary with non-None values.
|
|
175
|
+
"""
|
|
176
|
+
params = {"prompt": prompt, "model": self.model}
|
|
177
|
+
|
|
178
|
+
# basic parameters supported by all models
|
|
179
|
+
if n is not None:
|
|
180
|
+
params["n"] = n # type: ignore[assignment]
|
|
181
|
+
|
|
182
|
+
if self.model in self.GROK_MODELS:
|
|
183
|
+
return params
|
|
184
|
+
|
|
185
|
+
if self.size is not None:
|
|
186
|
+
params["size"] = self.size
|
|
187
|
+
|
|
188
|
+
# Model-specific parameter filtering based on model
|
|
189
|
+
if self.model == "dall-e-2":
|
|
190
|
+
# dall-e-2 supports: prompt, model, n, size, response_format
|
|
191
|
+
if self.response_format is not None:
|
|
192
|
+
params["response_format"] = self.response_format
|
|
193
|
+
|
|
194
|
+
elif self.model == "dall-e-3":
|
|
195
|
+
# dall-e-3 supports: prompt, model, n,
|
|
196
|
+
# size, quality, response_format, style
|
|
197
|
+
if self.quality is not None:
|
|
198
|
+
params["quality"] = self.quality
|
|
199
|
+
if self.response_format is not None:
|
|
200
|
+
params["response_format"] = self.response_format
|
|
201
|
+
if self.style is not None:
|
|
202
|
+
params["style"] = self.style
|
|
203
|
+
|
|
204
|
+
elif self.model == "gpt-image-1":
|
|
205
|
+
# gpt-image-1 supports: prompt, model, n, size, quality, background
|
|
206
|
+
# Note: gpt-image-1 seems to default to b64_json response format
|
|
207
|
+
if self.quality is not None:
|
|
208
|
+
params["quality"] = self.quality
|
|
209
|
+
if self.background is not None:
|
|
210
|
+
params["background"] = self.background
|
|
211
|
+
return params
|
|
212
|
+
|
|
213
|
+
def _handle_api_response(
|
|
214
|
+
self,
|
|
215
|
+
response,
|
|
216
|
+
image_name: Union[str, List[str]],
|
|
217
|
+
operation: str,
|
|
218
|
+
) -> str:
|
|
219
|
+
r"""Handle API response from image operations.
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
response: The response object from image model API.
|
|
223
|
+
image_name (Union[str, List[str]]): Name(s) for the saved image
|
|
224
|
+
file(s). If str, the same name is used for all images (will
|
|
225
|
+
cause error for multiple images). If list, must have exactly
|
|
226
|
+
the same length as the number of images generated.
|
|
227
|
+
operation (str): Operation type for success message ("generated").
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
str: Success message with image path/URL or error message.
|
|
231
|
+
"""
|
|
232
|
+
source = "Grok" if self.model in self.GROK_MODELS else "OpenAI"
|
|
233
|
+
if response.data is None or len(response.data) == 0:
|
|
234
|
+
error_msg = f"No image data returned from {source} API."
|
|
235
|
+
logger.error(error_msg)
|
|
236
|
+
return error_msg
|
|
237
|
+
|
|
238
|
+
# Validate image_name parameter
|
|
239
|
+
if isinstance(image_name, list):
|
|
240
|
+
if len(image_name) != len(response.data):
|
|
241
|
+
error_msg = (
|
|
242
|
+
f"Error: Number of image names"
|
|
243
|
+
f" ({len(image_name)}) does not match number of "
|
|
244
|
+
f"images generated({len(response.data)})"
|
|
245
|
+
)
|
|
246
|
+
logger.error(error_msg)
|
|
247
|
+
return error_msg
|
|
248
|
+
image_names = image_name
|
|
249
|
+
else:
|
|
250
|
+
# If string, use same name for all images
|
|
251
|
+
image_names = [image_name] * len(response.data)
|
|
252
|
+
|
|
253
|
+
results = []
|
|
254
|
+
|
|
255
|
+
for i, image_data in enumerate(response.data):
|
|
256
|
+
# check if response has URL or base64 data
|
|
257
|
+
if hasattr(image_data, 'url') and image_data.url:
|
|
258
|
+
image_url = image_data.url
|
|
259
|
+
results.append(f"Image URL: {image_url}")
|
|
260
|
+
elif hasattr(image_data, 'b64_json') and image_data.b64_json:
|
|
261
|
+
image_b64 = image_data.b64_json
|
|
262
|
+
|
|
263
|
+
# Save the image from base64
|
|
264
|
+
image_bytes = base64.b64decode(image_b64)
|
|
265
|
+
os.makedirs(self.working_directory, exist_ok=True)
|
|
266
|
+
|
|
267
|
+
filename = f"{image_names[i]}"
|
|
268
|
+
|
|
269
|
+
image_path = os.path.join(self.working_directory, filename)
|
|
270
|
+
|
|
271
|
+
# Check if file already exists
|
|
272
|
+
if os.path.exists(image_path):
|
|
273
|
+
error_msg = (
|
|
274
|
+
f"Error: File '{image_path}' already exists. "
|
|
275
|
+
"Please use a different image_name."
|
|
276
|
+
)
|
|
277
|
+
logger.error(error_msg)
|
|
278
|
+
return error_msg
|
|
279
|
+
|
|
280
|
+
try:
|
|
281
|
+
with open(image_path, "wb") as f:
|
|
282
|
+
f.write(image_bytes)
|
|
283
|
+
results.append(f"Image saved to {image_path}")
|
|
284
|
+
except Exception as e:
|
|
285
|
+
error_msg = f"Error saving image to '{image_path}': {e!s}"
|
|
286
|
+
logger.error(error_msg)
|
|
287
|
+
return error_msg
|
|
288
|
+
else:
|
|
289
|
+
error_msg = (
|
|
290
|
+
f"No valid image data (URL or base64) found in image {i+1}"
|
|
291
|
+
)
|
|
292
|
+
logger.error(error_msg)
|
|
293
|
+
results.append(error_msg)
|
|
294
|
+
|
|
295
|
+
if results:
|
|
296
|
+
count = len(response.data)
|
|
297
|
+
if count == 1:
|
|
298
|
+
return f"Image {operation} successfully. {results[0]}"
|
|
299
|
+
else:
|
|
300
|
+
return (
|
|
301
|
+
f"{count} images {operation} successfully:\n"
|
|
302
|
+
+ "\n".join(
|
|
303
|
+
f" {i+1}. {result}"
|
|
304
|
+
for i, result in enumerate(results)
|
|
305
|
+
)
|
|
306
|
+
)
|
|
307
|
+
else:
|
|
308
|
+
error_msg = "No valid image data found in any response"
|
|
309
|
+
logger.error(error_msg)
|
|
310
|
+
return error_msg
|
|
311
|
+
|
|
312
|
+
def generate_image(
|
|
313
|
+
self,
|
|
314
|
+
prompt: str,
|
|
315
|
+
image_name: Union[str, List[str]] = "image.png",
|
|
316
|
+
n: int = 1,
|
|
317
|
+
) -> str:
|
|
318
|
+
r"""Generate an image using image models.
|
|
319
|
+
The generated image will be saved locally (for ``b64_json`` response
|
|
320
|
+
formats) or an image URL will be returned (for ``url`` response
|
|
321
|
+
formats).
|
|
322
|
+
|
|
323
|
+
Args:
|
|
324
|
+
prompt (str): The text prompt to generate the image.
|
|
325
|
+
image_name (Union[str, List[str]]): The name(s) of the image(s) to
|
|
326
|
+
save. The image name must end with `.png`. If str: same name
|
|
327
|
+
used for all images (causes error if n > 1). If list: must
|
|
328
|
+
match the number of images being generated (n parameter).
|
|
329
|
+
(default: :obj:`"image.png"`)
|
|
330
|
+
n (int): The number of images to generate. (default: :obj:`1`)
|
|
331
|
+
|
|
332
|
+
Returns:
|
|
333
|
+
str: the content of the model response or format of the response.
|
|
334
|
+
"""
|
|
335
|
+
try:
|
|
336
|
+
params = self._build_base_params(prompt, n)
|
|
337
|
+
response = self.client.images.generate(**params)
|
|
338
|
+
return self._handle_api_response(response, image_name, "generated")
|
|
339
|
+
except Exception as e:
|
|
340
|
+
error_msg = f"An error occurred while generating image: {e}"
|
|
341
|
+
logger.error(error_msg)
|
|
342
|
+
return error_msg
|
|
343
|
+
|
|
344
|
+
@api_keys_required([("api_key", "XAI_API_KEY")])
|
|
345
|
+
def get_grok_credentials(self, url, api_key) -> Tuple[str, str]: # type: ignore[return-value]
|
|
346
|
+
r"""Get API credentials for the specified Grok model.
|
|
347
|
+
|
|
348
|
+
Args:
|
|
349
|
+
url (str): The base URL for the Grok API.
|
|
350
|
+
api_key (str): The API key for the Grok API.
|
|
351
|
+
|
|
352
|
+
Returns:
|
|
353
|
+
tuple: (api_key, base_url)
|
|
354
|
+
"""
|
|
355
|
+
|
|
356
|
+
# Get credentials based on model type
|
|
357
|
+
api_key = api_key or os.getenv("XAI_API_KEY")
|
|
358
|
+
return api_key, url
|
|
359
|
+
|
|
360
|
+
@api_keys_required([("api_key", "OPENAI_API_KEY")])
|
|
361
|
+
def get_openai_credentials(self, url, api_key) -> Tuple[str, str | None]: # type: ignore[return-value]
|
|
362
|
+
r"""Get API credentials for the specified OpenAI model.
|
|
363
|
+
|
|
364
|
+
Args:
|
|
365
|
+
url (str): The base URL for the OpenAI API.
|
|
366
|
+
api_key (str): The API key for the OpenAI API.
|
|
367
|
+
|
|
368
|
+
Returns:
|
|
369
|
+
Tuple[str, str | None]: (api_key, base_url)
|
|
370
|
+
"""
|
|
371
|
+
|
|
372
|
+
api_key = api_key or os.getenv("OPENAI_API_KEY")
|
|
373
|
+
base_url = url or os.getenv("OPENAI_API_BASE_URL")
|
|
374
|
+
return api_key, base_url
|
|
375
|
+
|
|
376
|
+
def get_tools(self) -> List[FunctionTool]:
|
|
377
|
+
r"""Returns a list of FunctionTool objects representing the functions
|
|
378
|
+
in the toolkit.
|
|
379
|
+
|
|
380
|
+
Returns:
|
|
381
|
+
List[FunctionTool]: A list of FunctionTool objects representing the
|
|
382
|
+
functions in the toolkit.
|
|
383
|
+
"""
|
|
384
|
+
return [
|
|
385
|
+
FunctionTool(self.generate_image),
|
|
386
|
+
]
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
# Backward compatibility alias
|
|
390
|
+
OpenAIImageToolkit = ImageGenToolkit
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import json
|
|
15
15
|
import os
|
|
16
16
|
from typing import Any, Dict, List, Optional
|
|
@@ -34,7 +34,7 @@ class JinaRerankerToolkit(BaseToolkit):
|
|
|
34
34
|
def __init__(
|
|
35
35
|
self,
|
|
36
36
|
timeout: Optional[float] = None,
|
|
37
|
-
model_name:
|
|
37
|
+
model_name: str = "jinaai/jina-reranker-m0",
|
|
38
38
|
device: Optional[str] = None,
|
|
39
39
|
use_api: bool = True,
|
|
40
40
|
) -> None:
|
|
@@ -44,9 +44,8 @@ class JinaRerankerToolkit(BaseToolkit):
|
|
|
44
44
|
timeout (Optional[float]): The timeout value for API requests
|
|
45
45
|
in seconds. If None, no timeout is applied.
|
|
46
46
|
(default: :obj:`None`)
|
|
47
|
-
model_name (
|
|
48
|
-
|
|
49
|
-
(default: :obj:`None`)
|
|
47
|
+
model_name (str): The reranker model name.
|
|
48
|
+
(default: :obj:`"jinaai/jina-reranker-m0"`)
|
|
50
49
|
device (Optional[str]): Device to load the model on. If None,
|
|
51
50
|
will use CUDA if available, otherwise CPU.
|
|
52
51
|
Only effective when use_api=False.
|
camel/toolkits/klavis_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 urllib.parse
|
|
@@ -21,7 +21,11 @@ import requests
|
|
|
21
21
|
from camel.logger import get_logger
|
|
22
22
|
from camel.toolkits.base import BaseToolkit
|
|
23
23
|
from camel.toolkits.function_tool import FunctionTool
|
|
24
|
-
from camel.utils import
|
|
24
|
+
from camel.utils import (
|
|
25
|
+
MCPServer,
|
|
26
|
+
api_keys_required,
|
|
27
|
+
dependencies_required,
|
|
28
|
+
)
|
|
25
29
|
|
|
26
30
|
logger = get_logger(__name__)
|
|
27
31
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
16
|
import os
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
+
|
|
15
|
+
from typing import Dict, List, Optional
|
|
16
|
+
|
|
17
|
+
from camel.loaders.markitdown import MarkItDownLoader
|
|
18
|
+
from camel.logger import get_logger
|
|
19
|
+
from camel.toolkits.base import BaseToolkit
|
|
20
|
+
from camel.toolkits.function_tool import FunctionTool
|
|
21
|
+
from camel.utils import MCPServer
|
|
22
|
+
|
|
23
|
+
logger = get_logger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@MCPServer()
|
|
27
|
+
class MarkItDownToolkit(BaseToolkit):
|
|
28
|
+
r"""A class representing a toolkit for MarkItDown.
|
|
29
|
+
|
|
30
|
+
.. deprecated::
|
|
31
|
+
MarkItDownToolkit is deprecated. Use FileToolkit instead, which now
|
|
32
|
+
includes the same functionality through its read_file method that
|
|
33
|
+
supports both single files and multiple files.
|
|
34
|
+
|
|
35
|
+
Example migration:
|
|
36
|
+
# Old way
|
|
37
|
+
from camel.toolkits import MarkItDownToolkit
|
|
38
|
+
toolkit = MarkItDownToolkit()
|
|
39
|
+
content = toolkit.read_files(['file1.pdf', 'file2.docx'])
|
|
40
|
+
|
|
41
|
+
# New way
|
|
42
|
+
from camel.toolkits import FileToolkit
|
|
43
|
+
toolkit = FileToolkit()
|
|
44
|
+
content = toolkit.read_file(['file1.pdf', 'file2.docx'])
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
def __init__(
|
|
48
|
+
self,
|
|
49
|
+
timeout: Optional[float] = None,
|
|
50
|
+
):
|
|
51
|
+
import warnings
|
|
52
|
+
|
|
53
|
+
warnings.warn(
|
|
54
|
+
"MarkItDownToolkit is deprecated and will be removed in a future "
|
|
55
|
+
"version. Please use FileToolkit instead, which now includes "
|
|
56
|
+
"read_file method that supports both single and multiple files.",
|
|
57
|
+
DeprecationWarning,
|
|
58
|
+
stacklevel=2,
|
|
59
|
+
)
|
|
60
|
+
super().__init__(timeout=timeout)
|
|
61
|
+
|
|
62
|
+
def read_files(self, file_paths: List[str]) -> Dict[str, str]:
|
|
63
|
+
r"""Scrapes content from a list of files and converts it to Markdown.
|
|
64
|
+
|
|
65
|
+
This function takes a list of local file paths, attempts to convert
|
|
66
|
+
each file into Markdown format, and returns the converted content.
|
|
67
|
+
The conversion is performed in parallel for efficiency.
|
|
68
|
+
|
|
69
|
+
Supported file formats include:
|
|
70
|
+
- PDF (.pdf)
|
|
71
|
+
- Microsoft Office: Word (.doc, .docx), Excel (.xls, .xlsx),
|
|
72
|
+
PowerPoint (.ppt, .pptx)
|
|
73
|
+
- EPUB (.epub)
|
|
74
|
+
- HTML (.html, .htm)
|
|
75
|
+
- Images (.jpg, .jpeg, .png) for OCR
|
|
76
|
+
- Audio (.mp3, .wav) for transcription
|
|
77
|
+
- Text-based formats (.csv, .json, .xml, .txt)
|
|
78
|
+
- ZIP archives (.zip)
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
file_paths (List[str]): A list of local file paths to be
|
|
82
|
+
converted.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
Dict[str, str]: A dictionary where keys are the input file paths
|
|
86
|
+
and values are the corresponding content in Markdown format.
|
|
87
|
+
If conversion of a file fails, the value will contain an
|
|
88
|
+
error message.
|
|
89
|
+
"""
|
|
90
|
+
return MarkItDownLoader().convert_files(
|
|
91
|
+
file_paths=file_paths, parallel=True
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
def get_tools(self) -> List[FunctionTool]:
|
|
95
|
+
r"""Returns a list of FunctionTool objects representing the
|
|
96
|
+
functions in the toolkit.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
List[FunctionTool]: A list of FunctionTool objects
|
|
100
|
+
representing the functions in the toolkit.
|
|
101
|
+
"""
|
|
102
|
+
return [
|
|
103
|
+
FunctionTool(self.read_files),
|
|
104
|
+
]
|