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/qwen_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,22 +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
|
-
import
|
|
17
|
-
from typing import Any, Dict, List, Optional, Union
|
|
16
|
+
from typing import Any, Dict, Optional, Union
|
|
18
17
|
|
|
19
|
-
from
|
|
20
|
-
|
|
21
|
-
from camel.configs import QWEN_API_PARAMS, QwenConfig
|
|
22
|
-
from camel.messages import OpenAIMessage
|
|
18
|
+
from camel.configs import QwenConfig
|
|
23
19
|
from camel.models.openai_compatible_model import OpenAICompatibleModel
|
|
24
|
-
from camel.types import
|
|
25
|
-
ChatCompletion,
|
|
26
|
-
ChatCompletionChunk,
|
|
27
|
-
ModelType,
|
|
28
|
-
)
|
|
20
|
+
from camel.types import ModelType
|
|
29
21
|
from camel.utils import (
|
|
30
22
|
BaseTokenCounter,
|
|
31
23
|
api_keys_required,
|
|
@@ -54,6 +46,10 @@ class QwenModel(OpenAICompatibleModel):
|
|
|
54
46
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
55
47
|
environment variable or default to 180 seconds.
|
|
56
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.
|
|
57
53
|
"""
|
|
58
54
|
|
|
59
55
|
@api_keys_required(
|
|
@@ -69,6 +65,8 @@ class QwenModel(OpenAICompatibleModel):
|
|
|
69
65
|
url: Optional[str] = None,
|
|
70
66
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
71
67
|
timeout: Optional[float] = None,
|
|
68
|
+
max_retries: int = 3,
|
|
69
|
+
**kwargs: Any,
|
|
72
70
|
) -> None:
|
|
73
71
|
if model_config_dict is None:
|
|
74
72
|
model_config_dict = QwenConfig().as_dict()
|
|
@@ -85,184 +83,6 @@ class QwenModel(OpenAICompatibleModel):
|
|
|
85
83
|
url=url,
|
|
86
84
|
token_counter=token_counter,
|
|
87
85
|
timeout=timeout,
|
|
86
|
+
max_retries=max_retries,
|
|
87
|
+
**kwargs,
|
|
88
88
|
)
|
|
89
|
-
|
|
90
|
-
def _post_handle_response(
|
|
91
|
-
self, response: Union[ChatCompletion, Stream[ChatCompletionChunk]]
|
|
92
|
-
) -> ChatCompletion:
|
|
93
|
-
r"""Handle reasoning content with <think> tags at the beginning."""
|
|
94
|
-
if not isinstance(response, Stream):
|
|
95
|
-
# Handle non-streaming response (existing logic)
|
|
96
|
-
if self.model_config_dict.get("extra_body", {}).get(
|
|
97
|
-
"enable_thinking", False
|
|
98
|
-
):
|
|
99
|
-
reasoning_content = response.choices[
|
|
100
|
-
0
|
|
101
|
-
].message.reasoning_content # type: ignore[attr-defined]
|
|
102
|
-
combined_content = (
|
|
103
|
-
f"<think>\n{reasoning_content}\n</think>\n"
|
|
104
|
-
if reasoning_content
|
|
105
|
-
else ""
|
|
106
|
-
)
|
|
107
|
-
response_content = response.choices[0].message.content or ""
|
|
108
|
-
combined_content += response_content
|
|
109
|
-
|
|
110
|
-
# Construct a new ChatCompletion with combined content
|
|
111
|
-
return ChatCompletion.construct(
|
|
112
|
-
id=response.id,
|
|
113
|
-
choices=[
|
|
114
|
-
dict(
|
|
115
|
-
finish_reason=response.choices[0].finish_reason,
|
|
116
|
-
index=response.choices[0].index,
|
|
117
|
-
logprobs=response.choices[0].logprobs,
|
|
118
|
-
message=dict(
|
|
119
|
-
role=response.choices[0].message.role,
|
|
120
|
-
content=combined_content,
|
|
121
|
-
),
|
|
122
|
-
)
|
|
123
|
-
],
|
|
124
|
-
created=response.created,
|
|
125
|
-
model=response.model,
|
|
126
|
-
object="chat.completion",
|
|
127
|
-
system_fingerprint=response.system_fingerprint,
|
|
128
|
-
usage=response.usage,
|
|
129
|
-
)
|
|
130
|
-
else:
|
|
131
|
-
return response # Return original if no thinking enabled
|
|
132
|
-
|
|
133
|
-
# Handle streaming response
|
|
134
|
-
accumulated_reasoning = ""
|
|
135
|
-
accumulated_content = ""
|
|
136
|
-
final_chunk = None
|
|
137
|
-
usage_data = None # Initialize usage data
|
|
138
|
-
role = "assistant" # Default role
|
|
139
|
-
|
|
140
|
-
for chunk in response:
|
|
141
|
-
final_chunk = chunk # Keep track of the last chunk for metadata
|
|
142
|
-
if chunk.choices:
|
|
143
|
-
delta = chunk.choices[0].delta
|
|
144
|
-
if delta.role:
|
|
145
|
-
role = delta.role # Update role if provided
|
|
146
|
-
if (
|
|
147
|
-
hasattr(delta, 'reasoning_content')
|
|
148
|
-
and delta.reasoning_content
|
|
149
|
-
):
|
|
150
|
-
accumulated_reasoning += delta.reasoning_content
|
|
151
|
-
if delta.content:
|
|
152
|
-
accumulated_content += delta.content
|
|
153
|
-
|
|
154
|
-
if hasattr(chunk, 'usage') and chunk.usage:
|
|
155
|
-
usage_data = chunk.usage
|
|
156
|
-
|
|
157
|
-
combined_content = (
|
|
158
|
-
f"<think>\n{accumulated_reasoning}\n</think>\n"
|
|
159
|
-
if accumulated_reasoning
|
|
160
|
-
else ""
|
|
161
|
-
) + accumulated_content
|
|
162
|
-
|
|
163
|
-
# Construct the final ChatCompletion object from accumulated
|
|
164
|
-
# stream data
|
|
165
|
-
if final_chunk:
|
|
166
|
-
finish_reason = "stop" # Default finish reason
|
|
167
|
-
logprobs = None
|
|
168
|
-
if final_chunk.choices:
|
|
169
|
-
finish_reason = (
|
|
170
|
-
final_chunk.choices[0].finish_reason or finish_reason
|
|
171
|
-
)
|
|
172
|
-
if hasattr(final_chunk.choices[0], 'logprobs'):
|
|
173
|
-
logprobs = final_chunk.choices[0].logprobs
|
|
174
|
-
|
|
175
|
-
return ChatCompletion.construct(
|
|
176
|
-
# Use data from the final chunk or defaults
|
|
177
|
-
id=final_chunk.id
|
|
178
|
-
if hasattr(final_chunk, 'id')
|
|
179
|
-
else "streamed-completion",
|
|
180
|
-
choices=[
|
|
181
|
-
dict(
|
|
182
|
-
finish_reason=finish_reason,
|
|
183
|
-
index=0,
|
|
184
|
-
logprobs=logprobs,
|
|
185
|
-
message=dict(
|
|
186
|
-
role=role,
|
|
187
|
-
content=combined_content,
|
|
188
|
-
),
|
|
189
|
-
)
|
|
190
|
-
],
|
|
191
|
-
created=final_chunk.created
|
|
192
|
-
if hasattr(final_chunk, 'created')
|
|
193
|
-
else int(time.time()),
|
|
194
|
-
model=final_chunk.model
|
|
195
|
-
if hasattr(final_chunk, 'model')
|
|
196
|
-
else self.model_type,
|
|
197
|
-
object="chat.completion",
|
|
198
|
-
system_fingerprint=final_chunk.system_fingerprint
|
|
199
|
-
if hasattr(final_chunk, 'system_fingerprint')
|
|
200
|
-
else None,
|
|
201
|
-
usage=usage_data,
|
|
202
|
-
)
|
|
203
|
-
else:
|
|
204
|
-
# Handle cases where the stream was empty or invalid
|
|
205
|
-
return ChatCompletion.construct(
|
|
206
|
-
id="empty-stream",
|
|
207
|
-
choices=[
|
|
208
|
-
dict(
|
|
209
|
-
finish_reason="error",
|
|
210
|
-
index=0,
|
|
211
|
-
message=dict(role="assistant", content=""),
|
|
212
|
-
)
|
|
213
|
-
],
|
|
214
|
-
created=int(time.time()),
|
|
215
|
-
model=self.model_type,
|
|
216
|
-
object="chat.completion",
|
|
217
|
-
usage=usage_data,
|
|
218
|
-
)
|
|
219
|
-
|
|
220
|
-
def _request_chat_completion(
|
|
221
|
-
self,
|
|
222
|
-
messages: List[OpenAIMessage],
|
|
223
|
-
tools: Optional[List[Dict[str, Any]]] = None,
|
|
224
|
-
) -> Union[ChatCompletion, Stream[ChatCompletionChunk]]:
|
|
225
|
-
request_config = self.model_config_dict.copy()
|
|
226
|
-
|
|
227
|
-
if tools:
|
|
228
|
-
request_config["tools"] = tools
|
|
229
|
-
|
|
230
|
-
return self._post_handle_response(
|
|
231
|
-
self._client.chat.completions.create(
|
|
232
|
-
messages=messages,
|
|
233
|
-
model=self.model_type,
|
|
234
|
-
**request_config,
|
|
235
|
-
)
|
|
236
|
-
)
|
|
237
|
-
|
|
238
|
-
async def _arequest_chat_completion(
|
|
239
|
-
self,
|
|
240
|
-
messages: List[OpenAIMessage],
|
|
241
|
-
tools: Optional[List[Dict[str, Any]]] = None,
|
|
242
|
-
) -> Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]:
|
|
243
|
-
request_config = self.model_config_dict.copy()
|
|
244
|
-
|
|
245
|
-
if tools:
|
|
246
|
-
request_config["tools"] = tools
|
|
247
|
-
|
|
248
|
-
response = await self._async_client.chat.completions.create(
|
|
249
|
-
messages=messages,
|
|
250
|
-
model=self.model_type,
|
|
251
|
-
**request_config,
|
|
252
|
-
)
|
|
253
|
-
return self._post_handle_response(response)
|
|
254
|
-
|
|
255
|
-
def check_model_config(self):
|
|
256
|
-
r"""Check whether the model configuration contains any
|
|
257
|
-
unexpected arguments to Qwen API.
|
|
258
|
-
|
|
259
|
-
Raises:
|
|
260
|
-
ValueError: If the model configuration dictionary contains any
|
|
261
|
-
unexpected arguments to Qwen API.
|
|
262
|
-
"""
|
|
263
|
-
for param in self.model_config_dict:
|
|
264
|
-
if param not in QWEN_API_PARAMS:
|
|
265
|
-
raise ValueError(
|
|
266
|
-
f"Unexpected argument `{param}` is "
|
|
267
|
-
"input into Qwen model backend."
|
|
268
|
-
)
|
camel/models/reka_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 TYPE_CHECKING, 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 RekaConfig
|
|
20
20
|
from camel.messages import OpenAIMessage
|
|
21
21
|
from camel.models import BaseModelBackend
|
|
22
22
|
from camel.types import ChatCompletion, ModelType
|
|
@@ -25,9 +25,7 @@ from camel.utils import (
|
|
|
25
25
|
OpenAITokenCounter,
|
|
26
26
|
api_keys_required,
|
|
27
27
|
dependencies_required,
|
|
28
|
-
get_current_agent_session_id,
|
|
29
28
|
update_current_observation,
|
|
30
|
-
update_langfuse_trace,
|
|
31
29
|
)
|
|
32
30
|
|
|
33
31
|
if os.environ.get("LANGFUSE_ENABLED", "False").lower() == "true":
|
|
@@ -72,6 +70,8 @@ class RekaModel(BaseModelBackend):
|
|
|
72
70
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
73
71
|
environment variable or default to 180 seconds.
|
|
74
72
|
(default: :obj:`None`)
|
|
73
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
74
|
+
initialization.
|
|
75
75
|
"""
|
|
76
76
|
|
|
77
77
|
@api_keys_required(
|
|
@@ -88,6 +88,7 @@ class RekaModel(BaseModelBackend):
|
|
|
88
88
|
url: Optional[str] = None,
|
|
89
89
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
90
90
|
timeout: Optional[float] = None,
|
|
91
|
+
**kwargs: Any,
|
|
91
92
|
) -> None:
|
|
92
93
|
from reka.client import AsyncReka, Reka
|
|
93
94
|
|
|
@@ -97,13 +98,25 @@ class RekaModel(BaseModelBackend):
|
|
|
97
98
|
url = url or os.environ.get("REKA_API_BASE_URL")
|
|
98
99
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
99
100
|
super().__init__(
|
|
100
|
-
model_type,
|
|
101
|
+
model_type,
|
|
102
|
+
model_config_dict,
|
|
103
|
+
api_key,
|
|
104
|
+
url,
|
|
105
|
+
token_counter,
|
|
106
|
+
timeout,
|
|
107
|
+
**kwargs,
|
|
101
108
|
)
|
|
102
109
|
self._client = Reka(
|
|
103
|
-
api_key=self._api_key,
|
|
110
|
+
api_key=self._api_key,
|
|
111
|
+
base_url=self._url,
|
|
112
|
+
timeout=self._timeout,
|
|
113
|
+
**kwargs,
|
|
104
114
|
)
|
|
105
115
|
self._async_client = AsyncReka(
|
|
106
|
-
api_key=self._api_key,
|
|
116
|
+
api_key=self._api_key,
|
|
117
|
+
base_url=self._url,
|
|
118
|
+
timeout=self._timeout,
|
|
119
|
+
**kwargs,
|
|
107
120
|
)
|
|
108
121
|
|
|
109
122
|
def _convert_reka_to_openai_response(
|
|
@@ -225,19 +238,7 @@ class RekaModel(BaseModelBackend):
|
|
|
225
238
|
model=str(self.model_type),
|
|
226
239
|
model_parameters=self.model_config_dict,
|
|
227
240
|
)
|
|
228
|
-
|
|
229
|
-
agent_session_id = get_current_agent_session_id()
|
|
230
|
-
if agent_session_id:
|
|
231
|
-
update_langfuse_trace(
|
|
232
|
-
session_id=agent_session_id,
|
|
233
|
-
metadata={
|
|
234
|
-
"source": "camel",
|
|
235
|
-
"agent_id": agent_session_id,
|
|
236
|
-
"agent_type": "camel_chat_agent",
|
|
237
|
-
"model_type": str(self.model_type),
|
|
238
|
-
},
|
|
239
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
240
|
-
)
|
|
241
|
+
self._log_and_trace()
|
|
241
242
|
|
|
242
243
|
reka_messages = self._convert_openai_to_reka_messages(messages)
|
|
243
244
|
|
|
@@ -295,19 +296,7 @@ class RekaModel(BaseModelBackend):
|
|
|
295
296
|
model_parameters=self.model_config_dict,
|
|
296
297
|
)
|
|
297
298
|
|
|
298
|
-
|
|
299
|
-
agent_session_id = get_current_agent_session_id()
|
|
300
|
-
if agent_session_id:
|
|
301
|
-
update_langfuse_trace(
|
|
302
|
-
session_id=agent_session_id,
|
|
303
|
-
metadata={
|
|
304
|
-
"source": "camel",
|
|
305
|
-
"agent_id": agent_session_id,
|
|
306
|
-
"agent_type": "camel_chat_agent",
|
|
307
|
-
"model_type": str(self.model_type),
|
|
308
|
-
},
|
|
309
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
310
|
-
)
|
|
299
|
+
self._log_and_trace()
|
|
311
300
|
|
|
312
301
|
reka_messages = self._convert_openai_to_reka_messages(messages)
|
|
313
302
|
|
|
@@ -339,21 +328,6 @@ class RekaModel(BaseModelBackend):
|
|
|
339
328
|
|
|
340
329
|
return openai_response
|
|
341
330
|
|
|
342
|
-
def check_model_config(self):
|
|
343
|
-
r"""Check whether the model configuration contains any
|
|
344
|
-
unexpected arguments to Reka API.
|
|
345
|
-
|
|
346
|
-
Raises:
|
|
347
|
-
ValueError: If the model configuration dictionary contains any
|
|
348
|
-
unexpected arguments to Reka API.
|
|
349
|
-
"""
|
|
350
|
-
for param in self.model_config_dict:
|
|
351
|
-
if param not in REKA_API_PARAMS:
|
|
352
|
-
raise ValueError(
|
|
353
|
-
f"Unexpected argument `{param}` is "
|
|
354
|
-
"input into Reka model backend."
|
|
355
|
-
)
|
|
356
|
-
|
|
357
331
|
@property
|
|
358
332
|
def stream(self) -> bool:
|
|
359
333
|
r"""Returns whether the model is in stream mode, which sends partial
|
camel/models/reward/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from .base_reward_model import BaseRewardModel
|
|
15
15
|
from .evaluator import Evaluator
|
|
16
16
|
from .nemotron_model import NemotronRewardModel
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from abc import ABC, abstractmethod
|
|
15
15
|
from typing import Dict, List, Optional, Union
|
|
16
16
|
|
camel/models/reward/evaluator.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from typing import Dict, List
|
|
15
15
|
|
|
16
16
|
from camel.models.reward import BaseRewardModel
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
from typing import Dict, List, Optional, Union
|
|
16
16
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from typing import Dict, List, Optional, Union
|
|
15
15
|
|
|
16
16
|
import torch
|
camel/models/samba_model.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ========= Copyright 2023-
|
|
1
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
# ========= Copyright 2023-
|
|
13
|
+
# ========= Copyright 2023-2026 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import json
|
|
15
15
|
import os
|
|
16
16
|
import time
|
|
@@ -22,8 +22,6 @@ from openai import AsyncOpenAI, AsyncStream, OpenAI, Stream
|
|
|
22
22
|
from pydantic import BaseModel
|
|
23
23
|
|
|
24
24
|
from camel.configs import (
|
|
25
|
-
SAMBA_CLOUD_API_PARAMS,
|
|
26
|
-
SAMBA_VERSE_API_PARAMS,
|
|
27
25
|
SambaCloudAPIConfig,
|
|
28
26
|
)
|
|
29
27
|
from camel.messages import OpenAIMessage
|
|
@@ -38,9 +36,7 @@ from camel.utils import (
|
|
|
38
36
|
BaseTokenCounter,
|
|
39
37
|
OpenAITokenCounter,
|
|
40
38
|
api_keys_required,
|
|
41
|
-
get_current_agent_session_id,
|
|
42
39
|
update_current_observation,
|
|
43
|
-
update_langfuse_trace,
|
|
44
40
|
)
|
|
45
41
|
|
|
46
42
|
try:
|
|
@@ -88,6 +84,18 @@ class SambaModel(BaseModelBackend):
|
|
|
88
84
|
API calls. If not provided, will fall back to the MODEL_TIMEOUT
|
|
89
85
|
environment variable or default to 180 seconds.
|
|
90
86
|
(default: :obj:`None`)
|
|
87
|
+
max_retries (int, optional): Maximum number of retries for API calls.
|
|
88
|
+
(default: :obj:`3`)
|
|
89
|
+
client (Optional[Any], optional): A custom synchronous
|
|
90
|
+
OpenAI-compatible client instance. If provided, this client will
|
|
91
|
+
be used instead of creating a new one. Only applicable when using
|
|
92
|
+
SambaNova Cloud API. (default: :obj:`None`)
|
|
93
|
+
async_client (Optional[Any], optional): A custom asynchronous
|
|
94
|
+
OpenAI-compatible client instance. If provided, this client will
|
|
95
|
+
be used instead of creating a new one. Only applicable when using
|
|
96
|
+
SambaNova Cloud API. (default: :obj:`None`)
|
|
97
|
+
**kwargs (Any): Additional arguments to pass to the client
|
|
98
|
+
initialization. Ignored if custom clients are provided.
|
|
91
99
|
"""
|
|
92
100
|
|
|
93
101
|
@api_keys_required(
|
|
@@ -103,6 +111,10 @@ class SambaModel(BaseModelBackend):
|
|
|
103
111
|
url: Optional[str] = None,
|
|
104
112
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
105
113
|
timeout: Optional[float] = None,
|
|
114
|
+
max_retries: int = 3,
|
|
115
|
+
client: Optional[Any] = None,
|
|
116
|
+
async_client: Optional[Any] = None,
|
|
117
|
+
**kwargs: Any,
|
|
106
118
|
) -> None:
|
|
107
119
|
if model_config_dict is None:
|
|
108
120
|
model_config_dict = SambaCloudAPIConfig().as_dict()
|
|
@@ -113,22 +125,39 @@ class SambaModel(BaseModelBackend):
|
|
|
113
125
|
)
|
|
114
126
|
timeout = timeout or float(os.environ.get("MODEL_TIMEOUT", 180))
|
|
115
127
|
super().__init__(
|
|
116
|
-
model_type,
|
|
128
|
+
model_type,
|
|
129
|
+
model_config_dict,
|
|
130
|
+
api_key,
|
|
131
|
+
url,
|
|
132
|
+
token_counter,
|
|
133
|
+
timeout,
|
|
134
|
+
max_retries,
|
|
117
135
|
)
|
|
118
136
|
|
|
137
|
+
# Only create clients for Cloud API mode
|
|
119
138
|
if self._url == "https://api.sambanova.ai/v1":
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
139
|
+
# Use custom clients if provided, otherwise create new ones
|
|
140
|
+
if client is not None:
|
|
141
|
+
self._client = client
|
|
142
|
+
else:
|
|
143
|
+
self._client = OpenAI(
|
|
144
|
+
timeout=self._timeout,
|
|
145
|
+
max_retries=self._max_retries,
|
|
146
|
+
base_url=self._url,
|
|
147
|
+
api_key=self._api_key,
|
|
148
|
+
**kwargs,
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
if async_client is not None:
|
|
152
|
+
self._async_client = async_client
|
|
153
|
+
else:
|
|
154
|
+
self._async_client = AsyncOpenAI(
|
|
155
|
+
timeout=self._timeout,
|
|
156
|
+
max_retries=self._max_retries,
|
|
157
|
+
base_url=self._url,
|
|
158
|
+
api_key=self._api_key,
|
|
159
|
+
**kwargs,
|
|
160
|
+
)
|
|
132
161
|
|
|
133
162
|
@property
|
|
134
163
|
def token_counter(self) -> BaseTokenCounter:
|
|
@@ -142,36 +171,6 @@ class SambaModel(BaseModelBackend):
|
|
|
142
171
|
self._token_counter = OpenAITokenCounter(ModelType.GPT_4O_MINI)
|
|
143
172
|
return self._token_counter
|
|
144
173
|
|
|
145
|
-
def check_model_config(self):
|
|
146
|
-
r"""Check whether the model configuration contains any
|
|
147
|
-
unexpected arguments to SambaNova API.
|
|
148
|
-
|
|
149
|
-
Raises:
|
|
150
|
-
ValueError: If the model configuration dictionary contains any
|
|
151
|
-
unexpected arguments to SambaNova API.
|
|
152
|
-
"""
|
|
153
|
-
if self._url == "https://sambaverse.sambanova.ai/api/predict":
|
|
154
|
-
for param in self.model_config_dict:
|
|
155
|
-
if param not in SAMBA_VERSE_API_PARAMS:
|
|
156
|
-
raise ValueError(
|
|
157
|
-
f"Unexpected argument `{param}` is "
|
|
158
|
-
"input into SambaVerse API."
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
elif self._url == "https://api.sambanova.ai/v1":
|
|
162
|
-
for param in self.model_config_dict:
|
|
163
|
-
if param not in SAMBA_CLOUD_API_PARAMS:
|
|
164
|
-
raise ValueError(
|
|
165
|
-
f"Unexpected argument `{param}` is "
|
|
166
|
-
"input into SambaCloud API."
|
|
167
|
-
)
|
|
168
|
-
|
|
169
|
-
else:
|
|
170
|
-
raise ValueError(
|
|
171
|
-
f"{self._url} is not supported, please check the url to the"
|
|
172
|
-
" SambaNova service"
|
|
173
|
-
)
|
|
174
|
-
|
|
175
174
|
@observe(as_type="generation")
|
|
176
175
|
async def _arun( # type: ignore[misc]
|
|
177
176
|
self,
|
|
@@ -200,19 +199,7 @@ class SambaModel(BaseModelBackend):
|
|
|
200
199
|
model_parameters=self.model_config_dict,
|
|
201
200
|
)
|
|
202
201
|
|
|
203
|
-
|
|
204
|
-
agent_session_id = get_current_agent_session_id()
|
|
205
|
-
if agent_session_id:
|
|
206
|
-
update_langfuse_trace(
|
|
207
|
-
session_id=agent_session_id,
|
|
208
|
-
metadata={
|
|
209
|
-
"source": "camel",
|
|
210
|
-
"agent_id": agent_session_id,
|
|
211
|
-
"agent_type": "camel_chat_agent",
|
|
212
|
-
"model_type": str(self.model_type),
|
|
213
|
-
},
|
|
214
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
215
|
-
)
|
|
202
|
+
self._log_and_trace()
|
|
216
203
|
|
|
217
204
|
if "tools" in self.model_config_dict:
|
|
218
205
|
del self.model_config_dict["tools"]
|
|
@@ -251,19 +238,7 @@ class SambaModel(BaseModelBackend):
|
|
|
251
238
|
model=str(self.model_type),
|
|
252
239
|
model_parameters=self.model_config_dict,
|
|
253
240
|
)
|
|
254
|
-
|
|
255
|
-
agent_session_id = get_current_agent_session_id()
|
|
256
|
-
if agent_session_id:
|
|
257
|
-
update_langfuse_trace(
|
|
258
|
-
session_id=agent_session_id,
|
|
259
|
-
metadata={
|
|
260
|
-
"source": "camel",
|
|
261
|
-
"agent_id": agent_session_id,
|
|
262
|
-
"agent_type": "camel_chat_agent",
|
|
263
|
-
"model_type": str(self.model_type),
|
|
264
|
-
},
|
|
265
|
-
tags=["CAMEL-AI", str(self.model_type)],
|
|
266
|
-
)
|
|
241
|
+
self._log_and_trace()
|
|
267
242
|
|
|
268
243
|
if "tools" in self.model_config_dict:
|
|
269
244
|
del self.model_config_dict["tools"]
|