camel-ai 0.2.65__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 +4835 -947
- 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 +23 -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/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 +31 -239
- 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 +16 -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 +212 -89
- 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 +16 -21
- camel/models/cometapi_model.py +83 -0
- camel/models/crynux_model.py +11 -18
- camel/models/deepseek_model.py +18 -58
- camel/models/fish_audio_model.py +8 -2
- camel/models/gemini_model.py +389 -26
- camel/models/groq_model.py +11 -19
- camel/models/internlm_model.py +11 -18
- camel/models/litellm_model.py +56 -34
- camel/models/lmstudio_model.py +17 -20
- camel/models/minimax_model.py +83 -0
- camel/models/mistral_model.py +18 -19
- camel/models/model_factory.py +37 -3
- camel/models/model_manager.py +26 -8
- 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 +188 -45
- camel/models/openai_model.py +216 -71
- 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 +21 -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 +48 -47
- camel/models/sglang_model.py +88 -40
- 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 +7 -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 +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 +143 -0
- camel/societies/workforce/prompts.py +258 -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 +5276 -355
- 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 +54 -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 +65 -7
- 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 +126 -18
- 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 +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 -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 +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 +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 +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 +5 -5
- 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 +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 +378 -39
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +4 -4
- camel/types/unified_model_type.py +38 -6
- camel/utils/__init__.py +2 -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 +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 +2 -2
- 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.82.dist-info}/METADATA +327 -94
- camel_ai-0.2.82.dist-info/RECORD +507 -0
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.82.dist-info}/WHEEL +1 -1
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.82.dist-info}/licenses/LICENSE +1 -1
- camel/loaders/pandas_reader.py +0 -368
- camel/toolkits/dalle_toolkit.py +0 -175
- camel/toolkits/file_write_toolkit.py +0 -444
- camel/toolkits/openai_agent_toolkit.py +0 -135
- camel/toolkits/terminal_toolkit.py +0 -1037
- camel_ai-0.2.65.dist-info/RECORD +0 -426
camel/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,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
|
# Enables postponed evaluation of annotations (for string-based type hints)
|
|
16
16
|
from __future__ import annotations
|
|
@@ -64,14 +64,17 @@ class BaseMessage:
|
|
|
64
64
|
content (str): The content of the message.
|
|
65
65
|
video_bytes (Optional[bytes]): Optional bytes of a video associated
|
|
66
66
|
with the message. (default: :obj:`None`)
|
|
67
|
-
image_list (Optional[List[Image.Image]]): Optional list of
|
|
68
|
-
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`)
|
|
69
70
|
image_detail (Literal["auto", "low", "high"]): Detail level of the
|
|
70
71
|
images associated with the message. (default: :obj:`auto`)
|
|
71
72
|
video_detail (Literal["auto", "low", "high"]): Detail level of the
|
|
72
|
-
videos associated with the message. (default: :obj:`
|
|
73
|
-
parsed
|
|
73
|
+
videos associated with the message. (default: :obj:`auto`)
|
|
74
|
+
parsed (Optional[Union[Type[BaseModel], dict]]): Optional object which
|
|
74
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`)
|
|
75
78
|
"""
|
|
76
79
|
|
|
77
80
|
role_name: str
|
|
@@ -80,10 +83,11 @@ class BaseMessage:
|
|
|
80
83
|
content: str
|
|
81
84
|
|
|
82
85
|
video_bytes: Optional[bytes] = None
|
|
83
|
-
image_list: Optional[List[Image.Image]] = None
|
|
86
|
+
image_list: Optional[List[Union[Image.Image, str]]] = None
|
|
84
87
|
image_detail: Literal["auto", "low", "high"] = "auto"
|
|
85
|
-
video_detail: Literal["auto", "low", "high"] = "
|
|
88
|
+
video_detail: Literal["auto", "low", "high"] = "auto"
|
|
86
89
|
parsed: Optional[Union[BaseModel, dict]] = None
|
|
90
|
+
reasoning_content: Optional[str] = None
|
|
87
91
|
|
|
88
92
|
@classmethod
|
|
89
93
|
def make_user_message(
|
|
@@ -92,7 +96,7 @@ class BaseMessage:
|
|
|
92
96
|
content: str,
|
|
93
97
|
meta_dict: Optional[Dict[str, str]] = None,
|
|
94
98
|
video_bytes: Optional[bytes] = None,
|
|
95
|
-
image_list: Optional[List[Image.Image]] = None,
|
|
99
|
+
image_list: Optional[List[Union[Image.Image, str]]] = None,
|
|
96
100
|
image_detail: Union[
|
|
97
101
|
OpenAIVisionDetailType, str
|
|
98
102
|
] = OpenAIVisionDetailType.AUTO,
|
|
@@ -109,8 +113,9 @@ class BaseMessage:
|
|
|
109
113
|
dictionary for the message.
|
|
110
114
|
video_bytes (Optional[bytes]): Optional bytes of a video
|
|
111
115
|
associated with the message.
|
|
112
|
-
image_list (Optional[List[Image.Image]]): Optional list
|
|
113
|
-
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.
|
|
114
119
|
image_detail (Union[OpenAIVisionDetailType, str]): Detail level of
|
|
115
120
|
the images associated with the message.
|
|
116
121
|
video_detail (Union[OpenAIVisionDetailType, str]): Detail level of
|
|
@@ -137,7 +142,7 @@ class BaseMessage:
|
|
|
137
142
|
content: str,
|
|
138
143
|
meta_dict: Optional[Dict[str, str]] = None,
|
|
139
144
|
video_bytes: Optional[bytes] = None,
|
|
140
|
-
image_list: Optional[List[Image.Image]] = None,
|
|
145
|
+
image_list: Optional[List[Union[Image.Image, str]]] = None,
|
|
141
146
|
image_detail: Union[
|
|
142
147
|
OpenAIVisionDetailType, str
|
|
143
148
|
] = OpenAIVisionDetailType.AUTO,
|
|
@@ -154,8 +159,9 @@ class BaseMessage:
|
|
|
154
159
|
dictionary for the message.
|
|
155
160
|
video_bytes (Optional[bytes]): Optional bytes of a video
|
|
156
161
|
associated with the message.
|
|
157
|
-
image_list (Optional[List[Image.Image]]): Optional list
|
|
158
|
-
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.
|
|
159
165
|
image_detail (Union[OpenAIVisionDetailType, str]): Detail level of
|
|
160
166
|
the images associated with the message.
|
|
161
167
|
video_detail (Union[OpenAIVisionDetailType, str]): Detail level of
|
|
@@ -175,6 +181,32 @@ class BaseMessage:
|
|
|
175
181
|
OpenAIVisionDetailType(video_detail).value,
|
|
176
182
|
)
|
|
177
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
|
+
|
|
178
210
|
def create_new_instance(self, content: str) -> "BaseMessage":
|
|
179
211
|
r"""Create a new instance of the :obj:`BaseMessage` with updated
|
|
180
212
|
content.
|
|
@@ -190,6 +222,12 @@ class BaseMessage:
|
|
|
190
222
|
role_type=self.role_type,
|
|
191
223
|
meta_dict=self.meta_dict,
|
|
192
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,
|
|
193
231
|
)
|
|
194
232
|
|
|
195
233
|
def __add__(self, other: Any) -> Union["BaseMessage", Any]:
|
|
@@ -436,35 +474,64 @@ class BaseMessage:
|
|
|
436
474
|
)
|
|
437
475
|
if self.image_list and len(self.image_list) > 0:
|
|
438
476
|
for image in self.image_list:
|
|
439
|
-
if image
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
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
|
+
}
|
|
445
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
|
|
446
519
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
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
|
+
}
|
|
457
534
|
)
|
|
458
|
-
image_prefix = f"data:image/{image_type};base64,"
|
|
459
|
-
hybrid_content.append(
|
|
460
|
-
{
|
|
461
|
-
"type": "image_url",
|
|
462
|
-
"image_url": {
|
|
463
|
-
"url": f"{image_prefix}{encoded_image}",
|
|
464
|
-
"detail": self.image_detail,
|
|
465
|
-
},
|
|
466
|
-
}
|
|
467
|
-
)
|
|
468
535
|
|
|
469
536
|
if self.video_bytes:
|
|
470
537
|
import imageio.v3 as iio
|
|
@@ -537,7 +604,18 @@ class BaseMessage:
|
|
|
537
604
|
OpenAIAssistantMessage: The converted :obj:`OpenAIAssistantMessage`
|
|
538
605
|
object.
|
|
539
606
|
"""
|
|
540
|
-
|
|
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]
|
|
541
619
|
|
|
542
620
|
def to_dict(self) -> Dict:
|
|
543
621
|
r"""Converts the message to a dictionary.
|
|
@@ -545,9 +623,66 @@ class BaseMessage:
|
|
|
545
623
|
Returns:
|
|
546
624
|
dict: The converted dictionary.
|
|
547
625
|
"""
|
|
548
|
-
|
|
626
|
+
result = {
|
|
549
627
|
"role_name": self.role_name,
|
|
550
|
-
"role_type": self.role_type.
|
|
628
|
+
"role_type": self.role_type.value,
|
|
551
629
|
**(self.meta_dict or {}),
|
|
552
630
|
"content": self.content,
|
|
553
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,18 @@
|
|
|
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
|
|
21
25
|
from .crynux_model import CrynuxModel
|
|
22
26
|
from .deepseek_model import DeepSeekModel
|
|
23
27
|
from .fish_audio_model import FishAudioModel
|
|
@@ -26,11 +30,13 @@ from .groq_model import GroqModel
|
|
|
26
30
|
from .internlm_model import InternLMModel
|
|
27
31
|
from .litellm_model import LiteLLMModel
|
|
28
32
|
from .lmstudio_model import LMStudioModel
|
|
33
|
+
from .minimax_model import MinimaxModel
|
|
29
34
|
from .mistral_model import MistralModel
|
|
30
35
|
from .model_factory import ModelFactory
|
|
31
36
|
from .model_manager import ModelManager, ModelProcessingError
|
|
32
37
|
from .modelscope_model import ModelScopeModel
|
|
33
38
|
from .moonshot_model import MoonshotModel
|
|
39
|
+
from .nebius_model import NebiusModel
|
|
34
40
|
from .nemotron_model import NemotronModel
|
|
35
41
|
from .netmind_model import NetmindModel
|
|
36
42
|
from .novita_model import NovitaModel
|
|
@@ -41,6 +47,7 @@ from .openai_compatible_model import OpenAICompatibleModel
|
|
|
41
47
|
from .openai_model import OpenAIModel
|
|
42
48
|
from .openrouter_model import OpenRouterModel
|
|
43
49
|
from .ppio_model import PPIOModel
|
|
50
|
+
from .qianfan_model import QianfanModel
|
|
44
51
|
from .qwen_model import QwenModel
|
|
45
52
|
from .reka_model import RekaModel
|
|
46
53
|
from .samba_model import SambaModel
|
|
@@ -60,11 +67,14 @@ __all__ = [
|
|
|
60
67
|
'OpenRouterModel',
|
|
61
68
|
'AzureOpenAIModel',
|
|
62
69
|
'AnthropicModel',
|
|
70
|
+
'AMDModel',
|
|
63
71
|
'MistralModel',
|
|
64
72
|
'GroqModel',
|
|
65
73
|
'StubModel',
|
|
66
74
|
'ZhipuAIModel',
|
|
75
|
+
'CerebrasModel',
|
|
67
76
|
'CohereModel',
|
|
77
|
+
'CometAPIModel',
|
|
68
78
|
'ModelFactory',
|
|
69
79
|
'ModelManager',
|
|
70
80
|
'LiteLLMModel',
|
|
@@ -86,6 +96,7 @@ __all__ = [
|
|
|
86
96
|
'QwenModel',
|
|
87
97
|
'AWSBedrockModel',
|
|
88
98
|
'ModelProcessingError',
|
|
99
|
+
'NebiusModel',
|
|
89
100
|
'DeepSeekModel',
|
|
90
101
|
'FishAudioModel',
|
|
91
102
|
'InternLMModel',
|
|
@@ -96,6 +107,9 @@ __all__ = [
|
|
|
96
107
|
'SiliconFlowModel',
|
|
97
108
|
'VolcanoModel',
|
|
98
109
|
'LMStudioModel',
|
|
110
|
+
'MinimaxModel',
|
|
99
111
|
'WatsonXModel',
|
|
112
|
+
'QianfanModel',
|
|
100
113
|
'CrynuxModel',
|
|
114
|
+
'AihubMixModel',
|
|
101
115
|
]
|
camel/models/_utils.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 textwrap
|
|
15
15
|
from typing import Optional, Type
|
|
16
16
|
|
|
@@ -48,7 +48,7 @@ def try_modify_message_with_format(
|
|
|
48
48
|
updated_prompt = textwrap.dedent(
|
|
49
49
|
f"""\
|
|
50
50
|
{message["content"]}
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
Please generate a JSON response adhering to the following JSON schema:
|
|
53
53
|
{json_schema}
|
|
54
54
|
Make sure the JSON response is valid and matches the EXACT structure defined in the schema. Your result should ONLY be a valid json object, WITHOUT ANY OTHER TEXT OR COMMENTS.
|