camel-ai 0.2.65__py3-none-any.whl → 0.2.83a6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of camel-ai might be problematic. Click here for more details.
- camel/__init__.py +3 -3
- camel/agents/__init__.py +2 -2
- camel/agents/_types.py +9 -4
- camel/agents/_utils.py +40 -2
- camel/agents/base.py +2 -2
- camel/agents/chat_agent.py +5107 -995
- camel/agents/critic_agent.py +2 -2
- camel/agents/deductive_reasoner_agent.py +56 -56
- camel/agents/embodied_agent.py +2 -2
- camel/agents/knowledge_graph_agent.py +20 -20
- camel/agents/mcp_agent.py +35 -36
- camel/agents/multi_hop_generator_agent.py +3 -3
- camel/agents/programmed_agent_instruction.py +2 -2
- camel/agents/repo_agent.py +4 -3
- camel/agents/role_assignment_agent.py +2 -2
- camel/agents/search_agent.py +2 -2
- camel/agents/task_agent.py +2 -2
- camel/agents/tool_agents/__init__.py +2 -2
- camel/agents/tool_agents/base.py +2 -2
- camel/agents/tool_agents/hugging_face_tool_agent.py +3 -3
- camel/benchmarks/__init__.py +2 -2
- camel/benchmarks/apibank.py +5 -5
- camel/benchmarks/apibench.py +2 -2
- camel/benchmarks/base.py +2 -2
- camel/benchmarks/browsecomp.py +44 -33
- camel/benchmarks/gaia.py +17 -13
- camel/benchmarks/mock_website/README.md +1 -3
- camel/benchmarks/mock_website/mock_web.py +2 -2
- camel/benchmarks/mock_website/requirements.txt +1 -1
- camel/benchmarks/mock_website/shopping_mall/app.py +2 -2
- camel/benchmarks/mock_website/task.json +1 -1
- camel/benchmarks/nexus.py +3 -3
- camel/benchmarks/ragbench.py +2 -2
- camel/bots/__init__.py +2 -2
- camel/bots/discord/__init__.py +2 -2
- camel/bots/discord/discord_app.py +2 -2
- camel/bots/discord/discord_installation.py +2 -2
- camel/bots/discord/discord_store.py +3 -3
- camel/bots/slack/__init__.py +2 -2
- camel/bots/slack/models.py +4 -4
- camel/bots/slack/slack_app.py +2 -2
- camel/bots/telegram_bot.py +2 -2
- camel/configs/__init__.py +29 -2
- camel/configs/aihubmix_config.py +90 -0
- camel/configs/aiml_config.py +2 -2
- camel/configs/amd_config.py +70 -0
- camel/configs/anthropic_config.py +2 -2
- camel/configs/base_config.py +2 -2
- camel/configs/bedrock_config.py +5 -3
- camel/configs/cerebras_config.py +98 -0
- camel/configs/cohere_config.py +2 -2
- camel/configs/cometapi_config.py +106 -0
- camel/configs/crynux_config.py +2 -2
- camel/configs/deepseek_config.py +9 -8
- camel/configs/function_gemma_config.py +59 -0
- camel/configs/gemini_config.py +6 -4
- camel/configs/groq_config.py +6 -4
- camel/configs/internlm_config.py +6 -4
- camel/configs/litellm_config.py +2 -2
- camel/configs/lmstudio_config.py +6 -4
- camel/configs/minimax_config.py +95 -0
- camel/configs/mistral_config.py +2 -2
- camel/configs/modelscope_config.py +5 -3
- camel/configs/moonshot_config.py +2 -2
- camel/configs/nebius_config.py +105 -0
- camel/configs/netmind_config.py +2 -2
- camel/configs/novita_config.py +2 -2
- camel/configs/nvidia_config.py +2 -2
- camel/configs/ollama_config.py +2 -2
- camel/configs/openai_config.py +5 -3
- camel/configs/openrouter_config.py +6 -4
- camel/configs/ppio_config.py +2 -2
- camel/configs/qianfan_config.py +85 -0
- camel/configs/qwen_config.py +2 -2
- camel/configs/reka_config.py +2 -2
- camel/configs/samba_config.py +6 -4
- camel/configs/sglang_config.py +2 -2
- camel/configs/siliconflow_config.py +2 -2
- camel/configs/togetherai_config.py +2 -2
- camel/configs/vllm_config.py +4 -2
- camel/configs/watsonx_config.py +2 -2
- camel/configs/yi_config.py +6 -4
- camel/configs/zhipuai_config.py +6 -4
- camel/data_collectors/__init__.py +2 -2
- camel/data_collectors/alpaca_collector.py +18 -9
- camel/data_collectors/base.py +2 -2
- camel/data_collectors/sharegpt_collector.py +2 -2
- camel/datagen/__init__.py +2 -2
- camel/datagen/cot_datagen.py +3 -3
- camel/datagen/evol_instruct/__init__.py +2 -2
- camel/datagen/evol_instruct/evol_instruct.py +2 -2
- camel/datagen/evol_instruct/scorer.py +12 -12
- camel/datagen/evol_instruct/templates.py +16 -16
- camel/datagen/self_improving_cot.py +5 -5
- camel/datagen/self_instruct/__init__.py +2 -2
- camel/datagen/self_instruct/filter/__init__.py +2 -2
- camel/datagen/self_instruct/filter/filter_function.py +2 -2
- camel/datagen/self_instruct/filter/filter_registry.py +2 -2
- camel/datagen/self_instruct/filter/instruction_filter.py +2 -2
- camel/datagen/self_instruct/self_instruct.py +2 -2
- camel/datagen/self_instruct/templates.py +47 -47
- camel/datagen/source2synth/__init__.py +2 -2
- camel/datagen/source2synth/data_processor.py +2 -2
- camel/datagen/source2synth/models.py +2 -2
- camel/datagen/source2synth/user_data_processor_config.py +2 -2
- camel/datahubs/__init__.py +2 -2
- camel/datahubs/base.py +2 -2
- camel/datahubs/huggingface.py +2 -2
- camel/datahubs/models.py +2 -2
- camel/datasets/__init__.py +2 -2
- camel/datasets/base_generator.py +41 -12
- camel/datasets/few_shot_generator.py +18 -18
- camel/datasets/models.py +2 -2
- camel/datasets/self_instruct_generator.py +2 -2
- camel/datasets/static_dataset.py +2 -2
- camel/embeddings/__init__.py +2 -2
- camel/embeddings/azure_embedding.py +2 -2
- camel/embeddings/base.py +2 -2
- camel/embeddings/gemini_embedding.py +2 -2
- camel/embeddings/jina_embedding.py +2 -2
- camel/embeddings/mistral_embedding.py +2 -2
- camel/embeddings/openai_compatible_embedding.py +2 -2
- camel/embeddings/openai_embedding.py +2 -2
- camel/embeddings/sentence_transformers_embeddings.py +2 -2
- camel/embeddings/together_embedding.py +2 -2
- camel/embeddings/vlm_embedding.py +2 -2
- camel/environments/__init__.py +14 -2
- camel/environments/models.py +2 -2
- camel/environments/multi_step.py +2 -2
- camel/environments/rlcards_env.py +860 -0
- camel/environments/single_step.py +30 -5
- camel/environments/tic_tac_toe.py +3 -3
- camel/extractors/__init__.py +2 -2
- camel/extractors/base.py +2 -2
- camel/extractors/python_strategies.py +2 -2
- camel/generators.py +2 -2
- camel/human.py +2 -2
- camel/interpreters/__init__.py +4 -2
- camel/interpreters/base.py +2 -2
- camel/interpreters/docker/Dockerfile +14 -24
- camel/interpreters/docker_interpreter.py +5 -4
- camel/interpreters/e2b_interpreter.py +36 -3
- camel/interpreters/internal_python_interpreter.py +53 -4
- camel/interpreters/interpreter_error.py +2 -2
- camel/interpreters/ipython_interpreter.py +2 -2
- camel/interpreters/microsandbox_interpreter.py +395 -0
- camel/interpreters/subprocess_interpreter.py +2 -2
- camel/loaders/__init__.py +13 -4
- camel/loaders/apify_reader.py +2 -2
- camel/loaders/base_io.py +2 -2
- camel/loaders/base_loader.py +85 -0
- camel/loaders/chunkr_reader.py +11 -2
- camel/loaders/crawl4ai_reader.py +2 -2
- camel/loaders/firecrawl_reader.py +6 -6
- camel/loaders/jina_url_reader.py +2 -2
- camel/loaders/markitdown.py +2 -2
- camel/loaders/mineru_extractor.py +2 -2
- camel/loaders/mistral_reader.py +2 -2
- camel/loaders/scrapegraph_reader.py +2 -2
- camel/loaders/unstructured_io.py +2 -2
- camel/logger.py +5 -5
- camel/memories/__init__.py +2 -2
- camel/memories/agent_memories.py +86 -3
- camel/memories/base.py +36 -2
- camel/memories/blocks/__init__.py +2 -2
- camel/memories/blocks/chat_history_block.py +125 -7
- camel/memories/blocks/vectordb_block.py +10 -3
- camel/memories/context_creators/__init__.py +2 -2
- camel/memories/context_creators/score_based.py +109 -230
- camel/memories/records.py +90 -10
- camel/messages/__init__.py +2 -2
- camel/messages/base.py +178 -43
- camel/messages/conversion/__init__.py +2 -2
- camel/messages/conversion/alpaca.py +2 -2
- camel/messages/conversion/conversation_models.py +2 -2
- camel/messages/conversion/sharegpt/__init__.py +2 -2
- camel/messages/conversion/sharegpt/function_call_formatter.py +2 -2
- camel/messages/conversion/sharegpt/hermes/__init__.py +2 -2
- camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +2 -2
- camel/messages/func_message.py +54 -17
- camel/models/__init__.py +18 -2
- camel/models/_utils.py +3 -3
- camel/models/aihubmix_model.py +83 -0
- camel/models/aiml_model.py +11 -18
- camel/models/amd_model.py +101 -0
- camel/models/anthropic_model.py +127 -20
- camel/models/aws_bedrock_model.py +12 -35
- camel/models/azure_openai_model.py +214 -115
- camel/models/base_audio_model.py +5 -3
- camel/models/base_model.py +378 -31
- camel/models/cerebras_model.py +83 -0
- camel/models/cohere_model.py +18 -49
- camel/models/cometapi_model.py +83 -0
- camel/models/crynux_model.py +11 -18
- camel/models/deepseek_model.py +20 -84
- camel/models/fish_audio_model.py +8 -2
- camel/models/function_gemma_model.py +889 -0
- camel/models/gemini_model.py +391 -52
- camel/models/groq_model.py +11 -19
- camel/models/internlm_model.py +11 -18
- camel/models/litellm_model.py +57 -49
- camel/models/lmstudio_model.py +17 -20
- camel/models/minimax_model.py +83 -0
- camel/models/mistral_model.py +20 -47
- camel/models/model_factory.py +39 -3
- camel/models/model_manager.py +26 -8
- camel/models/modelscope_model.py +13 -193
- camel/models/moonshot_model.py +183 -21
- camel/models/nebius_model.py +83 -0
- camel/models/nemotron_model.py +19 -9
- camel/models/netmind_model.py +11 -18
- camel/models/novita_model.py +11 -18
- camel/models/nvidia_model.py +11 -18
- camel/models/ollama_model.py +14 -21
- camel/models/openai_audio_models.py +2 -2
- camel/models/openai_compatible_model.py +190 -71
- camel/models/openai_model.py +192 -86
- camel/models/openrouter_model.py +11 -19
- camel/models/ppio_model.py +11 -18
- camel/models/qianfan_model.py +89 -0
- camel/models/qwen_model.py +13 -193
- camel/models/reka_model.py +23 -49
- camel/models/reward/__init__.py +2 -2
- camel/models/reward/base_reward_model.py +2 -2
- camel/models/reward/evaluator.py +2 -2
- camel/models/reward/nemotron_model.py +2 -2
- camel/models/reward/skywork_model.py +2 -2
- camel/models/samba_model.py +50 -75
- camel/models/sglang_model.py +90 -68
- camel/models/siliconflow_model.py +12 -35
- camel/models/stub_model.py +10 -7
- camel/models/togetherai_model.py +11 -18
- camel/models/vllm_model.py +10 -18
- camel/models/volcano_model.py +158 -19
- camel/models/watsonx_model.py +9 -47
- camel/models/yi_model.py +11 -18
- camel/models/zhipuai_model.py +70 -18
- camel/parsers/__init__.py +18 -0
- camel/parsers/mcp_tool_call_parser.py +176 -0
- camel/personas/__init__.py +2 -2
- camel/personas/persona.py +2 -2
- camel/personas/persona_hub.py +2 -2
- camel/prompts/__init__.py +2 -2
- camel/prompts/ai_society.py +2 -2
- camel/prompts/base.py +2 -2
- camel/prompts/code.py +2 -2
- camel/prompts/evaluation.py +2 -2
- camel/prompts/generate_text_embedding_data.py +2 -2
- camel/prompts/image_craft.py +2 -2
- camel/prompts/misalignment.py +2 -2
- camel/prompts/multi_condition_image_craft.py +2 -2
- camel/prompts/object_recognition.py +2 -2
- camel/prompts/persona_hub.py +3 -3
- camel/prompts/prompt_templates.py +2 -2
- camel/prompts/role_description_prompt_template.py +2 -2
- camel/prompts/solution_extraction.py +8 -8
- camel/prompts/task_prompt_template.py +2 -2
- camel/prompts/translation.py +2 -2
- camel/prompts/video_description_prompt.py +3 -3
- camel/responses/__init__.py +2 -2
- camel/responses/agent_responses.py +2 -2
- camel/retrievers/__init__.py +2 -2
- camel/retrievers/auto_retriever.py +3 -2
- camel/retrievers/base.py +2 -2
- camel/retrievers/bm25_retriever.py +2 -2
- camel/retrievers/cohere_rerank_retriever.py +2 -2
- camel/retrievers/hybrid_retrival.py +2 -2
- camel/retrievers/vector_retriever.py +2 -2
- camel/runtimes/Dockerfile.multi-toolkit +90 -0
- camel/runtimes/__init__.py +2 -2
- camel/runtimes/api.py +79 -23
- camel/runtimes/base.py +2 -2
- camel/runtimes/configs.py +13 -13
- camel/runtimes/daytona_runtime.py +17 -18
- camel/runtimes/docker_runtime.py +12 -12
- camel/runtimes/llm_guard_runtime.py +26 -26
- camel/runtimes/remote_http_runtime.py +11 -11
- camel/runtimes/ubuntu_docker_runtime.py +2 -2
- camel/runtimes/utils/__init__.py +2 -2
- camel/runtimes/utils/function_risk_toolkit.py +2 -2
- camel/runtimes/utils/ignore_risk_toolkit.py +2 -2
- camel/schemas/__init__.py +2 -2
- camel/schemas/base.py +2 -2
- camel/schemas/openai_converter.py +3 -3
- camel/schemas/outlines_converter.py +2 -2
- camel/services/agent_openapi_server.py +380 -0
- camel/societies/__init__.py +4 -2
- camel/societies/babyagi_playing.py +2 -2
- camel/societies/role_playing.py +201 -80
- camel/societies/workforce/__init__.py +10 -3
- camel/societies/workforce/base.py +2 -2
- camel/societies/workforce/events.py +145 -0
- camel/societies/workforce/prompts.py +259 -33
- camel/societies/workforce/role_playing_worker.py +88 -31
- camel/societies/workforce/single_agent_worker.py +638 -40
- camel/societies/workforce/structured_output_handler.py +512 -0
- camel/societies/workforce/task_channel.py +182 -38
- camel/societies/workforce/utils.py +780 -65
- camel/societies/workforce/worker.py +92 -26
- camel/societies/workforce/workflow_memory_manager.py +1746 -0
- camel/societies/workforce/workforce.py +5354 -372
- camel/societies/workforce/workforce_callback.py +103 -0
- camel/societies/workforce/workforce_logger.py +647 -0
- camel/societies/workforce/workforce_metrics.py +33 -0
- camel/storages/__init__.py +6 -2
- camel/storages/graph_storages/__init__.py +2 -2
- camel/storages/graph_storages/base.py +2 -2
- camel/storages/graph_storages/graph_element.py +2 -2
- camel/storages/graph_storages/nebula_graph.py +4 -4
- camel/storages/graph_storages/neo4j_graph.py +7 -7
- camel/storages/key_value_storages/__init__.py +2 -2
- camel/storages/key_value_storages/base.py +2 -2
- camel/storages/key_value_storages/in_memory.py +2 -2
- camel/storages/key_value_storages/json.py +17 -4
- camel/storages/key_value_storages/mem0_cloud.py +50 -49
- camel/storages/key_value_storages/redis.py +2 -2
- camel/storages/object_storages/__init__.py +2 -2
- camel/storages/object_storages/amazon_s3.py +2 -2
- camel/storages/object_storages/azure_blob.py +2 -2
- camel/storages/object_storages/base.py +2 -2
- camel/storages/object_storages/google_cloud.py +3 -3
- camel/storages/vectordb_storages/__init__.py +8 -2
- camel/storages/vectordb_storages/base.py +2 -2
- camel/storages/vectordb_storages/chroma.py +731 -0
- camel/storages/vectordb_storages/faiss.py +2 -2
- camel/storages/vectordb_storages/milvus.py +2 -2
- camel/storages/vectordb_storages/oceanbase.py +15 -15
- camel/storages/vectordb_storages/pgvector.py +349 -0
- camel/storages/vectordb_storages/qdrant.py +6 -6
- camel/storages/vectordb_storages/surreal.py +372 -0
- camel/storages/vectordb_storages/tidb.py +11 -8
- camel/storages/vectordb_storages/weaviate.py +2 -2
- camel/tasks/__init__.py +2 -2
- camel/tasks/task.py +348 -26
- camel/tasks/task_prompt.py +3 -3
- camel/terminators/__init__.py +2 -2
- camel/terminators/base.py +2 -2
- camel/terminators/response_terminator.py +2 -2
- camel/terminators/token_limit_terminator.py +2 -2
- camel/toolkits/__init__.py +57 -10
- camel/toolkits/aci_toolkit.py +66 -21
- camel/toolkits/arxiv_toolkit.py +8 -8
- camel/toolkits/ask_news_toolkit.py +2 -2
- camel/toolkits/async_browser_toolkit.py +4 -4
- camel/toolkits/audio_analysis_toolkit.py +3 -3
- camel/toolkits/base.py +106 -6
- camel/toolkits/bohrium_toolkit.py +2 -2
- camel/toolkits/browser_toolkit.py +34 -21
- camel/toolkits/browser_toolkit_commons.py +4 -4
- camel/toolkits/code_execution.py +31 -4
- camel/toolkits/context_summarizer_toolkit.py +684 -0
- camel/toolkits/craw4ai_toolkit.py +93 -0
- camel/toolkits/dappier_toolkit.py +12 -8
- camel/toolkits/data_commons_toolkit.py +2 -2
- camel/toolkits/dingtalk.py +1135 -0
- camel/toolkits/earth_science_toolkit.py +5367 -0
- camel/toolkits/edgeone_pages_mcp_toolkit.py +49 -0
- camel/toolkits/excel_toolkit.py +905 -71
- camel/toolkits/file_toolkit.py +1402 -0
- camel/toolkits/function_tool.py +205 -27
- camel/toolkits/github_toolkit.py +109 -22
- camel/toolkits/gmail_toolkit.py +1839 -0
- camel/toolkits/google_calendar_toolkit.py +40 -6
- camel/toolkits/google_drive_mcp_toolkit.py +54 -0
- camel/toolkits/google_maps_toolkit.py +2 -2
- camel/toolkits/google_scholar_toolkit.py +2 -2
- camel/toolkits/human_toolkit.py +36 -12
- camel/toolkits/hybrid_browser_toolkit/__init__.py +18 -0
- camel/toolkits/hybrid_browser_toolkit/config_loader.py +185 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit.py +246 -0
- camel/toolkits/hybrid_browser_toolkit/hybrid_browser_toolkit_ts.py +1958 -0
- camel/toolkits/hybrid_browser_toolkit/installer.py +203 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package-lock.json +4589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/package.json +33 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-scripts.js +125 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/browser-session.ts +1940 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/config-loader.ts +233 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/hybrid-browser-toolkit.ts +589 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/index.ts +7 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/parent-child-filter.ts +226 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/snapshot-parser.ts +219 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/som-screenshot-injected.ts +543 -0
- camel/toolkits/hybrid_browser_toolkit/ts/src/types.ts +129 -0
- camel/toolkits/hybrid_browser_toolkit/ts/tsconfig.json +27 -0
- camel/toolkits/hybrid_browser_toolkit/ts/websocket-server.js +325 -0
- camel/toolkits/hybrid_browser_toolkit/ws_wrapper.py +1037 -0
- camel/toolkits/hybrid_browser_toolkit_py/__init__.py +17 -0
- camel/toolkits/hybrid_browser_toolkit_py/actions.py +575 -0
- camel/toolkits/hybrid_browser_toolkit_py/agent.py +311 -0
- camel/toolkits/hybrid_browser_toolkit_py/browser_session.py +787 -0
- camel/toolkits/hybrid_browser_toolkit_py/config_loader.py +490 -0
- camel/toolkits/hybrid_browser_toolkit_py/hybrid_browser_toolkit.py +2390 -0
- camel/toolkits/hybrid_browser_toolkit_py/snapshot.py +233 -0
- camel/toolkits/hybrid_browser_toolkit_py/stealth_script.js +0 -0
- camel/toolkits/hybrid_browser_toolkit_py/unified_analyzer.js +1043 -0
- camel/toolkits/image_analysis_toolkit.py +3 -6
- camel/toolkits/image_generation_toolkit.py +390 -0
- camel/toolkits/jina_reranker_toolkit.py +5 -6
- camel/toolkits/klavis_toolkit.py +7 -3
- camel/toolkits/linkedin_toolkit.py +2 -2
- camel/toolkits/markitdown_toolkit.py +104 -0
- camel/toolkits/math_toolkit.py +66 -12
- camel/toolkits/mcp_toolkit.py +412 -36
- camel/toolkits/memory_toolkit.py +7 -3
- camel/toolkits/meshy_toolkit.py +2 -2
- camel/toolkits/message_agent_toolkit.py +608 -0
- camel/toolkits/message_integration.py +728 -0
- camel/toolkits/microsoft_outlook_mail_toolkit.py +1885 -0
- camel/toolkits/mineru_toolkit.py +2 -2
- camel/toolkits/minimax_mcp_toolkit.py +195 -0
- camel/toolkits/networkx_toolkit.py +2 -2
- camel/toolkits/note_taking_toolkit.py +277 -0
- camel/toolkits/notion_mcp_toolkit.py +224 -0
- camel/toolkits/notion_toolkit.py +2 -2
- camel/toolkits/open_api_specs/biztoc/__init__.py +2 -2
- camel/toolkits/open_api_specs/biztoc/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/coursera/__init__.py +2 -2
- camel/toolkits/open_api_specs/create_qr_code/__init__.py +2 -2
- camel/toolkits/open_api_specs/klarna/__init__.py +2 -2
- camel/toolkits/open_api_specs/nasa_apod/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/outschool/openapi.yaml +1 -1
- camel/toolkits/open_api_specs/outschool/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/get_classes.py +2 -2
- camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +2 -2
- camel/toolkits/open_api_specs/security_config.py +2 -2
- camel/toolkits/open_api_specs/speak/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/ai-plugin.json +1 -1
- camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +2 -2
- camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +2 -2
- camel/toolkits/open_api_toolkit.py +2 -2
- camel/toolkits/openbb_toolkit.py +7 -3
- camel/toolkits/origene_mcp_toolkit.py +56 -0
- camel/toolkits/page_script.js +53 -53
- camel/toolkits/playwright_mcp_toolkit.py +13 -31
- camel/toolkits/pptx_toolkit.py +36 -23
- camel/toolkits/pubmed_toolkit.py +2 -2
- camel/toolkits/pulse_mcp_search_toolkit.py +2 -2
- camel/toolkits/pyautogui_toolkit.py +2 -2
- camel/toolkits/reddit_toolkit.py +2 -2
- camel/toolkits/resend_toolkit.py +168 -0
- camel/toolkits/retrieval_toolkit.py +2 -2
- camel/toolkits/screenshot_toolkit.py +213 -0
- camel/toolkits/search_toolkit.py +606 -156
- camel/toolkits/searxng_toolkit.py +2 -2
- camel/toolkits/semantic_scholar_toolkit.py +2 -2
- camel/toolkits/slack_toolkit.py +108 -58
- camel/toolkits/sql_toolkit.py +712 -0
- camel/toolkits/stripe_toolkit.py +2 -2
- camel/toolkits/sympy_toolkit.py +3 -3
- camel/toolkits/task_planning_toolkit.py +5 -5
- camel/toolkits/terminal_toolkit/__init__.py +18 -0
- camel/toolkits/terminal_toolkit/terminal_toolkit.py +1281 -0
- camel/toolkits/terminal_toolkit/utils.py +659 -0
- camel/toolkits/thinking_toolkit.py +3 -3
- camel/toolkits/twitter_toolkit.py +2 -2
- camel/toolkits/vertex_ai_veo_toolkit.py +590 -0
- camel/toolkits/video_analysis_toolkit.py +109 -29
- camel/toolkits/video_download_toolkit.py +19 -16
- camel/toolkits/weather_toolkit.py +2 -2
- camel/toolkits/web_deploy_toolkit.py +1219 -0
- camel/toolkits/wechat_official_toolkit.py +483 -0
- camel/toolkits/whatsapp_toolkit.py +2 -2
- camel/toolkits/wolfram_alpha_toolkit.py +2 -2
- camel/toolkits/zapier_toolkit.py +7 -3
- camel/types/__init__.py +4 -4
- camel/types/agents/__init__.py +2 -2
- camel/types/agents/tool_calling_record.py +6 -3
- camel/types/enums.py +381 -41
- camel/types/mcp_registries.py +2 -2
- camel/types/openai_types.py +4 -4
- camel/types/unified_model_type.py +46 -10
- camel/utils/__init__.py +5 -2
- camel/utils/agent_context.py +41 -0
- camel/utils/async_func.py +2 -2
- camel/utils/chunker/__init__.py +2 -2
- camel/utils/chunker/base.py +2 -2
- camel/utils/chunker/code_chunker.py +2 -2
- camel/utils/chunker/uio_chunker.py +2 -2
- camel/utils/commons.py +38 -7
- camel/utils/constants.py +5 -2
- camel/utils/context_utils.py +1134 -0
- camel/utils/deduplication.py +2 -2
- camel/utils/filename.py +2 -2
- camel/utils/langfuse.py +18 -10
- camel/utils/mcp.py +140 -6
- camel/utils/mcp_client.py +48 -38
- camel/utils/message_summarizer.py +148 -0
- camel/utils/response_format.py +2 -2
- camel/utils/token_counting.py +45 -22
- camel/utils/tool_result.py +44 -0
- camel/verifiers/__init__.py +2 -2
- camel/verifiers/base.py +2 -2
- camel/verifiers/math_verifier.py +2 -2
- camel/verifiers/models.py +2 -2
- camel/verifiers/physics_verifier.py +2 -2
- camel/verifiers/python_verifier.py +2 -2
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/METADATA +355 -117
- camel_ai-0.2.83a6.dist-info/RECORD +511 -0
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/WHEEL +1 -1
- {camel_ai-0.2.65.dist-info → camel_ai-0.2.83a6.dist-info}/licenses/LICENSE +1 -1
- camel/loaders/pandas_reader.py +0 -368
- camel/toolkits/dalle_toolkit.py +0 -175
- camel/toolkits/file_write_toolkit.py +0 -444
- camel/toolkits/openai_agent_toolkit.py +0 -135
- camel/toolkits/terminal_toolkit.py +0 -1037
- camel_ai-0.2.65.dist-info/RECORD +0 -426
camel/models/volcano_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,14 +10,17 @@
|
|
|
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
|
-
from typing import Any, Dict, Optional, Union
|
|
16
|
+
from typing import Any, Dict, List, Optional, Type, Union
|
|
17
17
|
|
|
18
|
-
from
|
|
18
|
+
from openai import AsyncStream, Stream
|
|
19
|
+
from pydantic import BaseModel
|
|
20
|
+
|
|
21
|
+
from camel.messages import OpenAIMessage
|
|
19
22
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
20
|
-
from camel.types import ModelType
|
|
23
|
+
from camel.types import ChatCompletion, ChatCompletionChunk, ModelType
|
|
21
24
|
from camel.utils import (
|
|
22
25
|
BaseTokenCounter,
|
|
23
26
|
api_keys_required,
|
|
@@ -44,6 +47,10 @@ class VolcanoModel(OpenAICompatibleModel):
|
|
|
44
47
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
45
48
|
environment variable or default to 180 seconds.
|
|
46
49
|
(default: :obj:`None`)
|
|
50
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
51
|
+
(default: :obj:`3`)
|
|
52
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
53
|
+
initialization.
|
|
47
54
|
"""
|
|
48
55
|
|
|
49
56
|
@api_keys_required(
|
|
@@ -59,6 +66,8 @@ class VolcanoModel(OpenAICompatibleModel):
|
|
|
59
66
|
url: Optional[str] = None,
|
|
60
67
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
61
68
|
timeout: Optional[float] = None,
|
|
69
|
+
max_retries: int = 3,
|
|
70
|
+
**kwargs: Any,
|
|
62
71
|
) -> None:
|
|
63
72
|
if model_config_dict is None:
|
|
64
73
|
model_config_dict = {}
|
|
@@ -71,21 +80,151 @@ class VolcanoModel(OpenAICompatibleModel):
|
|
|
71
80
|
)
|
|
72
81
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
73
82
|
super().__init__(
|
|
74
|
-
model_type,
|
|
83
|
+
model_type,
|
|
84
|
+
model_config_dict,
|
|
85
|
+
api_key,
|
|
86
|
+
url,
|
|
87
|
+
token_counter,
|
|
88
|
+
timeout,
|
|
89
|
+
max_retries,
|
|
90
|
+
**kwargs,
|
|
75
91
|
)
|
|
92
|
+
# Store the last reasoning_content from model response
|
|
93
|
+
# This will be injected into the next request's assistant message
|
|
94
|
+
self._last_reasoning_content: Optional[str] = None
|
|
95
|
+
|
|
96
|
+
def _inject_reasoning_content(
|
|
97
|
+
self,
|
|
98
|
+
messages: List[OpenAIMessage],
|
|
99
|
+
) -> List[OpenAIMessage]:
|
|
100
|
+
r"""Inject the last reasoning_content into assistant messages.
|
|
101
|
+
|
|
102
|
+
For Volcano Engine's doubao-seed models with deep thinking enabled,
|
|
103
|
+
the reasoning_content from the model response needs to be passed back
|
|
104
|
+
in subsequent requests for proper context management.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
messages: The original messages list.
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
Messages with reasoning_content added to the last assistant
|
|
111
|
+
message that has tool_calls.
|
|
112
|
+
"""
|
|
113
|
+
if not self._last_reasoning_content:
|
|
114
|
+
return messages
|
|
115
|
+
|
|
116
|
+
# Find the last assistant message with tool_calls and inject
|
|
117
|
+
# reasoning_content
|
|
118
|
+
processed: List[OpenAIMessage] = []
|
|
119
|
+
reasoning_injected = False
|
|
76
120
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
121
|
+
for msg in reversed(messages):
|
|
122
|
+
if (
|
|
123
|
+
not reasoning_injected
|
|
124
|
+
and isinstance(msg, dict)
|
|
125
|
+
and msg.get("role") == "assistant"
|
|
126
|
+
and msg.get("tool_calls")
|
|
127
|
+
and "reasoning_content" not in msg
|
|
128
|
+
):
|
|
129
|
+
# Inject reasoning_content into this message
|
|
130
|
+
new_msg = dict(msg)
|
|
131
|
+
new_msg["reasoning_content"] = self._last_reasoning_content
|
|
132
|
+
processed.append(new_msg) # type: ignore[arg-type]
|
|
133
|
+
reasoning_injected = True
|
|
134
|
+
else:
|
|
135
|
+
processed.append(msg)
|
|
80
136
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
137
|
+
# Only clear after successful injection
|
|
138
|
+
if reasoning_injected:
|
|
139
|
+
self._last_reasoning_content = None
|
|
140
|
+
|
|
141
|
+
return list(reversed(processed))
|
|
142
|
+
|
|
143
|
+
def _extract_reasoning_content(
|
|
144
|
+
self, response: ChatCompletion
|
|
145
|
+
) -> Optional[str]:
|
|
146
|
+
r"""Extract reasoning_content from the model response.
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
response: The model response.
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
The reasoning_content if available, None otherwise.
|
|
84
153
|
"""
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
154
|
+
if response.choices:
|
|
155
|
+
return getattr(
|
|
156
|
+
response.choices[0].message, "reasoning_content", None
|
|
157
|
+
)
|
|
158
|
+
return None
|
|
159
|
+
|
|
160
|
+
def run(
|
|
161
|
+
self,
|
|
162
|
+
messages: List[OpenAIMessage],
|
|
163
|
+
response_format: Optional[Type[BaseModel]] = None,
|
|
164
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
165
|
+
) -> Union[ChatCompletion, Stream[ChatCompletionChunk]]:
|
|
166
|
+
r"""Runs inference of Volcano Engine chat completion.
|
|
167
|
+
|
|
168
|
+
Overrides the base run method to inject reasoning_content from
|
|
169
|
+
previous responses into subsequent requests, as required by
|
|
170
|
+
Volcano Engine's doubao-seed models with deep thinking enabled.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
messages: Message list with the chat history in OpenAI API format.
|
|
174
|
+
response_format: The format of the response.
|
|
175
|
+
tools: The schema of the tools to use for the request.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
ChatCompletion in the non-stream mode, or
|
|
179
|
+
Stream[ChatCompletionChunk] in the stream mode.
|
|
180
|
+
"""
|
|
181
|
+
# Inject reasoning_content from previous response
|
|
182
|
+
processed_messages = self._inject_reasoning_content(messages)
|
|
183
|
+
|
|
184
|
+
# Call parent's run
|
|
185
|
+
response = super().run(processed_messages, response_format, tools)
|
|
186
|
+
|
|
187
|
+
# Extract and store reasoning_content for next request
|
|
188
|
+
if isinstance(response, ChatCompletion):
|
|
189
|
+
self._last_reasoning_content = self._extract_reasoning_content(
|
|
190
|
+
response
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
return response
|
|
194
|
+
|
|
195
|
+
async def arun(
|
|
196
|
+
self,
|
|
197
|
+
messages: List[OpenAIMessage],
|
|
198
|
+
response_format: Optional[Type[BaseModel]] = None,
|
|
199
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
200
|
+
) -> Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
|
|
201
|
+
r"""Runs async inference of Volcano Engine chat completion.
|
|
202
|
+
|
|
203
|
+
Overrides the base arun method to inject reasoning_content from
|
|
204
|
+
previous responses into subsequent requests, as required by
|
|
205
|
+
Volcano Engine's doubao-seed models with deep thinking enabled.
|
|
206
|
+
|
|
207
|
+
Args:
|
|
208
|
+
messages: Message list with the chat history in OpenAI API format.
|
|
209
|
+
response_format: The format of the response.
|
|
210
|
+
tools: The schema of the tools to use for the request.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
ChatCompletion in the non-stream mode, or
|
|
214
|
+
AsyncStream[ChatCompletionChunk] in the stream mode.
|
|
215
|
+
"""
|
|
216
|
+
# Inject reasoning_content from previous response
|
|
217
|
+
processed_messages = self._inject_reasoning_content(messages)
|
|
218
|
+
|
|
219
|
+
# Call parent's arun
|
|
220
|
+
response = await super().arun(
|
|
221
|
+
processed_messages, response_format, tools
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
# Extract and store reasoning_content for next request
|
|
225
|
+
if isinstance(response, ChatCompletion):
|
|
226
|
+
self._last_reasoning_content = self._extract_reasoning_content(
|
|
227
|
+
response
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
return response
|
camel/models/watsonx_model.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
from typing import Any, Dict, List, Optional, Type, Union
|
|
16
16
|
|
|
17
17
|
from pydantic import BaseModel
|
|
18
18
|
|
|
19
|
-
from camel.configs import
|
|
19
|
+
from camel.configs import WatsonXConfig
|
|
20
20
|
from camel.logger import get_logger
|
|
21
21
|
from camel.messages import OpenAIMessage
|
|
22
22
|
from camel.models import BaseModelBackend
|
|
@@ -26,9 +26,7 @@ from camel.utils import (
|
|
|
26
26
|
BaseTokenCounter,
|
|
27
27
|
OpenAITokenCounter,
|
|
28
28
|
api_keys_required,
|
|
29
|
-
get_current_agent_session_id,
|
|
30
29
|
update_current_observation,
|
|
31
|
-
update_langfuse_trace,
|
|
32
30
|
)
|
|
33
31
|
|
|
34
32
|
if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
|
|
@@ -66,6 +64,8 @@ class WatsonXModel(BaseModelBackend):
|
|
|
66
64
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
67
65
|
environment variable or default to 180 seconds.
|
|
68
66
|
(default: :obj:`None`)
|
|
67
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
68
|
+
initialization.
|
|
69
69
|
"""
|
|
70
70
|
|
|
71
71
|
@api_keys_required(
|
|
@@ -83,6 +83,7 @@ class WatsonXModel(BaseModelBackend):
|
|
|
83
83
|
project_id: Optional[str] = None,
|
|
84
84
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
85
85
|
timeout: Optional[float] = None,
|
|
86
|
+
**kwargs: Any,
|
|
86
87
|
):
|
|
87
88
|
from ibm_watsonx_ai import APIClient, Credentials
|
|
88
89
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
|
@@ -103,7 +104,7 @@ class WatsonXModel(BaseModelBackend):
|
|
|
103
104
|
|
|
104
105
|
self._project_id = project_id
|
|
105
106
|
credentials = Credentials(api_key=self._api_key, url=self._url)
|
|
106
|
-
client = APIClient(credentials, project_id=self._project_id)
|
|
107
|
+
client = APIClient(credentials, project_id=self._project_id, **kwargs)
|
|
107
108
|
|
|
108
109
|
self._model = ModelInference(
|
|
109
110
|
model_id=self.model_type,
|
|
@@ -190,19 +191,7 @@ class WatsonXModel(BaseModelBackend):
|
|
|
190
191
|
model=str(self.model_type),
|
|
191
192
|
model_parameters=self.model_config_dict,
|
|
192
193
|
)
|
|
193
|
-
|
|
194
|
-
agent_session_id = get_current_agent_session_id()
|
|
195
|
-
if agent_session_id:
|
|
196
|
-
update_langfuse_trace(
|
|
197
|
-
session_id=agent_session_id,
|
|
198
|
-
metadata={
|
|
199
|
-
"source": "camel",
|
|
200
|
-
"agent_id": agent_session_id,
|
|
201
|
-
"agent_type": "camel_chat_agent",
|
|
202
|
-
"model_type": str(self.model_type),
|
|
203
|
-
},
|
|
204
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
205
|
-
)
|
|
194
|
+
self._log_and_trace()
|
|
206
195
|
try:
|
|
207
196
|
request_config = self._prepare_request(
|
|
208
197
|
messages, response_format, tools
|
|
@@ -253,19 +242,7 @@ class WatsonXModel(BaseModelBackend):
|
|
|
253
242
|
model=str(self.model_type),
|
|
254
243
|
model_parameters=self.model_config_dict,
|
|
255
244
|
)
|
|
256
|
-
|
|
257
|
-
agent_session_id = get_current_agent_session_id()
|
|
258
|
-
if agent_session_id:
|
|
259
|
-
update_langfuse_trace(
|
|
260
|
-
session_id=agent_session_id,
|
|
261
|
-
metadata={
|
|
262
|
-
"source": "camel",
|
|
263
|
-
"agent_id": agent_session_id,
|
|
264
|
-
"agent_type": "camel_chat_agent",
|
|
265
|
-
"model_type": str(self.model_type),
|
|
266
|
-
},
|
|
267
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
268
|
-
)
|
|
245
|
+
self._log_and_trace()
|
|
269
246
|
|
|
270
247
|
try:
|
|
271
248
|
request_config = self._prepare_request(
|
|
@@ -289,21 +266,6 @@ class WatsonXModel(BaseModelBackend):
|
|
|
289
266
|
logger.error(f"Unexpected error when calling WatsonX API: {e!s}")
|
|
290
267
|
raise
|
|
291
268
|
|
|
292
|
-
def check_model_config(self):
|
|
293
|
-
r"""Check whether the model configuration contains any unexpected
|
|
294
|
-
arguments to WatsonX API.
|
|
295
|
-
|
|
296
|
-
Raises:
|
|
297
|
-
ValueError: If the model configuration dictionary contains any
|
|
298
|
-
unexpected arguments to WatsonX API.
|
|
299
|
-
"""
|
|
300
|
-
for param in self.model_config_dict:
|
|
301
|
-
if param not in WATSONX_API_PARAMS:
|
|
302
|
-
raise ValueError(
|
|
303
|
-
f"Unexpected argument `{param}` is "
|
|
304
|
-
"input into WatsonX model backend."
|
|
305
|
-
)
|
|
306
|
-
|
|
307
269
|
@property
|
|
308
270
|
def stream(self) -> bool:
|
|
309
271
|
r"""Returns whether the model is in stream mode, which sends partial
|
camel/models/yi_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,12 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import os
|
|
16
16
|
from typing import Any, Dict, Optional, Union
|
|
17
17
|
|
|
18
|
-
from camel.configs import
|
|
18
|
+
from camel.configs import YiConfig
|
|
19
19
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
20
20
|
from camel.types import ModelType
|
|
21
21
|
from camel.utils import (
|
|
@@ -46,6 +46,10 @@ class YiModel(OpenAICompatibleModel):
|
|
|
46
46
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
47
47
|
environment variable or default to 180 seconds.
|
|
48
48
|
(default: :obj:`None`)
|
|
49
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
50
|
+
(default: :obj:`3`)
|
|
51
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
52
|
+
initialization.
|
|
49
53
|
"""
|
|
50
54
|
|
|
51
55
|
@api_keys_required(
|
|
@@ -61,6 +65,8 @@ class YiModel(OpenAICompatibleModel):
|
|
|
61
65
|
url: Optional[str] = None,
|
|
62
66
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
63
67
|
timeout: Optional[float] = None,
|
|
68
|
+
max_retries: int = 3,
|
|
69
|
+
**kwargs: Any,
|
|
64
70
|
) -> None:
|
|
65
71
|
if model_config_dict is None:
|
|
66
72
|
model_config_dict = YiConfig().as_dict()
|
|
@@ -76,19 +82,6 @@ class YiModel(OpenAICompatibleModel):
|
|
|
76
82
|
url=url,
|
|
77
83
|
token_counter=token_counter,
|
|
78
84
|
timeout=timeout,
|
|
85
|
+
max_retries=max_retries,
|
|
86
|
+
**kwargs,
|
|
79
87
|
)
|
|
80
|
-
|
|
81
|
-
def check_model_config(self):
|
|
82
|
-
r"""Check whether the model configuration contains any
|
|
83
|
-
unexpected arguments to Yi API.
|
|
84
|
-
|
|
85
|
-
Raises:
|
|
86
|
-
ValueError: If the model configuration dictionary contains any
|
|
87
|
-
unexpected arguments to Yi API.
|
|
88
|
-
"""
|
|
89
|
-
for param in self.model_config_dict:
|
|
90
|
-
if param not in YI_API_PARAMS:
|
|
91
|
-
raise ValueError(
|
|
92
|
-
f"Unexpected argument `{param}` is "
|
|
93
|
-
"input into Yi model backend."
|
|
94
|
-
)
|
camel/models/zhipuai_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,19 +10,29 @@
|
|
|
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
|
-
from typing import Any, Dict, Optional, Union
|
|
16
|
+
from typing import Any, Dict, List, Optional, Type, Union
|
|
17
17
|
|
|
18
|
-
from
|
|
18
|
+
from pydantic import BaseModel
|
|
19
|
+
|
|
20
|
+
from camel.configs import ZhipuAIConfig
|
|
21
|
+
from camel.logger import get_logger
|
|
22
|
+
from camel.messages import OpenAIMessage
|
|
23
|
+
from camel.models._utils import try_modify_message_with_format
|
|
19
24
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
20
|
-
from camel.types import
|
|
25
|
+
from camel.types import (
|
|
26
|
+
ChatCompletion,
|
|
27
|
+
ModelType,
|
|
28
|
+
)
|
|
21
29
|
from camel.utils import (
|
|
22
30
|
BaseTokenCounter,
|
|
23
31
|
api_keys_required,
|
|
24
32
|
)
|
|
25
33
|
|
|
34
|
+
logger = get_logger(__name__)
|
|
35
|
+
|
|
26
36
|
|
|
27
37
|
class ZhipuAIModel(OpenAICompatibleModel):
|
|
28
38
|
r"""ZhipuAI API in a unified OpenAICompatibleModel interface.
|
|
@@ -46,6 +56,10 @@ class ZhipuAIModel(OpenAICompatibleModel):
|
|
|
46
56
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
47
57
|
environment variable or default to 180 seconds.
|
|
48
58
|
(default: :obj:`None`)
|
|
59
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
60
|
+
(default: :obj:`3`)
|
|
61
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
62
|
+
initialization.
|
|
49
63
|
"""
|
|
50
64
|
|
|
51
65
|
@api_keys_required(
|
|
@@ -61,6 +75,8 @@ class ZhipuAIModel(OpenAICompatibleModel):
|
|
|
61
75
|
url: Optional[str] = None,
|
|
62
76
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
63
77
|
timeout: Optional[float] = None,
|
|
78
|
+
max_retries: int = 3,
|
|
79
|
+
**kwargs: Any,
|
|
64
80
|
) -> None:
|
|
65
81
|
if model_config_dict is None:
|
|
66
82
|
model_config_dict = ZhipuAIConfig().as_dict()
|
|
@@ -76,19 +92,55 @@ class ZhipuAIModel(OpenAICompatibleModel):
|
|
|
76
92
|
url=url,
|
|
77
93
|
token_counter=token_counter,
|
|
78
94
|
timeout=timeout,
|
|
95
|
+
max_retries=max_retries,
|
|
96
|
+
**kwargs,
|
|
79
97
|
)
|
|
80
98
|
|
|
81
|
-
def
|
|
82
|
-
|
|
83
|
-
|
|
99
|
+
def _request_parse(
|
|
100
|
+
self,
|
|
101
|
+
messages: List[OpenAIMessage],
|
|
102
|
+
response_format: Type[BaseModel],
|
|
103
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
104
|
+
) -> ChatCompletion:
|
|
105
|
+
import copy
|
|
106
|
+
|
|
107
|
+
request_config = copy.deepcopy(self.model_config_dict)
|
|
108
|
+
request_config.pop("stream", None)
|
|
109
|
+
if tools is not None:
|
|
110
|
+
request_config["tools"] = tools
|
|
111
|
+
|
|
112
|
+
try_modify_message_with_format(messages[-1], response_format)
|
|
113
|
+
request_config["response_format"] = {"type": "json_object"}
|
|
114
|
+
try:
|
|
115
|
+
return self._client.beta.chat.completions.parse(
|
|
116
|
+
messages=messages,
|
|
117
|
+
model=self.model_type,
|
|
118
|
+
**request_config,
|
|
119
|
+
)
|
|
120
|
+
except Exception as e:
|
|
121
|
+
logger.error(f"Fallback attempt also failed: {e}")
|
|
122
|
+
raise
|
|
123
|
+
|
|
124
|
+
async def _arequest_parse(
|
|
125
|
+
self,
|
|
126
|
+
messages: List[OpenAIMessage],
|
|
127
|
+
response_format: Type[BaseModel],
|
|
128
|
+
tools: Optional[List[Dict[str, Any]]] = None,
|
|
129
|
+
) -> ChatCompletion:
|
|
130
|
+
import copy
|
|
84
131
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
132
|
+
request_config = copy.deepcopy(self.model_config_dict)
|
|
133
|
+
request_config.pop("stream", None)
|
|
134
|
+
if tools is not None:
|
|
135
|
+
request_config["tools"] = tools
|
|
136
|
+
try_modify_message_with_format(messages[-1], response_format)
|
|
137
|
+
request_config["response_format"] = {"type": "json_object"}
|
|
138
|
+
try:
|
|
139
|
+
return await self._async_client.beta.chat.completions.parse(
|
|
140
|
+
messages=messages,
|
|
141
|
+
model=self.model_type,
|
|
142
|
+
**request_config,
|
|
143
|
+
)
|
|
144
|
+
except Exception as e:
|
|
145
|
+
logger.error(f"Fallback attempt also failed: {e}")
|
|
146
|
+
raise
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
|
+
"""Helper parsers used across the CAMEL project."""
|
|
15
|
+
|
|
16
|
+
from .mcp_tool_call_parser import extract_tool_calls_from_text
|
|
17
|
+
|
|
18
|
+
__all__ = ["extract_tool_calls_from_text"]
|