camel-ai 0.2.65__py3-none-any.whl → 0.2.82__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of camel-ai might be problematic. Click here for more details.
- camel/__init__.py +3 -3
- camel/agents/__init__.py +2 -2
- camel/agents/_types.py +9 -4
- camel/agents/_utils.py +40 -2
- camel/agents/base.py +2 -2
- camel/agents/chat_agent.py +4835 -947
- camel/agents/critic_agent.py +2 -2
- camel/agents/deductive_reasoner_agent.py +56 -56
- camel/agents/embodied_agent.py +2 -2
- camel/agents/knowledge_graph_agent.py +20 -20
- camel/agents/mcp_agent.py +35 -36
- camel/agents/multi_hop_generator_agent.py +3 -3
- camel/agents/programmed_agent_instruction.py +2 -2
- camel/agents/repo_agent.py +4 -3
- camel/agents/role_assignment_agent.py +2 -2
- camel/agents/search_agent.py +2 -2
- camel/agents/task_agent.py +2 -2
- camel/agents/tool_agents/__init__.py +2 -2
- camel/agents/tool_agents/base.py +2 -2
- camel/agents/tool_agents/hugging_face_tool_agent.py +3 -3
- camel/benchmarks/__init__.py +2 -2
- camel/benchmarks/apibank.py +5 -5
- camel/benchmarks/apibench.py +2 -2
- camel/benchmarks/base.py +2 -2
- camel/benchmarks/browsecomp.py +44 -33
- camel/benchmarks/gaia.py +17 -13
- camel/benchmarks/mock_website/README.md +1 -3
- camel/benchmarks/mock_website/mock_web.py +2 -2
- camel/benchmarks/mock_website/requirements.txt +1 -1
- camel/benchmarks/mock_website/shopping_mall/app.py +2 -2
- camel/benchmarks/mock_website/task.json +1 -1
- camel/benchmarks/nexus.py +3 -3
- camel/benchmarks/ragbench.py +2 -2
- camel/bots/__init__.py +2 -2
- camel/bots/discord/__init__.py +2 -2
- camel/bots/discord/discord_app.py +2 -2
- camel/bots/discord/discord_installation.py +2 -2
- camel/bots/discord/discord_store.py +3 -3
- camel/bots/slack/__init__.py +2 -2
- camel/bots/slack/models.py +4 -4
- camel/bots/slack/slack_app.py +2 -2
- camel/bots/telegram_bot.py +2 -2
- camel/configs/__init__.py +23 -2
- camel/configs/aihubmix_config.py +90 -0
- camel/configs/aiml_config.py +2 -2
- camel/configs/amd_config.py +70 -0
- camel/configs/anthropic_config.py +2 -2
- camel/configs/base_config.py +2 -2
- camel/configs/bedrock_config.py +5 -3
- camel/configs/cerebras_config.py +98 -0
- camel/configs/cohere_config.py +2 -2
- camel/configs/cometapi_config.py +106 -0
- camel/configs/crynux_config.py +2 -2
- camel/configs/deepseek_config.py +9 -8
- camel/configs/gemini_config.py +6 -4
- camel/configs/groq_config.py +6 -4
- camel/configs/internlm_config.py +6 -4
- camel/configs/litellm_config.py +2 -2
- camel/configs/lmstudio_config.py +6 -4
- camel/configs/minimax_config.py +95 -0
- camel/configs/mistral_config.py +2 -2
- camel/configs/modelscope_config.py +5 -3
- camel/configs/moonshot_config.py +2 -2
- camel/configs/nebius_config.py +105 -0
- camel/configs/netmind_config.py +2 -2
- camel/configs/novita_config.py +2 -2
- camel/configs/nvidia_config.py +2 -2
- camel/configs/ollama_config.py +2 -2
- camel/configs/openai_config.py +5 -3
- camel/configs/openrouter_config.py +6 -4
- camel/configs/ppio_config.py +2 -2
- camel/configs/qianfan_config.py +85 -0
- camel/configs/qwen_config.py +2 -2
- camel/configs/reka_config.py +2 -2
- camel/configs/samba_config.py +6 -4
- camel/configs/sglang_config.py +2 -2
- camel/configs/siliconflow_config.py +2 -2
- camel/configs/togetherai_config.py +2 -2
- camel/configs/vllm_config.py +4 -2
- camel/configs/watsonx_config.py +2 -2
- camel/configs/yi_config.py +6 -4
- camel/configs/zhipuai_config.py +6 -4
- camel/data_collectors/__init__.py +2 -2
- camel/data_collectors/alpaca_collector.py +18 -9
- camel/data_collectors/base.py +2 -2
- camel/data_collectors/sharegpt_collector.py +2 -2
- camel/datagen/__init__.py +2 -2
- camel/datagen/cot_datagen.py +3 -3
- camel/datagen/evol_instruct/__init__.py +2 -2
- camel/datagen/evol_instruct/evol_instruct.py +2 -2
- camel/datagen/evol_instruct/scorer.py +12 -12
- camel/datagen/evol_instruct/templates.py +16 -16
- camel/datagen/self_improving_cot.py +5 -5
- camel/datagen/self_instruct/__init__.py +2 -2
- camel/datagen/self_instruct/filter/__init__.py +2 -2
- camel/datagen/self_instruct/filter/filter_function.py +2 -2
- camel/datagen/self_instruct/filter/filter_registry.py +2 -2
- camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
- camel/datagen/self_instruct/self_instruct.py +2 -2
- camel/datagen/self_instruct/templates.py +47 -47
- camel/datagen/source2synth/__init__.py +2 -2
- camel/datagen/source2synth/data_processor.py +2 -2
- camel/datagen/source2synth/models.py +2 -2
- camel/datagen/source2synth/user_data_processor_config.py +2 -2
- camel/datahubs/__init__.py +2 -2
- camel/datahubs/base.py +2 -2
- camel/datahubs/huggingface.py +2 -2
- camel/datahubs/models.py +2 -2
- camel/datasets/__init__.py +2 -2
- camel/datasets/base_generator.py +41 -12
- camel/datasets/few_shot_generator.py +18 -18
- camel/datasets/models.py +2 -2
- camel/datasets/self_instruct_generator.py +2 -2
- camel/datasets/static_dataset.py +2 -2
- camel/embeddings/__init__.py +2 -2
- camel/embeddings/azure_embedding.py +2 -2
- camel/embeddings/base.py +2 -2
- camel/embeddings/gemini_embedding.py +2 -2
- camel/embeddings/jina_embedding.py +2 -2
- camel/embeddings/mistral_embedding.py +2 -2
- camel/embeddings/openai_compatible_embedding.py +2 -2
- camel/embeddings/openai_embedding.py +2 -2
- camel/embeddings/sentence_transformers_embeddings.py +2 -2
- camel/embeddings/together_embedding.py +2 -2
- camel/embeddings/vlm_embedding.py +2 -2
- camel/environments/__init__.py +14 -2
- camel/environments/models.py +2 -2
- camel/environments/multi_step.py +2 -2
- camel/environments/rlcards_env.py +860 -0
- camel/environments/single_step.py +30 -5
- camel/environments/tic_tac_toe.py +3 -3
- camel/extractors/__init__.py +2 -2
- camel/extractors/base.py +2 -2
- camel/extractors/python_strategies.py +2 -2
- camel/generators.py +2 -2
- camel/human.py +2 -2
- camel/interpreters/__init__.py +4 -2
- camel/interpreters/base.py +2 -2
- camel/interpreters/docker/Dockerfile +14 -24
- camel/interpreters/docker_interpreter.py +5 -4
- camel/interpreters/e2b_interpreter.py +36 -3
- camel/interpreters/internal_python_interpreter.py +53 -4
- camel/interpreters/interpreter_error.py +2 -2
- camel/interpreters/ipython_interpreter.py +2 -2
- camel/interpreters/microsandbox_interpreter.py +395 -0
- camel/interpreters/subprocess_interpreter.py +2 -2
- camel/loaders/__init__.py +13 -4
- camel/loaders/apify_reader.py +2 -2
- camel/loaders/base_io.py +2 -2
- camel/loaders/base_loader.py +85 -0
- camel/loaders/chunkr_reader.py +11 -2
- camel/loaders/crawl4ai_reader.py +2 -2
- camel/loaders/firecrawl_reader.py +6 -6
- camel/loaders/jina_url_reader.py +2 -2
- camel/loaders/markitdown.py +2 -2
- camel/loaders/mineru_extractor.py +2 -2
- camel/loaders/mistral_reader.py +2 -2
- camel/loaders/scrapegraph_reader.py +2 -2
- camel/loaders/unstructured_io.py +2 -2
- camel/logger.py +5 -5
- camel/memories/__init__.py +2 -2
- camel/memories/agent_memories.py +86 -3
- camel/memories/base.py +36 -2
- camel/memories/blocks/__init__.py +2 -2
- camel/memories/blocks/chat_history_block.py +125 -7
- camel/memories/blocks/vectordb_block.py +10 -3
- camel/memories/context_creators/__init__.py +2 -2
- camel/memories/context_creators/score_based.py +31 -239
- camel/memories/records.py +90 -10
- camel/messages/__init__.py +2 -2
- camel/messages/base.py +178 -43
- camel/messages/conversion/__init__.py +2 -2
- camel/messages/conversion/alpaca.py +2 -2
- camel/messages/conversion/conversation_models.py +2 -2
- camel/messages/conversion/sharegpt/__init__.py +2 -2
- camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
- camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
- camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
- camel/messages/func_message.py +54 -17
- camel/models/__init__.py +16 -2
- camel/models/_utils.py +3 -3
- camel/models/aihubmix_model.py +83 -0
- camel/models/aiml_model.py +11 -18
- camel/models/amd_model.py +101 -0
- camel/models/anthropic_model.py +127 -20
- camel/models/aws_bedrock_model.py +12 -35
- camel/models/azure_openai_model.py +212 -89
- camel/models/base_audio_model.py +5 -3
- camel/models/base_model.py +195 -26
- camel/models/cerebras_model.py +83 -0
- camel/models/cohere_model.py +16 -21
- camel/models/cometapi_model.py +83 -0
- camel/models/crynux_model.py +11 -18
- camel/models/deepseek_model.py +18 -58
- camel/models/fish_audio_model.py +8 -2
- camel/models/gemini_model.py +389 -26
- camel/models/groq_model.py +11 -19
- camel/models/internlm_model.py +11 -18
- camel/models/litellm_model.py +56 -34
- camel/models/lmstudio_model.py +17 -20
- camel/models/minimax_model.py +83 -0
- camel/models/mistral_model.py +18 -19
- camel/models/model_factory.py +37 -3
- camel/models/model_manager.py +26 -8
- camel/models/modelscope_model.py +13 -193
- camel/models/moonshot_model.py +195 -21
- camel/models/nebius_model.py +83 -0
- camel/models/nemotron_model.py +19 -9
- camel/models/netmind_model.py +11 -18
- camel/models/novita_model.py +11 -18
- camel/models/nvidia_model.py +11 -18
- camel/models/ollama_model.py +14 -21
- camel/models/openai_audio_models.py +2 -2
- camel/models/openai_compatible_model.py +188 -45
- camel/models/openai_model.py +216 -71
- camel/models/openrouter_model.py +11 -19
- camel/models/ppio_model.py +11 -18
- camel/models/qianfan_model.py +89 -0
- camel/models/qwen_model.py +13 -193
- camel/models/reka_model.py +21 -21
- camel/models/reward/__init__.py +2 -2
- camel/models/reward/base_reward_model.py +2 -2
- camel/models/reward/evaluator.py +2 -2
- camel/models/reward/nemotron_model.py +2 -2
- camel/models/reward/skywork_model.py +2 -2
- camel/models/samba_model.py +48 -47
- camel/models/sglang_model.py +88 -40
- camel/models/siliconflow_model.py +12 -35
- camel/models/stub_model.py +10 -7
- camel/models/togetherai_model.py +11 -18
- camel/models/vllm_model.py +10 -18
- camel/models/volcano_model.py +16 -20
- camel/models/watsonx_model.py +7 -19
- camel/models/yi_model.py +11 -18
- camel/models/zhipuai_model.py +70 -18
- camel/parsers/__init__.py +18 -0
- camel/parsers/mcp_tool_call_parser.py +176 -0
- camel/personas/__init__.py +2 -2
- camel/personas/persona.py +2 -2
- camel/personas/persona_hub.py +2 -2
- camel/prompts/__init__.py +2 -2
- camel/prompts/ai_society.py +2 -2
- camel/prompts/base.py +2 -2
- camel/prompts/code.py +2 -2
- camel/prompts/evaluation.py +2 -2
- camel/prompts/generate_text_embedding_data.py +2 -2
- camel/prompts/image_craft.py +2 -2
- camel/prompts/misalignment.py +2 -2
- camel/prompts/multi_condition_image_craft.py +2 -2
- camel/prompts/object_recognition.py +2 -2
- camel/prompts/persona_hub.py +3 -3
- camel/prompts/prompt_templates.py +2 -2
- camel/prompts/role_description_prompt_template.py +2 -2
- camel/prompts/solution_extraction.py +8 -8
- camel/prompts/task_prompt_template.py +2 -2
- camel/prompts/translation.py +2 -2
- camel/prompts/video_description_prompt.py +3 -3
- camel/responses/__init__.py +2 -2
- camel/responses/agent_responses.py +2 -2
- camel/retrievers/__init__.py +2 -2
- camel/retrievers/auto_retriever.py +3 -2
- camel/retrievers/base.py +2 -2
- camel/retrievers/bm25_retriever.py +2 -2
- camel/retrievers/cohere_rerank_retriever.py +2 -2
- camel/retrievers/hybrid_retrival.py +2 -2
- camel/retrievers/vector_retriever.py +2 -2
- camel/runtimes/Dockerfile.multi-toolkit +90 -0
- camel/runtimes/__init__.py +2 -2
- camel/runtimes/api.py +79 -23
- camel/runtimes/base.py +2 -2
- camel/runtimes/configs.py +13 -13
- camel/runtimes/daytona_runtime.py +17 -18
- camel/runtimes/docker_runtime.py +12 -12
- camel/runtimes/llm_guard_runtime.py +26 -26
- camel/runtimes/remote_http_runtime.py +11 -11
- camel/runtimes/ubuntu_docker_runtime.py +2 -2
- camel/runtimes/utils/__init__.py +2 -2
- camel/runtimes/utils/function_risk_toolkit.py +2 -2
- camel/runtimes/utils/ignore_risk_toolkit.py +2 -2
- camel/schemas/__init__.py +2 -2
- camel/schemas/base.py +2 -2
- camel/schemas/openai_converter.py +3 -3
- camel/schemas/outlines_converter.py +2 -2
- camel/services/agent_openapi_server.py +380 -0
- camel/societies/__init__.py +4 -2
- camel/societies/babyagi_playing.py +2 -2
- camel/societies/role_playing.py +201 -80
- camel/societies/workforce/__init__.py +10 -3
- camel/societies/workforce/base.py +2 -2
- camel/societies/workforce/events.py +143 -0
- camel/societies/workforce/prompts.py +258 -33
- camel/societies/workforce/role_playing_worker.py +88 -31
- camel/societies/workforce/single_agent_worker.py +638 -40
- camel/societies/workforce/structured_output_handler.py +512 -0
- camel/societies/workforce/task_channel.py +182 -38
- camel/societies/workforce/utils.py +780 -65
- camel/societies/workforce/worker.py +92 -26
- camel/societies/workforce/workflow_memory_manager.py +1746 -0
- camel/societies/workforce/workforce.py +5276 -355
- camel/societies/workforce/workforce_callback.py +103 -0
- camel/societies/workforce/workforce_logger.py +647 -0
- camel/societies/workforce/workforce_metrics.py +33 -0
- camel/storages/__init__.py +6 -2
- camel/storages/graph_storages/__init__.py +2 -2
- camel/storages/graph_storages/base.py +2 -2
- camel/storages/graph_storages/graph_element.py +2 -2
- camel/storages/graph_storages/nebula_graph.py +4 -4
- camel/storages/graph_storages/neo4j_graph.py +7 -7
- camel/storages/key_value_storages/__init__.py +2 -2
- camel/storages/key_value_storages/base.py +2 -2
- camel/storages/key_value_storages/in_memory.py +2 -2
- camel/storages/key_value_storages/json.py +17 -4
- camel/storages/key_value_storages/mem0_cloud.py +50 -49
- camel/storages/key_value_storages/redis.py +2 -2
- camel/storages/object_storages/__init__.py +2 -2
- camel/storages/object_storages/amazon_s3.py +2 -2
- camel/storages/object_storages/azure_blob.py +2 -2
- camel/storages/object_storages/base.py +2 -2
- camel/storages/object_storages/google_cloud.py +3 -3
- camel/storages/vectordb_storages/__init__.py +8 -2
- camel/storages/vectordb_storages/base.py +2 -2
- camel/storages/vectordb_storages/chroma.py +731 -0
- camel/storages/vectordb_storages/faiss.py +2 -2
- camel/storages/vectordb_storages/milvus.py +2 -2
- camel/storages/vectordb_storages/oceanbase.py +15 -15
- camel/storages/vectordb_storages/pgvector.py +349 -0
- camel/storages/vectordb_storages/qdrant.py +6 -6
- camel/storages/vectordb_storages/surreal.py +372 -0
- camel/storages/vectordb_storages/tidb.py +11 -8
- camel/storages/vectordb_storages/weaviate.py +2 -2
- camel/tasks/__init__.py +2 -2
- camel/tasks/task.py +348 -26
- camel/tasks/task_prompt.py +3 -3
- camel/terminators/__init__.py +2 -2
- camel/terminators/base.py +2 -2
- camel/terminators/response_terminator.py +2 -2
- camel/terminators/token_limit_terminator.py +2 -2
- camel/toolkits/__init__.py +54 -10
- camel/toolkits/aci_toolkit.py +66 -21
- camel/toolkits/arxiv_toolkit.py +8 -8
- camel/toolkits/ask_news_toolkit.py +2 -2
- camel/toolkits/async_browser_toolkit.py +4 -4
- camel/toolkits/audio_analysis_toolkit.py +3 -3
- camel/toolkits/base.py +65 -7
- camel/toolkits/bohrium_toolkit.py +2 -2
- camel/toolkits/browser_toolkit.py +34 -21
- camel/toolkits/browser_toolkit_commons.py +4 -4
- camel/toolkits/code_execution.py +31 -4
- camel/toolkits/context_summarizer_toolkit.py +684 -0
- camel/toolkits/craw4ai_toolkit.py +93 -0
- camel/toolkits/dappier_toolkit.py +12 -8
- camel/toolkits/data_commons_toolkit.py +2 -2
- camel/toolkits/dingtalk.py +1135 -0
- camel/toolkits/earth_science_toolkit.py +5367 -0
- camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
- camel/toolkits/excel_toolkit.py +905 -71
- camel/toolkits/file_toolkit.py +1402 -0
- camel/toolkits/function_tool.py +126 -18
- camel/toolkits/github_toolkit.py +109 -22
- camel/toolkits/gmail_toolkit.py +1839 -0
- camel/toolkits/google_calendar_toolkit.py +40 -6
- camel/toolkits/google_drive_mcp_toolkit.py +54 -0
- camel/toolkits/google_maps_toolkit.py +2 -2
- camel/toolkits/google_scholar_toolkit.py +2 -2
- camel/toolkits/human_toolkit.py +36 -12
- camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
- camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1973 -0
- camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1929 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
- camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
- camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +319 -0
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
- camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
- camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
- camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
- camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
- camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
- camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
- camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
- camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
- camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
- camel/toolkits/image_analysis_toolkit.py +3 -6
- camel/toolkits/image_generation_toolkit.py +390 -0
- camel/toolkits/jina_reranker_toolkit.py +5 -6
- camel/toolkits/klavis_toolkit.py +7 -3
- camel/toolkits/linkedin_toolkit.py +2 -2
- camel/toolkits/markitdown_toolkit.py +104 -0
- camel/toolkits/math_toolkit.py +66 -12
- camel/toolkits/mcp_toolkit.py +412 -36
- camel/toolkits/memory_toolkit.py +7 -3
- camel/toolkits/meshy_toolkit.py +2 -2
- camel/toolkits/message_agent_toolkit.py +608 -0
- camel/toolkits/message_integration.py +724 -0
- camel/toolkits/mineru_toolkit.py +2 -2
- camel/toolkits/minimax_mcp_toolkit.py +195 -0
- camel/toolkits/networkx_toolkit.py +2 -2
- camel/toolkits/note_taking_toolkit.py +277 -0
- camel/toolkits/notion_mcp_toolkit.py +224 -0
- camel/toolkits/notion_toolkit.py +2 -2
- camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
- camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
- camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
- camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
- camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
- camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
- camel/toolkits/open_api_specs/security_config.py +2 -2
- camel/toolkits/open_api_specs/speak/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
- camel/toolkits/open_api_toolkit.py +2 -2
- camel/toolkits/openbb_toolkit.py +7 -3
- camel/toolkits/origene_mcp_toolkit.py +56 -0
- camel/toolkits/page_script.js +53 -53
- camel/toolkits/playwright_mcp_toolkit.py +13 -31
- camel/toolkits/pptx_toolkit.py +36 -23
- camel/toolkits/pubmed_toolkit.py +2 -2
- camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
- camel/toolkits/pyautogui_toolkit.py +2 -2
- camel/toolkits/reddit_toolkit.py +2 -2
- camel/toolkits/resend_toolkit.py +168 -0
- camel/toolkits/retrieval_toolkit.py +2 -2
- camel/toolkits/screenshot_toolkit.py +213 -0
- camel/toolkits/search_toolkit.py +539 -146
- camel/toolkits/searxng_toolkit.py +2 -2
- camel/toolkits/semantic_scholar_toolkit.py +2 -2
- camel/toolkits/slack_toolkit.py +108 -58
- camel/toolkits/sql_toolkit.py +712 -0
- camel/toolkits/stripe_toolkit.py +2 -2
- camel/toolkits/sympy_toolkit.py +3 -3
- camel/toolkits/task_planning_toolkit.py +5 -5
- camel/toolkits/terminal_toolkit/__init__.py +18 -0
- camel/toolkits/terminal_toolkit/terminal_toolkit.py +1070 -0
- camel/toolkits/terminal_toolkit/utils.py +532 -0
- camel/toolkits/thinking_toolkit.py +3 -3
- camel/toolkits/twitter_toolkit.py +2 -2
- camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
- camel/toolkits/video_analysis_toolkit.py +109 -29
- camel/toolkits/video_download_toolkit.py +19 -16
- camel/toolkits/weather_toolkit.py +2 -2
- camel/toolkits/web_deploy_toolkit.py +1219 -0
- camel/toolkits/wechat_official_toolkit.py +483 -0
- camel/toolkits/whatsapp_toolkit.py +2 -2
- camel/toolkits/wolfram_alpha_toolkit.py +2 -2
- camel/toolkits/zapier_toolkit.py +7 -3
- camel/types/__init__.py +4 -4
- camel/types/agents/__init__.py +2 -2
- camel/types/agents/tool_calling_record.py +6 -3
- camel/types/enums.py +378 -39
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +4 -4
- camel/types/unified_model_type.py +38 -6
- camel/utils/__init__.py +2 -2
- camel/utils/async_func.py +2 -2
- camel/utils/chunker/__init__.py +2 -2
- camel/utils/chunker/base.py +2 -2
- camel/utils/chunker/code_chunker.py +2 -2
- camel/utils/chunker/uio_chunker.py +2 -2
- camel/utils/commons.py +38 -7
- camel/utils/constants.py +5 -2
- camel/utils/context_utils.py +1134 -0
- camel/utils/deduplication.py +2 -2
- camel/utils/filename.py +2 -2
- camel/utils/langfuse.py +2 -2
- camel/utils/mcp.py +140 -6
- camel/utils/mcp_client.py +48 -38
- camel/utils/message_summarizer.py +148 -0
- camel/utils/response_format.py +2 -2
- camel/utils/token_counting.py +45 -22
- camel/utils/tool_result.py +44 -0
- camel/verifiers/__init__.py +2 -2
- camel/verifiers/base.py +2 -2
- camel/verifiers/math_verifier.py +2 -2
- camel/verifiers/models.py +2 -2
- camel/verifiers/physics_verifier.py +2 -2
- camel/verifiers/python_verifier.py +2 -2
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.82.dist-info}/METADATA +327 -94
- camel_ai-0.2.82.dist-info/RECORD +507 -0
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.82.dist-info}/WHEEL +1 -1
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.82.dist-info}/licenses/LICENSE +1 -1
- camel/loaders/pandas_reader.py +0 -368
- camel/toolkits/dalle_toolkit.py +0 -175
- camel/toolkits/file_write_toolkit.py +0 -444
- camel/toolkits/openai_agent_toolkit.py +0 -135
- camel/toolkits/terminal_toolkit.py +0 -1037
- camel_ai-0.2.65.dist-info/RECORD +0 -426
|
@@ -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 (
|
|
@@ -41,6 +47,11 @@ if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
|
|
|
41
47
|
from langfuse.decorators import observe
|
|
42
48
|
except ImportError:
|
|
43
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
|
|
44
55
|
else:
|
|
45
56
|
from camel.utils import observe
|
|
46
57
|
|
|
@@ -50,7 +61,8 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
50
61
|
|
|
51
62
|
Args:
|
|
52
63
|
model_type (Union[ModelType, str]): Model for which a backend is
|
|
53
|
-
created,
|
|
64
|
+
created, Should be the deployment name you chose when you deployed
|
|
65
|
+
an azure model.
|
|
54
66
|
model_config_dict (Optional[Dict[str, Any]], optional): A dictionary
|
|
55
67
|
that will be fed into:obj:`openai.ChatCompletion.create()`. If
|
|
56
68
|
:obj:`None`, :obj:`ChatGPTConfig().as_dict()` will be used.
|
|
@@ -61,8 +73,6 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
61
73
|
(default: :obj:`None`)
|
|
62
74
|
api_version (Optional[str], optional): The api version for the model.
|
|
63
75
|
(default: :obj:`None`)
|
|
64
|
-
azure_deployment_name (Optional[str], optional): The deployment name
|
|
65
|
-
you chose when you deployed an azure model. (default: :obj:`None`)
|
|
66
76
|
azure_ad_token (Optional[str], optional): Your Azure Active Directory
|
|
67
77
|
token, https://www.microsoft.com/en-us/security/business/
|
|
68
78
|
identity-access/microsoft-entra-id. (default: :obj:`None`)
|
|
@@ -76,7 +86,25 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
76
86
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
77
87
|
environment variable or default to 180 seconds.
|
|
78
88
|
(default: :obj:`None`)
|
|
79
|
-
|
|
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.
|
|
80
108
|
|
|
81
109
|
References:
|
|
82
110
|
https://learn.microsoft.com/en-us/azure/ai-services/openai/
|
|
@@ -91,10 +119,35 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
91
119
|
timeout: Optional[float] = None,
|
|
92
120
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
93
121
|
api_version: Optional[str] = None,
|
|
94
|
-
azure_deployment_name: Optional[str] = None,
|
|
95
122
|
azure_ad_token_provider: Optional["AzureADTokenProvider"] = None,
|
|
96
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,
|
|
97
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
|
+
|
|
98
151
|
if model_config_dict is None:
|
|
99
152
|
model_config_dict = ChatGPTConfig().as_dict()
|
|
100
153
|
api_key = api_key or os.environ.get("AZURE_OPENAI_API_KEY")
|
|
@@ -105,9 +158,6 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
105
158
|
)
|
|
106
159
|
|
|
107
160
|
self.api_version = api_version or os.environ.get("AZURE_API_VERSION")
|
|
108
|
-
self._azure_deployment_name = azure_deployment_name or os.environ.get(
|
|
109
|
-
"AZURE_DEPLOYMENT_NAME"
|
|
110
|
-
)
|
|
111
161
|
self._azure_ad_token = azure_ad_token or os.environ.get(
|
|
112
162
|
"AZURE_AD_TOKEN"
|
|
113
163
|
)
|
|
@@ -117,58 +167,73 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
117
167
|
"Must provide either the `api_version` argument "
|
|
118
168
|
"or `AZURE_API_VERSION` environment variable."
|
|
119
169
|
)
|
|
120
|
-
if self._azure_deployment_name is None:
|
|
121
|
-
raise ValueError(
|
|
122
|
-
"Must provide either the `azure_deployment_name` argument "
|
|
123
|
-
"or `AZURE_DEPLOYMENT_NAME` environment variable."
|
|
124
|
-
)
|
|
125
170
|
|
|
126
|
-
if
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
self._client = LangfuseOpenAI(
|
|
131
|
-
azure_endpoint=str(self._url),
|
|
132
|
-
azure_deployment=self._azure_deployment_name,
|
|
133
|
-
api_version=self.api_version,
|
|
134
|
-
api_key=self._api_key,
|
|
135
|
-
azure_ad_token=self._azure_ad_token,
|
|
136
|
-
azure_ad_token_provider=self.azure_ad_token_provider,
|
|
137
|
-
timeout=self._timeout,
|
|
138
|
-
max_retries=3,
|
|
139
|
-
)
|
|
140
|
-
self._async_client = LangfuseAsyncOpenAI(
|
|
141
|
-
azure_endpoint=str(self._url),
|
|
142
|
-
azure_deployment=self._azure_deployment_name,
|
|
143
|
-
api_version=self.api_version,
|
|
144
|
-
api_key=self._api_key,
|
|
145
|
-
azure_ad_token=self._azure_ad_token,
|
|
146
|
-
azure_ad_token_provider=self.azure_ad_token_provider,
|
|
147
|
-
timeout=self._timeout,
|
|
148
|
-
max_retries=3,
|
|
149
|
-
)
|
|
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
|
|
150
175
|
else:
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
+
)
|
|
161
203
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
+
)
|
|
172
237
|
|
|
173
238
|
@property
|
|
174
239
|
def token_counter(self) -> BaseTokenCounter:
|
|
@@ -188,7 +253,11 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
188
253
|
messages: List[OpenAIMessage],
|
|
189
254
|
response_format: Optional[Type[BaseModel]] = None,
|
|
190
255
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
191
|
-
) -> Union[
|
|
256
|
+
) -> Union[
|
|
257
|
+
ChatCompletion,
|
|
258
|
+
Stream[ChatCompletionChunk],
|
|
259
|
+
ChatCompletionStreamManager[BaseModel],
|
|
260
|
+
]:
|
|
192
261
|
r"""Runs inference of Azure OpenAI chat completion.
|
|
193
262
|
|
|
194
263
|
Args:
|
|
@@ -203,6 +272,8 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
203
272
|
Union[ChatCompletion, Stream[ChatCompletionChunk]]:
|
|
204
273
|
`ChatCompletion` in the non-stream mode, or
|
|
205
274
|
`Stream[ChatCompletionChunk]` in the stream mode.
|
|
275
|
+
`ChatCompletionStreamManager[BaseModel]` for
|
|
276
|
+
structured output streaming.
|
|
206
277
|
"""
|
|
207
278
|
|
|
208
279
|
# Update Langfuse trace with current agent session and metadata
|
|
@@ -220,10 +291,14 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
220
291
|
response_format = response_format or self.model_config_dict.get(
|
|
221
292
|
"response_format", None
|
|
222
293
|
)
|
|
294
|
+
is_streaming = self.model_config_dict.get("stream", False)
|
|
223
295
|
if response_format:
|
|
224
|
-
|
|
225
|
-
self.
|
|
226
|
-
|
|
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)
|
|
227
302
|
else:
|
|
228
303
|
result = self._request_chat_completion(messages, tools)
|
|
229
304
|
|
|
@@ -235,7 +310,11 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
235
310
|
messages: List[OpenAIMessage],
|
|
236
311
|
response_format: Optional[Type[BaseModel]] = None,
|
|
237
312
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
238
|
-
) -> Union[
|
|
313
|
+
) -> Union[
|
|
314
|
+
ChatCompletion,
|
|
315
|
+
AsyncStream[ChatCompletionChunk],
|
|
316
|
+
AsyncChatCompletionStreamManager[BaseModel],
|
|
317
|
+
]:
|
|
239
318
|
r"""Runs inference of Azure OpenAI chat completion.
|
|
240
319
|
|
|
241
320
|
Args:
|
|
@@ -247,9 +326,12 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
247
326
|
use for the request.
|
|
248
327
|
|
|
249
328
|
Returns:
|
|
250
|
-
Union[ChatCompletion, AsyncStream[ChatCompletionChunk]
|
|
329
|
+
Union[ChatCompletion, AsyncStream[ChatCompletionChunk],
|
|
330
|
+
AsyncChatCompletionStreamManager[BaseModel]]:
|
|
251
331
|
`ChatCompletion` in the non-stream mode, or
|
|
252
332
|
`AsyncStream[ChatCompletionChunk]` in the stream mode.
|
|
333
|
+
`AsyncChatCompletionStreamManager[BaseModel]` for
|
|
334
|
+
structured output streaming.
|
|
253
335
|
"""
|
|
254
336
|
|
|
255
337
|
# Update Langfuse trace with current agent session and metadata
|
|
@@ -267,10 +349,16 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
267
349
|
response_format = response_format or self.model_config_dict.get(
|
|
268
350
|
"response_format", None
|
|
269
351
|
)
|
|
352
|
+
is_streaming = self.model_config_dict.get("stream", False)
|
|
270
353
|
if response_format:
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
+
)
|
|
274
362
|
else:
|
|
275
363
|
result = await self._arequest_chat_completion(messages, tools)
|
|
276
364
|
|
|
@@ -288,7 +376,7 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
288
376
|
|
|
289
377
|
return self._client.chat.completions.create(
|
|
290
378
|
messages=messages,
|
|
291
|
-
model=self.
|
|
379
|
+
model=str(self.model_type),
|
|
292
380
|
**request_config,
|
|
293
381
|
)
|
|
294
382
|
|
|
@@ -304,7 +392,7 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
304
392
|
|
|
305
393
|
return await self._async_client.chat.completions.create(
|
|
306
394
|
messages=messages,
|
|
307
|
-
model=self.
|
|
395
|
+
model=str(self.model_type),
|
|
308
396
|
**request_config,
|
|
309
397
|
)
|
|
310
398
|
|
|
@@ -314,8 +402,6 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
314
402
|
response_format: Type[BaseModel],
|
|
315
403
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
316
404
|
) -> ChatCompletion:
|
|
317
|
-
import copy
|
|
318
|
-
|
|
319
405
|
request_config = copy.deepcopy(self.model_config_dict)
|
|
320
406
|
|
|
321
407
|
request_config["response_format"] = response_format
|
|
@@ -327,7 +413,7 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
327
413
|
|
|
328
414
|
return self._client.beta.chat.completions.parse(
|
|
329
415
|
messages=messages,
|
|
330
|
-
model=self.
|
|
416
|
+
model=str(self.model_type),
|
|
331
417
|
**request_config,
|
|
332
418
|
)
|
|
333
419
|
|
|
@@ -337,8 +423,6 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
337
423
|
response_format: Type[BaseModel],
|
|
338
424
|
tools: Optional[List[Dict[str, Any]]] = None,
|
|
339
425
|
) -> ChatCompletion:
|
|
340
|
-
import copy
|
|
341
|
-
|
|
342
426
|
request_config = copy.deepcopy(self.model_config_dict)
|
|
343
427
|
|
|
344
428
|
request_config["response_format"] = response_format
|
|
@@ -350,24 +434,63 @@ class AzureOpenAIModel(BaseModelBackend):
|
|
|
350
434
|
|
|
351
435
|
return await self._async_client.beta.chat.completions.parse(
|
|
352
436
|
messages=messages,
|
|
353
|
-
model=self.
|
|
437
|
+
model=str(self.model_type),
|
|
354
438
|
**request_config,
|
|
355
439
|
)
|
|
356
440
|
|
|
357
|
-
def
|
|
358
|
-
|
|
359
|
-
|
|
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.
|
|
360
448
|
|
|
361
|
-
|
|
362
|
-
ValueError: If the model configuration dictionary contains any
|
|
363
|
-
unexpected arguments to Azure OpenAI API.
|
|
449
|
+
Note: This uses OpenAI's beta streaming API for structured outputs.
|
|
364
450
|
"""
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
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
|
+
)
|
|
371
494
|
|
|
372
495
|
@property
|
|
373
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
|
|