camel-ai 0.2.59__py3-none-any.whl → 0.2.82__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of camel-ai might be problematic. Click here for more details.
- camel/__init__.py +3 -3
- camel/agents/__init__.py +2 -2
- camel/agents/_types.py +9 -4
- camel/agents/_utils.py +40 -2
- camel/agents/base.py +2 -2
- camel/agents/chat_agent.py +5012 -902
- camel/agents/critic_agent.py +2 -2
- camel/agents/deductive_reasoner_agent.py +56 -56
- camel/agents/embodied_agent.py +2 -2
- camel/agents/knowledge_graph_agent.py +20 -20
- camel/agents/mcp_agent.py +39 -36
- camel/agents/multi_hop_generator_agent.py +3 -3
- camel/agents/programmed_agent_instruction.py +2 -2
- camel/agents/repo_agent.py +4 -3
- camel/agents/role_assignment_agent.py +2 -2
- camel/agents/search_agent.py +2 -2
- camel/agents/task_agent.py +2 -2
- camel/agents/tool_agents/__init__.py +2 -2
- camel/agents/tool_agents/base.py +2 -2
- camel/agents/tool_agents/hugging_face_tool_agent.py +3 -3
- camel/benchmarks/__init__.py +2 -2
- camel/benchmarks/apibank.py +5 -5
- camel/benchmarks/apibench.py +2 -2
- camel/benchmarks/base.py +2 -2
- camel/benchmarks/browsecomp.py +44 -33
- camel/benchmarks/gaia.py +17 -13
- camel/benchmarks/mock_website/README.md +94 -0
- camel/benchmarks/mock_website/mock_web.py +299 -0
- camel/benchmarks/mock_website/requirements.txt +3 -0
- camel/benchmarks/mock_website/shopping_mall/app.py +465 -0
- camel/benchmarks/mock_website/task.json +104 -0
- camel/benchmarks/nexus.py +3 -3
- camel/benchmarks/ragbench.py +2 -2
- camel/bots/__init__.py +2 -2
- camel/bots/discord/__init__.py +2 -2
- camel/bots/discord/discord_app.py +2 -2
- camel/bots/discord/discord_installation.py +2 -2
- camel/bots/discord/discord_store.py +3 -3
- camel/bots/slack/__init__.py +2 -2
- camel/bots/slack/models.py +4 -4
- camel/bots/slack/slack_app.py +2 -2
- camel/bots/telegram_bot.py +2 -2
- camel/configs/__init__.py +26 -2
- camel/configs/aihubmix_config.py +90 -0
- camel/configs/aiml_config.py +2 -2
- camel/configs/amd_config.py +70 -0
- camel/configs/anthropic_config.py +8 -7
- camel/configs/base_config.py +2 -2
- camel/configs/bedrock_config.py +5 -3
- camel/configs/cerebras_config.py +98 -0
- camel/configs/cohere_config.py +3 -3
- camel/configs/cometapi_config.py +106 -0
- camel/configs/crynux_config.py +94 -0
- camel/configs/deepseek_config.py +9 -8
- camel/configs/gemini_config.py +6 -4
- camel/configs/groq_config.py +6 -4
- camel/configs/internlm_config.py +6 -4
- camel/configs/litellm_config.py +2 -2
- camel/configs/lmstudio_config.py +6 -4
- camel/configs/minimax_config.py +95 -0
- camel/configs/mistral_config.py +3 -3
- camel/configs/modelscope_config.py +5 -3
- camel/configs/moonshot_config.py +2 -2
- camel/configs/nebius_config.py +105 -0
- camel/configs/netmind_config.py +2 -2
- camel/configs/novita_config.py +2 -2
- camel/configs/nvidia_config.py +2 -2
- camel/configs/ollama_config.py +2 -2
- camel/configs/openai_config.py +8 -3
- camel/configs/openrouter_config.py +6 -4
- camel/configs/ppio_config.py +2 -2
- camel/configs/qianfan_config.py +85 -0
- camel/configs/qwen_config.py +2 -2
- camel/configs/reka_config.py +3 -3
- camel/configs/samba_config.py +8 -6
- camel/configs/sglang_config.py +2 -2
- camel/configs/siliconflow_config.py +2 -2
- camel/configs/togetherai_config.py +2 -2
- camel/configs/vllm_config.py +4 -2
- camel/configs/watsonx_config.py +2 -2
- camel/configs/yi_config.py +6 -4
- camel/configs/zhipuai_config.py +6 -4
- camel/{data_collector → data_collectors}/__init__.py +2 -2
- camel/{data_collector → data_collectors}/alpaca_collector.py +19 -10
- camel/{data_collector → data_collectors}/base.py +2 -2
- camel/{data_collector → data_collectors}/sharegpt_collector.py +3 -3
- camel/datagen/__init__.py +2 -2
- camel/datagen/cot_datagen.py +32 -37
- camel/datagen/evol_instruct/__init__.py +2 -2
- camel/datagen/evol_instruct/evol_instruct.py +2 -2
- camel/datagen/evol_instruct/scorer.py +24 -25
- camel/datagen/evol_instruct/templates.py +48 -48
- camel/datagen/self_improving_cot.py +5 -5
- camel/datagen/self_instruct/__init__.py +2 -2
- camel/datagen/self_instruct/filter/__init__.py +2 -2
- camel/datagen/self_instruct/filter/filter_function.py +2 -2
- camel/datagen/self_instruct/filter/filter_registry.py +2 -2
- camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
- camel/datagen/self_instruct/self_instruct.py +2 -2
- camel/datagen/self_instruct/templates.py +47 -47
- camel/datagen/source2synth/__init__.py +2 -2
- camel/datagen/source2synth/data_processor.py +2 -2
- camel/datagen/source2synth/models.py +2 -2
- camel/datagen/source2synth/user_data_processor_config.py +2 -2
- camel/datahubs/__init__.py +2 -2
- camel/datahubs/base.py +2 -2
- camel/datahubs/huggingface.py +2 -2
- camel/datahubs/models.py +2 -2
- camel/datasets/__init__.py +2 -2
- camel/datasets/base_generator.py +41 -12
- camel/datasets/few_shot_generator.py +18 -18
- camel/datasets/models.py +3 -3
- camel/datasets/self_instruct_generator.py +2 -2
- camel/datasets/static_dataset.py +152 -2
- camel/embeddings/__init__.py +2 -2
- camel/embeddings/azure_embedding.py +2 -2
- camel/embeddings/base.py +2 -2
- camel/embeddings/gemini_embedding.py +2 -2
- camel/embeddings/jina_embedding.py +10 -3
- camel/embeddings/mistral_embedding.py +2 -2
- camel/embeddings/openai_compatible_embedding.py +2 -2
- camel/embeddings/openai_embedding.py +2 -2
- camel/embeddings/sentence_transformers_embeddings.py +4 -4
- camel/embeddings/together_embedding.py +2 -2
- camel/embeddings/vlm_embedding.py +11 -4
- camel/environments/__init__.py +14 -2
- camel/environments/models.py +2 -2
- camel/environments/multi_step.py +2 -2
- camel/environments/rlcards_env.py +860 -0
- camel/environments/single_step.py +30 -5
- camel/environments/tic_tac_toe.py +3 -3
- camel/extractors/__init__.py +2 -2
- camel/extractors/base.py +2 -2
- camel/extractors/python_strategies.py +2 -2
- camel/generators.py +2 -2
- camel/human.py +2 -2
- camel/interpreters/__init__.py +4 -2
- camel/interpreters/base.py +16 -3
- camel/interpreters/docker/Dockerfile +53 -7
- camel/interpreters/docker_interpreter.py +70 -11
- camel/interpreters/e2b_interpreter.py +59 -11
- camel/interpreters/internal_python_interpreter.py +81 -4
- camel/interpreters/interpreter_error.py +2 -2
- camel/interpreters/ipython_interpreter.py +23 -5
- camel/interpreters/microsandbox_interpreter.py +395 -0
- camel/interpreters/subprocess_interpreter.py +36 -4
- camel/loaders/__init__.py +17 -5
- camel/loaders/apify_reader.py +2 -2
- camel/loaders/base_io.py +2 -2
- camel/loaders/base_loader.py +85 -0
- camel/loaders/chunkr_reader.py +128 -93
- camel/loaders/crawl4ai_reader.py +2 -2
- camel/loaders/firecrawl_reader.py +6 -6
- camel/loaders/jina_url_reader.py +2 -2
- camel/loaders/markitdown.py +2 -2
- camel/loaders/mineru_extractor.py +2 -2
- camel/loaders/mistral_reader.py +148 -0
- camel/loaders/scrapegraph_reader.py +2 -2
- camel/loaders/unstructured_io.py +2 -2
- camel/logger.py +5 -5
- camel/memories/__init__.py +2 -2
- camel/memories/agent_memories.py +86 -3
- camel/memories/base.py +36 -2
- camel/memories/blocks/__init__.py +2 -2
- camel/memories/blocks/chat_history_block.py +126 -9
- camel/memories/blocks/vectordb_block.py +10 -3
- camel/memories/context_creators/__init__.py +2 -2
- camel/memories/context_creators/score_based.py +31 -239
- camel/memories/records.py +98 -13
- camel/messages/__init__.py +2 -2
- camel/messages/base.py +193 -46
- camel/messages/conversion/__init__.py +2 -2
- camel/messages/conversion/alpaca.py +2 -2
- camel/messages/conversion/conversation_models.py +2 -2
- camel/messages/conversion/sharegpt/__init__.py +2 -2
- camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
- camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
- camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
- camel/messages/func_message.py +54 -17
- camel/models/__init__.py +18 -2
- camel/models/_utils.py +3 -3
- camel/models/aihubmix_model.py +83 -0
- camel/models/aiml_model.py +11 -18
- camel/models/amd_model.py +101 -0
- camel/models/anthropic_model.py +127 -20
- camel/models/aws_bedrock_model.py +12 -35
- camel/models/azure_openai_model.py +263 -63
- camel/models/base_audio_model.py +5 -3
- camel/models/base_model.py +195 -26
- camel/models/cerebras_model.py +83 -0
- camel/models/cohere_model.py +81 -21
- camel/models/cometapi_model.py +83 -0
- camel/models/crynux_model.py +87 -0
- camel/models/deepseek_model.py +61 -59
- camel/models/fish_audio_model.py +8 -2
- camel/models/gemini_model.py +439 -30
- camel/models/groq_model.py +11 -19
- camel/models/internlm_model.py +11 -18
- camel/models/litellm_model.py +94 -34
- camel/models/lmstudio_model.py +17 -20
- camel/models/minimax_model.py +83 -0
- camel/models/mistral_model.py +84 -19
- camel/models/model_factory.py +49 -6
- camel/models/model_manager.py +33 -11
- camel/models/modelscope_model.py +13 -193
- camel/models/moonshot_model.py +195 -21
- camel/models/nebius_model.py +83 -0
- camel/models/nemotron_model.py +19 -9
- camel/models/netmind_model.py +11 -18
- camel/models/novita_model.py +11 -18
- camel/models/nvidia_model.py +11 -18
- camel/models/ollama_model.py +14 -21
- camel/models/openai_audio_models.py +2 -2
- camel/models/openai_compatible_model.py +234 -27
- camel/models/openai_model.py +255 -39
- camel/models/openrouter_model.py +11 -19
- camel/models/ppio_model.py +11 -18
- camel/models/qianfan_model.py +89 -0
- camel/models/qwen_model.py +13 -193
- camel/models/reka_model.py +90 -21
- camel/models/reward/__init__.py +2 -2
- camel/models/reward/base_reward_model.py +2 -2
- camel/models/reward/evaluator.py +2 -2
- camel/models/reward/nemotron_model.py +2 -2
- camel/models/reward/skywork_model.py +2 -2
- camel/models/samba_model.py +117 -49
- camel/models/sglang_model.py +162 -42
- camel/models/siliconflow_model.py +12 -35
- camel/models/stub_model.py +10 -7
- camel/models/togetherai_model.py +11 -18
- camel/models/vllm_model.py +10 -18
- camel/models/volcano_model.py +16 -20
- camel/models/watsonx_model.py +69 -19
- camel/models/yi_model.py +11 -18
- camel/models/zhipuai_model.py +70 -18
- camel/parsers/__init__.py +18 -0
- camel/parsers/mcp_tool_call_parser.py +176 -0
- camel/personas/__init__.py +2 -2
- camel/personas/persona.py +2 -2
- camel/personas/persona_hub.py +2 -2
- camel/prompts/__init__.py +2 -2
- camel/prompts/ai_society.py +2 -2
- camel/prompts/base.py +2 -2
- camel/prompts/code.py +2 -2
- camel/prompts/evaluation.py +2 -2
- camel/prompts/generate_text_embedding_data.py +2 -2
- camel/prompts/image_craft.py +2 -2
- camel/prompts/misalignment.py +2 -2
- camel/prompts/multi_condition_image_craft.py +2 -2
- camel/prompts/object_recognition.py +2 -2
- camel/prompts/persona_hub.py +3 -3
- camel/prompts/prompt_templates.py +2 -2
- camel/prompts/role_description_prompt_template.py +2 -2
- camel/prompts/solution_extraction.py +8 -8
- camel/prompts/task_prompt_template.py +2 -2
- camel/prompts/translation.py +2 -2
- camel/prompts/video_description_prompt.py +3 -3
- camel/responses/__init__.py +2 -2
- camel/responses/agent_responses.py +2 -2
- camel/retrievers/__init__.py +2 -2
- camel/retrievers/auto_retriever.py +23 -3
- camel/retrievers/base.py +2 -2
- camel/retrievers/bm25_retriever.py +3 -4
- camel/retrievers/cohere_rerank_retriever.py +2 -2
- camel/retrievers/hybrid_retrival.py +4 -4
- camel/retrievers/vector_retriever.py +2 -2
- camel/runtimes/Dockerfile.multi-toolkit +90 -0
- camel/{runtime → runtimes}/__init__.py +2 -2
- camel/runtimes/api.py +153 -0
- camel/{runtime → runtimes}/base.py +2 -2
- camel/{runtime → runtimes}/configs.py +13 -13
- camel/{runtime → runtimes}/daytona_runtime.py +18 -19
- camel/{runtime → runtimes}/docker_runtime.py +13 -13
- camel/{runtime → runtimes}/llm_guard_runtime.py +28 -28
- camel/{runtime → runtimes}/remote_http_runtime.py +12 -12
- camel/{runtime → runtimes}/ubuntu_docker_runtime.py +3 -3
- camel/{runtime → runtimes}/utils/__init__.py +2 -2
- camel/{runtime → runtimes}/utils/function_risk_toolkit.py +2 -2
- camel/{runtime → runtimes}/utils/ignore_risk_toolkit.py +2 -2
- camel/schemas/__init__.py +2 -2
- camel/schemas/base.py +2 -2
- camel/schemas/openai_converter.py +3 -3
- camel/schemas/outlines_converter.py +2 -2
- camel/services/agent_openapi_server.py +380 -0
- camel/societies/__init__.py +4 -2
- camel/societies/babyagi_playing.py +2 -2
- camel/societies/role_playing.py +201 -80
- camel/societies/workforce/__init__.py +10 -3
- camel/societies/workforce/base.py +9 -5
- camel/societies/workforce/events.py +143 -0
- camel/societies/workforce/prompts.py +258 -33
- camel/societies/workforce/role_playing_worker.py +95 -30
- camel/societies/workforce/single_agent_worker.py +659 -30
- camel/societies/workforce/structured_output_handler.py +512 -0
- camel/societies/workforce/task_channel.py +182 -38
- camel/societies/workforce/utils.py +784 -18
- camel/societies/workforce/worker.py +96 -28
- camel/societies/workforce/workflow_memory_manager.py +1746 -0
- camel/societies/workforce/workforce.py +5730 -366
- camel/societies/workforce/workforce_callback.py +103 -0
- camel/societies/workforce/workforce_logger.py +647 -0
- camel/societies/workforce/workforce_metrics.py +33 -0
- camel/storages/__init__.py +10 -2
- camel/storages/graph_storages/__init__.py +2 -2
- camel/storages/graph_storages/base.py +2 -2
- camel/storages/graph_storages/graph_element.py +2 -2
- camel/storages/graph_storages/nebula_graph.py +4 -4
- camel/storages/graph_storages/neo4j_graph.py +7 -7
- camel/storages/key_value_storages/__init__.py +2 -2
- camel/storages/key_value_storages/base.py +2 -2
- camel/storages/key_value_storages/in_memory.py +2 -2
- camel/storages/key_value_storages/json.py +17 -4
- camel/storages/key_value_storages/mem0_cloud.py +50 -49
- camel/storages/key_value_storages/redis.py +2 -2
- camel/storages/object_storages/__init__.py +2 -2
- camel/storages/object_storages/amazon_s3.py +2 -2
- camel/storages/object_storages/azure_blob.py +2 -2
- camel/storages/object_storages/base.py +2 -2
- camel/storages/object_storages/google_cloud.py +3 -3
- camel/storages/vectordb_storages/__init__.py +12 -2
- camel/storages/vectordb_storages/base.py +2 -2
- camel/storages/vectordb_storages/chroma.py +731 -0
- camel/storages/vectordb_storages/faiss.py +712 -0
- camel/storages/vectordb_storages/milvus.py +2 -2
- camel/storages/vectordb_storages/oceanbase.py +16 -17
- camel/storages/vectordb_storages/pgvector.py +349 -0
- camel/storages/vectordb_storages/qdrant.py +6 -6
- camel/storages/vectordb_storages/surreal.py +372 -0
- camel/storages/vectordb_storages/tidb.py +11 -8
- camel/storages/vectordb_storages/weaviate.py +714 -0
- camel/tasks/__init__.py +2 -2
- camel/tasks/task.py +366 -27
- camel/tasks/task_prompt.py +3 -3
- camel/terminators/__init__.py +2 -2
- camel/terminators/base.py +2 -2
- camel/terminators/response_terminator.py +2 -2
- camel/terminators/token_limit_terminator.py +2 -2
- camel/toolkits/__init__.py +58 -10
- camel/toolkits/aci_toolkit.py +66 -21
- camel/toolkits/arxiv_toolkit.py +8 -8
- camel/toolkits/ask_news_toolkit.py +2 -2
- camel/toolkits/async_browser_toolkit.py +174 -575
- camel/toolkits/audio_analysis_toolkit.py +3 -3
- camel/toolkits/base.py +65 -7
- camel/toolkits/bohrium_toolkit.py +318 -0
- camel/toolkits/browser_toolkit.py +306 -566
- camel/toolkits/browser_toolkit_commons.py +568 -0
- camel/toolkits/code_execution.py +67 -11
- camel/toolkits/context_summarizer_toolkit.py +684 -0
- camel/toolkits/craw4ai_toolkit.py +93 -0
- camel/toolkits/dappier_toolkit.py +12 -8
- camel/toolkits/data_commons_toolkit.py +2 -2
- camel/toolkits/dingtalk.py +1135 -0
- camel/toolkits/earth_science_toolkit.py +5367 -0
- camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
- camel/toolkits/excel_toolkit.py +910 -70
- camel/toolkits/file_toolkit.py +1402 -0
- camel/toolkits/function_tool.py +128 -20
- camel/toolkits/github_toolkit.py +148 -43
- camel/toolkits/gmail_toolkit.py +1839 -0
- camel/toolkits/google_calendar_toolkit.py +40 -6
- camel/toolkits/google_drive_mcp_toolkit.py +54 -0
- camel/toolkits/google_maps_toolkit.py +2 -2
- camel/toolkits/google_scholar_toolkit.py +2 -2
- camel/toolkits/human_toolkit.py +36 -12
- camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
- camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1973 -0
- camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1929 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
- camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
- camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +319 -0
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
- camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
- camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
- camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
- camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
- camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
- camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
- camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
- camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
- camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
- camel/toolkits/image_analysis_toolkit.py +3 -3
- camel/toolkits/image_generation_toolkit.py +390 -0
- camel/toolkits/jina_reranker_toolkit.py +195 -79
- camel/toolkits/klavis_toolkit.py +7 -3
- camel/toolkits/linkedin_toolkit.py +2 -2
- camel/toolkits/markitdown_toolkit.py +104 -0
- camel/toolkits/math_toolkit.py +66 -12
- camel/toolkits/mcp_toolkit.py +841 -600
- camel/toolkits/memory_toolkit.py +7 -3
- camel/toolkits/meshy_toolkit.py +2 -2
- camel/toolkits/message_agent_toolkit.py +608 -0
- camel/toolkits/message_integration.py +724 -0
- camel/toolkits/mineru_toolkit.py +2 -2
- camel/toolkits/minimax_mcp_toolkit.py +195 -0
- camel/toolkits/networkx_toolkit.py +2 -2
- camel/toolkits/note_taking_toolkit.py +277 -0
- camel/toolkits/notion_mcp_toolkit.py +224 -0
- camel/toolkits/notion_toolkit.py +2 -2
- camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
- camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
- camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
- camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
- camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
- camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
- camel/toolkits/open_api_specs/security_config.py +2 -2
- camel/toolkits/open_api_specs/speak/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
- camel/toolkits/open_api_toolkit.py +2 -2
- camel/toolkits/openbb_toolkit.py +7 -3
- camel/toolkits/origene_mcp_toolkit.py +56 -0
- camel/toolkits/page_script.js +86 -74
- camel/toolkits/playwright_mcp_toolkit.py +27 -32
- camel/toolkits/pptx_toolkit.py +790 -0
- camel/toolkits/pubmed_toolkit.py +2 -2
- camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
- camel/toolkits/pyautogui_toolkit.py +2 -2
- camel/toolkits/reddit_toolkit.py +2 -2
- camel/toolkits/resend_toolkit.py +168 -0
- camel/toolkits/retrieval_toolkit.py +2 -2
- camel/toolkits/screenshot_toolkit.py +213 -0
- camel/toolkits/search_toolkit.py +539 -146
- camel/toolkits/searxng_toolkit.py +2 -2
- camel/toolkits/semantic_scholar_toolkit.py +2 -2
- camel/toolkits/slack_toolkit.py +108 -58
- camel/toolkits/sql_toolkit.py +712 -0
- camel/toolkits/stripe_toolkit.py +2 -2
- camel/toolkits/sympy_toolkit.py +3 -3
- camel/toolkits/task_planning_toolkit.py +134 -0
- camel/toolkits/terminal_toolkit/__init__.py +18 -0
- camel/toolkits/terminal_toolkit/terminal_toolkit.py +1070 -0
- camel/toolkits/terminal_toolkit/utils.py +532 -0
- camel/toolkits/thinking_toolkit.py +3 -3
- camel/toolkits/twitter_toolkit.py +8 -3
- camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
- camel/toolkits/video_analysis_toolkit.py +112 -29
- camel/toolkits/video_download_toolkit.py +22 -16
- camel/toolkits/weather_toolkit.py +2 -2
- camel/toolkits/web_deploy_toolkit.py +1219 -0
- camel/toolkits/wechat_official_toolkit.py +483 -0
- camel/toolkits/whatsapp_toolkit.py +2 -2
- camel/toolkits/wolfram_alpha_toolkit.py +53 -25
- camel/toolkits/zapier_toolkit.py +7 -3
- camel/types/__init__.py +4 -4
- camel/types/agents/__init__.py +2 -2
- camel/types/agents/tool_calling_record.py +6 -3
- camel/types/enums.py +454 -35
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +4 -4
- camel/types/unified_model_type.py +43 -6
- camel/utils/__init__.py +20 -2
- camel/utils/async_func.py +2 -2
- camel/utils/chunker/__init__.py +2 -2
- camel/utils/chunker/base.py +2 -2
- camel/utils/chunker/code_chunker.py +2 -2
- camel/utils/chunker/uio_chunker.py +2 -2
- camel/utils/commons.py +65 -7
- camel/utils/constants.py +5 -2
- camel/utils/context_utils.py +1134 -0
- camel/utils/deduplication.py +2 -2
- camel/utils/filename.py +2 -2
- camel/utils/langfuse.py +258 -0
- camel/utils/mcp.py +140 -6
- camel/utils/mcp_client.py +1056 -0
- camel/utils/message_summarizer.py +148 -0
- camel/utils/response_format.py +2 -2
- camel/utils/token_counting.py +45 -22
- camel/utils/tool_result.py +44 -0
- camel/verifiers/__init__.py +2 -2
- camel/verifiers/base.py +2 -2
- camel/verifiers/math_verifier.py +2 -2
- camel/verifiers/models.py +2 -2
- camel/verifiers/physics_verifier.py +2 -2
- camel/verifiers/python_verifier.py +2 -2
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/METADATA +349 -108
- camel_ai-0.2.82.dist-info/RECORD +507 -0
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/WHEEL +1 -1
- {camel_ai-0.2.59.dist-info → camel_ai-0.2.82.dist-info}/licenses/LICENSE +1 -1
- camel/loaders/pandas_reader.py +0 -368
- camel/runtime/api.py +0 -97
- camel/toolkits/dalle_toolkit.py +0 -171
- camel/toolkits/file_write_toolkit.py +0 -395
- camel/toolkits/openai_agent_toolkit.py +0 -135
- camel/toolkits/terminal_toolkit.py +0 -1037
- camel_ai-0.2.59.dist-info/RECORD +0 -410
camel/models/moonshot_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,16 +10,19 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
|
+
import copy
|
|
15
16
|
import os
|
|
16
17
|
from typing import Any, Dict, List, Optional, Type, Union
|
|
17
18
|
|
|
18
19
|
from openai import AsyncStream
|
|
19
20
|
from pydantic import BaseModel
|
|
20
21
|
|
|
21
|
-
from camel.configs import
|
|
22
|
+
from camel.configs import MoonshotConfig
|
|
23
|
+
from camel.logger import get_logger
|
|
22
24
|
from camel.messages import OpenAIMessage
|
|
25
|
+
from camel.models._utils import try_modify_message_with_format
|
|
23
26
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
24
27
|
from camel.types import (
|
|
25
28
|
ChatCompletion,
|
|
@@ -29,8 +32,25 @@ from camel.types import (
|
|
|
29
32
|
from camel.utils import (
|
|
30
33
|
BaseTokenCounter,
|
|
31
34
|
api_keys_required,
|
|
35
|
+
get_current_agent_session_id,
|
|
36
|
+
update_langfuse_trace,
|
|
32
37
|
)
|
|
33
38
|
|
|
39
|
+
logger = get_logger(__name__)
|
|
40
|
+
|
|
41
|
+
if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
|
|
42
|
+
try:
|
|
43
|
+
from langfuse.decorators import observe
|
|
44
|
+
except ImportError:
|
|
45
|
+
from camel.utils import observe
|
|
46
|
+
elif os.environ.get("TRACEROOT_ENABLED", "False").lower() == "true":
|
|
47
|
+
try:
|
|
48
|
+
from traceroot import trace as observe # type: ignore[import]
|
|
49
|
+
except ImportError:
|
|
50
|
+
from camel.utils import observe
|
|
51
|
+
else:
|
|
52
|
+
from camel.utils import observe
|
|
53
|
+
|
|
34
54
|
|
|
35
55
|
class MoonshotModel(OpenAICompatibleModel):
|
|
36
56
|
r"""Moonshot API in a unified OpenAICompatibleModel interface.
|
|
@@ -45,7 +65,9 @@ class MoonshotModel(OpenAICompatibleModel):
|
|
|
45
65
|
api_key (Optional[str], optional): The API key for authenticating with
|
|
46
66
|
the Moonshot service. (default: :obj:`None`)
|
|
47
67
|
url (Optional[str], optional): The url to the Moonshot service.
|
|
48
|
-
|
|
68
|
+
For Chinese users, use :obj:`https://api.moonshot.cn/v1`.
|
|
69
|
+
For overseas users, the default endpoint will be used.
|
|
70
|
+
(default: :obj:`https://api.moonshot.ai/v1`)
|
|
49
71
|
token_counter (Optional[BaseTokenCounter], optional): Token counter to
|
|
50
72
|
use for the model. If not provided, :obj:`OpenAITokenCounter(
|
|
51
73
|
ModelType.GPT_4)` will be used.
|
|
@@ -54,6 +76,10 @@ class MoonshotModel(OpenAICompatibleModel):
|
|
|
54
76
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
55
77
|
environment variable or default to 180 seconds.
|
|
56
78
|
(default: :obj:`None`)
|
|
79
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
80
|
+
(default: :obj:`3`)
|
|
81
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
82
|
+
initialization.
|
|
57
83
|
"""
|
|
58
84
|
|
|
59
85
|
@api_keys_required([("api_key", "MOONSHOT_API_KEY")])
|
|
@@ -65,14 +91,18 @@ class MoonshotModel(OpenAICompatibleModel):
|
|
|
65
91
|
url: Optional[str] = None,
|
|
66
92
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
67
93
|
timeout: Optional[float] = None,
|
|
94
|
+
max_retries: int = 3,
|
|
95
|
+
**kwargs: Any,
|
|
68
96
|
) -> None:
|
|
69
97
|
if model_config_dict is None:
|
|
70
98
|
model_config_dict = MoonshotConfig().as_dict()
|
|
71
99
|
api_key = api_key or os.environ.get("MOONSHOT_API_KEY")
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
100
|
+
# Preserve default URL if not provided
|
|
101
|
+
if url is None:
|
|
102
|
+
url = (
|
|
103
|
+
os.environ.get("MOONSHOT_API_BASE_URL")
|
|
104
|
+
or "https://api.moonshot.ai/v1"
|
|
105
|
+
)
|
|
76
106
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
77
107
|
super().__init__(
|
|
78
108
|
model_type=model_type,
|
|
@@ -81,27 +111,171 @@ class MoonshotModel(OpenAICompatibleModel):
|
|
|
81
111
|
url=url,
|
|
82
112
|
token_counter=token_counter,
|
|
83
113
|
timeout=timeout,
|
|
114
|
+
max_retries=max_retries,
|
|
115
|
+
**kwargs,
|
|
84
116
|
)
|
|
85
117
|
|
|
118
|
+
def _prepare_request(
|
|
119
|
+
self,
|
|
120
|
+
messages: List[OpenAIMessage],
|
|
121
|
+
response_format: Optional[Type[BaseModel]] = None,
|
|
122
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
123
|
+
) -> Dict[str, Any]:
|
|
124
|
+
r"""Prepare the request configuration for Moonshot API.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
messages (List[OpenAIMessage]): Message list with the chat history
|
|
128
|
+
in OpenAI API format.
|
|
129
|
+
response_format (Optional[Type[BaseModel]]): The format of the
|
|
130
|
+
response.
|
|
131
|
+
tools (Optional[List[Dict[str, Any]]]): The schema of the tools to
|
|
132
|
+
use for the request.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
Dict[str, Any]: The prepared request configuration.
|
|
136
|
+
"""
|
|
137
|
+
request_config = copy.deepcopy(self.model_config_dict)
|
|
138
|
+
|
|
139
|
+
if tools:
|
|
140
|
+
# Clean tools to remove null types (Moonshot API incompatibility)
|
|
141
|
+
cleaned_tools = self._clean_tool_schemas(tools)
|
|
142
|
+
request_config["tools"] = cleaned_tools
|
|
143
|
+
elif response_format:
|
|
144
|
+
# Use the same approach as DeepSeek for structured output
|
|
145
|
+
try_modify_message_with_format(messages[-1], response_format)
|
|
146
|
+
request_config["response_format"] = {"type": "json_object"}
|
|
147
|
+
|
|
148
|
+
return request_config
|
|
149
|
+
|
|
150
|
+
def _clean_tool_schemas(
|
|
151
|
+
self, tools: List[Dict[str, Any]]
|
|
152
|
+
) -> List[Dict[str, Any]]:
|
|
153
|
+
r"""Clean tool schemas to remove null types for Moonshot compatibility.
|
|
154
|
+
|
|
155
|
+
Moonshot API doesn't accept {"type": "null"} in anyOf schemas.
|
|
156
|
+
This method removes null type definitions from parameters.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
tools (List[Dict[str, Any]]): Original tool schemas.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
List[Dict[str, Any]]: Cleaned tool schemas.
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
def remove_null_from_schema(schema: Any) -> Any:
|
|
166
|
+
"""Recursively remove null types from schema."""
|
|
167
|
+
if isinstance(schema, dict):
|
|
168
|
+
# Create a copy to avoid modifying the original
|
|
169
|
+
result = {}
|
|
170
|
+
|
|
171
|
+
for key, value in schema.items():
|
|
172
|
+
if key == 'type' and isinstance(value, list):
|
|
173
|
+
# Handle type arrays like ["string", "null"]
|
|
174
|
+
filtered_types = [t for t in value if t != 'null']
|
|
175
|
+
if len(filtered_types) == 1:
|
|
176
|
+
# Single type remains, convert to string
|
|
177
|
+
result[key] = filtered_types[0]
|
|
178
|
+
elif len(filtered_types) > 1:
|
|
179
|
+
# Multiple types remain, keep as array
|
|
180
|
+
result[key] = filtered_types
|
|
181
|
+
else:
|
|
182
|
+
# All were null, use string as fallback
|
|
183
|
+
logger.warning(
|
|
184
|
+
"All types in tool schema type array "
|
|
185
|
+
"were null, falling back to 'string' "
|
|
186
|
+
"type for Moonshot API compatibility. "
|
|
187
|
+
"Original tool schema may need review."
|
|
188
|
+
)
|
|
189
|
+
result[key] = 'string'
|
|
190
|
+
elif key == 'anyOf':
|
|
191
|
+
# Handle anyOf with null types
|
|
192
|
+
filtered = [
|
|
193
|
+
item
|
|
194
|
+
for item in value
|
|
195
|
+
if not (
|
|
196
|
+
isinstance(item, dict)
|
|
197
|
+
and item.get('type') == 'null'
|
|
198
|
+
)
|
|
199
|
+
]
|
|
200
|
+
if len(filtered) == 1:
|
|
201
|
+
# If only one type remains, flatten it
|
|
202
|
+
return remove_null_from_schema(filtered[0])
|
|
203
|
+
elif len(filtered) > 1:
|
|
204
|
+
result[key] = [
|
|
205
|
+
remove_null_from_schema(item)
|
|
206
|
+
for item in filtered
|
|
207
|
+
]
|
|
208
|
+
else:
|
|
209
|
+
# All were null, return string type as fallback
|
|
210
|
+
logger.warning(
|
|
211
|
+
"All types in tool schema anyOf were null, "
|
|
212
|
+
"falling back to 'string' type for "
|
|
213
|
+
"Moonshot API compatibility. Original "
|
|
214
|
+
"tool schema may need review."
|
|
215
|
+
)
|
|
216
|
+
return {"type": "string"}
|
|
217
|
+
else:
|
|
218
|
+
# Recursively process other values
|
|
219
|
+
result[key] = remove_null_from_schema(value)
|
|
220
|
+
|
|
221
|
+
return result
|
|
222
|
+
elif isinstance(schema, list):
|
|
223
|
+
return [remove_null_from_schema(item) for item in schema]
|
|
224
|
+
else:
|
|
225
|
+
return schema
|
|
226
|
+
|
|
227
|
+
cleaned_tools = copy.deepcopy(tools)
|
|
228
|
+
for tool in cleaned_tools:
|
|
229
|
+
if 'function' in tool and 'parameters' in tool['function']:
|
|
230
|
+
params = tool['function']['parameters']
|
|
231
|
+
if 'properties' in params:
|
|
232
|
+
params['properties'] = remove_null_from_schema(
|
|
233
|
+
params['properties']
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
return cleaned_tools
|
|
237
|
+
|
|
238
|
+
@observe()
|
|
86
239
|
async def _arun(
|
|
87
240
|
self,
|
|
88
241
|
messages: List[OpenAIMessage],
|
|
89
242
|
response_format: Optional[Type[BaseModel]] = None,
|
|
90
243
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
91
244
|
) -> Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
|
|
92
|
-
|
|
245
|
+
r"""Runs inference of Moonshot chat completion asynchronously.
|
|
93
246
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
247
|
+
Args:
|
|
248
|
+
messages (List[OpenAIMessage]): Message list with the chat history
|
|
249
|
+
in OpenAI API format.
|
|
250
|
+
response_format (Optional[Type[BaseModel]]): The format of the
|
|
251
|
+
response.
|
|
252
|
+
tools (Optional[List[Dict[str, Any]]]): The schema of the tools to
|
|
253
|
+
use for the request.
|
|
97
254
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
255
|
+
Returns:
|
|
256
|
+
Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
|
|
257
|
+
`ChatCompletion` in the non-stream mode, or
|
|
258
|
+
`AsyncStream[ChatCompletionChunk]` in the stream mode.
|
|
101
259
|
"""
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
260
|
+
|
|
261
|
+
# Update Langfuse trace with current agent session and metadata
|
|
262
|
+
agent_session_id = get_current_agent_session_id()
|
|
263
|
+
if agent_session_id:
|
|
264
|
+
update_langfuse_trace(
|
|
265
|
+
session_id=agent_session_id,
|
|
266
|
+
metadata={
|
|
267
|
+
"agent_id": agent_session_id,
|
|
268
|
+
"model_type": str(self.model_type),
|
|
269
|
+
},
|
|
270
|
+
tags=["CAMEL-AI", str(self.model_type)],
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
request_config = self._prepare_request(
|
|
274
|
+
messages, response_format, tools
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
return await self._async_client.chat.completions.create(
|
|
278
|
+
messages=messages,
|
|
279
|
+
model=self.model_type,
|
|
280
|
+
**request_config,
|
|
281
|
+
)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
+
import os
|
|
15
|
+
from typing import Any, Dict, Optional, Union
|
|
16
|
+
|
|
17
|
+
from camel.configs import NebiusConfig
|
|
18
|
+
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
19
|
+
from camel.types import ModelType
|
|
20
|
+
from camel.utils import (
|
|
21
|
+
BaseTokenCounter,
|
|
22
|
+
api_keys_required,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class NebiusModel(OpenAICompatibleModel):
|
|
27
|
+
r"""LLM API served by Nebius AI Studio in a unified OpenAICompatibleModel
|
|
28
|
+
interface.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
model_type (Union[ModelType, str]): Model for which a backend is
|
|
32
|
+
created.
|
|
33
|
+
model_config_dict (Optional[Dict[str, Any]], optional): A dictionary
|
|
34
|
+
that will be fed into:obj:`openai.ChatCompletion.create()`.
|
|
35
|
+
If:obj:`None`, :obj:`NebiusConfig().as_dict()` will be used.
|
|
36
|
+
(default: :obj:`None`)
|
|
37
|
+
api_key (Optional[str], optional): The API key for authenticating
|
|
38
|
+
with the Nebius AI Studio service. (default: :obj:`None`).
|
|
39
|
+
url (Optional[str], optional): The url to the Nebius AI Studio service.
|
|
40
|
+
(default: :obj:`None`)
|
|
41
|
+
token_counter (Optional[BaseTokenCounter], optional): Token counter to
|
|
42
|
+
use for the model. If not provided, :obj:`OpenAITokenCounter(
|
|
43
|
+
ModelType.GPT_4O_MINI)` will be used.
|
|
44
|
+
(default: :obj:`None`)
|
|
45
|
+
timeout (Optional[float], optional): The timeout value in seconds for
|
|
46
|
+
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
47
|
+
environment variable or default to 180 seconds.
|
|
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.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
@api_keys_required([("api_key", "NEBIUS_API_KEY")])
|
|
56
|
+
def __init__(
|
|
57
|
+
self,
|
|
58
|
+
model_type: Union[ModelType, str],
|
|
59
|
+
model_config_dict: Optional[Dict[str, Any]] = None,
|
|
60
|
+
api_key: Optional[str] = None,
|
|
61
|
+
url: Optional[str] = None,
|
|
62
|
+
token_counter: Optional[BaseTokenCounter] = None,
|
|
63
|
+
timeout: Optional[float] = None,
|
|
64
|
+
max_retries: int = 3,
|
|
65
|
+
**kwargs: Any,
|
|
66
|
+
) -> None:
|
|
67
|
+
if model_config_dict is None:
|
|
68
|
+
model_config_dict = NebiusConfig().as_dict()
|
|
69
|
+
api_key = api_key or os.environ.get("NEBIUS_API_KEY")
|
|
70
|
+
url = url or os.environ.get(
|
|
71
|
+
"NEBIUS_API_BASE_URL", "https://api.studio.nebius.com/v1"
|
|
72
|
+
)
|
|
73
|
+
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
74
|
+
super().__init__(
|
|
75
|
+
model_type=model_type,
|
|
76
|
+
model_config_dict=model_config_dict,
|
|
77
|
+
api_key=api_key,
|
|
78
|
+
url=url,
|
|
79
|
+
token_counter=token_counter,
|
|
80
|
+
timeout=timeout,
|
|
81
|
+
max_retries=max_retries,
|
|
82
|
+
**kwargs,
|
|
83
|
+
)
|
camel/models/nemotron_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,9 +10,9 @@
|
|
|
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 Optional, Union
|
|
15
|
+
from typing import Any, Optional, Union
|
|
16
16
|
|
|
17
17
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
18
18
|
from camel.types import ModelType
|
|
@@ -36,6 +36,10 @@ class NemotronModel(OpenAICompatibleModel):
|
|
|
36
36
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
37
37
|
environment variable or default to 180 seconds.
|
|
38
38
|
(default: :obj:`None`)
|
|
39
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
40
|
+
(default: :obj:`3`)
|
|
41
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
42
|
+
initialization.
|
|
39
43
|
|
|
40
44
|
Notes:
|
|
41
45
|
Nemotron model doesn't support additional model config like OpenAI.
|
|
@@ -52,21 +56,27 @@ class NemotronModel(OpenAICompatibleModel):
|
|
|
52
56
|
api_key: Optional[str] = None,
|
|
53
57
|
url: Optional[str] = None,
|
|
54
58
|
timeout: Optional[float] = None,
|
|
59
|
+
max_retries: int = 3,
|
|
60
|
+
**kwargs: Any,
|
|
55
61
|
) -> None:
|
|
56
62
|
url = url or os.environ.get(
|
|
57
63
|
"NVIDIA_API_BASE_URL", "https://integrate.api.nvidia.com/v1"
|
|
58
64
|
)
|
|
59
65
|
api_key = api_key or os.environ.get("NVIDIA_API_KEY")
|
|
60
66
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
61
|
-
super().__init__(
|
|
67
|
+
super().__init__(
|
|
68
|
+
model_type,
|
|
69
|
+
{},
|
|
70
|
+
api_key,
|
|
71
|
+
url,
|
|
72
|
+
None,
|
|
73
|
+
timeout,
|
|
74
|
+
max_retries=max_retries,
|
|
75
|
+
**kwargs,
|
|
76
|
+
)
|
|
62
77
|
|
|
63
78
|
@property
|
|
64
79
|
def token_counter(self) -> BaseTokenCounter:
|
|
65
80
|
raise NotImplementedError(
|
|
66
81
|
"Nemotron model doesn't support token counter."
|
|
67
82
|
)
|
|
68
|
-
|
|
69
|
-
def check_model_config(self):
|
|
70
|
-
raise NotImplementedError(
|
|
71
|
-
"Nemotron model doesn't support model config."
|
|
72
|
-
)
|
camel/models/netmind_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 NetmindConfig
|
|
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 NetmindModel(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 NetmindModel(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 = NetmindConfig().as_dict()
|
|
@@ -78,19 +84,6 @@ class NetmindModel(OpenAICompatibleModel):
|
|
|
78
84
|
url=url,
|
|
79
85
|
token_counter=token_counter,
|
|
80
86
|
timeout=timeout,
|
|
87
|
+
max_retries=max_retries,
|
|
88
|
+
**kwargs,
|
|
81
89
|
)
|
|
82
|
-
|
|
83
|
-
def check_model_config(self):
|
|
84
|
-
r"""Check whether the model configuration contains any
|
|
85
|
-
unexpected arguments to NETMIND API.
|
|
86
|
-
|
|
87
|
-
Raises:
|
|
88
|
-
ValueError: If the model configuration dictionary contains any
|
|
89
|
-
unexpected arguments to NETMIND API.
|
|
90
|
-
"""
|
|
91
|
-
for param in self.model_config_dict:
|
|
92
|
-
if param not in NETMIND_API_PARAMS:
|
|
93
|
-
raise ValueError(
|
|
94
|
-
f"Unexpected argument `{param}` is "
|
|
95
|
-
"input into NETMIND model backend."
|
|
96
|
-
)
|
camel/models/novita_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 NovitaConfig
|
|
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 NovitaModel(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 NovitaModel(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 = NovitaConfig().as_dict()
|
|
@@ -77,19 +83,6 @@ class NovitaModel(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 Novita API.
|
|
85
|
-
|
|
86
|
-
Raises:
|
|
87
|
-
ValueError: If the model configuration dictionary contains any
|
|
88
|
-
unexpected arguments to Novita API.
|
|
89
|
-
"""
|
|
90
|
-
for param in self.model_config_dict:
|
|
91
|
-
if param not in NOVITA_API_PARAMS:
|
|
92
|
-
raise ValueError(
|
|
93
|
-
f"Unexpected argument `{param}` is "
|
|
94
|
-
"input into Novita model backend."
|
|
95
|
-
)
|
camel/models/nvidia_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 NvidiaConfig
|
|
19
19
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
20
20
|
from camel.types import ModelType
|
|
21
21
|
from camel.utils import BaseTokenCounter, api_keys_required
|
|
@@ -43,6 +43,10 @@ class NvidiaModel(OpenAICompatibleModel):
|
|
|
43
43
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
44
44
|
environment variable or default to 180 seconds.
|
|
45
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.
|
|
46
50
|
"""
|
|
47
51
|
|
|
48
52
|
@api_keys_required(
|
|
@@ -58,6 +62,8 @@ class NvidiaModel(OpenAICompatibleModel):
|
|
|
58
62
|
url: Optional[str] = None,
|
|
59
63
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
60
64
|
timeout: Optional[float] = None,
|
|
65
|
+
max_retries: int = 3,
|
|
66
|
+
**kwargs: Any,
|
|
61
67
|
) -> None:
|
|
62
68
|
if model_config_dict is None:
|
|
63
69
|
model_config_dict = NvidiaConfig().as_dict()
|
|
@@ -73,19 +79,6 @@ class NvidiaModel(OpenAICompatibleModel):
|
|
|
73
79
|
url=url,
|
|
74
80
|
token_counter=token_counter,
|
|
75
81
|
timeout=timeout,
|
|
82
|
+
max_retries=max_retries,
|
|
83
|
+
**kwargs,
|
|
76
84
|
)
|
|
77
|
-
|
|
78
|
-
def check_model_config(self):
|
|
79
|
-
r"""Check whether the model configuration contains any
|
|
80
|
-
unexpected arguments to NVIDIA API.
|
|
81
|
-
|
|
82
|
-
Raises:
|
|
83
|
-
ValueError: If the model configuration dictionary contains any
|
|
84
|
-
unexpected arguments to NVIDIA API.
|
|
85
|
-
"""
|
|
86
|
-
for param in self.model_config_dict:
|
|
87
|
-
if param not in NVIDIA_API_PARAMS:
|
|
88
|
-
raise ValueError(
|
|
89
|
-
f"Unexpected argument `{param}` is "
|
|
90
|
-
"input into NVIDIA model backend."
|
|
91
|
-
)
|