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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,14 +10,20 @@
|
|
|
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
|
+
import copy
|
|
14
15
|
import os
|
|
16
|
+
import warnings
|
|
15
17
|
from typing import Any, Callable, Dict, List, Optional, Type, Union
|
|
16
18
|
|
|
17
19
|
from openai import AsyncAzureOpenAI, AsyncStream, AzureOpenAI, Stream
|
|
20
|
+
from openai.lib.streaming.chat import (
|
|
21
|
+
AsyncChatCompletionStreamManager,
|
|
22
|
+
ChatCompletionStreamManager,
|
|
23
|
+
)
|
|
18
24
|
from pydantic import BaseModel
|
|
19
25
|
|
|
20
|
-
from camel.configs import
|
|
26
|
+
from camel.configs import ChatGPTConfig
|
|
21
27
|
from camel.messages import OpenAIMessage
|
|
22
28
|
from camel.models.base_model import BaseModelBackend
|
|
23
29
|
from camel.types import (
|
|
@@ -25,17 +31,38 @@ from camel.types import (
|
|
|
25
31
|
ChatCompletionChunk,
|
|
26
32
|
ModelType,
|
|
27
33
|
)
|
|
28
|
-
from camel.utils import
|
|
34
|
+
from camel.utils import (
|
|
35
|
+
BaseTokenCounter,
|
|
36
|
+
OpenAITokenCounter,
|
|
37
|
+
get_current_agent_session_id,
|
|
38
|
+
is_langfuse_available,
|
|
39
|
+
update_langfuse_trace,
|
|
40
|
+
)
|
|
29
41
|
|
|
30
42
|
AzureADTokenProvider = Callable[[], str]
|
|
31
43
|
|
|
32
44
|
|
|
45
|
+
if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
|
|
46
|
+
try:
|
|
47
|
+
from langfuse.decorators import observe
|
|
48
|
+
except ImportError:
|
|
49
|
+
from camel.utils import observe
|
|
50
|
+
elif os.environ.get("TRACEROOT_ENABLED", "False").lower() == "true":
|
|
51
|
+
try:
|
|
52
|
+
from traceroot import trace as observe # type: ignore[import]
|
|
53
|
+
except ImportError:
|
|
54
|
+
from camel.utils import observe
|
|
55
|
+
else:
|
|
56
|
+
from camel.utils import observe
|
|
57
|
+
|
|
58
|
+
|
|
33
59
|
class AzureOpenAIModel(BaseModelBackend):
|
|
34
60
|
r"""Azure OpenAI API in a unified BaseModelBackend interface.
|
|
35
61
|
|
|
36
62
|
Args:
|
|
37
63
|
model_type (Union[ModelType, str]): Model for which a backend is
|
|
38
|
-
created,
|
|
64
|
+
created, Should be the deployment name you chose when you deployed
|
|
65
|
+
an azure model.
|
|
39
66
|
model_config_dict (Optional[Dict[str, Any]], optional): A dictionary
|
|
40
67
|
that will be fed into:obj:`openai.ChatCompletion.create()`. If
|
|
41
68
|
:obj:`None`, :obj:`ChatGPTConfig().as_dict()` will be used.
|
|
@@ -46,8 +73,6 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
46
73
|
(default: :obj:`None`)
|
|
47
74
|
api_version (Optional[str], optional): The api version for the model.
|
|
48
75
|
(default: :obj:`None`)
|
|
49
|
-
azure_deployment_name (Optional[str], optional): The deployment name
|
|
50
|
-
you chose when you deployed an azure model. (default: :obj:`None`)
|
|
51
76
|
azure_ad_token (Optional[str], optional): Your Azure Active Directory
|
|
52
77
|
token, https://www.microsoft.com/en-us/security/business/
|
|
53
78
|
identity-access/microsoft-entra-id. (default: :obj:`None`)
|
|
@@ -61,6 +86,25 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
61
86
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
62
87
|
environment variable or default to 180 seconds.
|
|
63
88
|
(default: :obj:`None`)
|
|
89
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
90
|
+
(default: :obj:`3`)
|
|
91
|
+
client (Optional[Any], optional): A custom synchronous AzureOpenAI
|
|
92
|
+
client instance. If provided, this client will be used instead of
|
|
93
|
+
creating a new one. Useful for RL frameworks like AReaL or rLLM
|
|
94
|
+
that provide Azure OpenAI-compatible clients. The client should
|
|
95
|
+
implement the AzureOpenAI client interface with
|
|
96
|
+
`.chat.completions.create()` and `.beta.chat.completions.parse()`
|
|
97
|
+
methods. (default: :obj:`None`)
|
|
98
|
+
async_client (Optional[Any], optional): A custom asynchronous
|
|
99
|
+
AzureOpenAI client instance. If provided, this client will be
|
|
100
|
+
used instead of creating a new one. The client should implement
|
|
101
|
+
the AsyncAzureOpenAI client interface. (default: :obj:`None`)
|
|
102
|
+
azure_deployment_name (Optional[str], optional): **Deprecated**.
|
|
103
|
+
Use `model_type` parameter instead. This parameter is kept for
|
|
104
|
+
backward compatibility and will be removed in a future version.
|
|
105
|
+
(default: :obj:`None`)
|
|
106
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
107
|
+
initialization. Ignored if custom clients are provided.
|
|
64
108
|
|
|
65
109
|
References:
|
|
66
110
|
https://learn.microsoft.com/en-us/azure/ai-services/openai/
|
|
@@ -75,10 +119,35 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
75
119
|
timeout: Optional[float] = None,
|
|
76
120
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
77
121
|
api_version: Optional[str] = None,
|
|
78
|
-
azure_deployment_name: Optional[str] = None,
|
|
79
122
|
azure_ad_token_provider: Optional["AzureADTokenProvider"] = None,
|
|
80
123
|
azure_ad_token: Optional[str] = None,
|
|
124
|
+
max_retries: int = 3,
|
|
125
|
+
client: Optional[Any] = None,
|
|
126
|
+
async_client: Optional[Any] = None,
|
|
127
|
+
azure_deployment_name: Optional[str] = None,
|
|
128
|
+
**kwargs: Any,
|
|
81
129
|
) -> None:
|
|
130
|
+
# Handle deprecated azure_deployment_name parameter
|
|
131
|
+
if azure_deployment_name is not None:
|
|
132
|
+
warnings.warn(
|
|
133
|
+
"The 'azure_deployment_name' parameter is deprecated. "
|
|
134
|
+
"Please use 'model_type' parameter instead. "
|
|
135
|
+
"The 'azure_deployment_name' parameter is being ignored.",
|
|
136
|
+
DeprecationWarning,
|
|
137
|
+
stacklevel=2,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
# Handle deprecated AZURE_DEPLOYMENT_NAME environment variable
|
|
141
|
+
if os.environ.get("AZURE_DEPLOYMENT_NAME") is not None:
|
|
142
|
+
warnings.warn(
|
|
143
|
+
"The 'AZURE_DEPLOYMENT_NAME' environment variable is "
|
|
144
|
+
"deprecated. Please use the 'model_type' parameter "
|
|
145
|
+
"instead. The 'AZURE_DEPLOYMENT_NAME' environment "
|
|
146
|
+
"variable is being ignored.",
|
|
147
|
+
DeprecationWarning,
|
|
148
|
+
stacklevel=2,
|
|
149
|
+
)
|
|
150
|
+
|
|
82
151
|
if model_config_dict is None:
|
|
83
152
|
model_config_dict = ChatGPTConfig().as_dict()
|
|
84
153
|
api_key = api_key or os.environ.get("AZURE_OPENAI_API_KEY")
|
|
@@ -89,9 +158,6 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
89
158
|
)
|
|
90
159
|
|
|
91
160
|
self.api_version = api_version or os.environ.get("AZURE_API_VERSION")
|
|
92
|
-
self._azure_deployment_name = azure_deployment_name or os.environ.get(
|
|
93
|
-
"AZURE_DEPLOYMENT_NAME"
|
|
94
|
-
)
|
|
95
161
|
self._azure_ad_token = azure_ad_token or os.environ.get(
|
|
96
162
|
"AZURE_AD_TOKEN"
|
|
97
163
|
)
|
|
@@ -101,33 +167,73 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
101
167
|
"Must provide either the `api_version` argument "
|
|
102
168
|
"or `AZURE_API_VERSION` environment variable."
|
|
103
169
|
)
|
|
104
|
-
if self._azure_deployment_name is None:
|
|
105
|
-
raise ValueError(
|
|
106
|
-
"Must provide either the `azure_deployment_name` argument "
|
|
107
|
-
"or `AZURE_DEPLOYMENT_NAME` environment variable."
|
|
108
|
-
)
|
|
109
170
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
171
|
+
# Use custom clients if provided, otherwise create new ones
|
|
172
|
+
if client is not None:
|
|
173
|
+
# Use the provided custom sync client
|
|
174
|
+
self._client = client
|
|
175
|
+
else:
|
|
176
|
+
# Create default sync client
|
|
177
|
+
if is_langfuse_available():
|
|
178
|
+
from langfuse.openai import AzureOpenAI as LangfuseOpenAI
|
|
179
|
+
|
|
180
|
+
self._client = LangfuseOpenAI(
|
|
181
|
+
azure_endpoint=str(self._url),
|
|
182
|
+
azure_deployment=str(self.model_type),
|
|
183
|
+
api_version=self.api_version,
|
|
184
|
+
api_key=self._api_key,
|
|
185
|
+
azure_ad_token=self._azure_ad_token,
|
|
186
|
+
azure_ad_token_provider=self.azure_ad_token_provider,
|
|
187
|
+
timeout=self._timeout,
|
|
188
|
+
max_retries=max_retries,
|
|
189
|
+
**kwargs,
|
|
190
|
+
)
|
|
191
|
+
else:
|
|
192
|
+
self._client = AzureOpenAI(
|
|
193
|
+
azure_endpoint=str(self._url),
|
|
194
|
+
azure_deployment=str(self.model_type),
|
|
195
|
+
api_version=self.api_version,
|
|
196
|
+
api_key=self._api_key,
|
|
197
|
+
azure_ad_token=self._azure_ad_token,
|
|
198
|
+
azure_ad_token_provider=self.azure_ad_token_provider,
|
|
199
|
+
timeout=self._timeout,
|
|
200
|
+
max_retries=max_retries,
|
|
201
|
+
**kwargs,
|
|
202
|
+
)
|
|
120
203
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
204
|
+
if async_client is not None:
|
|
205
|
+
# Use the provided custom async client
|
|
206
|
+
self._async_client = async_client
|
|
207
|
+
else:
|
|
208
|
+
# Create default async client
|
|
209
|
+
if is_langfuse_available():
|
|
210
|
+
from langfuse.openai import (
|
|
211
|
+
AsyncAzureOpenAI as LangfuseAsyncOpenAI,
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
self._async_client = LangfuseAsyncOpenAI(
|
|
215
|
+
azure_endpoint=str(self._url),
|
|
216
|
+
azure_deployment=str(self.model_type),
|
|
217
|
+
api_version=self.api_version,
|
|
218
|
+
api_key=self._api_key,
|
|
219
|
+
azure_ad_token=self._azure_ad_token,
|
|
220
|
+
azure_ad_token_provider=self.azure_ad_token_provider,
|
|
221
|
+
timeout=self._timeout,
|
|
222
|
+
max_retries=max_retries,
|
|
223
|
+
**kwargs,
|
|
224
|
+
)
|
|
225
|
+
else:
|
|
226
|
+
self._async_client = AsyncAzureOpenAI(
|
|
227
|
+
azure_endpoint=str(self._url),
|
|
228
|
+
azure_deployment=str(self.model_type),
|
|
229
|
+
api_version=self.api_version,
|
|
230
|
+
api_key=self._api_key,
|
|
231
|
+
azure_ad_token=self._azure_ad_token,
|
|
232
|
+
azure_ad_token_provider=self.azure_ad_token_provider,
|
|
233
|
+
timeout=self._timeout,
|
|
234
|
+
max_retries=max_retries,
|
|
235
|
+
**kwargs,
|
|
236
|
+
)
|
|
131
237
|
|
|
132
238
|
@property
|
|
133
239
|
def token_counter(self) -> BaseTokenCounter:
|
|
@@ -141,12 +247,17 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
141
247
|
self._token_counter = OpenAITokenCounter(self.model_type)
|
|
142
248
|
return self._token_counter
|
|
143
249
|
|
|
250
|
+
@observe()
|
|
144
251
|
def _run(
|
|
145
252
|
self,
|
|
146
253
|
messages: List[OpenAIMessage],
|
|
147
254
|
response_format: Optional[Type[BaseModel]] = None,
|
|
148
255
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
149
|
-
) -> Union[
|
|
256
|
+
) -> Union[
|
|
257
|
+
ChatCompletion,
|
|
258
|
+
Stream[ChatCompletionChunk],
|
|
259
|
+
ChatCompletionStreamManager[BaseModel],
|
|
260
|
+
]:
|
|
150
261
|
r"""Runs inference of Azure OpenAI chat completion.
|
|
151
262
|
|
|
152
263
|
Args:
|
|
@@ -161,21 +272,49 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
161
272
|
Union[ChatCompletion, Stream[ChatCompletionChunk]]:
|
|
162
273
|
`ChatCompletion` in the non-stream mode, or
|
|
163
274
|
`Stream[ChatCompletionChunk]` in the stream mode.
|
|
275
|
+
`ChatCompletionStreamManager[BaseModel]` for
|
|
276
|
+
structured output streaming.
|
|
164
277
|
"""
|
|
278
|
+
|
|
279
|
+
# Update Langfuse trace with current agent session and metadata
|
|
280
|
+
agent_session_id = get_current_agent_session_id()
|
|
281
|
+
if agent_session_id:
|
|
282
|
+
update_langfuse_trace(
|
|
283
|
+
session_id=agent_session_id,
|
|
284
|
+
metadata={
|
|
285
|
+
"agent_id": agent_session_id,
|
|
286
|
+
"model_type": str(self.model_type),
|
|
287
|
+
},
|
|
288
|
+
tags=["CAMEL-AI", str(self.model_type)],
|
|
289
|
+
)
|
|
290
|
+
|
|
165
291
|
response_format = response_format or self.model_config_dict.get(
|
|
166
292
|
"response_format", None
|
|
167
293
|
)
|
|
294
|
+
is_streaming = self.model_config_dict.get("stream", False)
|
|
168
295
|
if response_format:
|
|
169
|
-
|
|
296
|
+
if is_streaming:
|
|
297
|
+
return self._request_stream_parse(
|
|
298
|
+
messages, response_format, tools
|
|
299
|
+
)
|
|
300
|
+
else:
|
|
301
|
+
return self._request_parse(messages, response_format, tools)
|
|
170
302
|
else:
|
|
171
|
-
|
|
303
|
+
result = self._request_chat_completion(messages, tools)
|
|
304
|
+
|
|
305
|
+
return result
|
|
172
306
|
|
|
307
|
+
@observe()
|
|
173
308
|
async def _arun(
|
|
174
309
|
self,
|
|
175
310
|
messages: List[OpenAIMessage],
|
|
176
311
|
response_format: Optional[Type[BaseModel]] = None,
|
|
177
312
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
178
|
-
) -> Union[
|
|
313
|
+
) -> Union[
|
|
314
|
+
ChatCompletion,
|
|
315
|
+
AsyncStream[ChatCompletionChunk],
|
|
316
|
+
AsyncChatCompletionStreamManager[BaseModel],
|
|
317
|
+
]:
|
|
179
318
|
r"""Runs inference of Azure OpenAI chat completion.
|
|
180
319
|
|
|
181
320
|
Args:
|
|
@@ -187,17 +326,43 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
187
326
|
use for the request.
|
|
188
327
|
|
|
189
328
|
Returns:
|
|
190
|
-
Union[ChatCompletion, AsyncStream[ChatCompletionChunk]
|
|
329
|
+
Union[ChatCompletion, AsyncStream[ChatCompletionChunk],
|
|
330
|
+
AsyncChatCompletionStreamManager[BaseModel]]:
|
|
191
331
|
`ChatCompletion` in the non-stream mode, or
|
|
192
332
|
`AsyncStream[ChatCompletionChunk]` in the stream mode.
|
|
333
|
+
`AsyncChatCompletionStreamManager[BaseModel]` for
|
|
334
|
+
structured output streaming.
|
|
193
335
|
"""
|
|
336
|
+
|
|
337
|
+
# Update Langfuse trace with current agent session and metadata
|
|
338
|
+
agent_session_id = get_current_agent_session_id()
|
|
339
|
+
if agent_session_id:
|
|
340
|
+
update_langfuse_trace(
|
|
341
|
+
session_id=agent_session_id,
|
|
342
|
+
metadata={
|
|
343
|
+
"agent_id": agent_session_id,
|
|
344
|
+
"model_type": str(self.model_type),
|
|
345
|
+
},
|
|
346
|
+
tags=["CAMEL-AI", str(self.model_type)],
|
|
347
|
+
)
|
|
348
|
+
|
|
194
349
|
response_format = response_format or self.model_config_dict.get(
|
|
195
350
|
"response_format", None
|
|
196
351
|
)
|
|
352
|
+
is_streaming = self.model_config_dict.get("stream", False)
|
|
197
353
|
if response_format:
|
|
198
|
-
|
|
354
|
+
if is_streaming:
|
|
355
|
+
return await self._arequest_stream_parse(
|
|
356
|
+
messages, response_format, tools
|
|
357
|
+
)
|
|
358
|
+
else:
|
|
359
|
+
return await self._arequest_parse(
|
|
360
|
+
messages, response_format, tools
|
|
361
|
+
)
|
|
199
362
|
else:
|
|
200
|
-
|
|
363
|
+
result = await self._arequest_chat_completion(messages, tools)
|
|
364
|
+
|
|
365
|
+
return result
|
|
201
366
|
|
|
202
367
|
def _request_chat_completion(
|
|
203
368
|
self,
|
|
@@ -211,7 +376,7 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
211
376
|
|
|
212
377
|
return self._client.chat.completions.create(
|
|
213
378
|
messages=messages,
|
|
214
|
-
model=self.
|
|
379
|
+
model=str(self.model_type),
|
|
215
380
|
**request_config,
|
|
216
381
|
)
|
|
217
382
|
|
|
@@ -227,7 +392,7 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
227
392
|
|
|
228
393
|
return await self._async_client.chat.completions.create(
|
|
229
394
|
messages=messages,
|
|
230
|
-
model=self.
|
|
395
|
+
model=str(self.model_type),
|
|
231
396
|
**request_config,
|
|
232
397
|
)
|
|
233
398
|
|
|
@@ -237,8 +402,6 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
237
402
|
response_format: Type[BaseModel],
|
|
238
403
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
239
404
|
) -> ChatCompletion:
|
|
240
|
-
import copy
|
|
241
|
-
|
|
242
405
|
request_config = copy.deepcopy(self.model_config_dict)
|
|
243
406
|
|
|
244
407
|
request_config["response_format"] = response_format
|
|
@@ -250,7 +413,7 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
250
413
|
|
|
251
414
|
return self._client.beta.chat.completions.parse(
|
|
252
415
|
messages=messages,
|
|
253
|
-
model=self.
|
|
416
|
+
model=str(self.model_type),
|
|
254
417
|
**request_config,
|
|
255
418
|
)
|
|
256
419
|
|
|
@@ -260,8 +423,6 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
260
423
|
response_format: Type[BaseModel],
|
|
261
424
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
262
425
|
) -> ChatCompletion:
|
|
263
|
-
import copy
|
|
264
|
-
|
|
265
426
|
request_config = copy.deepcopy(self.model_config_dict)
|
|
266
427
|
|
|
267
428
|
request_config["response_format"] = response_format
|
|
@@ -273,24 +434,63 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
273
434
|
|
|
274
435
|
return await self._async_client.beta.chat.completions.parse(
|
|
275
436
|
messages=messages,
|
|
276
|
-
model=self.
|
|
437
|
+
model=str(self.model_type),
|
|
277
438
|
**request_config,
|
|
278
439
|
)
|
|
279
440
|
|
|
280
|
-
def
|
|
281
|
-
|
|
282
|
-
|
|
441
|
+
def _request_stream_parse(
|
|
442
|
+
self,
|
|
443
|
+
messages: List[OpenAIMessage],
|
|
444
|
+
response_format: Type[BaseModel],
|
|
445
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
446
|
+
) -> ChatCompletionStreamManager[BaseModel]:
|
|
447
|
+
r"""Request streaming structured output parsing.
|
|
283
448
|
|
|
284
|
-
|
|
285
|
-
ValueError: If the model configuration dictionary contains any
|
|
286
|
-
unexpected arguments to Azure OpenAI API.
|
|
449
|
+
Note: This uses OpenAI's beta streaming API for structured outputs.
|
|
287
450
|
"""
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
451
|
+
|
|
452
|
+
request_config = copy.deepcopy(self.model_config_dict)
|
|
453
|
+
|
|
454
|
+
# Remove stream from config as it's handled by the stream method
|
|
455
|
+
request_config.pop("stream", None)
|
|
456
|
+
|
|
457
|
+
if tools is not None:
|
|
458
|
+
request_config["tools"] = tools
|
|
459
|
+
|
|
460
|
+
# Use the beta streaming API for structured outputs
|
|
461
|
+
return self._client.beta.chat.completions.stream(
|
|
462
|
+
messages=messages,
|
|
463
|
+
model=str(self.model_type),
|
|
464
|
+
response_format=response_format,
|
|
465
|
+
**request_config,
|
|
466
|
+
)
|
|
467
|
+
|
|
468
|
+
async def _arequest_stream_parse(
|
|
469
|
+
self,
|
|
470
|
+
messages: List[OpenAIMessage],
|
|
471
|
+
response_format: Type[BaseModel],
|
|
472
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
473
|
+
) -> AsyncChatCompletionStreamManager[BaseModel]:
|
|
474
|
+
r"""Request async streaming structured output parsing.
|
|
475
|
+
|
|
476
|
+
Note: This uses OpenAI's beta streaming API for structured outputs.
|
|
477
|
+
"""
|
|
478
|
+
|
|
479
|
+
request_config = copy.deepcopy(self.model_config_dict)
|
|
480
|
+
|
|
481
|
+
# Remove stream from config as it's handled by the stream method
|
|
482
|
+
request_config.pop("stream", None)
|
|
483
|
+
|
|
484
|
+
if tools is not None:
|
|
485
|
+
request_config["tools"] = tools
|
|
486
|
+
|
|
487
|
+
# Use the beta streaming API for structured outputs
|
|
488
|
+
return self._async_client.beta.chat.completions.stream(
|
|
489
|
+
messages=messages,
|
|
490
|
+
model=str(self.model_type),
|
|
491
|
+
response_format=response_format,
|
|
492
|
+
**request_config,
|
|
493
|
+
)
|
|
294
494
|
|
|
295
495
|
@property
|
|
296
496
|
def stream(self) -> bool:
|
camel/models/base_audio_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,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-2025 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import os
|
|
16
16
|
from abc import ABC, abstractmethod
|
|
17
17
|
from typing import Any, Optional
|
|
18
18
|
|
|
19
|
+
from camel.utils import Constants
|
|
20
|
+
|
|
19
21
|
|
|
20
22
|
class BaseAudioModel(ABC):
|
|
21
23
|
r"""Base class for audio models providing Text-to-Speech (TTS) and
|
|
@@ -26,7 +28,7 @@ class BaseAudioModel(ABC):
|
|
|
26
28
|
self,
|
|
27
29
|
api_key: Optional[str] = None,
|
|
28
30
|
url: Optional[str] = None,
|
|
29
|
-
timeout: Optional[float] =
|
|
31
|
+
timeout: Optional[float] = Constants.TIMEOUT_THRESHOLD,
|
|
30
32
|
) -> None:
|
|
31
33
|
r"""Initialize an instance of BaseAudioModel.
|
|
32
34
|
|