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