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/models/sglang_model.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 logging
|
|
15
15
|
import os
|
|
16
16
|
import subprocess
|
|
@@ -21,7 +21,7 @@ from typing import Any, Dict, List, Optional, Type, Union
|
|
|
21
21
|
from openai import AsyncOpenAI, AsyncStream, OpenAI, Stream
|
|
22
22
|
from pydantic import BaseModel
|
|
23
23
|
|
|
24
|
-
from camel.configs import
|
|
24
|
+
from camel.configs import SGLangConfig
|
|
25
25
|
from camel.messages import OpenAIMessage
|
|
26
26
|
from camel.models import BaseModelBackend
|
|
27
27
|
from camel.types import (
|
|
@@ -70,8 +70,21 @@ class SGLangModel(BaseModelBackend):
|
|
|
70
70
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
71
71
|
environment variable or default to 180 seconds.
|
|
72
72
|
(default: :obj:`None`)
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
74
|
+
(default: :obj:`3`)
|
|
75
|
+
client (Optional[Any], optional): A custom synchronous
|
|
76
|
+
OpenAI-compatible client instance. If provided, this client will
|
|
77
|
+
be used instead of creating a new one. Note: When using custom
|
|
78
|
+
clients with SGLang, server auto-start features will be disabled.
|
|
79
|
+
(default: :obj:`None`)
|
|
80
|
+
async_client (Optional[Any], optional): A custom asynchronous
|
|
81
|
+
OpenAI-compatible client instance. If provided, this client will
|
|
82
|
+
be used instead of creating a new one. (default: :obj:`None`)
|
|
83
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
84
|
+
initialization. Ignored if custom clients are provided.
|
|
85
|
+
|
|
86
|
+
Reference: https://sgl-project.github.io/backend/openai_api_completions.
|
|
87
|
+
html
|
|
75
88
|
"""
|
|
76
89
|
|
|
77
90
|
def __init__(
|
|
@@ -82,6 +95,10 @@ class SGLangModel(BaseModelBackend):
|
|
|
82
95
|
url: Optional[str] = None,
|
|
83
96
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
84
97
|
timeout: Optional[float] = None,
|
|
98
|
+
max_retries: int = 3,
|
|
99
|
+
client: Optional[Any] = None,
|
|
100
|
+
async_client: Optional[Any] = None,
|
|
101
|
+
**kwargs: Any,
|
|
85
102
|
) -> None:
|
|
86
103
|
if model_config_dict is None:
|
|
87
104
|
model_config_dict = SGLangConfig().as_dict()
|
|
@@ -95,25 +112,42 @@ class SGLangModel(BaseModelBackend):
|
|
|
95
112
|
|
|
96
113
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
97
114
|
super().__init__(
|
|
98
|
-
model_type,
|
|
115
|
+
model_type,
|
|
116
|
+
model_config_dict,
|
|
117
|
+
api_key,
|
|
118
|
+
url,
|
|
119
|
+
token_counter,
|
|
120
|
+
timeout,
|
|
121
|
+
max_retries,
|
|
99
122
|
)
|
|
100
123
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
124
|
+
# Use custom clients if provided, otherwise create new ones
|
|
125
|
+
if client is not None:
|
|
126
|
+
self._client = client
|
|
127
|
+
elif self._url:
|
|
104
128
|
# Initialize the client if an existing URL is provided
|
|
105
129
|
self._client = OpenAI(
|
|
106
130
|
timeout=self._timeout,
|
|
107
|
-
max_retries=
|
|
131
|
+
max_retries=self._max_retries,
|
|
108
132
|
api_key="Set-but-ignored", # required but ignored
|
|
109
133
|
base_url=self._url,
|
|
134
|
+
**kwargs,
|
|
110
135
|
)
|
|
136
|
+
else:
|
|
137
|
+
self._client = None
|
|
138
|
+
|
|
139
|
+
if async_client is not None:
|
|
140
|
+
self._async_client = async_client
|
|
141
|
+
elif self._url:
|
|
111
142
|
self._async_client = AsyncOpenAI(
|
|
112
143
|
timeout=self._timeout,
|
|
113
|
-
max_retries=
|
|
144
|
+
max_retries=self._max_retries,
|
|
114
145
|
api_key="Set-but-ignored", # required but ignored
|
|
115
146
|
base_url=self._url,
|
|
147
|
+
**kwargs,
|
|
116
148
|
)
|
|
149
|
+
else:
|
|
150
|
+
self._async_client = None
|
|
117
151
|
|
|
118
152
|
def _start_server(self) -> None:
|
|
119
153
|
try:
|
|
@@ -144,13 +178,24 @@ class SGLangModel(BaseModelBackend):
|
|
|
144
178
|
)
|
|
145
179
|
self._inactivity_thread.start()
|
|
146
180
|
self.last_run_time = time.time()
|
|
147
|
-
# Initialize
|
|
148
|
-
self._client
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
181
|
+
# Initialize client after server starts if not already set
|
|
182
|
+
if self._client is None:
|
|
183
|
+
self._client = OpenAI(
|
|
184
|
+
timeout=self._timeout,
|
|
185
|
+
max_retries=self._max_retries,
|
|
186
|
+
api_key="Set-but-ignored", # required but ignored
|
|
187
|
+
base_url=self._url,
|
|
188
|
+
)
|
|
189
|
+
if (
|
|
190
|
+
not hasattr(self, '_async_client')
|
|
191
|
+
or self._async_client is None
|
|
192
|
+
):
|
|
193
|
+
self._async_client = AsyncOpenAI(
|
|
194
|
+
timeout=self._timeout,
|
|
195
|
+
max_retries=self._max_retries,
|
|
196
|
+
api_key="Set-but-ignored", # required but ignored
|
|
197
|
+
base_url=self._url,
|
|
198
|
+
)
|
|
154
199
|
except Exception as e:
|
|
155
200
|
raise RuntimeError(f"Failed to start SGLang server: {e}") from e
|
|
156
201
|
|
|
@@ -194,21 +239,6 @@ class SGLangModel(BaseModelBackend):
|
|
|
194
239
|
self._token_counter = OpenAITokenCounter(ModelType.GPT_4O_MINI)
|
|
195
240
|
return self._token_counter
|
|
196
241
|
|
|
197
|
-
def check_model_config(self):
|
|
198
|
-
r"""Check whether the model configuration contains any
|
|
199
|
-
unexpected arguments to SGLang API.
|
|
200
|
-
|
|
201
|
-
Raises:
|
|
202
|
-
ValueError: If the model configuration dictionary contains any
|
|
203
|
-
unexpected arguments to OpenAI API.
|
|
204
|
-
"""
|
|
205
|
-
for param in self.model_config_dict:
|
|
206
|
-
if param not in SGLANG_API_PARAMS:
|
|
207
|
-
raise ValueError(
|
|
208
|
-
f"Unexpected argument `{param}` is "
|
|
209
|
-
"input into SGLang model backend."
|
|
210
|
-
)
|
|
211
|
-
|
|
212
242
|
@observe(as_type='generation')
|
|
213
243
|
async def _arun(
|
|
214
244
|
self,
|
|
@@ -256,15 +286,24 @@ class SGLangModel(BaseModelBackend):
|
|
|
256
286
|
with self._lock:
|
|
257
287
|
# Update last run time
|
|
258
288
|
self.last_run_time = time.time()
|
|
289
|
+
async_client = self._async_client
|
|
259
290
|
|
|
260
|
-
if
|
|
291
|
+
if async_client is None:
|
|
261
292
|
raise RuntimeError(
|
|
262
293
|
"Client is not initialized. Ensure the server is running."
|
|
263
294
|
)
|
|
264
295
|
|
|
265
|
-
|
|
296
|
+
# Prepare additional parameters
|
|
297
|
+
extra_params: Dict[str, Any] = {}
|
|
298
|
+
if response_format is not None:
|
|
299
|
+
extra_params["response_format"] = response_format
|
|
300
|
+
if tools is not None:
|
|
301
|
+
extra_params["tools"] = tools
|
|
302
|
+
|
|
303
|
+
response = await async_client.chat.completions.create(
|
|
266
304
|
messages=messages,
|
|
267
305
|
model=self.model_type,
|
|
306
|
+
**extra_params,
|
|
268
307
|
**self.model_config_dict,
|
|
269
308
|
)
|
|
270
309
|
update_current_observation(
|
|
@@ -322,15 +361,24 @@ class SGLangModel(BaseModelBackend):
|
|
|
322
361
|
with self._lock:
|
|
323
362
|
# Update last run time
|
|
324
363
|
self.last_run_time = time.time()
|
|
364
|
+
client = self._client
|
|
325
365
|
|
|
326
|
-
if
|
|
366
|
+
if client is None:
|
|
327
367
|
raise RuntimeError(
|
|
328
368
|
"Client is not initialized. Ensure the server is running."
|
|
329
369
|
)
|
|
330
370
|
|
|
331
|
-
|
|
371
|
+
# Prepare additional parameters
|
|
372
|
+
extra_params: Dict[str, Any] = {}
|
|
373
|
+
if response_format is not None:
|
|
374
|
+
extra_params["response_format"] = response_format
|
|
375
|
+
if tools is not None:
|
|
376
|
+
extra_params["tools"] = tools
|
|
377
|
+
|
|
378
|
+
response = client.chat.completions.create(
|
|
332
379
|
messages=messages,
|
|
333
380
|
model=self.model_type,
|
|
381
|
+
**extra_params,
|
|
334
382
|
**self.model_config_dict,
|
|
335
383
|
)
|
|
336
384
|
update_current_observation(
|
|
@@ -456,10 +504,10 @@ def _wait_for_server(base_url: str, timeout: Optional[float] = 30) -> None:
|
|
|
456
504
|
print(
|
|
457
505
|
"""\n
|
|
458
506
|
NOTE: Typically, the server runs in a separate terminal.
|
|
459
|
-
In this notebook, we run the server and notebook code
|
|
507
|
+
In this notebook, we run the server and notebook code
|
|
460
508
|
together, so their outputs are combined.
|
|
461
|
-
To improve clarity, the server logs are displayed in the
|
|
462
|
-
original black color, while the notebook outputs are
|
|
509
|
+
To improve clarity, the server logs are displayed in the
|
|
510
|
+
original black color, while the notebook outputs are
|
|
463
511
|
highlighted in blue.
|
|
464
512
|
"""
|
|
465
513
|
)
|
|
@@ -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,19 +10,13 @@
|
|
|
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 os
|
|
15
|
-
from typing import Any, Dict,
|
|
15
|
+
from typing import Any, Dict, Optional, Union
|
|
16
16
|
|
|
17
|
-
from
|
|
18
|
-
from pydantic import BaseModel
|
|
19
|
-
|
|
20
|
-
from camel.configs import SILICONFLOW_API_PARAMS, SiliconFlowConfig
|
|
21
|
-
from camel.messages import OpenAIMessage
|
|
17
|
+
from camel.configs import SiliconFlowConfig
|
|
22
18
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
23
19
|
from camel.types import (
|
|
24
|
-
ChatCompletion,
|
|
25
|
-
ChatCompletionChunk,
|
|
26
20
|
ModelType,
|
|
27
21
|
)
|
|
28
22
|
from camel.utils import (
|
|
@@ -54,6 +48,10 @@ class SiliconFlowModel(OpenAICompatibleModel):
|
|
|
54
48
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
55
49
|
environment variable or default to 180 seconds.
|
|
56
50
|
(default: :obj:`None`)
|
|
51
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
52
|
+
(default: :obj:`3`)
|
|
53
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
54
|
+
initialization.
|
|
57
55
|
"""
|
|
58
56
|
|
|
59
57
|
@api_keys_required(
|
|
@@ -69,6 +67,8 @@ class SiliconFlowModel(OpenAICompatibleModel):
|
|
|
69
67
|
url: Optional[str] = None,
|
|
70
68
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
71
69
|
timeout: Optional[float] = None,
|
|
70
|
+
max_retries: int = 3,
|
|
71
|
+
**kwargs: Any,
|
|
72
72
|
) -> None:
|
|
73
73
|
if model_config_dict is None:
|
|
74
74
|
model_config_dict = SiliconFlowConfig().as_dict()
|
|
@@ -85,29 +85,6 @@ class SiliconFlowModel(OpenAICompatibleModel):
|
|
|
85
85
|
url=url,
|
|
86
86
|
token_counter=token_counter,
|
|
87
87
|
timeout=timeout,
|
|
88
|
+
max_retries=max_retries,
|
|
89
|
+
**kwargs,
|
|
88
90
|
)
|
|
89
|
-
|
|
90
|
-
async def _arun(
|
|
91
|
-
self,
|
|
92
|
-
messages: List[OpenAIMessage],
|
|
93
|
-
response_format: Optional[Type[BaseModel]] = None,
|
|
94
|
-
tools: Optional[List[Dict[str, Any]]] = None,
|
|
95
|
-
) -> Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
|
|
96
|
-
raise NotImplementedError(
|
|
97
|
-
"SiliconFlow does not support async inference."
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
def check_model_config(self):
|
|
101
|
-
r"""Check whether the model configuration contains any
|
|
102
|
-
unexpected arguments to SiliconFlow API.
|
|
103
|
-
|
|
104
|
-
Raises:
|
|
105
|
-
ValueError: If the model configuration dictionary contains any
|
|
106
|
-
unexpected arguments to SiliconFlow API.
|
|
107
|
-
"""
|
|
108
|
-
for param in self.model_config_dict:
|
|
109
|
-
if param not in SILICONFLOW_API_PARAMS:
|
|
110
|
-
raise ValueError(
|
|
111
|
-
f"Unexpected argument `{param}` is "
|
|
112
|
-
"input into SiliconFlow model backend."
|
|
113
|
-
)
|
camel/models/stub_model.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 time
|
|
15
15
|
from typing import Any, Dict, List, Optional, Type, Union
|
|
16
16
|
|
|
@@ -83,10 +83,17 @@ class StubModel(BaseModelBackend):
|
|
|
83
83
|
url: Optional[str] = None,
|
|
84
84
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
85
85
|
timeout: Optional[float] = None,
|
|
86
|
+
max_retries: int = 3,
|
|
86
87
|
) -> None:
|
|
87
88
|
r"""All arguments are unused for the dummy model."""
|
|
88
89
|
super().__init__(
|
|
89
|
-
model_type,
|
|
90
|
+
model_type,
|
|
91
|
+
model_config_dict,
|
|
92
|
+
api_key,
|
|
93
|
+
url,
|
|
94
|
+
token_counter,
|
|
95
|
+
timeout,
|
|
96
|
+
max_retries,
|
|
90
97
|
)
|
|
91
98
|
|
|
92
99
|
@property
|
|
@@ -175,7 +182,3 @@ class StubModel(BaseModelBackend):
|
|
|
175
182
|
),
|
|
176
183
|
)
|
|
177
184
|
return response
|
|
178
|
-
|
|
179
|
-
def check_model_config(self):
|
|
180
|
-
r"""Directly pass the check on arguments to STUB model."""
|
|
181
|
-
pass
|
camel/models/togetherai_model.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,12 +10,12 @@
|
|
|
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 os
|
|
16
16
|
from typing import Any, Dict, Optional, Union
|
|
17
17
|
|
|
18
|
-
from camel.configs import
|
|
18
|
+
from camel.configs import TogetherAIConfig
|
|
19
19
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
20
20
|
from camel.types import ModelType
|
|
21
21
|
from camel.utils import (
|
|
@@ -47,6 +47,10 @@ class TogetherAIModel(OpenAICompatibleModel):
|
|
|
47
47
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
48
48
|
environment variable or default to 180 seconds.
|
|
49
49
|
(default: :obj:`None`)
|
|
50
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
51
|
+
(default: :obj:`3`)
|
|
52
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
53
|
+
initialization.
|
|
50
54
|
"""
|
|
51
55
|
|
|
52
56
|
@api_keys_required(
|
|
@@ -62,6 +66,8 @@ class TogetherAIModel(OpenAICompatibleModel):
|
|
|
62
66
|
url: Optional[str] = None,
|
|
63
67
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
64
68
|
timeout: Optional[float] = None,
|
|
69
|
+
max_retries: int = 3,
|
|
70
|
+
**kwargs: Any,
|
|
65
71
|
) -> None:
|
|
66
72
|
if model_config_dict is None:
|
|
67
73
|
model_config_dict = TogetherAIConfig().as_dict()
|
|
@@ -77,19 +83,6 @@ class TogetherAIModel(OpenAICompatibleModel):
|
|
|
77
83
|
url=url,
|
|
78
84
|
token_counter=token_counter,
|
|
79
85
|
timeout=timeout,
|
|
86
|
+
max_retries=max_retries,
|
|
87
|
+
**kwargs,
|
|
80
88
|
)
|
|
81
|
-
|
|
82
|
-
def check_model_config(self):
|
|
83
|
-
r"""Check whether the model configuration contains any
|
|
84
|
-
unexpected arguments to TogetherAI API.
|
|
85
|
-
|
|
86
|
-
Raises:
|
|
87
|
-
ValueError: If the model configuration dictionary contains any
|
|
88
|
-
unexpected arguments to TogetherAI API.
|
|
89
|
-
"""
|
|
90
|
-
for param in self.model_config_dict:
|
|
91
|
-
if param not in TOGETHERAI_API_PARAMS:
|
|
92
|
-
raise ValueError(
|
|
93
|
-
f"Unexpected argument `{param}` is "
|
|
94
|
-
"input into TogetherAI model backend."
|
|
95
|
-
)
|
camel/models/vllm_model.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,12 +10,12 @@
|
|
|
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 os
|
|
15
15
|
import subprocess
|
|
16
16
|
from typing import Any, Dict, Optional, Union
|
|
17
17
|
|
|
18
|
-
from camel.configs import
|
|
18
|
+
from camel.configs import VLLMConfig
|
|
19
19
|
from camel.logger import get_logger
|
|
20
20
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
21
21
|
from camel.types import ModelType
|
|
@@ -49,6 +49,9 @@ class VLLMModel(OpenAICompatibleModel):
|
|
|
49
49
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
50
50
|
environment variable or default to 180 seconds.
|
|
51
51
|
(default: :obj:`None`)
|
|
52
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
53
|
+
(default: :obj:`3`)
|
|
54
|
+
**kwargs (Any): Additional arguments to pass to the client initialization.
|
|
52
55
|
|
|
53
56
|
References:
|
|
54
57
|
https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html
|
|
@@ -62,6 +65,8 @@ class VLLMModel(OpenAICompatibleModel):
|
|
|
62
65
|
url: Optional[str] = None,
|
|
63
66
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
64
67
|
timeout: Optional[float] = None,
|
|
68
|
+
max_retries: int = 3,
|
|
69
|
+
**kwargs: Any,
|
|
65
70
|
) -> None:
|
|
66
71
|
if model_config_dict is None:
|
|
67
72
|
model_config_dict = VLLMConfig().as_dict()
|
|
@@ -79,6 +84,8 @@ class VLLMModel(OpenAICompatibleModel):
|
|
|
79
84
|
url=self._url,
|
|
80
85
|
token_counter=token_counter,
|
|
81
86
|
timeout=timeout,
|
|
87
|
+
max_retries=max_retries,
|
|
88
|
+
**kwargs,
|
|
82
89
|
)
|
|
83
90
|
|
|
84
91
|
def _start_server(self) -> None:
|
|
@@ -96,18 +103,3 @@ class VLLMModel(OpenAICompatibleModel):
|
|
|
96
103
|
)
|
|
97
104
|
except Exception as e:
|
|
98
105
|
logger.error(f"Failed to start vllm server: {e}.")
|
|
99
|
-
|
|
100
|
-
def check_model_config(self):
|
|
101
|
-
r"""Check whether the model configuration contains any
|
|
102
|
-
unexpected arguments to vLLM API.
|
|
103
|
-
|
|
104
|
-
Raises:
|
|
105
|
-
ValueError: If the model configuration dictionary contains any
|
|
106
|
-
unexpected arguments to OpenAI API.
|
|
107
|
-
"""
|
|
108
|
-
for param in self.model_config_dict:
|
|
109
|
-
if param not in VLLM_API_PARAMS:
|
|
110
|
-
raise ValueError(
|
|
111
|
-
f"Unexpected argument `{param}` is "
|
|
112
|
-
"input into vLLM model backend."
|
|
113
|
-
)
|
camel/models/volcano_model.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,12 +10,11 @@
|
|
|
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 os
|
|
16
16
|
from typing import Any, Dict, Optional, Union
|
|
17
17
|
|
|
18
|
-
from camel.configs import OPENAI_API_PARAMS
|
|
19
18
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
20
19
|
from camel.types import ModelType
|
|
21
20
|
from camel.utils import (
|
|
@@ -44,6 +43,10 @@ class VolcanoModel(OpenAICompatibleModel):
|
|
|
44
43
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
45
44
|
environment variable or default to 180 seconds.
|
|
46
45
|
(default: :obj:`None`)
|
|
46
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
47
|
+
(default: :obj:`3`)
|
|
48
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
49
|
+
initialization.
|
|
47
50
|
"""
|
|
48
51
|
|
|
49
52
|
@api_keys_required(
|
|
@@ -59,6 +62,8 @@ class VolcanoModel(OpenAICompatibleModel):
|
|
|
59
62
|
url: Optional[str] = None,
|
|
60
63
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
61
64
|
timeout: Optional[float] = None,
|
|
65
|
+
max_retries: int = 3,
|
|
66
|
+
**kwargs: Any,
|
|
62
67
|
) -> None:
|
|
63
68
|
if model_config_dict is None:
|
|
64
69
|
model_config_dict = {}
|
|
@@ -71,21 +76,12 @@ class VolcanoModel(OpenAICompatibleModel):
|
|
|
71
76
|
)
|
|
72
77
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
73
78
|
super().__init__(
|
|
74
|
-
model_type,
|
|
79
|
+
model_type,
|
|
80
|
+
model_config_dict,
|
|
81
|
+
api_key,
|
|
82
|
+
url,
|
|
83
|
+
token_counter,
|
|
84
|
+
timeout,
|
|
85
|
+
max_retries,
|
|
86
|
+
**kwargs,
|
|
75
87
|
)
|
|
76
|
-
|
|
77
|
-
def check_model_config(self):
|
|
78
|
-
r"""Check whether the model configuration is valid for Volcano
|
|
79
|
-
model backends.
|
|
80
|
-
|
|
81
|
-
Raises:
|
|
82
|
-
ValueError: If the model configuration dictionary contains any
|
|
83
|
-
unexpected arguments to Volcano API.
|
|
84
|
-
"""
|
|
85
|
-
# Using OpenAI API params as Volcano Engine API is OpenAI-compatible
|
|
86
|
-
for param in self.model_config_dict:
|
|
87
|
-
if param not in OPENAI_API_PARAMS:
|
|
88
|
-
raise ValueError(
|
|
89
|
-
f"Unexpected argument `{param}` is "
|
|
90
|
-
"input into Volcano model backend."
|
|
91
|
-
)
|
camel/models/watsonx_model.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,13 +10,13 @@
|
|
|
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 os
|
|
15
15
|
from typing import Any, Dict, List, Optional, Type, Union
|
|
16
16
|
|
|
17
17
|
from pydantic import BaseModel
|
|
18
18
|
|
|
19
|
-
from camel.configs import
|
|
19
|
+
from camel.configs import WatsonXConfig
|
|
20
20
|
from camel.logger import get_logger
|
|
21
21
|
from camel.messages import OpenAIMessage
|
|
22
22
|
from camel.models import BaseModelBackend
|
|
@@ -66,6 +66,8 @@ class WatsonXModel(BaseModelBackend):
|
|
|
66
66
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
67
67
|
environment variable or default to 180 seconds.
|
|
68
68
|
(default: :obj:`None`)
|
|
69
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
70
|
+
initialization.
|
|
69
71
|
"""
|
|
70
72
|
|
|
71
73
|
@api_keys_required(
|
|
@@ -83,6 +85,7 @@ class WatsonXModel(BaseModelBackend):
|
|
|
83
85
|
project_id: Optional[str] = None,
|
|
84
86
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
85
87
|
timeout: Optional[float] = None,
|
|
88
|
+
**kwargs: Any,
|
|
86
89
|
):
|
|
87
90
|
from ibm_watsonx_ai import APIClient, Credentials
|
|
88
91
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
|
@@ -103,7 +106,7 @@ class WatsonXModel(BaseModelBackend):
|
|
|
103
106
|
|
|
104
107
|
self._project_id = project_id
|
|
105
108
|
credentials = Credentials(api_key=self._api_key, url=self._url)
|
|
106
|
-
client = APIClient(credentials, project_id=self._project_id)
|
|
109
|
+
client = APIClient(credentials, project_id=self._project_id, **kwargs)
|
|
107
110
|
|
|
108
111
|
self._model = ModelInference(
|
|
109
112
|
model_id=self.model_type,
|
|
@@ -289,21 +292,6 @@ class WatsonXModel(BaseModelBackend):
|
|
|
289
292
|
logger.error(f"Unexpected error when calling WatsonX API: {e!s}")
|
|
290
293
|
raise
|
|
291
294
|
|
|
292
|
-
def check_model_config(self):
|
|
293
|
-
r"""Check whether the model configuration contains any unexpected
|
|
294
|
-
arguments to WatsonX API.
|
|
295
|
-
|
|
296
|
-
Raises:
|
|
297
|
-
ValueError: If the model configuration dictionary contains any
|
|
298
|
-
unexpected arguments to WatsonX API.
|
|
299
|
-
"""
|
|
300
|
-
for param in self.model_config_dict:
|
|
301
|
-
if param not in WATSONX_API_PARAMS:
|
|
302
|
-
raise ValueError(
|
|
303
|
-
f"Unexpected argument `{param}` is "
|
|
304
|
-
"input into WatsonX model backend."
|
|
305
|
-
)
|
|
306
|
-
|
|
307
295
|
@property
|
|
308
296
|
def stream(self) -> bool:
|
|
309
297
|
r"""Returns whether the model is in stream mode, which sends partial
|
camel/models/yi_model.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,12 +10,12 @@
|
|
|
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 os
|
|
16
16
|
from typing import Any, Dict, Optional, Union
|
|
17
17
|
|
|
18
|
-
from camel.configs import
|
|
18
|
+
from camel.configs import YiConfig
|
|
19
19
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
20
20
|
from camel.types import ModelType
|
|
21
21
|
from camel.utils import (
|
|
@@ -46,6 +46,10 @@ class YiModel(OpenAICompatibleModel):
|
|
|
46
46
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
47
47
|
environment variable or default to 180 seconds.
|
|
48
48
|
(default: :obj:`None`)
|
|
49
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
50
|
+
(default: :obj:`3`)
|
|
51
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
52
|
+
initialization.
|
|
49
53
|
"""
|
|
50
54
|
|
|
51
55
|
@api_keys_required(
|
|
@@ -61,6 +65,8 @@ class YiModel(OpenAICompatibleModel):
|
|
|
61
65
|
url: Optional[str] = None,
|
|
62
66
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
63
67
|
timeout: Optional[float] = None,
|
|
68
|
+
max_retries: int = 3,
|
|
69
|
+
**kwargs: Any,
|
|
64
70
|
) -> None:
|
|
65
71
|
if model_config_dict is None:
|
|
66
72
|
model_config_dict = YiConfig().as_dict()
|
|
@@ -76,19 +82,6 @@ class YiModel(OpenAICompatibleModel):
|
|
|
76
82
|
url=url,
|
|
77
83
|
token_counter=token_counter,
|
|
78
84
|
timeout=timeout,
|
|
85
|
+
max_retries=max_retries,
|
|
86
|
+
**kwargs,
|
|
79
87
|
)
|
|
80
|
-
|
|
81
|
-
def check_model_config(self):
|
|
82
|
-
r"""Check whether the model configuration contains any
|
|
83
|
-
unexpected arguments to Yi API.
|
|
84
|
-
|
|
85
|
-
Raises:
|
|
86
|
-
ValueError: If the model configuration dictionary contains any
|
|
87
|
-
unexpected arguments to Yi API.
|
|
88
|
-
"""
|
|
89
|
-
for param in self.model_config_dict:
|
|
90
|
-
if param not in YI_API_PARAMS:
|
|
91
|
-
raise ValueError(
|
|
92
|
-
f"Unexpected argument `{param}` is "
|
|
93
|
-
"input into Yi model backend."
|
|
94
|
-
)
|