camel-ai 0.2.59__py3-none-any.whl → 0.2.82__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of camel-ai might be problematic. Click here for more details.
- camel/__init__.py +3 -3
- camel/agents/__init__.py +2 -2
- camel/agents/_types.py +9 -4
- camel/agents/_utils.py +40 -2
- camel/agents/base.py +2 -2
- camel/agents/chat_agent.py +5012 -902
- camel/agents/critic_agent.py +2 -2
- camel/agents/deductive_reasoner_agent.py +56 -56
- camel/agents/embodied_agent.py +2 -2
- camel/agents/knowledge_graph_agent.py +20 -20
- camel/agents/mcp_agent.py +39 -36
- camel/agents/multi_hop_generator_agent.py +3 -3
- camel/agents/programmed_agent_instruction.py +2 -2
- camel/agents/repo_agent.py +4 -3
- camel/agents/role_assignment_agent.py +2 -2
- camel/agents/search_agent.py +2 -2
- camel/agents/task_agent.py +2 -2
- camel/agents/tool_agents/__init__.py +2 -2
- camel/agents/tool_agents/base.py +2 -2
- camel/agents/tool_agents/hugging_face_tool_agent.py +3 -3
- camel/benchmarks/__init__.py +2 -2
- camel/benchmarks/apibank.py +5 -5
- camel/benchmarks/apibench.py +2 -2
- camel/benchmarks/base.py +2 -2
- camel/benchmarks/browsecomp.py +44 -33
- camel/benchmarks/gaia.py +17 -13
- camel/benchmarks/mock_website/README.md +94 -0
- camel/benchmarks/mock_website/mock_web.py +299 -0
- camel/benchmarks/mock_website/requirements.txt +3 -0
- camel/benchmarks/mock_website/shopping_mall/app.py +465 -0
- camel/benchmarks/mock_website/task.json +104 -0
- camel/benchmarks/nexus.py +3 -3
- camel/benchmarks/ragbench.py +2 -2
- camel/bots/__init__.py +2 -2
- camel/bots/discord/__init__.py +2 -2
- camel/bots/discord/discord_app.py +2 -2
- camel/bots/discord/discord_installation.py +2 -2
- camel/bots/discord/discord_store.py +3 -3
- camel/bots/slack/__init__.py +2 -2
- camel/bots/slack/models.py +4 -4
- camel/bots/slack/slack_app.py +2 -2
- camel/bots/telegram_bot.py +2 -2
- camel/configs/__init__.py +26 -2
- camel/configs/aihubmix_config.py +90 -0
- camel/configs/aiml_config.py +2 -2
- camel/configs/amd_config.py +70 -0
- camel/configs/anthropic_config.py +8 -7
- camel/configs/base_config.py +2 -2
- camel/configs/bedrock_config.py +5 -3
- camel/configs/cerebras_config.py +98 -0
- camel/configs/cohere_config.py +3 -3
- camel/configs/cometapi_config.py +106 -0
- camel/configs/crynux_config.py +94 -0
- camel/configs/deepseek_config.py +9 -8
- camel/configs/gemini_config.py +6 -4
- camel/configs/groq_config.py +6 -4
- camel/configs/internlm_config.py +6 -4
- camel/configs/litellm_config.py +2 -2
- camel/configs/lmstudio_config.py +6 -4
- camel/configs/minimax_config.py +95 -0
- camel/configs/mistral_config.py +3 -3
- camel/configs/modelscope_config.py +5 -3
- camel/configs/moonshot_config.py +2 -2
- camel/configs/nebius_config.py +105 -0
- camel/configs/netmind_config.py +2 -2
- camel/configs/novita_config.py +2 -2
- camel/configs/nvidia_config.py +2 -2
- camel/configs/ollama_config.py +2 -2
- camel/configs/openai_config.py +8 -3
- camel/configs/openrouter_config.py +6 -4
- camel/configs/ppio_config.py +2 -2
- camel/configs/qianfan_config.py +85 -0
- camel/configs/qwen_config.py +2 -2
- camel/configs/reka_config.py +3 -3
- camel/configs/samba_config.py +8 -6
- camel/configs/sglang_config.py +2 -2
- camel/configs/siliconflow_config.py +2 -2
- camel/configs/togetherai_config.py +2 -2
- camel/configs/vllm_config.py +4 -2
- camel/configs/watsonx_config.py +2 -2
- camel/configs/yi_config.py +6 -4
- camel/configs/zhipuai_config.py +6 -4
- camel/{data_collector → data_collectors}/__init__.py +2 -2
- camel/{data_collector → data_collectors}/alpaca_collector.py +19 -10
- camel/{data_collector → data_collectors}/base.py +2 -2
- camel/{data_collector → data_collectors}/sharegpt_collector.py +3 -3
- camel/datagen/__init__.py +2 -2
- camel/datagen/cot_datagen.py +32 -37
- camel/datagen/evol_instruct/__init__.py +2 -2
- camel/datagen/evol_instruct/evol_instruct.py +2 -2
- camel/datagen/evol_instruct/scorer.py +24 -25
- camel/datagen/evol_instruct/templates.py +48 -48
- camel/datagen/self_improving_cot.py +5 -5
- camel/datagen/self_instruct/__init__.py +2 -2
- camel/datagen/self_instruct/filter/__init__.py +2 -2
- camel/datagen/self_instruct/filter/filter_function.py +2 -2
- camel/datagen/self_instruct/filter/filter_registry.py +2 -2
- camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
- camel/datagen/self_instruct/self_instruct.py +2 -2
- camel/datagen/self_instruct/templates.py +47 -47
- camel/datagen/source2synth/__init__.py +2 -2
- camel/datagen/source2synth/data_processor.py +2 -2
- camel/datagen/source2synth/models.py +2 -2
- camel/datagen/source2synth/user_data_processor_config.py +2 -2
- camel/datahubs/__init__.py +2 -2
- camel/datahubs/base.py +2 -2
- camel/datahubs/huggingface.py +2 -2
- camel/datahubs/models.py +2 -2
- camel/datasets/__init__.py +2 -2
- camel/datasets/base_generator.py +41 -12
- camel/datasets/few_shot_generator.py +18 -18
- camel/datasets/models.py +3 -3
- camel/datasets/self_instruct_generator.py +2 -2
- camel/datasets/static_dataset.py +152 -2
- camel/embeddings/__init__.py +2 -2
- camel/embeddings/azure_embedding.py +2 -2
- camel/embeddings/base.py +2 -2
- camel/embeddings/gemini_embedding.py +2 -2
- camel/embeddings/jina_embedding.py +10 -3
- camel/embeddings/mistral_embedding.py +2 -2
- camel/embeddings/openai_compatible_embedding.py +2 -2
- camel/embeddings/openai_embedding.py +2 -2
- camel/embeddings/sentence_transformers_embeddings.py +4 -4
- camel/embeddings/together_embedding.py +2 -2
- camel/embeddings/vlm_embedding.py +11 -4
- camel/environments/__init__.py +14 -2
- camel/environments/models.py +2 -2
- camel/environments/multi_step.py +2 -2
- camel/environments/rlcards_env.py +860 -0
- camel/environments/single_step.py +30 -5
- camel/environments/tic_tac_toe.py +3 -3
- camel/extractors/__init__.py +2 -2
- camel/extractors/base.py +2 -2
- camel/extractors/python_strategies.py +2 -2
- camel/generators.py +2 -2
- camel/human.py +2 -2
- camel/interpreters/__init__.py +4 -2
- camel/interpreters/base.py +16 -3
- camel/interpreters/docker/Dockerfile +53 -7
- camel/interpreters/docker_interpreter.py +70 -11
- camel/interpreters/e2b_interpreter.py +59 -11
- camel/interpreters/internal_python_interpreter.py +81 -4
- camel/interpreters/interpreter_error.py +2 -2
- camel/interpreters/ipython_interpreter.py +23 -5
- camel/interpreters/microsandbox_interpreter.py +395 -0
- camel/interpreters/subprocess_interpreter.py +36 -4
- camel/loaders/__init__.py +17 -5
- camel/loaders/apify_reader.py +2 -2
- camel/loaders/base_io.py +2 -2
- camel/loaders/base_loader.py +85 -0
- camel/loaders/chunkr_reader.py +128 -93
- camel/loaders/crawl4ai_reader.py +2 -2
- camel/loaders/firecrawl_reader.py +6 -6
- camel/loaders/jina_url_reader.py +2 -2
- camel/loaders/markitdown.py +2 -2
- camel/loaders/mineru_extractor.py +2 -2
- camel/loaders/mistral_reader.py +148 -0
- camel/loaders/scrapegraph_reader.py +2 -2
- camel/loaders/unstructured_io.py +2 -2
- camel/logger.py +5 -5
- camel/memories/__init__.py +2 -2
- camel/memories/agent_memories.py +86 -3
- camel/memories/base.py +36 -2
- camel/memories/blocks/__init__.py +2 -2
- camel/memories/blocks/chat_history_block.py +126 -9
- camel/memories/blocks/vectordb_block.py +10 -3
- camel/memories/context_creators/__init__.py +2 -2
- camel/memories/context_creators/score_based.py +31 -239
- camel/memories/records.py +98 -13
- camel/messages/__init__.py +2 -2
- camel/messages/base.py +193 -46
- camel/messages/conversion/__init__.py +2 -2
- camel/messages/conversion/alpaca.py +2 -2
- camel/messages/conversion/conversation_models.py +2 -2
- camel/messages/conversion/sharegpt/__init__.py +2 -2
- camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
- camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
- camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
- camel/messages/func_message.py +54 -17
- camel/models/__init__.py +18 -2
- camel/models/_utils.py +3 -3
- camel/models/aihubmix_model.py +83 -0
- camel/models/aiml_model.py +11 -18
- camel/models/amd_model.py +101 -0
- camel/models/anthropic_model.py +127 -20
- camel/models/aws_bedrock_model.py +12 -35
- camel/models/azure_openai_model.py +263 -63
- camel/models/base_audio_model.py +5 -3
- camel/models/base_model.py +195 -26
- camel/models/cerebras_model.py +83 -0
- camel/models/cohere_model.py +81 -21
- camel/models/cometapi_model.py +83 -0
- camel/models/crynux_model.py +87 -0
- camel/models/deepseek_model.py +61 -59
- camel/models/fish_audio_model.py +8 -2
- camel/models/gemini_model.py +439 -30
- camel/models/groq_model.py +11 -19
- camel/models/internlm_model.py +11 -18
- camel/models/litellm_model.py +94 -34
- camel/models/lmstudio_model.py +17 -20
- camel/models/minimax_model.py +83 -0
- camel/models/mistral_model.py +84 -19
- camel/models/model_factory.py +49 -6
- camel/models/model_manager.py +33 -11
- camel/models/modelscope_model.py +13 -193
- camel/models/moonshot_model.py +195 -21
- camel/models/nebius_model.py +83 -0
- camel/models/nemotron_model.py +19 -9
- camel/models/netmind_model.py +11 -18
- camel/models/novita_model.py +11 -18
- camel/models/nvidia_model.py +11 -18
- camel/models/ollama_model.py +14 -21
- camel/models/openai_audio_models.py +2 -2
- camel/models/openai_compatible_model.py +234 -27
- camel/models/openai_model.py +255 -39
- camel/models/openrouter_model.py +11 -19
- camel/models/ppio_model.py +11 -18
- camel/models/qianfan_model.py +89 -0
- camel/models/qwen_model.py +13 -193
- camel/models/reka_model.py +90 -21
- camel/models/reward/__init__.py +2 -2
- camel/models/reward/base_reward_model.py +2 -2
- camel/models/reward/evaluator.py +2 -2
- camel/models/reward/nemotron_model.py +2 -2
- camel/models/reward/skywork_model.py +2 -2
- camel/models/samba_model.py +117 -49
- camel/models/sglang_model.py +162 -42
- camel/models/siliconflow_model.py +12 -35
- camel/models/stub_model.py +10 -7
- camel/models/togetherai_model.py +11 -18
- camel/models/vllm_model.py +10 -18
- camel/models/volcano_model.py +16 -20
- camel/models/watsonx_model.py +69 -19
- camel/models/yi_model.py +11 -18
- camel/models/zhipuai_model.py +70 -18
- camel/parsers/__init__.py +18 -0
- camel/parsers/mcp_tool_call_parser.py +176 -0
- camel/personas/__init__.py +2 -2
- camel/personas/persona.py +2 -2
- camel/personas/persona_hub.py +2 -2
- camel/prompts/__init__.py +2 -2
- camel/prompts/ai_society.py +2 -2
- camel/prompts/base.py +2 -2
- camel/prompts/code.py +2 -2
- camel/prompts/evaluation.py +2 -2
- camel/prompts/generate_text_embedding_data.py +2 -2
- camel/prompts/image_craft.py +2 -2
- camel/prompts/misalignment.py +2 -2
- camel/prompts/multi_condition_image_craft.py +2 -2
- camel/prompts/object_recognition.py +2 -2
- camel/prompts/persona_hub.py +3 -3
- camel/prompts/prompt_templates.py +2 -2
- camel/prompts/role_description_prompt_template.py +2 -2
- camel/prompts/solution_extraction.py +8 -8
- camel/prompts/task_prompt_template.py +2 -2
- camel/prompts/translation.py +2 -2
- camel/prompts/video_description_prompt.py +3 -3
- camel/responses/__init__.py +2 -2
- camel/responses/agent_responses.py +2 -2
- camel/retrievers/__init__.py +2 -2
- camel/retrievers/auto_retriever.py +23 -3
- camel/retrievers/base.py +2 -2
- camel/retrievers/bm25_retriever.py +3 -4
- camel/retrievers/cohere_rerank_retriever.py +2 -2
- camel/retrievers/hybrid_retrival.py +4 -4
- camel/retrievers/vector_retriever.py +2 -2
- camel/runtimes/Dockerfile.multi-toolkit +90 -0
- camel/{runtime → runtimes}/__init__.py +2 -2
- camel/runtimes/api.py +153 -0
- camel/{runtime → runtimes}/base.py +2 -2
- camel/{runtime → runtimes}/configs.py +13 -13
- camel/{runtime → runtimes}/daytona_runtime.py +18 -19
- camel/{runtime → runtimes}/docker_runtime.py +13 -13
- camel/{runtime → runtimes}/llm_guard_runtime.py +28 -28
- camel/{runtime → runtimes}/remote_http_runtime.py +12 -12
- camel/{runtime → runtimes}/ubuntu_docker_runtime.py +3 -3
- camel/{runtime → runtimes}/utils/__init__.py +2 -2
- camel/{runtime → runtimes}/utils/function_risk_toolkit.py +2 -2
- camel/{runtime → runtimes}/utils/ignore_risk_toolkit.py +2 -2
- camel/schemas/__init__.py +2 -2
- camel/schemas/base.py +2 -2
- camel/schemas/openai_converter.py +3 -3
- camel/schemas/outlines_converter.py +2 -2
- camel/services/agent_openapi_server.py +380 -0
- camel/societies/__init__.py +4 -2
- camel/societies/babyagi_playing.py +2 -2
- camel/societies/role_playing.py +201 -80
- camel/societies/workforce/__init__.py +10 -3
- camel/societies/workforce/base.py +9 -5
- camel/societies/workforce/events.py +143 -0
- camel/societies/workforce/prompts.py +258 -33
- camel/societies/workforce/role_playing_worker.py +95 -30
- camel/societies/workforce/single_agent_worker.py +659 -30
- camel/societies/workforce/structured_output_handler.py +512 -0
- camel/societies/workforce/task_channel.py +182 -38
- camel/societies/workforce/utils.py +784 -18
- camel/societies/workforce/worker.py +96 -28
- camel/societies/workforce/workflow_memory_manager.py +1746 -0
- camel/societies/workforce/workforce.py +5730 -366
- camel/societies/workforce/workforce_callback.py +103 -0
- camel/societies/workforce/workforce_logger.py +647 -0
- camel/societies/workforce/workforce_metrics.py +33 -0
- camel/storages/__init__.py +10 -2
- camel/storages/graph_storages/__init__.py +2 -2
- camel/storages/graph_storages/base.py +2 -2
- camel/storages/graph_storages/graph_element.py +2 -2
- camel/storages/graph_storages/nebula_graph.py +4 -4
- camel/storages/graph_storages/neo4j_graph.py +7 -7
- camel/storages/key_value_storages/__init__.py +2 -2
- camel/storages/key_value_storages/base.py +2 -2
- camel/storages/key_value_storages/in_memory.py +2 -2
- camel/storages/key_value_storages/json.py +17 -4
- camel/storages/key_value_storages/mem0_cloud.py +50 -49
- camel/storages/key_value_storages/redis.py +2 -2
- camel/storages/object_storages/__init__.py +2 -2
- camel/storages/object_storages/amazon_s3.py +2 -2
- camel/storages/object_storages/azure_blob.py +2 -2
- camel/storages/object_storages/base.py +2 -2
- camel/storages/object_storages/google_cloud.py +3 -3
- camel/storages/vectordb_storages/__init__.py +12 -2
- camel/storages/vectordb_storages/base.py +2 -2
- camel/storages/vectordb_storages/chroma.py +731 -0
- camel/storages/vectordb_storages/faiss.py +712 -0
- camel/storages/vectordb_storages/milvus.py +2 -2
- camel/storages/vectordb_storages/oceanbase.py +16 -17
- camel/storages/vectordb_storages/pgvector.py +349 -0
- camel/storages/vectordb_storages/qdrant.py +6 -6
- camel/storages/vectordb_storages/surreal.py +372 -0
- camel/storages/vectordb_storages/tidb.py +11 -8
- camel/storages/vectordb_storages/weaviate.py +714 -0
- camel/tasks/__init__.py +2 -2
- camel/tasks/task.py +366 -27
- camel/tasks/task_prompt.py +3 -3
- camel/terminators/__init__.py +2 -2
- camel/terminators/base.py +2 -2
- camel/terminators/response_terminator.py +2 -2
- camel/terminators/token_limit_terminator.py +2 -2
- camel/toolkits/__init__.py +58 -10
- camel/toolkits/aci_toolkit.py +66 -21
- camel/toolkits/arxiv_toolkit.py +8 -8
- camel/toolkits/ask_news_toolkit.py +2 -2
- camel/toolkits/async_browser_toolkit.py +174 -575
- camel/toolkits/audio_analysis_toolkit.py +3 -3
- camel/toolkits/base.py +65 -7
- camel/toolkits/bohrium_toolkit.py +318 -0
- camel/toolkits/browser_toolkit.py +306 -566
- camel/toolkits/browser_toolkit_commons.py +568 -0
- camel/toolkits/code_execution.py +67 -11
- camel/toolkits/context_summarizer_toolkit.py +684 -0
- camel/toolkits/craw4ai_toolkit.py +93 -0
- camel/toolkits/dappier_toolkit.py +12 -8
- camel/toolkits/data_commons_toolkit.py +2 -2
- camel/toolkits/dingtalk.py +1135 -0
- camel/toolkits/earth_science_toolkit.py +5367 -0
- camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
- camel/toolkits/excel_toolkit.py +910 -70
- camel/toolkits/file_toolkit.py +1402 -0
- camel/toolkits/function_tool.py +128 -20
- camel/toolkits/github_toolkit.py +148 -43
- camel/toolkits/gmail_toolkit.py +1839 -0
- camel/toolkits/google_calendar_toolkit.py +40 -6
- camel/toolkits/google_drive_mcp_toolkit.py +54 -0
- camel/toolkits/google_maps_toolkit.py +2 -2
- camel/toolkits/google_scholar_toolkit.py +2 -2
- camel/toolkits/human_toolkit.py +36 -12
- camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
- camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1973 -0
- camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1929 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
- camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
- camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +319 -0
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
- camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
- camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
- camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
- camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
- camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
- camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
- camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
- camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
- camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
- camel/toolkits/image_analysis_toolkit.py +3 -3
- camel/toolkits/image_generation_toolkit.py +390 -0
- camel/toolkits/jina_reranker_toolkit.py +195 -79
- camel/toolkits/klavis_toolkit.py +7 -3
- camel/toolkits/linkedin_toolkit.py +2 -2
- camel/toolkits/markitdown_toolkit.py +104 -0
- camel/toolkits/math_toolkit.py +66 -12
- camel/toolkits/mcp_toolkit.py +841 -600
- camel/toolkits/memory_toolkit.py +7 -3
- camel/toolkits/meshy_toolkit.py +2 -2
- camel/toolkits/message_agent_toolkit.py +608 -0
- camel/toolkits/message_integration.py +724 -0
- camel/toolkits/mineru_toolkit.py +2 -2
- camel/toolkits/minimax_mcp_toolkit.py +195 -0
- camel/toolkits/networkx_toolkit.py +2 -2
- camel/toolkits/note_taking_toolkit.py +277 -0
- camel/toolkits/notion_mcp_toolkit.py +224 -0
- camel/toolkits/notion_toolkit.py +2 -2
- camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
- camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
- camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
- camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
- camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
- camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
- camel/toolkits/open_api_specs/security_config.py +2 -2
- camel/toolkits/open_api_specs/speak/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
- camel/toolkits/open_api_toolkit.py +2 -2
- camel/toolkits/openbb_toolkit.py +7 -3
- camel/toolkits/origene_mcp_toolkit.py +56 -0
- camel/toolkits/page_script.js +86 -74
- camel/toolkits/playwright_mcp_toolkit.py +27 -32
- camel/toolkits/pptx_toolkit.py +790 -0
- camel/toolkits/pubmed_toolkit.py +2 -2
- camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
- camel/toolkits/pyautogui_toolkit.py +2 -2
- camel/toolkits/reddit_toolkit.py +2 -2
- camel/toolkits/resend_toolkit.py +168 -0
- camel/toolkits/retrieval_toolkit.py +2 -2
- camel/toolkits/screenshot_toolkit.py +213 -0
- camel/toolkits/search_toolkit.py +539 -146
- camel/toolkits/searxng_toolkit.py +2 -2
- camel/toolkits/semantic_scholar_toolkit.py +2 -2
- camel/toolkits/slack_toolkit.py +108 -58
- camel/toolkits/sql_toolkit.py +712 -0
- camel/toolkits/stripe_toolkit.py +2 -2
- camel/toolkits/sympy_toolkit.py +3 -3
- camel/toolkits/task_planning_toolkit.py +134 -0
- camel/toolkits/terminal_toolkit/__init__.py +18 -0
- camel/toolkits/terminal_toolkit/terminal_toolkit.py +1070 -0
- camel/toolkits/terminal_toolkit/utils.py +532 -0
- camel/toolkits/thinking_toolkit.py +3 -3
- camel/toolkits/twitter_toolkit.py +8 -3
- camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
- camel/toolkits/video_analysis_toolkit.py +112 -29
- camel/toolkits/video_download_toolkit.py +22 -16
- camel/toolkits/weather_toolkit.py +2 -2
- camel/toolkits/web_deploy_toolkit.py +1219 -0
- camel/toolkits/wechat_official_toolkit.py +483 -0
- camel/toolkits/whatsapp_toolkit.py +2 -2
- camel/toolkits/wolfram_alpha_toolkit.py +53 -25
- camel/toolkits/zapier_toolkit.py +7 -3
- camel/types/__init__.py +4 -4
- camel/types/agents/__init__.py +2 -2
- camel/types/agents/tool_calling_record.py +6 -3
- camel/types/enums.py +454 -35
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +4 -4
- camel/types/unified_model_type.py +43 -6
- camel/utils/__init__.py +20 -2
- camel/utils/async_func.py +2 -2
- camel/utils/chunker/__init__.py +2 -2
- camel/utils/chunker/base.py +2 -2
- camel/utils/chunker/code_chunker.py +2 -2
- camel/utils/chunker/uio_chunker.py +2 -2
- camel/utils/commons.py +65 -7
- camel/utils/constants.py +5 -2
- camel/utils/context_utils.py +1134 -0
- camel/utils/deduplication.py +2 -2
- camel/utils/filename.py +2 -2
- camel/utils/langfuse.py +258 -0
- camel/utils/mcp.py +140 -6
- camel/utils/mcp_client.py +1056 -0
- camel/utils/message_summarizer.py +148 -0
- camel/utils/response_format.py +2 -2
- camel/utils/token_counting.py +45 -22
- camel/utils/tool_result.py +44 -0
- camel/verifiers/__init__.py +2 -2
- camel/verifiers/base.py +2 -2
- camel/verifiers/math_verifier.py +2 -2
- camel/verifiers/models.py +2 -2
- camel/verifiers/physics_verifier.py +2 -2
- camel/verifiers/python_verifier.py +2 -2
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/METADATA +349 -108
- camel_ai-0.2.82.dist-info/RECORD +507 -0
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/WHEEL +1 -1
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/licenses/LICENSE +1 -1
- camel/loaders/pandas_reader.py +0 -368
- camel/runtime/api.py +0 -97
- camel/toolkits/dalle_toolkit.py +0 -171
- camel/toolkits/file_write_toolkit.py +0 -395
- camel/toolkits/openai_agent_toolkit.py +0 -135
- camel/toolkits/terminal_toolkit.py +0 -1037
- camel_ai-0.2.59.dist-info/RECORD +0 -410
camel/messages/base.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,14 +10,25 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
+
|
|
15
|
+
# Enables postponed evaluation of annotations (for string-based type hints)
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
14
18
|
import base64
|
|
15
19
|
import io
|
|
16
20
|
import re
|
|
17
21
|
from dataclasses import dataclass
|
|
18
|
-
from typing import
|
|
22
|
+
from typing import (
|
|
23
|
+
Any,
|
|
24
|
+
Dict,
|
|
25
|
+
List,
|
|
26
|
+
Literal,
|
|
27
|
+
Optional,
|
|
28
|
+
Tuple,
|
|
29
|
+
Union,
|
|
30
|
+
)
|
|
19
31
|
|
|
20
|
-
import numpy as np
|
|
21
32
|
from PIL import Image
|
|
22
33
|
from pydantic import BaseModel
|
|
23
34
|
|
|
@@ -48,19 +59,22 @@ class BaseMessage:
|
|
|
48
59
|
role_name (str): The name of the user or assistant role.
|
|
49
60
|
role_type (RoleType): The type of role, either :obj:`RoleType.
|
|
50
61
|
ASSISTANT` or :obj:`RoleType.USER`.
|
|
51
|
-
meta_dict (Optional[Dict[str,
|
|
62
|
+
meta_dict (Optional[Dict[str, Any]]): Additional metadata dictionary
|
|
52
63
|
for the message.
|
|
53
64
|
content (str): The content of the message.
|
|
54
65
|
video_bytes (Optional[bytes]): Optional bytes of a video associated
|
|
55
66
|
with the message. (default: :obj:`None`)
|
|
56
|
-
image_list (Optional[List[Image.Image]]): Optional list of
|
|
57
|
-
objects associated with the
|
|
67
|
+
image_list (Optional[List[Union[Image.Image, str]]]): Optional list of
|
|
68
|
+
PIL Image objects or image URLs (strings) associated with the
|
|
69
|
+
message. (default: :obj:`None`)
|
|
58
70
|
image_detail (Literal["auto", "low", "high"]): Detail level of the
|
|
59
71
|
images associated with the message. (default: :obj:`auto`)
|
|
60
72
|
video_detail (Literal["auto", "low", "high"]): Detail level of the
|
|
61
|
-
videos associated with the message. (default: :obj:`
|
|
62
|
-
parsed
|
|
73
|
+
videos associated with the message. (default: :obj:`auto`)
|
|
74
|
+
parsed (Optional[Union[Type[BaseModel], dict]]): Optional object which
|
|
63
75
|
is parsed from the content. (default: :obj:`None`)
|
|
76
|
+
reasoning_content (Optional[str]): Optional reasoning trace associated
|
|
77
|
+
with the message. (default: :obj:`None`)
|
|
64
78
|
"""
|
|
65
79
|
|
|
66
80
|
role_name: str
|
|
@@ -69,10 +83,11 @@ class BaseMessage:
|
|
|
69
83
|
content: str
|
|
70
84
|
|
|
71
85
|
video_bytes: Optional[bytes] = None
|
|
72
|
-
image_list: Optional[List[Image.Image]] = None
|
|
86
|
+
image_list: Optional[List[Union[Image.Image, str]]] = None
|
|
73
87
|
image_detail: Literal["auto", "low", "high"] = "auto"
|
|
74
|
-
video_detail: Literal["auto", "low", "high"] = "
|
|
88
|
+
video_detail: Literal["auto", "low", "high"] = "auto"
|
|
75
89
|
parsed: Optional[Union[BaseModel, dict]] = None
|
|
90
|
+
reasoning_content: Optional[str] = None
|
|
76
91
|
|
|
77
92
|
@classmethod
|
|
78
93
|
def make_user_message(
|
|
@@ -81,7 +96,7 @@ class BaseMessage:
|
|
|
81
96
|
content: str,
|
|
82
97
|
meta_dict: Optional[Dict[str, str]] = None,
|
|
83
98
|
video_bytes: Optional[bytes] = None,
|
|
84
|
-
image_list: Optional[List[Image.Image]] = None,
|
|
99
|
+
image_list: Optional[List[Union[Image.Image, str]]] = None,
|
|
85
100
|
image_detail: Union[
|
|
86
101
|
OpenAIVisionDetailType, str
|
|
87
102
|
] = OpenAIVisionDetailType.AUTO,
|
|
@@ -98,8 +113,9 @@ class BaseMessage:
|
|
|
98
113
|
dictionary for the message.
|
|
99
114
|
video_bytes (Optional[bytes]): Optional bytes of a video
|
|
100
115
|
associated with the message.
|
|
101
|
-
image_list (Optional[List[Image.Image]]): Optional list
|
|
102
|
-
Image objects associated with
|
|
116
|
+
image_list (Optional[List[Union[Image.Image, str]]]): Optional list
|
|
117
|
+
of PIL Image objects or image URLs (strings) associated with
|
|
118
|
+
the message.
|
|
103
119
|
image_detail (Union[OpenAIVisionDetailType, str]): Detail level of
|
|
104
120
|
the images associated with the message.
|
|
105
121
|
video_detail (Union[OpenAIVisionDetailType, str]): Detail level of
|
|
@@ -126,7 +142,7 @@ class BaseMessage:
|
|
|
126
142
|
content: str,
|
|
127
143
|
meta_dict: Optional[Dict[str, str]] = None,
|
|
128
144
|
video_bytes: Optional[bytes] = None,
|
|
129
|
-
image_list: Optional[List[Image.Image]] = None,
|
|
145
|
+
image_list: Optional[List[Union[Image.Image, str]]] = None,
|
|
130
146
|
image_detail: Union[
|
|
131
147
|
OpenAIVisionDetailType, str
|
|
132
148
|
] = OpenAIVisionDetailType.AUTO,
|
|
@@ -143,8 +159,9 @@ class BaseMessage:
|
|
|
143
159
|
dictionary for the message.
|
|
144
160
|
video_bytes (Optional[bytes]): Optional bytes of a video
|
|
145
161
|
associated with the message.
|
|
146
|
-
image_list (Optional[List[Image.Image]]): Optional list
|
|
147
|
-
Image objects associated with
|
|
162
|
+
image_list (Optional[List[Union[Image.Image, str]]]): Optional list
|
|
163
|
+
of PIL Image objects or image URLs (strings) associated with
|
|
164
|
+
the message.
|
|
148
165
|
image_detail (Union[OpenAIVisionDetailType, str]): Detail level of
|
|
149
166
|
the images associated with the message.
|
|
150
167
|
video_detail (Union[OpenAIVisionDetailType, str]): Detail level of
|
|
@@ -164,6 +181,32 @@ class BaseMessage:
|
|
|
164
181
|
OpenAIVisionDetailType(video_detail).value,
|
|
165
182
|
)
|
|
166
183
|
|
|
184
|
+
@classmethod
|
|
185
|
+
def make_system_message(
|
|
186
|
+
cls,
|
|
187
|
+
content: str,
|
|
188
|
+
role_name: str = "System",
|
|
189
|
+
meta_dict: Optional[Dict[str, str]] = None,
|
|
190
|
+
) -> "BaseMessage":
|
|
191
|
+
r"""Create a new system message.
|
|
192
|
+
|
|
193
|
+
Args:
|
|
194
|
+
content (str): The content of the system message.
|
|
195
|
+
role_name (str): The name of the system role.
|
|
196
|
+
(default: :obj:`"System"`)
|
|
197
|
+
meta_dict (Optional[Dict[str, str]]): Additional metadata
|
|
198
|
+
dictionary for the message.
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
BaseMessage: The new system message.
|
|
202
|
+
"""
|
|
203
|
+
return cls(
|
|
204
|
+
role_name,
|
|
205
|
+
RoleType.SYSTEM,
|
|
206
|
+
meta_dict,
|
|
207
|
+
content,
|
|
208
|
+
)
|
|
209
|
+
|
|
167
210
|
def create_new_instance(self, content: str) -> "BaseMessage":
|
|
168
211
|
r"""Create a new instance of the :obj:`BaseMessage` with updated
|
|
169
212
|
content.
|
|
@@ -179,6 +222,12 @@ class BaseMessage:
|
|
|
179
222
|
role_type=self.role_type,
|
|
180
223
|
meta_dict=self.meta_dict,
|
|
181
224
|
content=content,
|
|
225
|
+
video_bytes=self.video_bytes,
|
|
226
|
+
image_list=self.image_list,
|
|
227
|
+
image_detail=self.image_detail,
|
|
228
|
+
video_detail=self.video_detail,
|
|
229
|
+
parsed=self.parsed,
|
|
230
|
+
reasoning_content=self.reasoning_content,
|
|
182
231
|
)
|
|
183
232
|
|
|
184
233
|
def __add__(self, other: Any) -> Union["BaseMessage", Any]:
|
|
@@ -425,38 +474,68 @@ class BaseMessage:
|
|
|
425
474
|
)
|
|
426
475
|
if self.image_list and len(self.image_list) > 0:
|
|
427
476
|
for image in self.image_list:
|
|
428
|
-
if image
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
477
|
+
# Check if image is a URL string or PIL Image
|
|
478
|
+
if isinstance(image, str):
|
|
479
|
+
# Image is a URL string
|
|
480
|
+
hybrid_content.append(
|
|
481
|
+
{
|
|
482
|
+
"type": "image_url",
|
|
483
|
+
"image_url": {
|
|
484
|
+
"url": image,
|
|
485
|
+
"detail": self.image_detail,
|
|
486
|
+
},
|
|
487
|
+
}
|
|
434
488
|
)
|
|
489
|
+
else:
|
|
490
|
+
# Image is a PIL Image object
|
|
491
|
+
if image.format is None:
|
|
492
|
+
# Set default format to PNG as fallback
|
|
493
|
+
image.format = 'PNG'
|
|
494
|
+
|
|
495
|
+
image_type: str = image.format.lower()
|
|
496
|
+
if image_type not in OpenAIImageType:
|
|
497
|
+
raise ValueError(
|
|
498
|
+
f"Image type {image.format} "
|
|
499
|
+
f"is not supported by OpenAI vision model"
|
|
500
|
+
)
|
|
501
|
+
|
|
502
|
+
# Convert RGBA to RGB for formats that don't support
|
|
503
|
+
# transparency or when the image has transparency channel
|
|
504
|
+
img_to_save = image
|
|
505
|
+
if image.mode in ('RGBA', 'LA', 'P') and image_type in (
|
|
506
|
+
'jpeg',
|
|
507
|
+
'jpg',
|
|
508
|
+
):
|
|
509
|
+
# JPEG doesn't support transparency, convert to RGB
|
|
510
|
+
img_to_save = image.convert('RGB')
|
|
511
|
+
elif (
|
|
512
|
+
image.mode in ('RGBA', 'LA', 'P')
|
|
513
|
+
and image_type == 'png'
|
|
514
|
+
):
|
|
515
|
+
# For PNG with transparency, convert to RGBA if needed
|
|
516
|
+
if image.mode in ('LA', 'P'):
|
|
517
|
+
img_to_save = image.convert('RGBA')
|
|
518
|
+
# else: RGBA mode, keep as-is
|
|
435
519
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
520
|
+
with io.BytesIO() as buffer:
|
|
521
|
+
img_to_save.save(fp=buffer, format=image.format)
|
|
522
|
+
encoded_image = base64.b64encode(
|
|
523
|
+
buffer.getvalue()
|
|
524
|
+
).decode("utf-8")
|
|
525
|
+
image_prefix = f"data:image/{image_type};base64,"
|
|
526
|
+
hybrid_content.append(
|
|
527
|
+
{
|
|
528
|
+
"type": "image_url",
|
|
529
|
+
"image_url": {
|
|
530
|
+
"url": f"{image_prefix}{encoded_image}",
|
|
531
|
+
"detail": self.image_detail,
|
|
532
|
+
},
|
|
533
|
+
}
|
|
446
534
|
)
|
|
447
|
-
image_prefix = f"data:image/{image_type};base64,"
|
|
448
|
-
hybrid_content.append(
|
|
449
|
-
{
|
|
450
|
-
"type": "image_url",
|
|
451
|
-
"image_url": {
|
|
452
|
-
"url": f"{image_prefix}{encoded_image}",
|
|
453
|
-
"detail": self.image_detail,
|
|
454
|
-
},
|
|
455
|
-
}
|
|
456
|
-
)
|
|
457
535
|
|
|
458
536
|
if self.video_bytes:
|
|
459
537
|
import imageio.v3 as iio
|
|
538
|
+
import numpy as np
|
|
460
539
|
|
|
461
540
|
base64Frames: List[str] = []
|
|
462
541
|
frame_count = 0
|
|
@@ -525,7 +604,18 @@ class BaseMessage:
|
|
|
525
604
|
OpenAIAssistantMessage: The converted :obj:`OpenAIAssistantMessage`
|
|
526
605
|
object.
|
|
527
606
|
"""
|
|
528
|
-
|
|
607
|
+
message_dict: Dict[str, Any] = {
|
|
608
|
+
"role": "assistant",
|
|
609
|
+
"content": self.content,
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
# Check if meta_dict contains tool_calls
|
|
613
|
+
if self.meta_dict and "tool_calls" in self.meta_dict:
|
|
614
|
+
tool_calls = self.meta_dict["tool_calls"]
|
|
615
|
+
if tool_calls:
|
|
616
|
+
message_dict["tool_calls"] = tool_calls
|
|
617
|
+
|
|
618
|
+
return message_dict # type: ignore[return-value]
|
|
529
619
|
|
|
530
620
|
def to_dict(self) -> Dict:
|
|
531
621
|
r"""Converts the message to a dictionary.
|
|
@@ -533,9 +623,66 @@ class BaseMessage:
|
|
|
533
623
|
Returns:
|
|
534
624
|
dict: The converted dictionary.
|
|
535
625
|
"""
|
|
536
|
-
|
|
626
|
+
result = {
|
|
537
627
|
"role_name": self.role_name,
|
|
538
|
-
"role_type": self.role_type.
|
|
628
|
+
"role_type": self.role_type.value,
|
|
539
629
|
**(self.meta_dict or {}),
|
|
540
630
|
"content": self.content,
|
|
541
631
|
}
|
|
632
|
+
|
|
633
|
+
# Include image/video fields if present
|
|
634
|
+
if self.image_list is not None:
|
|
635
|
+
# Handle both PIL Images and URL strings
|
|
636
|
+
import base64
|
|
637
|
+
from io import BytesIO
|
|
638
|
+
|
|
639
|
+
image_data_list = []
|
|
640
|
+
for img in self.image_list:
|
|
641
|
+
if isinstance(img, str):
|
|
642
|
+
# Image is a URL string, store as-is
|
|
643
|
+
image_data_list.append({"type": "url", "data": img})
|
|
644
|
+
else:
|
|
645
|
+
# Image is a PIL Image, convert to base64
|
|
646
|
+
# Preserve format, default to PNG if not set
|
|
647
|
+
img_format = img.format if img.format else "PNG"
|
|
648
|
+
|
|
649
|
+
# Handle transparency for different formats
|
|
650
|
+
img_to_save = img
|
|
651
|
+
if img.mode in (
|
|
652
|
+
'RGBA',
|
|
653
|
+
'LA',
|
|
654
|
+
'P',
|
|
655
|
+
) and img_format.upper() in ('JPEG', 'JPG'):
|
|
656
|
+
# JPEG doesn't support transparency, convert to RGB
|
|
657
|
+
img_to_save = img.convert('RGB')
|
|
658
|
+
elif (
|
|
659
|
+
img.mode in ('LA', 'P') and img_format.upper() == 'PNG'
|
|
660
|
+
):
|
|
661
|
+
# For PNG with transparency, convert to RGBA if needed
|
|
662
|
+
img_to_save = img.convert('RGBA')
|
|
663
|
+
# else: keep as-is for other combinations
|
|
664
|
+
|
|
665
|
+
buffered = BytesIO()
|
|
666
|
+
img_to_save.save(buffered, format=img_format)
|
|
667
|
+
img_str = base64.b64encode(buffered.getvalue()).decode()
|
|
668
|
+
image_data_list.append(
|
|
669
|
+
{
|
|
670
|
+
"type": "base64",
|
|
671
|
+
"data": img_str,
|
|
672
|
+
"format": img_format, # Preserve format
|
|
673
|
+
}
|
|
674
|
+
)
|
|
675
|
+
result["image_list"] = image_data_list
|
|
676
|
+
|
|
677
|
+
if self.video_bytes is not None:
|
|
678
|
+
import base64
|
|
679
|
+
|
|
680
|
+
result["video_bytes"] = base64.b64encode(self.video_bytes).decode()
|
|
681
|
+
|
|
682
|
+
if self.image_detail is not None:
|
|
683
|
+
result["image_detail"] = self.image_detail
|
|
684
|
+
|
|
685
|
+
if self.video_detail is not None:
|
|
686
|
+
result["video_detail"] = self.video_detail
|
|
687
|
+
|
|
688
|
+
return result
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from .alpaca import AlpacaItem
|
|
16
16
|
from .conversation_models import (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import re
|
|
16
16
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
16
|
from typing import Any, Dict, List, Literal
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
from .hermes import HermesFunctionFormatter
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from abc import ABC, abstractmethod
|
|
15
15
|
from typing import Any, Dict, Generic, List, Optional, TypeVar
|
|
16
16
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
from .hermes_function_formatter import HermesFunctionFormatter
|
|
16
16
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import json
|
|
15
15
|
import re
|
|
16
16
|
from typing import Any, Dict, List, Optional
|
camel/messages/func_message.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import json
|
|
15
15
|
from dataclasses import dataclass
|
|
16
16
|
from typing import Any, Dict, Optional
|
|
@@ -47,12 +47,20 @@ class FunctionCallingMessage(BaseMessage):
|
|
|
47
47
|
(default: :obj:`None`)
|
|
48
48
|
tool_call_id (Optional[str]): The ID of the tool call, if available.
|
|
49
49
|
(default: :obj:`None`)
|
|
50
|
+
mask_output (Optional[bool]): Whether to return a sanitized placeholder
|
|
51
|
+
instead of the raw tool output.
|
|
52
|
+
(default: :obj:`False`)
|
|
53
|
+
extra_content (Optional[Dict[str, Any]]): Additional content
|
|
54
|
+
associated with the tool call.
|
|
55
|
+
(default: :obj:`None`)
|
|
50
56
|
"""
|
|
51
57
|
|
|
52
58
|
func_name: Optional[str] = None
|
|
53
59
|
args: Optional[Dict] = None
|
|
54
60
|
result: Optional[Any] = None
|
|
55
61
|
tool_call_id: Optional[str] = None
|
|
62
|
+
mask_output: Optional[bool] = False
|
|
63
|
+
extra_content: Optional[Dict[str, Any]] = None
|
|
56
64
|
|
|
57
65
|
def to_openai_message(
|
|
58
66
|
self,
|
|
@@ -105,10 +113,13 @@ class FunctionCallingMessage(BaseMessage):
|
|
|
105
113
|
# This is a function response
|
|
106
114
|
# TODO: Allow for more flexible setting of tool role,
|
|
107
115
|
# optionally to be the same as assistant messages
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
116
|
+
if self.mask_output:
|
|
117
|
+
content = "[MASKED]"
|
|
118
|
+
else:
|
|
119
|
+
content = function_format.format_tool_response(
|
|
120
|
+
self.func_name, # type: ignore[arg-type]
|
|
121
|
+
self.result, # type: ignore[arg-type]
|
|
122
|
+
)
|
|
112
123
|
return ShareGPTMessage(from_="tool", value=content) # type: ignore[call-arg]
|
|
113
124
|
|
|
114
125
|
def to_openai_assistant_message(self) -> OpenAIAssistantMessage:
|
|
@@ -124,19 +135,23 @@ class FunctionCallingMessage(BaseMessage):
|
|
|
124
135
|
" due to missing function name or arguments."
|
|
125
136
|
)
|
|
126
137
|
|
|
138
|
+
tool_call = {
|
|
139
|
+
"id": self.tool_call_id or "null",
|
|
140
|
+
"type": "function",
|
|
141
|
+
"function": {
|
|
142
|
+
"name": self.func_name,
|
|
143
|
+
"arguments": json.dumps(self.args, ensure_ascii=False),
|
|
144
|
+
},
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# Include extra_content if available
|
|
148
|
+
if self.extra_content is not None:
|
|
149
|
+
tool_call["extra_content"] = self.extra_content
|
|
150
|
+
|
|
127
151
|
return {
|
|
128
152
|
"role": "assistant",
|
|
129
153
|
"content": self.content or "",
|
|
130
|
-
"tool_calls": [
|
|
131
|
-
{
|
|
132
|
-
"id": self.tool_call_id or "null",
|
|
133
|
-
"type": "function",
|
|
134
|
-
"function": {
|
|
135
|
-
"name": self.func_name,
|
|
136
|
-
"arguments": json.dumps(self.args, ensure_ascii=False),
|
|
137
|
-
},
|
|
138
|
-
}
|
|
139
|
-
],
|
|
154
|
+
"tool_calls": [tool_call], # type: ignore[list-item]
|
|
140
155
|
}
|
|
141
156
|
|
|
142
157
|
def to_openai_tool_message(self) -> OpenAIToolMessageParam:
|
|
@@ -154,10 +169,32 @@ class FunctionCallingMessage(BaseMessage):
|
|
|
154
169
|
" due to missing function name."
|
|
155
170
|
)
|
|
156
171
|
|
|
157
|
-
|
|
172
|
+
if self.mask_output:
|
|
173
|
+
result_content = "[MASKED]"
|
|
174
|
+
else:
|
|
175
|
+
result_content = str(self.result)
|
|
158
176
|
|
|
159
177
|
return {
|
|
160
178
|
"role": "tool",
|
|
161
179
|
"content": result_content,
|
|
162
180
|
"tool_call_id": self.tool_call_id or "null",
|
|
163
181
|
}
|
|
182
|
+
|
|
183
|
+
def to_dict(self) -> Dict:
|
|
184
|
+
r"""Converts the message to a dictionary.
|
|
185
|
+
|
|
186
|
+
Returns:
|
|
187
|
+
dict: The converted dictionary.
|
|
188
|
+
"""
|
|
189
|
+
base = super().to_dict()
|
|
190
|
+
base["func_name"] = self.func_name
|
|
191
|
+
if self.args is not None:
|
|
192
|
+
base["args"] = self.args
|
|
193
|
+
if self.result is not None:
|
|
194
|
+
base["result"] = self.result
|
|
195
|
+
if self.tool_call_id is not None:
|
|
196
|
+
base["tool_call_id"] = self.tool_call_id
|
|
197
|
+
base["mask_output"] = self.mask_output
|
|
198
|
+
if self.extra_content is not None:
|
|
199
|
+
base["extra_content"] = self.extra_content
|
|
200
|
+
return base
|
camel/models/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,14 +10,19 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
+
from .aihubmix_model import AihubMixModel
|
|
14
15
|
from .aiml_model import AIMLModel
|
|
16
|
+
from .amd_model import AMDModel
|
|
15
17
|
from .anthropic_model import AnthropicModel
|
|
16
18
|
from .aws_bedrock_model import AWSBedrockModel
|
|
17
19
|
from .azure_openai_model import AzureOpenAIModel
|
|
18
20
|
from .base_audio_model import BaseAudioModel
|
|
19
21
|
from .base_model import BaseModelBackend
|
|
22
|
+
from .cerebras_model import CerebrasModel
|
|
20
23
|
from .cohere_model import CohereModel
|
|
24
|
+
from .cometapi_model import CometAPIModel
|
|
25
|
+
from .crynux_model import CrynuxModel
|
|
21
26
|
from .deepseek_model import DeepSeekModel
|
|
22
27
|
from .fish_audio_model import FishAudioModel
|
|
23
28
|
from .gemini_model import GeminiModel
|
|
@@ -25,11 +30,13 @@ from .groq_model import GroqModel
|
|
|
25
30
|
from .internlm_model import InternLMModel
|
|
26
31
|
from .litellm_model import LiteLLMModel
|
|
27
32
|
from .lmstudio_model import LMStudioModel
|
|
33
|
+
from .minimax_model import MinimaxModel
|
|
28
34
|
from .mistral_model import MistralModel
|
|
29
35
|
from .model_factory import ModelFactory
|
|
30
36
|
from .model_manager import ModelManager, ModelProcessingError
|
|
31
37
|
from .modelscope_model import ModelScopeModel
|
|
32
38
|
from .moonshot_model import MoonshotModel
|
|
39
|
+
from .nebius_model import NebiusModel
|
|
33
40
|
from .nemotron_model import NemotronModel
|
|
34
41
|
from .netmind_model import NetmindModel
|
|
35
42
|
from .novita_model import NovitaModel
|
|
@@ -40,6 +47,7 @@ from .openai_compatible_model import OpenAICompatibleModel
|
|
|
40
47
|
from .openai_model import OpenAIModel
|
|
41
48
|
from .openrouter_model import OpenRouterModel
|
|
42
49
|
from .ppio_model import PPIOModel
|
|
50
|
+
from .qianfan_model import QianfanModel
|
|
43
51
|
from .qwen_model import QwenModel
|
|
44
52
|
from .reka_model import RekaModel
|
|
45
53
|
from .samba_model import SambaModel
|
|
@@ -59,11 +67,14 @@ __all__ = [
|
|
|
59
67
|
'OpenRouterModel',
|
|
60
68
|
'AzureOpenAIModel',
|
|
61
69
|
'AnthropicModel',
|
|
70
|
+
'AMDModel',
|
|
62
71
|
'MistralModel',
|
|
63
72
|
'GroqModel',
|
|
64
73
|
'StubModel',
|
|
65
74
|
'ZhipuAIModel',
|
|
75
|
+
'CerebrasModel',
|
|
66
76
|
'CohereModel',
|
|
77
|
+
'CometAPIModel',
|
|
67
78
|
'ModelFactory',
|
|
68
79
|
'ModelManager',
|
|
69
80
|
'LiteLLMModel',
|
|
@@ -85,6 +96,7 @@ __all__ = [
|
|
|
85
96
|
'QwenModel',
|
|
86
97
|
'AWSBedrockModel',
|
|
87
98
|
'ModelProcessingError',
|
|
99
|
+
'NebiusModel',
|
|
88
100
|
'DeepSeekModel',
|
|
89
101
|
'FishAudioModel',
|
|
90
102
|
'InternLMModel',
|
|
@@ -95,5 +107,9 @@ __all__ = [
|
|
|
95
107
|
'SiliconFlowModel',
|
|
96
108
|
'VolcanoModel',
|
|
97
109
|
'LMStudioModel',
|
|
110
|
+
'MinimaxModel',
|
|
98
111
|
'WatsonXModel',
|
|
112
|
+
'QianfanModel',
|
|
113
|
+
'CrynuxModel',
|
|
114
|
+
'AihubMixModel',
|
|
99
115
|
]
|