camel-ai 0.2.65__py3-none-any.whl → 0.2.83a6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of camel-ai might be problematic. Click here for more details.
- camel/__init__.py +3 -3
- camel/agents/__init__.py +2 -2
- camel/agents/_types.py +9 -4
- camel/agents/_utils.py +40 -2
- camel/agents/base.py +2 -2
- camel/agents/chat_agent.py +5107 -995
- camel/agents/critic_agent.py +2 -2
- camel/agents/deductive_reasoner_agent.py +56 -56
- camel/agents/embodied_agent.py +2 -2
- camel/agents/knowledge_graph_agent.py +20 -20
- camel/agents/mcp_agent.py +35 -36
- camel/agents/multi_hop_generator_agent.py +3 -3
- camel/agents/programmed_agent_instruction.py +2 -2
- camel/agents/repo_agent.py +4 -3
- camel/agents/role_assignment_agent.py +2 -2
- camel/agents/search_agent.py +2 -2
- camel/agents/task_agent.py +2 -2
- camel/agents/tool_agents/__init__.py +2 -2
- camel/agents/tool_agents/base.py +2 -2
- camel/agents/tool_agents/hugging_face_tool_agent.py +3 -3
- camel/benchmarks/__init__.py +2 -2
- camel/benchmarks/apibank.py +5 -5
- camel/benchmarks/apibench.py +2 -2
- camel/benchmarks/base.py +2 -2
- camel/benchmarks/browsecomp.py +44 -33
- camel/benchmarks/gaia.py +17 -13
- camel/benchmarks/mock_website/README.md +1 -3
- camel/benchmarks/mock_website/mock_web.py +2 -2
- camel/benchmarks/mock_website/requirements.txt +1 -1
- camel/benchmarks/mock_website/shopping_mall/app.py +2 -2
- camel/benchmarks/mock_website/task.json +1 -1
- camel/benchmarks/nexus.py +3 -3
- camel/benchmarks/ragbench.py +2 -2
- camel/bots/__init__.py +2 -2
- camel/bots/discord/__init__.py +2 -2
- camel/bots/discord/discord_app.py +2 -2
- camel/bots/discord/discord_installation.py +2 -2
- camel/bots/discord/discord_store.py +3 -3
- camel/bots/slack/__init__.py +2 -2
- camel/bots/slack/models.py +4 -4
- camel/bots/slack/slack_app.py +2 -2
- camel/bots/telegram_bot.py +2 -2
- camel/configs/__init__.py +29 -2
- camel/configs/aihubmix_config.py +90 -0
- camel/configs/aiml_config.py +2 -2
- camel/configs/amd_config.py +70 -0
- camel/configs/anthropic_config.py +2 -2
- camel/configs/base_config.py +2 -2
- camel/configs/bedrock_config.py +5 -3
- camel/configs/cerebras_config.py +98 -0
- camel/configs/cohere_config.py +2 -2
- camel/configs/cometapi_config.py +106 -0
- camel/configs/crynux_config.py +2 -2
- camel/configs/deepseek_config.py +9 -8
- camel/configs/function_gemma_config.py +59 -0
- camel/configs/gemini_config.py +6 -4
- camel/configs/groq_config.py +6 -4
- camel/configs/internlm_config.py +6 -4
- camel/configs/litellm_config.py +2 -2
- camel/configs/lmstudio_config.py +6 -4
- camel/configs/minimax_config.py +95 -0
- camel/configs/mistral_config.py +2 -2
- camel/configs/modelscope_config.py +5 -3
- camel/configs/moonshot_config.py +2 -2
- camel/configs/nebius_config.py +105 -0
- camel/configs/netmind_config.py +2 -2
- camel/configs/novita_config.py +2 -2
- camel/configs/nvidia_config.py +2 -2
- camel/configs/ollama_config.py +2 -2
- camel/configs/openai_config.py +5 -3
- camel/configs/openrouter_config.py +6 -4
- camel/configs/ppio_config.py +2 -2
- camel/configs/qianfan_config.py +85 -0
- camel/configs/qwen_config.py +2 -2
- camel/configs/reka_config.py +2 -2
- camel/configs/samba_config.py +6 -4
- camel/configs/sglang_config.py +2 -2
- camel/configs/siliconflow_config.py +2 -2
- camel/configs/togetherai_config.py +2 -2
- camel/configs/vllm_config.py +4 -2
- camel/configs/watsonx_config.py +2 -2
- camel/configs/yi_config.py +6 -4
- camel/configs/zhipuai_config.py +6 -4
- camel/data_collectors/__init__.py +2 -2
- camel/data_collectors/alpaca_collector.py +18 -9
- camel/data_collectors/base.py +2 -2
- camel/data_collectors/sharegpt_collector.py +2 -2
- camel/datagen/__init__.py +2 -2
- camel/datagen/cot_datagen.py +3 -3
- camel/datagen/evol_instruct/__init__.py +2 -2
- camel/datagen/evol_instruct/evol_instruct.py +2 -2
- camel/datagen/evol_instruct/scorer.py +12 -12
- camel/datagen/evol_instruct/templates.py +16 -16
- camel/datagen/self_improving_cot.py +5 -5
- camel/datagen/self_instruct/__init__.py +2 -2
- camel/datagen/self_instruct/filter/__init__.py +2 -2
- camel/datagen/self_instruct/filter/filter_function.py +2 -2
- camel/datagen/self_instruct/filter/filter_registry.py +2 -2
- camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
- camel/datagen/self_instruct/self_instruct.py +2 -2
- camel/datagen/self_instruct/templates.py +47 -47
- camel/datagen/source2synth/__init__.py +2 -2
- camel/datagen/source2synth/data_processor.py +2 -2
- camel/datagen/source2synth/models.py +2 -2
- camel/datagen/source2synth/user_data_processor_config.py +2 -2
- camel/datahubs/__init__.py +2 -2
- camel/datahubs/base.py +2 -2
- camel/datahubs/huggingface.py +2 -2
- camel/datahubs/models.py +2 -2
- camel/datasets/__init__.py +2 -2
- camel/datasets/base_generator.py +41 -12
- camel/datasets/few_shot_generator.py +18 -18
- camel/datasets/models.py +2 -2
- camel/datasets/self_instruct_generator.py +2 -2
- camel/datasets/static_dataset.py +2 -2
- camel/embeddings/__init__.py +2 -2
- camel/embeddings/azure_embedding.py +2 -2
- camel/embeddings/base.py +2 -2
- camel/embeddings/gemini_embedding.py +2 -2
- camel/embeddings/jina_embedding.py +2 -2
- camel/embeddings/mistral_embedding.py +2 -2
- camel/embeddings/openai_compatible_embedding.py +2 -2
- camel/embeddings/openai_embedding.py +2 -2
- camel/embeddings/sentence_transformers_embeddings.py +2 -2
- camel/embeddings/together_embedding.py +2 -2
- camel/embeddings/vlm_embedding.py +2 -2
- camel/environments/__init__.py +14 -2
- camel/environments/models.py +2 -2
- camel/environments/multi_step.py +2 -2
- camel/environments/rlcards_env.py +860 -0
- camel/environments/single_step.py +30 -5
- camel/environments/tic_tac_toe.py +3 -3
- camel/extractors/__init__.py +2 -2
- camel/extractors/base.py +2 -2
- camel/extractors/python_strategies.py +2 -2
- camel/generators.py +2 -2
- camel/human.py +2 -2
- camel/interpreters/__init__.py +4 -2
- camel/interpreters/base.py +2 -2
- camel/interpreters/docker/Dockerfile +14 -24
- camel/interpreters/docker_interpreter.py +5 -4
- camel/interpreters/e2b_interpreter.py +36 -3
- camel/interpreters/internal_python_interpreter.py +53 -4
- camel/interpreters/interpreter_error.py +2 -2
- camel/interpreters/ipython_interpreter.py +2 -2
- camel/interpreters/microsandbox_interpreter.py +395 -0
- camel/interpreters/subprocess_interpreter.py +2 -2
- camel/loaders/__init__.py +13 -4
- camel/loaders/apify_reader.py +2 -2
- camel/loaders/base_io.py +2 -2
- camel/loaders/base_loader.py +85 -0
- camel/loaders/chunkr_reader.py +11 -2
- camel/loaders/crawl4ai_reader.py +2 -2
- camel/loaders/firecrawl_reader.py +6 -6
- camel/loaders/jina_url_reader.py +2 -2
- camel/loaders/markitdown.py +2 -2
- camel/loaders/mineru_extractor.py +2 -2
- camel/loaders/mistral_reader.py +2 -2
- camel/loaders/scrapegraph_reader.py +2 -2
- camel/loaders/unstructured_io.py +2 -2
- camel/logger.py +5 -5
- camel/memories/__init__.py +2 -2
- camel/memories/agent_memories.py +86 -3
- camel/memories/base.py +36 -2
- camel/memories/blocks/__init__.py +2 -2
- camel/memories/blocks/chat_history_block.py +125 -7
- camel/memories/blocks/vectordb_block.py +10 -3
- camel/memories/context_creators/__init__.py +2 -2
- camel/memories/context_creators/score_based.py +109 -230
- camel/memories/records.py +90 -10
- camel/messages/__init__.py +2 -2
- camel/messages/base.py +178 -43
- camel/messages/conversion/__init__.py +2 -2
- camel/messages/conversion/alpaca.py +2 -2
- camel/messages/conversion/conversation_models.py +2 -2
- camel/messages/conversion/sharegpt/__init__.py +2 -2
- camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
- camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
- camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
- camel/messages/func_message.py +54 -17
- camel/models/__init__.py +18 -2
- camel/models/_utils.py +3 -3
- camel/models/aihubmix_model.py +83 -0
- camel/models/aiml_model.py +11 -18
- camel/models/amd_model.py +101 -0
- camel/models/anthropic_model.py +127 -20
- camel/models/aws_bedrock_model.py +12 -35
- camel/models/azure_openai_model.py +214 -115
- camel/models/base_audio_model.py +5 -3
- camel/models/base_model.py +378 -31
- camel/models/cerebras_model.py +83 -0
- camel/models/cohere_model.py +18 -49
- camel/models/cometapi_model.py +83 -0
- camel/models/crynux_model.py +11 -18
- camel/models/deepseek_model.py +20 -84
- camel/models/fish_audio_model.py +8 -2
- camel/models/function_gemma_model.py +889 -0
- camel/models/gemini_model.py +391 -52
- camel/models/groq_model.py +11 -19
- camel/models/internlm_model.py +11 -18
- camel/models/litellm_model.py +57 -49
- camel/models/lmstudio_model.py +17 -20
- camel/models/minimax_model.py +83 -0
- camel/models/mistral_model.py +20 -47
- camel/models/model_factory.py +39 -3
- camel/models/model_manager.py +26 -8
- camel/models/modelscope_model.py +13 -193
- camel/models/moonshot_model.py +183 -21
- camel/models/nebius_model.py +83 -0
- camel/models/nemotron_model.py +19 -9
- camel/models/netmind_model.py +11 -18
- camel/models/novita_model.py +11 -18
- camel/models/nvidia_model.py +11 -18
- camel/models/ollama_model.py +14 -21
- camel/models/openai_audio_models.py +2 -2
- camel/models/openai_compatible_model.py +190 -71
- camel/models/openai_model.py +192 -86
- camel/models/openrouter_model.py +11 -19
- camel/models/ppio_model.py +11 -18
- camel/models/qianfan_model.py +89 -0
- camel/models/qwen_model.py +13 -193
- camel/models/reka_model.py +23 -49
- camel/models/reward/__init__.py +2 -2
- camel/models/reward/base_reward_model.py +2 -2
- camel/models/reward/evaluator.py +2 -2
- camel/models/reward/nemotron_model.py +2 -2
- camel/models/reward/skywork_model.py +2 -2
- camel/models/samba_model.py +50 -75
- camel/models/sglang_model.py +90 -68
- camel/models/siliconflow_model.py +12 -35
- camel/models/stub_model.py +10 -7
- camel/models/togetherai_model.py +11 -18
- camel/models/vllm_model.py +10 -18
- camel/models/volcano_model.py +158 -19
- camel/models/watsonx_model.py +9 -47
- camel/models/yi_model.py +11 -18
- camel/models/zhipuai_model.py +70 -18
- camel/parsers/__init__.py +18 -0
- camel/parsers/mcp_tool_call_parser.py +176 -0
- camel/personas/__init__.py +2 -2
- camel/personas/persona.py +2 -2
- camel/personas/persona_hub.py +2 -2
- camel/prompts/__init__.py +2 -2
- camel/prompts/ai_society.py +2 -2
- camel/prompts/base.py +2 -2
- camel/prompts/code.py +2 -2
- camel/prompts/evaluation.py +2 -2
- camel/prompts/generate_text_embedding_data.py +2 -2
- camel/prompts/image_craft.py +2 -2
- camel/prompts/misalignment.py +2 -2
- camel/prompts/multi_condition_image_craft.py +2 -2
- camel/prompts/object_recognition.py +2 -2
- camel/prompts/persona_hub.py +3 -3
- camel/prompts/prompt_templates.py +2 -2
- camel/prompts/role_description_prompt_template.py +2 -2
- camel/prompts/solution_extraction.py +8 -8
- camel/prompts/task_prompt_template.py +2 -2
- camel/prompts/translation.py +2 -2
- camel/prompts/video_description_prompt.py +3 -3
- camel/responses/__init__.py +2 -2
- camel/responses/agent_responses.py +2 -2
- camel/retrievers/__init__.py +2 -2
- camel/retrievers/auto_retriever.py +3 -2
- camel/retrievers/base.py +2 -2
- camel/retrievers/bm25_retriever.py +2 -2
- camel/retrievers/cohere_rerank_retriever.py +2 -2
- camel/retrievers/hybrid_retrival.py +2 -2
- camel/retrievers/vector_retriever.py +2 -2
- camel/runtimes/Dockerfile.multi-toolkit +90 -0
- camel/runtimes/__init__.py +2 -2
- camel/runtimes/api.py +79 -23
- camel/runtimes/base.py +2 -2
- camel/runtimes/configs.py +13 -13
- camel/runtimes/daytona_runtime.py +17 -18
- camel/runtimes/docker_runtime.py +12 -12
- camel/runtimes/llm_guard_runtime.py +26 -26
- camel/runtimes/remote_http_runtime.py +11 -11
- camel/runtimes/ubuntu_docker_runtime.py +2 -2
- camel/runtimes/utils/__init__.py +2 -2
- camel/runtimes/utils/function_risk_toolkit.py +2 -2
- camel/runtimes/utils/ignore_risk_toolkit.py +2 -2
- camel/schemas/__init__.py +2 -2
- camel/schemas/base.py +2 -2
- camel/schemas/openai_converter.py +3 -3
- camel/schemas/outlines_converter.py +2 -2
- camel/services/agent_openapi_server.py +380 -0
- camel/societies/__init__.py +4 -2
- camel/societies/babyagi_playing.py +2 -2
- camel/societies/role_playing.py +201 -80
- camel/societies/workforce/__init__.py +10 -3
- camel/societies/workforce/base.py +2 -2
- camel/societies/workforce/events.py +145 -0
- camel/societies/workforce/prompts.py +259 -33
- camel/societies/workforce/role_playing_worker.py +88 -31
- camel/societies/workforce/single_agent_worker.py +638 -40
- camel/societies/workforce/structured_output_handler.py +512 -0
- camel/societies/workforce/task_channel.py +182 -38
- camel/societies/workforce/utils.py +780 -65
- camel/societies/workforce/worker.py +92 -26
- camel/societies/workforce/workflow_memory_manager.py +1746 -0
- camel/societies/workforce/workforce.py +5354 -372
- camel/societies/workforce/workforce_callback.py +103 -0
- camel/societies/workforce/workforce_logger.py +647 -0
- camel/societies/workforce/workforce_metrics.py +33 -0
- camel/storages/__init__.py +6 -2
- camel/storages/graph_storages/__init__.py +2 -2
- camel/storages/graph_storages/base.py +2 -2
- camel/storages/graph_storages/graph_element.py +2 -2
- camel/storages/graph_storages/nebula_graph.py +4 -4
- camel/storages/graph_storages/neo4j_graph.py +7 -7
- camel/storages/key_value_storages/__init__.py +2 -2
- camel/storages/key_value_storages/base.py +2 -2
- camel/storages/key_value_storages/in_memory.py +2 -2
- camel/storages/key_value_storages/json.py +17 -4
- camel/storages/key_value_storages/mem0_cloud.py +50 -49
- camel/storages/key_value_storages/redis.py +2 -2
- camel/storages/object_storages/__init__.py +2 -2
- camel/storages/object_storages/amazon_s3.py +2 -2
- camel/storages/object_storages/azure_blob.py +2 -2
- camel/storages/object_storages/base.py +2 -2
- camel/storages/object_storages/google_cloud.py +3 -3
- camel/storages/vectordb_storages/__init__.py +8 -2
- camel/storages/vectordb_storages/base.py +2 -2
- camel/storages/vectordb_storages/chroma.py +731 -0
- camel/storages/vectordb_storages/faiss.py +2 -2
- camel/storages/vectordb_storages/milvus.py +2 -2
- camel/storages/vectordb_storages/oceanbase.py +15 -15
- camel/storages/vectordb_storages/pgvector.py +349 -0
- camel/storages/vectordb_storages/qdrant.py +6 -6
- camel/storages/vectordb_storages/surreal.py +372 -0
- camel/storages/vectordb_storages/tidb.py +11 -8
- camel/storages/vectordb_storages/weaviate.py +2 -2
- camel/tasks/__init__.py +2 -2
- camel/tasks/task.py +348 -26
- camel/tasks/task_prompt.py +3 -3
- camel/terminators/__init__.py +2 -2
- camel/terminators/base.py +2 -2
- camel/terminators/response_terminator.py +2 -2
- camel/terminators/token_limit_terminator.py +2 -2
- camel/toolkits/__init__.py +57 -10
- camel/toolkits/aci_toolkit.py +66 -21
- camel/toolkits/arxiv_toolkit.py +8 -8
- camel/toolkits/ask_news_toolkit.py +2 -2
- camel/toolkits/async_browser_toolkit.py +4 -4
- camel/toolkits/audio_analysis_toolkit.py +3 -3
- camel/toolkits/base.py +106 -6
- camel/toolkits/bohrium_toolkit.py +2 -2
- camel/toolkits/browser_toolkit.py +34 -21
- camel/toolkits/browser_toolkit_commons.py +4 -4
- camel/toolkits/code_execution.py +31 -4
- camel/toolkits/context_summarizer_toolkit.py +684 -0
- camel/toolkits/craw4ai_toolkit.py +93 -0
- camel/toolkits/dappier_toolkit.py +12 -8
- camel/toolkits/data_commons_toolkit.py +2 -2
- camel/toolkits/dingtalk.py +1135 -0
- camel/toolkits/earth_science_toolkit.py +5367 -0
- camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
- camel/toolkits/excel_toolkit.py +905 -71
- camel/toolkits/file_toolkit.py +1402 -0
- camel/toolkits/function_tool.py +205 -27
- camel/toolkits/github_toolkit.py +109 -22
- camel/toolkits/gmail_toolkit.py +1839 -0
- camel/toolkits/google_calendar_toolkit.py +40 -6
- camel/toolkits/google_drive_mcp_toolkit.py +54 -0
- camel/toolkits/google_maps_toolkit.py +2 -2
- camel/toolkits/google_scholar_toolkit.py +2 -2
- camel/toolkits/human_toolkit.py +36 -12
- camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
- camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1958 -0
- camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1940 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
- camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
- camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +325 -0
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
- camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
- camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
- camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
- camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
- camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
- camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
- camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
- camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
- camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
- camel/toolkits/image_analysis_toolkit.py +3 -6
- camel/toolkits/image_generation_toolkit.py +390 -0
- camel/toolkits/jina_reranker_toolkit.py +5 -6
- camel/toolkits/klavis_toolkit.py +7 -3
- camel/toolkits/linkedin_toolkit.py +2 -2
- camel/toolkits/markitdown_toolkit.py +104 -0
- camel/toolkits/math_toolkit.py +66 -12
- camel/toolkits/mcp_toolkit.py +412 -36
- camel/toolkits/memory_toolkit.py +7 -3
- camel/toolkits/meshy_toolkit.py +2 -2
- camel/toolkits/message_agent_toolkit.py +608 -0
- camel/toolkits/message_integration.py +728 -0
- camel/toolkits/microsoft_outlook_mail_toolkit.py +1885 -0
- camel/toolkits/mineru_toolkit.py +2 -2
- camel/toolkits/minimax_mcp_toolkit.py +195 -0
- camel/toolkits/networkx_toolkit.py +2 -2
- camel/toolkits/note_taking_toolkit.py +277 -0
- camel/toolkits/notion_mcp_toolkit.py +224 -0
- camel/toolkits/notion_toolkit.py +2 -2
- camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
- camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
- camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
- camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
- camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
- camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
- camel/toolkits/open_api_specs/security_config.py +2 -2
- camel/toolkits/open_api_specs/speak/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
- camel/toolkits/open_api_toolkit.py +2 -2
- camel/toolkits/openbb_toolkit.py +7 -3
- camel/toolkits/origene_mcp_toolkit.py +56 -0
- camel/toolkits/page_script.js +53 -53
- camel/toolkits/playwright_mcp_toolkit.py +13 -31
- camel/toolkits/pptx_toolkit.py +36 -23
- camel/toolkits/pubmed_toolkit.py +2 -2
- camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
- camel/toolkits/pyautogui_toolkit.py +2 -2
- camel/toolkits/reddit_toolkit.py +2 -2
- camel/toolkits/resend_toolkit.py +168 -0
- camel/toolkits/retrieval_toolkit.py +2 -2
- camel/toolkits/screenshot_toolkit.py +213 -0
- camel/toolkits/search_toolkit.py +606 -156
- camel/toolkits/searxng_toolkit.py +2 -2
- camel/toolkits/semantic_scholar_toolkit.py +2 -2
- camel/toolkits/slack_toolkit.py +108 -58
- camel/toolkits/sql_toolkit.py +712 -0
- camel/toolkits/stripe_toolkit.py +2 -2
- camel/toolkits/sympy_toolkit.py +3 -3
- camel/toolkits/task_planning_toolkit.py +5 -5
- camel/toolkits/terminal_toolkit/__init__.py +18 -0
- camel/toolkits/terminal_toolkit/terminal_toolkit.py +1281 -0
- camel/toolkits/terminal_toolkit/utils.py +659 -0
- camel/toolkits/thinking_toolkit.py +3 -3
- camel/toolkits/twitter_toolkit.py +2 -2
- camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
- camel/toolkits/video_analysis_toolkit.py +109 -29
- camel/toolkits/video_download_toolkit.py +19 -16
- camel/toolkits/weather_toolkit.py +2 -2
- camel/toolkits/web_deploy_toolkit.py +1219 -0
- camel/toolkits/wechat_official_toolkit.py +483 -0
- camel/toolkits/whatsapp_toolkit.py +2 -2
- camel/toolkits/wolfram_alpha_toolkit.py +2 -2
- camel/toolkits/zapier_toolkit.py +7 -3
- camel/types/__init__.py +4 -4
- camel/types/agents/__init__.py +2 -2
- camel/types/agents/tool_calling_record.py +6 -3
- camel/types/enums.py +381 -41
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +4 -4
- camel/types/unified_model_type.py +46 -10
- camel/utils/__init__.py +5 -2
- camel/utils/agent_context.py +41 -0
- camel/utils/async_func.py +2 -2
- camel/utils/chunker/__init__.py +2 -2
- camel/utils/chunker/base.py +2 -2
- camel/utils/chunker/code_chunker.py +2 -2
- camel/utils/chunker/uio_chunker.py +2 -2
- camel/utils/commons.py +38 -7
- camel/utils/constants.py +5 -2
- camel/utils/context_utils.py +1134 -0
- camel/utils/deduplication.py +2 -2
- camel/utils/filename.py +2 -2
- camel/utils/langfuse.py +18 -10
- camel/utils/mcp.py +140 -6
- camel/utils/mcp_client.py +48 -38
- camel/utils/message_summarizer.py +148 -0
- camel/utils/response_format.py +2 -2
- camel/utils/token_counting.py +45 -22
- camel/utils/tool_result.py +44 -0
- camel/verifiers/__init__.py +2 -2
- camel/verifiers/base.py +2 -2
- camel/verifiers/math_verifier.py +2 -2
- camel/verifiers/models.py +2 -2
- camel/verifiers/physics_verifier.py +2 -2
- camel/verifiers/python_verifier.py +2 -2
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/METADATA +355 -117
- camel_ai-0.2.83a6.dist-info/RECORD +511 -0
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/WHEEL +1 -1
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/licenses/LICENSE +1 -1
- camel/loaders/pandas_reader.py +0 -368
- camel/toolkits/dalle_toolkit.py +0 -175
- camel/toolkits/file_write_toolkit.py +0 -444
- camel/toolkits/openai_agent_toolkit.py +0 -135
- camel/toolkits/terminal_toolkit.py +0 -1037
- camel_ai-0.2.65.dist-info/RECORD +0 -426
camel/models/litellm_model.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,13 +10,14 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
|
+
import uuid
|
|
15
16
|
from typing import Any, Dict, List, Optional, Type, Union
|
|
16
17
|
|
|
17
18
|
from pydantic import BaseModel
|
|
18
19
|
|
|
19
|
-
from camel.configs import
|
|
20
|
+
from camel.configs import LiteLLMConfig
|
|
20
21
|
from camel.messages import OpenAIMessage
|
|
21
22
|
from camel.models import BaseModelBackend
|
|
22
23
|
from camel.types import ChatCompletion, ModelType
|
|
@@ -24,9 +25,7 @@ from camel.utils import (
|
|
|
24
25
|
BaseTokenCounter,
|
|
25
26
|
LiteLLMTokenCounter,
|
|
26
27
|
dependencies_required,
|
|
27
|
-
get_current_agent_session_id,
|
|
28
28
|
update_current_observation,
|
|
29
|
-
update_langfuse_trace,
|
|
30
29
|
)
|
|
31
30
|
|
|
32
31
|
if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
|
|
@@ -59,6 +58,8 @@ class LiteLLMModel(BaseModelBackend):
|
|
|
59
58
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
60
59
|
environment variable or default to 180 seconds.
|
|
61
60
|
(default: :obj:`None`)
|
|
61
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
62
|
+
initialization.
|
|
62
63
|
"""
|
|
63
64
|
|
|
64
65
|
# NOTE: Currently stream mode is not supported.
|
|
@@ -72,6 +73,7 @@ class LiteLLMModel(BaseModelBackend):
|
|
|
72
73
|
url: Optional[str] = None,
|
|
73
74
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
74
75
|
timeout: Optional[float] = None,
|
|
76
|
+
**kwargs: Any,
|
|
75
77
|
) -> None:
|
|
76
78
|
from litellm import completion
|
|
77
79
|
|
|
@@ -82,6 +84,7 @@ class LiteLLMModel(BaseModelBackend):
|
|
|
82
84
|
model_type, model_config_dict, api_key, url, token_counter, timeout
|
|
83
85
|
)
|
|
84
86
|
self.client = completion
|
|
87
|
+
self.kwargs = kwargs
|
|
85
88
|
|
|
86
89
|
def _convert_response_from_litellm_to_openai(
|
|
87
90
|
self, response
|
|
@@ -94,23 +97,47 @@ class LiteLLMModel(BaseModelBackend):
|
|
|
94
97
|
Returns:
|
|
95
98
|
ChatCompletion: The response object in OpenAI's format.
|
|
96
99
|
"""
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
|
|
101
|
+
converted_choices = []
|
|
102
|
+
for choice in response.choices:
|
|
103
|
+
# Build the assistant message dict
|
|
104
|
+
msg_dict: Dict[str, Any] = {
|
|
105
|
+
"role": choice.message.role,
|
|
106
|
+
"content": choice.message.content,
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if getattr(choice.message, "tool_calls", None):
|
|
110
|
+
msg_dict["tool_calls"] = choice.message.tool_calls
|
|
111
|
+
|
|
112
|
+
elif getattr(choice.message, "function_call", None):
|
|
113
|
+
func_call = choice.message.function_call
|
|
114
|
+
msg_dict["tool_calls"] = [
|
|
115
|
+
{
|
|
116
|
+
"id": f"call_{uuid.uuid4().hex[:24]}",
|
|
117
|
+
"type": "function",
|
|
118
|
+
"function": {
|
|
119
|
+
"name": getattr(func_call, "name", None),
|
|
120
|
+
"arguments": getattr(func_call, "arguments", "{}"),
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
converted_choices.append(
|
|
100
126
|
{
|
|
101
|
-
"index":
|
|
102
|
-
"message":
|
|
103
|
-
|
|
104
|
-
"content": response.choices[0].message.content,
|
|
105
|
-
},
|
|
106
|
-
"finish_reason": response.choices[0].finish_reason,
|
|
127
|
+
"index": choice.index,
|
|
128
|
+
"message": msg_dict,
|
|
129
|
+
"finish_reason": choice.finish_reason,
|
|
107
130
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
return ChatCompletion.construct(
|
|
134
|
+
id=response.id,
|
|
135
|
+
choices=converted_choices,
|
|
136
|
+
created=getattr(response, "created", None),
|
|
137
|
+
model=getattr(response, "model", None),
|
|
138
|
+
object=getattr(response, "object", None),
|
|
139
|
+
system_fingerprint=getattr(response, "system_fingerprint", None),
|
|
140
|
+
usage=getattr(response, "usage", None),
|
|
114
141
|
)
|
|
115
142
|
|
|
116
143
|
@property
|
|
@@ -144,6 +171,13 @@ class LiteLLMModel(BaseModelBackend):
|
|
|
144
171
|
Returns:
|
|
145
172
|
ChatCompletion
|
|
146
173
|
"""
|
|
174
|
+
|
|
175
|
+
request_config = self.model_config_dict.copy()
|
|
176
|
+
if tools:
|
|
177
|
+
request_config['tools'] = tools
|
|
178
|
+
if response_format:
|
|
179
|
+
request_config['response_format'] = response_format
|
|
180
|
+
|
|
147
181
|
update_current_observation(
|
|
148
182
|
input={
|
|
149
183
|
"messages": messages,
|
|
@@ -152,19 +186,7 @@ class LiteLLMModel(BaseModelBackend):
|
|
|
152
186
|
model=str(self.model_type),
|
|
153
187
|
model_parameters=self.model_config_dict,
|
|
154
188
|
)
|
|
155
|
-
|
|
156
|
-
agent_session_id = get_current_agent_session_id()
|
|
157
|
-
if agent_session_id:
|
|
158
|
-
update_langfuse_trace(
|
|
159
|
-
session_id=agent_session_id,
|
|
160
|
-
metadata={
|
|
161
|
-
"source": "camel",
|
|
162
|
-
"agent_id": agent_session_id,
|
|
163
|
-
"agent_type": "camel_chat_agent",
|
|
164
|
-
"model_type": str(self.model_type),
|
|
165
|
-
},
|
|
166
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
167
|
-
)
|
|
189
|
+
self._log_and_trace()
|
|
168
190
|
|
|
169
191
|
response = self.client(
|
|
170
192
|
timeout=self._timeout,
|
|
@@ -172,7 +194,8 @@ class LiteLLMModel(BaseModelBackend):
|
|
|
172
194
|
base_url=self._url,
|
|
173
195
|
model=self.model_type,
|
|
174
196
|
messages=messages,
|
|
175
|
-
**
|
|
197
|
+
**request_config,
|
|
198
|
+
**self.kwargs,
|
|
176
199
|
)
|
|
177
200
|
response = self._convert_response_from_litellm_to_openai(response)
|
|
178
201
|
|
|
@@ -180,18 +203,3 @@ class LiteLLMModel(BaseModelBackend):
|
|
|
180
203
|
usage=response.usage,
|
|
181
204
|
)
|
|
182
205
|
return response
|
|
183
|
-
|
|
184
|
-
def check_model_config(self):
|
|
185
|
-
r"""Check whether the model configuration contains any unexpected
|
|
186
|
-
arguments to LiteLLM API.
|
|
187
|
-
|
|
188
|
-
Raises:
|
|
189
|
-
ValueError: If the model configuration dictionary contains any
|
|
190
|
-
unexpected arguments.
|
|
191
|
-
"""
|
|
192
|
-
for param in self.model_config_dict:
|
|
193
|
-
if param not in LITELLM_API_PARAMS:
|
|
194
|
-
raise ValueError(
|
|
195
|
-
f"Unexpected argument `{param}` is "
|
|
196
|
-
"input into LiteLLM model backend."
|
|
197
|
-
)
|
camel/models/lmstudio_model.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,11 +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-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
from typing import Any, Dict, Optional, Union
|
|
16
16
|
|
|
17
|
-
from camel.configs import
|
|
17
|
+
from camel.configs import LMStudioConfig
|
|
18
18
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
19
19
|
from camel.types import ModelType
|
|
20
20
|
from camel.utils import BaseTokenCounter
|
|
@@ -43,6 +43,10 @@ class LMStudioModel(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
|
def __init__(
|
|
@@ -53,6 +57,8 @@ class LMStudioModel(OpenAICompatibleModel):
|
|
|
53
57
|
url: Optional[str] = None,
|
|
54
58
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
55
59
|
timeout: Optional[float] = None,
|
|
60
|
+
max_retries: int = 3,
|
|
61
|
+
**kwargs: Any,
|
|
56
62
|
) -> None:
|
|
57
63
|
if model_config_dict is None:
|
|
58
64
|
model_config_dict = LMStudioConfig().as_dict()
|
|
@@ -62,21 +68,12 @@ class LMStudioModel(OpenAICompatibleModel):
|
|
|
62
68
|
)
|
|
63
69
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
64
70
|
super().__init__(
|
|
65
|
-
model_type,
|
|
71
|
+
model_type,
|
|
72
|
+
model_config_dict,
|
|
73
|
+
api_key,
|
|
74
|
+
url,
|
|
75
|
+
token_counter,
|
|
76
|
+
timeout,
|
|
77
|
+
max_retries=max_retries,
|
|
78
|
+
**kwargs,
|
|
66
79
|
)
|
|
67
|
-
|
|
68
|
-
def check_model_config(self):
|
|
69
|
-
r"""Check whether the model configuration contains any unexpected
|
|
70
|
-
arguments to LMStudio API. But LMStudio API does not have any
|
|
71
|
-
additional arguments to check.
|
|
72
|
-
|
|
73
|
-
Raises:
|
|
74
|
-
ValueError: If the model configuration dictionary contains any
|
|
75
|
-
unexpected arguments to LMStudio API.
|
|
76
|
-
"""
|
|
77
|
-
for param in self.model_config_dict:
|
|
78
|
-
if param not in LMSTUDIO_API_PARAMS:
|
|
79
|
-
raise ValueError(
|
|
80
|
-
f"Unexpected argument `{param}` is "
|
|
81
|
-
"input into LMStudio model backend."
|
|
82
|
-
)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
+
import os
|
|
15
|
+
from typing import Any, Dict, Optional, Union
|
|
16
|
+
|
|
17
|
+
from camel.configs import MinimaxConfig
|
|
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 MinimaxModel(OpenAICompatibleModel):
|
|
27
|
+
r"""LLM API served by Minimax 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:`MinimaxConfig().as_dict()` will be used.
|
|
36
|
+
(default: :obj:`None`)
|
|
37
|
+
api_key (Optional[str], optional): The API key for authenticating
|
|
38
|
+
with the Minimax service. (default: :obj:`None`).
|
|
39
|
+
url (Optional[str], optional): The url to the Minimax M2 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", "MINIMAX_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 = MinimaxConfig().as_dict()
|
|
69
|
+
api_key = api_key or os.environ.get("MINIMAX_API_KEY")
|
|
70
|
+
url = url or os.environ.get(
|
|
71
|
+
"MINIMAX_API_BASE_URL", "https://api.minimaxi.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/mistral_model.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type, Union
|
|
16
16
|
|
|
@@ -24,7 +24,7 @@ if TYPE_CHECKING:
|
|
|
24
24
|
|
|
25
25
|
from openai import AsyncStream
|
|
26
26
|
|
|
27
|
-
from camel.configs import
|
|
27
|
+
from camel.configs import MistralConfig
|
|
28
28
|
from camel.logger import get_logger
|
|
29
29
|
from camel.messages import OpenAIMessage
|
|
30
30
|
from camel.models import BaseModelBackend
|
|
@@ -35,9 +35,7 @@ from camel.utils import (
|
|
|
35
35
|
OpenAITokenCounter,
|
|
36
36
|
api_keys_required,
|
|
37
37
|
dependencies_required,
|
|
38
|
-
get_current_agent_session_id,
|
|
39
38
|
update_current_observation,
|
|
40
|
-
update_langfuse_trace,
|
|
41
39
|
)
|
|
42
40
|
|
|
43
41
|
logger = get_logger(__name__)
|
|
@@ -80,6 +78,10 @@ class MistralModel(BaseModelBackend):
|
|
|
80
78
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
81
79
|
environment variable or default to 180 seconds.
|
|
82
80
|
(default: :obj:`None`)
|
|
81
|
+
max_retries (int, optional): Maximum number of retries
|
|
82
|
+
for API calls. (default: :obj:`3`)
|
|
83
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
84
|
+
initialization.
|
|
83
85
|
"""
|
|
84
86
|
|
|
85
87
|
@api_keys_required(
|
|
@@ -96,6 +98,8 @@ class MistralModel(BaseModelBackend):
|
|
|
96
98
|
url: Optional[str] = None,
|
|
97
99
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
98
100
|
timeout: Optional[float] = None,
|
|
101
|
+
max_retries: int = 3,
|
|
102
|
+
**kwargs: Any,
|
|
99
103
|
) -> None:
|
|
100
104
|
from mistralai import Mistral
|
|
101
105
|
|
|
@@ -106,7 +110,14 @@ class MistralModel(BaseModelBackend):
|
|
|
106
110
|
url = url or os.environ.get("MISTRAL_API_BASE_URL")
|
|
107
111
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
108
112
|
super().__init__(
|
|
109
|
-
model_type,
|
|
113
|
+
model_type,
|
|
114
|
+
model_config_dict,
|
|
115
|
+
api_key,
|
|
116
|
+
url,
|
|
117
|
+
token_counter,
|
|
118
|
+
timeout,
|
|
119
|
+
max_retries,
|
|
120
|
+
**kwargs,
|
|
110
121
|
)
|
|
111
122
|
self._client = Mistral(
|
|
112
123
|
timeout_ms=int(self._timeout * 1000)
|
|
@@ -114,6 +125,7 @@ class MistralModel(BaseModelBackend):
|
|
|
114
125
|
else None,
|
|
115
126
|
api_key=self._api_key,
|
|
116
127
|
server_url=self._url,
|
|
128
|
+
**kwargs,
|
|
117
129
|
)
|
|
118
130
|
|
|
119
131
|
def _to_openai_response(
|
|
@@ -263,19 +275,7 @@ class MistralModel(BaseModelBackend):
|
|
|
263
275
|
model=str(self.model_type),
|
|
264
276
|
model_parameters=self.model_config_dict,
|
|
265
277
|
)
|
|
266
|
-
|
|
267
|
-
agent_session_id = get_current_agent_session_id()
|
|
268
|
-
if agent_session_id:
|
|
269
|
-
update_langfuse_trace(
|
|
270
|
-
session_id=agent_session_id,
|
|
271
|
-
metadata={
|
|
272
|
-
"source": "camel",
|
|
273
|
-
"agent_id": agent_session_id,
|
|
274
|
-
"agent_type": "camel_chat_agent",
|
|
275
|
-
"model_type": str(self.model_type),
|
|
276
|
-
},
|
|
277
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
278
|
-
)
|
|
278
|
+
self._log_and_trace()
|
|
279
279
|
|
|
280
280
|
request_config = self._prepare_request(
|
|
281
281
|
messages, response_format, tools
|
|
@@ -338,19 +338,7 @@ class MistralModel(BaseModelBackend):
|
|
|
338
338
|
model=str(self.model_type),
|
|
339
339
|
model_parameters=self.model_config_dict,
|
|
340
340
|
)
|
|
341
|
-
|
|
342
|
-
agent_session_id = get_current_agent_session_id()
|
|
343
|
-
if agent_session_id:
|
|
344
|
-
update_langfuse_trace(
|
|
345
|
-
session_id=agent_session_id,
|
|
346
|
-
metadata={
|
|
347
|
-
"source": "camel",
|
|
348
|
-
"agent_id": agent_session_id,
|
|
349
|
-
"agent_type": "camel_chat_agent",
|
|
350
|
-
"model_type": str(self.model_type),
|
|
351
|
-
},
|
|
352
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
353
|
-
)
|
|
341
|
+
self._log_and_trace()
|
|
354
342
|
|
|
355
343
|
request_config = self._prepare_request(
|
|
356
344
|
messages, response_format, tools
|
|
@@ -400,21 +388,6 @@ class MistralModel(BaseModelBackend):
|
|
|
400
388
|
|
|
401
389
|
return request_config
|
|
402
390
|
|
|
403
|
-
def check_model_config(self):
|
|
404
|
-
r"""Check whether the model configuration contains any
|
|
405
|
-
unexpected arguments to Mistral API.
|
|
406
|
-
|
|
407
|
-
Raises:
|
|
408
|
-
ValueError: If the model configuration dictionary contains any
|
|
409
|
-
unexpected arguments to Mistral API.
|
|
410
|
-
"""
|
|
411
|
-
for param in self.model_config_dict:
|
|
412
|
-
if param not in MISTRAL_API_PARAMS:
|
|
413
|
-
raise ValueError(
|
|
414
|
-
f"Unexpected argument `{param}` is "
|
|
415
|
-
"input into Mistral model backend."
|
|
416
|
-
)
|
|
417
|
-
|
|
418
391
|
@property
|
|
419
392
|
def stream(self) -> bool:
|
|
420
393
|
r"""Returns whether the model is in stream mode, which sends partial
|
camel/models/model_factory.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,27 +10,34 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import json
|
|
15
15
|
import os
|
|
16
|
-
from typing import ClassVar, Dict, Optional, Type, Union
|
|
16
|
+
from typing import Any, ClassVar, Dict, Optional, Type, Union
|
|
17
17
|
|
|
18
|
+
from camel.models.aihubmix_model import AihubMixModel
|
|
18
19
|
from camel.models.aiml_model import AIMLModel
|
|
20
|
+
from camel.models.amd_model import AMDModel
|
|
19
21
|
from camel.models.anthropic_model import AnthropicModel
|
|
20
22
|
from camel.models.aws_bedrock_model import AWSBedrockModel
|
|
21
23
|
from camel.models.azure_openai_model import AzureOpenAIModel
|
|
22
24
|
from camel.models.base_model import BaseModelBackend
|
|
25
|
+
from camel.models.cerebras_model import CerebrasModel
|
|
23
26
|
from camel.models.cohere_model import CohereModel
|
|
27
|
+
from camel.models.cometapi_model import CometAPIModel
|
|
24
28
|
from camel.models.crynux_model import CrynuxModel
|
|
25
29
|
from camel.models.deepseek_model import DeepSeekModel
|
|
30
|
+
from camel.models.function_gemma_model import FunctionGemmaModel
|
|
26
31
|
from camel.models.gemini_model import GeminiModel
|
|
27
32
|
from camel.models.groq_model import GroqModel
|
|
28
33
|
from camel.models.internlm_model import InternLMModel
|
|
29
34
|
from camel.models.litellm_model import LiteLLMModel
|
|
30
35
|
from camel.models.lmstudio_model import LMStudioModel
|
|
36
|
+
from camel.models.minimax_model import MinimaxModel
|
|
31
37
|
from camel.models.mistral_model import MistralModel
|
|
32
38
|
from camel.models.modelscope_model import ModelScopeModel
|
|
33
39
|
from camel.models.moonshot_model import MoonshotModel
|
|
40
|
+
from camel.models.nebius_model import NebiusModel
|
|
34
41
|
from camel.models.netmind_model import NetmindModel
|
|
35
42
|
from camel.models.novita_model import NovitaModel
|
|
36
43
|
from camel.models.nvidia_model import NvidiaModel
|
|
@@ -39,6 +46,7 @@ from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
|
39
46
|
from camel.models.openai_model import OpenAIModel
|
|
40
47
|
from camel.models.openrouter_model import OpenRouterModel
|
|
41
48
|
from camel.models.ppio_model import PPIOModel
|
|
49
|
+
from camel.models.qianfan_model import QianfanModel
|
|
42
50
|
from camel.models.qwen_model import QwenModel
|
|
43
51
|
from camel.models.reka_model import RekaModel
|
|
44
52
|
from camel.models.samba_model import SambaModel
|
|
@@ -75,6 +83,7 @@ class ModelFactory:
|
|
|
75
83
|
ModelPlatformType.AWS_BEDROCK: AWSBedrockModel,
|
|
76
84
|
ModelPlatformType.NVIDIA: NvidiaModel,
|
|
77
85
|
ModelPlatformType.SILICONFLOW: SiliconFlowModel,
|
|
86
|
+
ModelPlatformType.AMD: AMDModel,
|
|
78
87
|
ModelPlatformType.AIML: AIMLModel,
|
|
79
88
|
ModelPlatformType.VOLCANO: VolcanoModel,
|
|
80
89
|
ModelPlatformType.NETMIND: NetmindModel,
|
|
@@ -82,7 +91,11 @@ class ModelFactory:
|
|
|
82
91
|
ModelPlatformType.AZURE: AzureOpenAIModel,
|
|
83
92
|
ModelPlatformType.ANTHROPIC: AnthropicModel,
|
|
84
93
|
ModelPlatformType.GROQ: GroqModel,
|
|
94
|
+
ModelPlatformType.CEREBRAS: CerebrasModel,
|
|
95
|
+
ModelPlatformType.COMETAPI: CometAPIModel,
|
|
96
|
+
ModelPlatformType.NEBIUS: NebiusModel,
|
|
85
97
|
ModelPlatformType.LMSTUDIO: LMStudioModel,
|
|
98
|
+
ModelPlatformType.MINIMAX: MinimaxModel,
|
|
86
99
|
ModelPlatformType.OPENROUTER: OpenRouterModel,
|
|
87
100
|
ModelPlatformType.ZHIPU: ZhipuAIModel,
|
|
88
101
|
ModelPlatformType.GEMINI: GeminiModel,
|
|
@@ -98,7 +111,10 @@ class ModelFactory:
|
|
|
98
111
|
ModelPlatformType.MODELSCOPE: ModelScopeModel,
|
|
99
112
|
ModelPlatformType.NOVITA: NovitaModel,
|
|
100
113
|
ModelPlatformType.WATSONX: WatsonXModel,
|
|
114
|
+
ModelPlatformType.QIANFAN: QianfanModel,
|
|
101
115
|
ModelPlatformType.CRYNUX: CrynuxModel,
|
|
116
|
+
ModelPlatformType.AIHUBMIX: AihubMixModel,
|
|
117
|
+
ModelPlatformType.FUNCTION_GEMMA: FunctionGemmaModel,
|
|
102
118
|
}
|
|
103
119
|
|
|
104
120
|
@staticmethod
|
|
@@ -110,6 +126,9 @@ class ModelFactory:
|
|
|
110
126
|
api_key: Optional[str] = None,
|
|
111
127
|
url: Optional[str] = None,
|
|
112
128
|
timeout: Optional[float] = None,
|
|
129
|
+
max_retries: int = 3,
|
|
130
|
+
client: Optional[Any] = None,
|
|
131
|
+
async_client: Optional[Any] = None,
|
|
113
132
|
**kwargs,
|
|
114
133
|
) -> BaseModelBackend:
|
|
115
134
|
r"""Creates an instance of `BaseModelBackend` of the specified type.
|
|
@@ -134,6 +153,16 @@ class ModelFactory:
|
|
|
134
153
|
(default: :obj:`None`)
|
|
135
154
|
timeout (Optional[float], optional): The timeout value in seconds
|
|
136
155
|
for API calls. (default: :obj:`None`)
|
|
156
|
+
max_retries (int, optional): Maximum number of retries
|
|
157
|
+
for API calls. (default: :obj:`3`)
|
|
158
|
+
client (Optional[Any], optional): A custom synchronous client
|
|
159
|
+
instance. Supported by models that use OpenAI-compatible APIs
|
|
160
|
+
. The client should implement the appropriate client interface
|
|
161
|
+
for the platform. (default: :obj:`None`)
|
|
162
|
+
async_client (Optional[Any], optional): A custom asynchronous
|
|
163
|
+
client instance. Supported by models that use OpenAI-compatible
|
|
164
|
+
APIs. The client should implement the appropriate async client
|
|
165
|
+
interface for the platform. (default: :obj:`None`)
|
|
137
166
|
**kwargs: Additional model-specific parameters that will be passed
|
|
138
167
|
to the model constructor. For example, Azure OpenAI models may
|
|
139
168
|
require `api_version`, `azure_deployment_name`,
|
|
@@ -179,6 +208,12 @@ class ModelFactory:
|
|
|
179
208
|
if model_class is None:
|
|
180
209
|
raise ValueError(f"Unknown model platform `{model_platform}`")
|
|
181
210
|
|
|
211
|
+
# Pass client and async_client via kwargs if provided
|
|
212
|
+
if client is not None:
|
|
213
|
+
kwargs['client'] = client
|
|
214
|
+
if async_client is not None:
|
|
215
|
+
kwargs['async_client'] = async_client
|
|
216
|
+
|
|
182
217
|
return model_class(
|
|
183
218
|
model_type=model_type,
|
|
184
219
|
model_config_dict=model_config_dict,
|
|
@@ -186,6 +221,7 @@ class ModelFactory:
|
|
|
186
221
|
url=url,
|
|
187
222
|
token_counter=token_counter,
|
|
188
223
|
timeout=timeout,
|
|
224
|
+
max_retries=max_retries,
|
|
189
225
|
**kwargs,
|
|
190
226
|
)
|
|
191
227
|
|
camel/models/model_manager.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import asyncio
|
|
16
16
|
import logging
|
|
@@ -27,6 +27,10 @@ from typing import (
|
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
from openai import AsyncStream, Stream
|
|
30
|
+
from openai.lib.streaming.chat import (
|
|
31
|
+
AsyncChatCompletionStreamManager,
|
|
32
|
+
ChatCompletionStreamManager,
|
|
33
|
+
)
|
|
30
34
|
from pydantic import BaseModel
|
|
31
35
|
|
|
32
36
|
from camel.messages import OpenAIMessage
|
|
@@ -196,7 +200,11 @@ class ModelManager:
|
|
|
196
200
|
messages: List[OpenAIMessage],
|
|
197
201
|
response_format: Optional[Type[BaseModel]] = None,
|
|
198
202
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
199
|
-
) -> Union[
|
|
203
|
+
) -> Union[
|
|
204
|
+
ChatCompletion,
|
|
205
|
+
Stream[ChatCompletionChunk],
|
|
206
|
+
ChatCompletionStreamManager[BaseModel],
|
|
207
|
+
]:
|
|
200
208
|
r"""Process a list of messages by selecting a model based on
|
|
201
209
|
the scheduling strategy.
|
|
202
210
|
Sends the entire list of messages to the selected model,
|
|
@@ -207,9 +215,12 @@ class ModelManager:
|
|
|
207
215
|
history in OpenAI API format.
|
|
208
216
|
|
|
209
217
|
Returns:
|
|
210
|
-
Union[ChatCompletion, Stream[ChatCompletionChunk]
|
|
218
|
+
Union[ChatCompletion, Stream[ChatCompletionChunk],
|
|
219
|
+
ChatCompletionStreamManager[BaseModel]]:
|
|
211
220
|
`ChatCompletion` in the non-stream mode, or
|
|
212
|
-
`Stream[ChatCompletionChunk]` in the stream mode
|
|
221
|
+
`Stream[ChatCompletionChunk]` in the stream mode, or
|
|
222
|
+
`ChatCompletionStreamManager[BaseModel]` for
|
|
223
|
+
structured-output stream.
|
|
213
224
|
"""
|
|
214
225
|
self.current_model = self.scheduling_strategy()
|
|
215
226
|
|
|
@@ -233,7 +244,11 @@ class ModelManager:
|
|
|
233
244
|
messages: List[OpenAIMessage],
|
|
234
245
|
response_format: Optional[Type[BaseModel]] = None,
|
|
235
246
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
236
|
-
) -> Union[
|
|
247
|
+
) -> Union[
|
|
248
|
+
ChatCompletion,
|
|
249
|
+
AsyncStream[ChatCompletionChunk],
|
|
250
|
+
AsyncChatCompletionStreamManager[BaseModel],
|
|
251
|
+
]:
|
|
237
252
|
r"""Process a list of messages by selecting a model based on
|
|
238
253
|
the scheduling strategy.
|
|
239
254
|
Sends the entire list of messages to the selected model,
|
|
@@ -244,9 +259,12 @@ class ModelManager:
|
|
|
244
259
|
history in OpenAI API format.
|
|
245
260
|
|
|
246
261
|
Returns:
|
|
247
|
-
Union[ChatCompletion, AsyncStream[ChatCompletionChunk]
|
|
262
|
+
Union[ChatCompletion, AsyncStream[ChatCompletionChunk],
|
|
263
|
+
AsyncChatCompletionStreamManager[BaseModel]]:
|
|
248
264
|
`ChatCompletion` in the non-stream mode, or
|
|
249
|
-
`AsyncStream[ChatCompletionChunk]` in the stream mode
|
|
265
|
+
`AsyncStream[ChatCompletionChunk]` in the stream mode, or
|
|
266
|
+
`AsyncChatCompletionStreamManager[BaseModel]` for
|
|
267
|
+
structured-output stream.
|
|
250
268
|
"""
|
|
251
269
|
async with self.lock:
|
|
252
270
|
self.current_model = self.scheduling_strategy()
|