veadk-python 0.5.1__tar.gz → 0.5.2__tar.gz
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.
- {veadk_python-0.5.1/veadk_python.egg-info → veadk_python-0.5.2}/PKG-INFO +9 -8
- {veadk_python-0.5.1 → veadk_python-0.5.2}/pyproject.toml +9 -8
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/agent.py +27 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_rl.py +4 -3
- veadk_python-0.5.2/veadk/cli/templates/rl/lightning/README.md +58 -0
- veadk_python-0.5.2/veadk/cli/templates/rl/lightning/data/demo_test.parquet +0 -0
- veadk_python-0.5.2/veadk/cli/templates/rl/lightning/data/demo_train.parquet +0 -0
- veadk_python-0.5.2/veadk/cli/templates/rl/lightning/demo_calculate_agent.py +148 -0
- veadk_python-0.5.2/veadk/cli/templates/rl/lightning/restart_ray.sh +7 -0
- veadk_python-0.5.2/veadk/cli/templates/rl/lightning/train.sh +53 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/consts.py +1 -1
- veadk_python-0.5.2/veadk/memory/save_session_callback.py +159 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/image_generate.py +13 -4
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/llm_shield.py +2 -3
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/video_generate.py +66 -7
- veadk_python-0.5.2/veadk/tools/builtin_tools/vod.py +71 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +18 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/telemetry.py +7 -2
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/version.py +1 -1
- {veadk_python-0.5.1 → veadk_python-0.5.2/veadk_python.egg-info}/PKG-INFO +9 -8
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk_python.egg-info/SOURCES.txt +8 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk_python.egg-info/requires.txt +8 -7
- {veadk_python-0.5.1 → veadk_python-0.5.2}/LICENSE +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/README.md +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/setup.cfg +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_agent.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_cloud.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_evaluator.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_knowledgebase.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_long_term_memory.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_misc.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_multiple_agents.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_runner.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_runtime_data_collecting.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_short_term_memory.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_tracing.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_ve_a2a_middlewares.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_ve_identity_auth_config.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_ve_identity_function_tool.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_ve_identity_mcp_tool.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/tests/test_ve_identity_mcp_toolset.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/agent_card.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/remote_ve_agent.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/utils/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/utils/agent_to_a2a.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/ve_a2a_server.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/ve_agent_executor.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/ve_middlewares.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/a2a/ve_task_store.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/agent_builder.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/agents/loop_agent.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/agents/parallel_agent.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/agents/sequential_agent.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/base_auth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/ve_credential_service.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/apmplus_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/ark_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/base_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/cozeloop_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/opensearch_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/postgresql_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/prompt_pilot_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/speech_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/utils.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/vesearch_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/auth/veauth/viking_mem0_veauth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_agentkit.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_clean.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_create.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_deploy.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_eval.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_init.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_kb.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_pipeline.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_prompt.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_update.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_uploadevalset.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/cli_web.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/README.md +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/arkworkspace.toml +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/data/demo_dataset.jsonl +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/job.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/job.yaml +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/plugins/random_reward.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/plugins/raw_async_veadk_rollout.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/plugins/test_utils.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/requirements.txt +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cli/templates/rl/ark/test_faas.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cloud/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cloud/cloud_agent_engine.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/cloud/cloud_app.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/config.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/configs/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/configs/auth_configs.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/configs/database_configs.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/configs/model_configs.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/configs/tool_configs.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/configs/tracing_configs.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/adk_evaluator/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/adk_evaluator/adk_evaluator.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/base_evaluator.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/deepeval_evaluator/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/eval_set_file_loader.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/eval_set_recorder.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/types.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/evaluation/utils/prometheus.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_apig/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_apig/ve_apig.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_apig/ve_apig_utils.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_code_pipeline/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_cozeloop/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_cozeloop/ve_cozeloop.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_cr/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_cr/ve_cr.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/cookiecutter.json +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/agent.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/ve_faas.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/ve_faas_utils.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/cookiecutter.json +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/auth_config.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/auth_mixins.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/auth_processor.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/function_tool.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/identity_client.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/mcp_tool.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/mcp_toolset.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/models.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/token_manager.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_identity/utils.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_prompt_pilot/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_tls/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_tls/utils.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_tls/ve_tls.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_tos/ve_tos.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_viking_db_memory/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/integrations/ve_viking_db_memory/ve_viking_db_memory.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/backends/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/backends/base_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/backends/in_memory_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/backends/opensearch_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/backends/redis_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/backends/tos_vector_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/backends/utils.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/entry.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/knowledgebase/knowledgebase.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/long_term_memory.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/long_term_memory_backends/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/long_term_memory_backends/base_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/long_term_memory_backends/in_memory_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/long_term_memory_backends/mem0_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/long_term_memory_backends/opensearch_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/long_term_memory_backends/redis_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/short_term_memory.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/short_term_memory_backends/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/short_term_memory_backends/base_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/short_term_memory_backends/mysql_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/short_term_memory_backends/postgresql_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/short_term_memory_backends/sqlite_backend.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/memory/short_term_memory_processor.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/models/ark_llm.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/models/ark_transform.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/processors/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/processors/base_run_processor.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/prompts/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/prompts/agent_default_prompt.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/prompts/prompt_evaluator.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/prompts/prompt_manager.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/prompts/prompt_memory_processor.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/prompts/prompt_optimization.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/realtime/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/realtime/client.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/realtime/doubao_realtime_voice_llm.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/realtime/doubao_realtime_voice_llm_connection.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/realtime/live.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/realtime/protocol.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/runner.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/agent_authorization.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/execute_skills.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/generate_image.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/image_edit.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/lark.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/las.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/link_reader.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/load_knowledgebase.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/mcp_router.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/mobile_run.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/run_code.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/tts.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/vesearch.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/web_scraper.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/builtin_tools/web_search.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/demo_tools.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/load_knowledgebase_tool.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/mcp_tool/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/mcp_tool/trusted_mcp_session_manager.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/mcp_tool/trusted_mcp_toolset.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/sandbox/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/sandbox/browser_sandbox.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/sandbox/code_sandbox.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tools/sandbox/computer_sandbox.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/base_tracer.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/attributes/attributes.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/attributes/extractors/tool_attributes_extractors.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/attributes/extractors/types.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/exporters/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/exporters/apmplus_exporter.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/exporters/base_exporter.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/exporters/cozeloop_exporter.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/exporters/inmemory_exporter.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/exporters/tls_exporter.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/tracing/telemetry/opentelemetry_tracer.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/types.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/utils/__init__.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/utils/audio_manager.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/utils/auth.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/utils/logger.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/utils/mcp_utils.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/utils/misc.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/utils/patches.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk/utils/volcengine_sign.py +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk_python.egg-info/dependency_links.txt +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk_python.egg-info/entry_points.txt +0 -0
- {veadk_python-0.5.1 → veadk_python-0.5.2}/veadk_python.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: veadk-python
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: Volcengine agent development kit, integrations with Volcengine cloud services.
|
|
5
5
|
Author-email: Yaozheng Fang <fangyozheng@gmail.com>, Guodong Li <cu.eric.lee@gmail.com>, Zhi Han <sliverydayday@gmail.com>, Meng Wang <mengwangwm@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -211,18 +211,18 @@ License-File: LICENSE
|
|
|
211
211
|
Requires-Dist: pydantic-settings==2.10.1
|
|
212
212
|
Requires-Dist: a2a-sdk==0.3.7
|
|
213
213
|
Requires-Dist: deprecated==1.2.18
|
|
214
|
-
Requires-Dist: google-adk
|
|
215
|
-
Requires-Dist: litellm
|
|
214
|
+
Requires-Dist: google-adk>=1.19.0
|
|
215
|
+
Requires-Dist: litellm>=1.74.3
|
|
216
216
|
Requires-Dist: loguru==0.7.3
|
|
217
217
|
Requires-Dist: opentelemetry-exporter-otlp==1.37.0
|
|
218
218
|
Requires-Dist: opentelemetry-instrumentation-logging>=0.56b0
|
|
219
219
|
Requires-Dist: wrapt==1.17.2
|
|
220
220
|
Requires-Dist: openai<1.100
|
|
221
|
-
Requires-Dist: volcengine-python-sdk
|
|
222
|
-
Requires-Dist: volcengine
|
|
221
|
+
Requires-Dist: volcengine-python-sdk>=5.0.1
|
|
222
|
+
Requires-Dist: volcengine>=1.0.193
|
|
223
223
|
Requires-Dist: agent-pilot-sdk==0.1.2
|
|
224
|
-
Requires-Dist: fastmcp
|
|
225
|
-
Requires-Dist: trustedmcp==0.0.
|
|
224
|
+
Requires-Dist: fastmcp>=2.12.3
|
|
225
|
+
Requires-Dist: trustedmcp==0.0.5
|
|
226
226
|
Requires-Dist: cookiecutter==2.6.0
|
|
227
227
|
Requires-Dist: omegaconf==2.3.0
|
|
228
228
|
Requires-Dist: llama-index==0.14.0
|
|
@@ -230,7 +230,7 @@ Requires-Dist: llama-index-embeddings-openai-like==0.2.2
|
|
|
230
230
|
Requires-Dist: llama-index-llms-openai-like==0.5.1
|
|
231
231
|
Requires-Dist: llama-index-vector-stores-opensearch==0.6.1
|
|
232
232
|
Requires-Dist: psycopg2-binary==2.9.10
|
|
233
|
-
Requires-Dist: asyncpg
|
|
233
|
+
Requires-Dist: asyncpg>=0.29.0
|
|
234
234
|
Requires-Dist: pymysql==1.1.1
|
|
235
235
|
Requires-Dist: aiomysql==0.3.2
|
|
236
236
|
Requires-Dist: opensearch-py==2.8.0
|
|
@@ -241,6 +241,7 @@ Provides-Extra: extensions
|
|
|
241
241
|
Requires-Dist: redis>=5.0; extra == "extensions"
|
|
242
242
|
Requires-Dist: tos>=2.8.4; extra == "extensions"
|
|
243
243
|
Requires-Dist: llama-index-vector-stores-redis>=0.6.1; extra == "extensions"
|
|
244
|
+
Requires-Dist: cozeloop>=0.1.21; extra == "extensions"
|
|
244
245
|
Provides-Extra: database
|
|
245
246
|
Requires-Dist: redis>=5.0; extra == "database"
|
|
246
247
|
Requires-Dist: pymysql>=1.1.1; extra == "database"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "veadk-python"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.2"
|
|
4
4
|
description = "Volcengine agent development kit, integrations with Volcengine cloud services."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
@@ -15,18 +15,18 @@ dependencies = [
|
|
|
15
15
|
"pydantic-settings==2.10.1", # Config management
|
|
16
16
|
"a2a-sdk==0.3.7", # For Google Agent2Agent protocol
|
|
17
17
|
"deprecated==1.2.18",
|
|
18
|
-
"google-adk
|
|
19
|
-
"litellm
|
|
18
|
+
"google-adk>=1.19.0", # For basic agent architecture
|
|
19
|
+
"litellm>=1.74.3", # For model inference
|
|
20
20
|
"loguru==0.7.3", # For better logging
|
|
21
21
|
"opentelemetry-exporter-otlp==1.37.0",
|
|
22
22
|
"opentelemetry-instrumentation-logging>=0.56b0",
|
|
23
23
|
"wrapt==1.17.2", # For patching built-in functions
|
|
24
24
|
"openai<1.100", # For fix https://github.com/BerriAI/litellm/issues/13710
|
|
25
|
-
"volcengine-python-sdk
|
|
26
|
-
"volcengine
|
|
25
|
+
"volcengine-python-sdk>=5.0.1", # For Volcengine API
|
|
26
|
+
"volcengine>=1.0.193", # For Volcengine sign
|
|
27
27
|
"agent-pilot-sdk==0.1.2", # Prompt optimization by Volcengine AgentPilot/PromptPilot toolkits
|
|
28
|
-
"fastmcp
|
|
29
|
-
"trustedmcp==0.0.
|
|
28
|
+
"fastmcp>=2.12.3", # For running MCP
|
|
29
|
+
"trustedmcp==0.0.5", # For running TrustedMCP
|
|
30
30
|
"cookiecutter==2.6.0", # For cloud deploy
|
|
31
31
|
"omegaconf==2.3.0", # For agent builder
|
|
32
32
|
"llama-index==0.14.0",
|
|
@@ -34,7 +34,7 @@ dependencies = [
|
|
|
34
34
|
"llama-index-llms-openai-like==0.5.1",
|
|
35
35
|
"llama-index-vector-stores-opensearch==0.6.1",
|
|
36
36
|
"psycopg2-binary==2.9.10", # For PostgreSQL database (short term memory)
|
|
37
|
-
"asyncpg
|
|
37
|
+
"asyncpg>=0.29.0", # For async PostgreSQL database (short term memory)
|
|
38
38
|
"pymysql==1.1.1", # For MySQL database (short term memory)
|
|
39
39
|
"aiomysql==0.3.2", # For async MySQL database (short term memory)
|
|
40
40
|
"opensearch-py==2.8.0",
|
|
@@ -51,6 +51,7 @@ extensions = [
|
|
|
51
51
|
"redis>=5.0", # For Redis database
|
|
52
52
|
"tos>=2.8.4", # For TOS storage and Viking DB
|
|
53
53
|
"llama-index-vector-stores-redis>=0.6.1",
|
|
54
|
+
"cozeloop>=0.1.21", #For Cozeloop Prompt manager
|
|
54
55
|
]
|
|
55
56
|
database = [
|
|
56
57
|
"redis>=5.0", # For Redis database
|
|
@@ -85,6 +85,8 @@ class Agent(LlmAgent):
|
|
|
85
85
|
short_term_memory (Optional[ShortTermMemory]): Session-based memory for temporary context.
|
|
86
86
|
long_term_memory (Optional[LongTermMemory]): Cross-session memory for persistent user context.
|
|
87
87
|
tracers (list[BaseTracer]): List of tracers used for telemetry and monitoring.
|
|
88
|
+
enable_authz (bool): Whether to enable agent authorization checks.
|
|
89
|
+
auto_save_session (bool): Whether to automatically save sessions to long-term memory.
|
|
88
90
|
"""
|
|
89
91
|
|
|
90
92
|
model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow")
|
|
@@ -140,6 +142,8 @@ class Agent(LlmAgent):
|
|
|
140
142
|
|
|
141
143
|
enable_authz: bool = False
|
|
142
144
|
|
|
145
|
+
auto_save_session: bool = False
|
|
146
|
+
|
|
143
147
|
def model_post_init(self, __context: Any) -> None:
|
|
144
148
|
super().model_post_init(None) # for sub_agents init
|
|
145
149
|
|
|
@@ -258,6 +262,29 @@ class Agent(LlmAgent):
|
|
|
258
262
|
if self.prompt_manager:
|
|
259
263
|
self.instruction = self.prompt_manager.get_prompt
|
|
260
264
|
|
|
265
|
+
if self.auto_save_session:
|
|
266
|
+
if self.long_term_memory is None:
|
|
267
|
+
logger.warning(
|
|
268
|
+
"auto_save_session is enabled, but long_term_memory is not initialized."
|
|
269
|
+
)
|
|
270
|
+
else:
|
|
271
|
+
from veadk.memory.save_session_callback import (
|
|
272
|
+
save_session_to_long_term_memory,
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
if self.after_agent_callback:
|
|
276
|
+
if isinstance(self.after_agent_callback, list):
|
|
277
|
+
self.after_agent_callback.append(
|
|
278
|
+
save_session_to_long_term_memory
|
|
279
|
+
)
|
|
280
|
+
else:
|
|
281
|
+
self.after_agent_callback = [
|
|
282
|
+
self.after_agent_callback,
|
|
283
|
+
save_session_to_long_term_memory,
|
|
284
|
+
]
|
|
285
|
+
else:
|
|
286
|
+
self.after_agent_callback = save_session_to_long_term_memory
|
|
287
|
+
|
|
261
288
|
logger.info(f"VeADK version: {VERSION}")
|
|
262
289
|
|
|
263
290
|
logger.info(f"{self.__class__.__name__} `{self.name}` init done.")
|
|
@@ -38,8 +38,8 @@ def rl_group():
|
|
|
38
38
|
"--platform",
|
|
39
39
|
"-p",
|
|
40
40
|
required=True,
|
|
41
|
-
type=click.Choice(["ark"], case_sensitive=False),
|
|
42
|
-
help="Scaffold platform type (
|
|
41
|
+
type=click.Choice(["ark", "lightning"], case_sensitive=False),
|
|
42
|
+
help="Scaffold platform type (supported: ark, lightning)",
|
|
43
43
|
)
|
|
44
44
|
@click.option(
|
|
45
45
|
"--workspace", "-w", required=True, type=str, help="Target workspace directory name"
|
|
@@ -52,8 +52,9 @@ def rl_group():
|
|
|
52
52
|
)
|
|
53
53
|
def rl_init(platform: str, workspace: str, overwrite: bool):
|
|
54
54
|
"""
|
|
55
|
-
Initialize RL scaffold project for ark platform
|
|
55
|
+
Initialize RL scaffold project for ark or lightning platform
|
|
56
56
|
Example: veadk rl init --platform ark --workspace veadk_rl_ark_project
|
|
57
|
+
Example: veadk rl init --platform lightning --workspace veadk_rl_lightning_project
|
|
57
58
|
"""
|
|
58
59
|
# Locate template directory
|
|
59
60
|
rl_template_root = get_rl_template_root()
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Agent Lightning
|
|
2
|
+
|
|
3
|
+
Agent Lightning 提供了灵活且可扩展的框架,实现了智能体(client)和训练(server)的完全解耦。
|
|
4
|
+
VeADK 与 Agent Lightning 集成,用户使用 VeADK 提供的脚手架,可以开发 VeADK Agent,然后运行 client 与 server 进行强化学习优化。
|
|
5
|
+
|
|
6
|
+
## 准备工作
|
|
7
|
+
|
|
8
|
+
在你的终端中运行以下命令,初始化一个 Agent Lightning 项目:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
veadk rl init --platform lightning --workspace veadk_rl_lightning_project
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
该命令会在当前目录下创建一个名为 `veadk_rl_lightning_project` 的文件夹,其中包含了一个基本的基于 VeADK 和 Agent Lightning 的强化学习项目结构。
|
|
15
|
+
然后在终端1中运行以下命令,启动 client:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
cd veadk_rl_lightning_project
|
|
19
|
+
python veadk_agent.py
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
然后在终端2中运行以下命令
|
|
23
|
+
|
|
24
|
+
- 首先重启 ray 集群:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cd veadk_rl_lightning_project
|
|
28
|
+
bash restart_ray.sh
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- 启动 server:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cd veadk_rl_lightning_project
|
|
35
|
+
bash train.sh
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 原理说明
|
|
39
|
+
|
|
40
|
+
生成后的项目结构如下,其中核心文件包括:
|
|
41
|
+
|
|
42
|
+
- agent_client: `*_agent.py` 中定义了agent的rollout逻辑和reward规则
|
|
43
|
+
- training_server: `train.sh` 定义了训练相关参数,用于启动训练服务器
|
|
44
|
+
|
|
45
|
+
```shell
|
|
46
|
+
veadk_rl_lightning_project
|
|
47
|
+
├── data
|
|
48
|
+
├── demo_train.parquet # 训练数据,必须为 parquet 格式
|
|
49
|
+
├── demo_test.parquet # 测试数据,必须为 parquet 格式
|
|
50
|
+
└── demo_calculate_agent.py # agent的rollout逻辑和reward设定
|
|
51
|
+
└── train.sh # 训练服务器启动脚本,设定训练相关参数
|
|
52
|
+
└── restart_ray.sh # 重启 ray 集群脚本
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## 最佳实践案例
|
|
56
|
+
|
|
57
|
+
1. 脚手架中,基于 VeADK 的算术 Agent 进行强化学习优化
|
|
58
|
+
2. 启动 client (python demo_calculate_agent.py), 重启ray集群(bash restart_ray.sh), 最后启动训练服务器server (bash train.sh),分别在终端1与终端2中运行以上命令
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import math
|
|
16
|
+
import re
|
|
17
|
+
import string
|
|
18
|
+
import sympy
|
|
19
|
+
from typing import Any, cast
|
|
20
|
+
from veadk.agent import Agent
|
|
21
|
+
from veadk.runner import Runner
|
|
22
|
+
from veadk.memory.short_term_memory import ShortTermMemory
|
|
23
|
+
from agentlightning import (
|
|
24
|
+
LLM,
|
|
25
|
+
LitAgent,
|
|
26
|
+
NamedResources,
|
|
27
|
+
Trainer,
|
|
28
|
+
reward,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def normalize_option(option: str) -> str:
|
|
33
|
+
"""
|
|
34
|
+
>>> normalize_option(" (A) \n")
|
|
35
|
+
'A'
|
|
36
|
+
"""
|
|
37
|
+
return re.sub(r"(\s+|\(|\))", "", option)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def is_option_result(result: str) -> bool:
|
|
41
|
+
"""
|
|
42
|
+
>>> is_option_result(" A) \n")
|
|
43
|
+
True
|
|
44
|
+
>>> is_option_result(" 23/7 ")
|
|
45
|
+
False
|
|
46
|
+
"""
|
|
47
|
+
return normalize_option(result) in list(string.ascii_letters)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def float_eval(input_str: str) -> float:
|
|
51
|
+
if " = around " in input_str:
|
|
52
|
+
input_str = input_str.split(" = around ")[0]
|
|
53
|
+
expr = sympy.parse_expr(input_str, evaluate=True)
|
|
54
|
+
return float(expr.evalf())
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def scalar_are_results_same(pred_result: str, true_result: str, rel_tol: float) -> bool:
|
|
58
|
+
pred_result = str(pred_result) if pred_result is not None else "" # type: ignore
|
|
59
|
+
true_result = str(true_result) if true_result is not None else "" # type: ignore
|
|
60
|
+
|
|
61
|
+
if pred_result.strip() == true_result.strip():
|
|
62
|
+
return True
|
|
63
|
+
|
|
64
|
+
if is_option_result(true_result):
|
|
65
|
+
# The task is to select correct option
|
|
66
|
+
true_result = normalize_option(true_result)
|
|
67
|
+
pred_result = normalize_option(pred_result)
|
|
68
|
+
return pred_result == true_result
|
|
69
|
+
|
|
70
|
+
# The task is to calculate the result as a number
|
|
71
|
+
try:
|
|
72
|
+
pred_float = float_eval(pred_result)
|
|
73
|
+
true_float = float_eval(true_result)
|
|
74
|
+
return math.isclose(pred_float, true_float, rel_tol=rel_tol)
|
|
75
|
+
except Exception:
|
|
76
|
+
pass
|
|
77
|
+
|
|
78
|
+
return False
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@reward
|
|
82
|
+
async def eval(prediction: str, ground_truth: str) -> float:
|
|
83
|
+
return float(scalar_are_results_same(prediction, ground_truth, 1e-2))
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class CalcAgent(LitAgent[Any]):
|
|
87
|
+
async def training_rollout_async(
|
|
88
|
+
self, task: Any, rollout_id: str, resources: NamedResources
|
|
89
|
+
) -> Any: # type: ignore
|
|
90
|
+
llm: LLM = cast(LLM, resources.get("main_llm"))
|
|
91
|
+
calc_agent = Agent(
|
|
92
|
+
name="CalcAgent",
|
|
93
|
+
description="An agent that can perform calculations to answer questions.",
|
|
94
|
+
instruction="You are a helpful assistant that can perform mathematical calculations to answer questions accurately.",
|
|
95
|
+
model_provider="openai",
|
|
96
|
+
model=llm.model,
|
|
97
|
+
api_base=llm.endpoint,
|
|
98
|
+
api_key="",
|
|
99
|
+
)
|
|
100
|
+
runner = Runner(
|
|
101
|
+
agent=calc_agent,
|
|
102
|
+
short_term_memory=ShortTermMemory(),
|
|
103
|
+
app_name="calc_agent",
|
|
104
|
+
user_id="veadk_default_user",
|
|
105
|
+
)
|
|
106
|
+
try:
|
|
107
|
+
output_format = "Output the answer when you are ready. The answer should be surrounded by three sharps (`###`), in the form of ### ANSWER: <answer> ###."
|
|
108
|
+
prompt = task["question"] + " " + output_format
|
|
109
|
+
result = await runner.run(
|
|
110
|
+
session_id=rollout_id,
|
|
111
|
+
messages=prompt,
|
|
112
|
+
)
|
|
113
|
+
# evaluate
|
|
114
|
+
answer = re.search(
|
|
115
|
+
r"###\s*ANSWER:\s*(.+?)(\s*###|$)", result.messages[-1].content
|
|
116
|
+
) # type: ignore
|
|
117
|
+
if answer:
|
|
118
|
+
answer = answer.group(1)
|
|
119
|
+
else:
|
|
120
|
+
answer = result.messages[-1].content # type: ignore
|
|
121
|
+
except Exception as e:
|
|
122
|
+
print("Failure:", str(e))
|
|
123
|
+
answer = "None"
|
|
124
|
+
reward = await eval(
|
|
125
|
+
answer, str(task["result"])
|
|
126
|
+
) # reward is tracked with the decorator # type: ignore
|
|
127
|
+
print(
|
|
128
|
+
"answer: {} ground_truth: {} reward: {}".format(
|
|
129
|
+
answer, task["result"], reward
|
|
130
|
+
)
|
|
131
|
+
) # type: ignore
|
|
132
|
+
|
|
133
|
+
async def validation_rollout_async(
|
|
134
|
+
self, task: Any, rollout_id: str, resources: NamedResources
|
|
135
|
+
) -> Any: # type: ignore
|
|
136
|
+
llm: LLM = cast(LLM, resources.get("main_llm"))
|
|
137
|
+
resources = {
|
|
138
|
+
"main_llm": LLM(
|
|
139
|
+
endpoint=llm.endpoint,
|
|
140
|
+
model=llm.model,
|
|
141
|
+
sampling_parameters={"temperature": 0},
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
return await self.training_rollout_async(task, rollout_id, resources)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
if __name__ == "__main__":
|
|
148
|
+
Trainer(n_workers=10).fit(CalcAgent(), "http://localhost:9999/")
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
export N_GPUS=1
|
|
6
|
+
export BASE_MODEL=Qwen/Qwen2.5-1.5B-Instruct
|
|
7
|
+
export DATA_DIR=data
|
|
8
|
+
export ROLLOUT_TP_SIZE=1
|
|
9
|
+
export EXPERIMENT_NAME=calc_x
|
|
10
|
+
export PROJECT_NAME=AgentLightning
|
|
11
|
+
|
|
12
|
+
echo "Starting training script..."
|
|
13
|
+
|
|
14
|
+
python -m agentlightning.verl \
|
|
15
|
+
algorithm.adv_estimator=grpo \
|
|
16
|
+
data.train_files=${DATA_DIR}/train.parquet \
|
|
17
|
+
data.val_files=${DATA_DIR}/test.parquet \
|
|
18
|
+
actor_rollout_ref.rollout.tensor_model_parallel_size=$ROLLOUT_TP_SIZE \
|
|
19
|
+
trainer.n_gpus_per_node=${N_GPUS} \
|
|
20
|
+
data.train_batch_size=32 \
|
|
21
|
+
actor_rollout_ref.rollout.n=4 \
|
|
22
|
+
actor_rollout_ref.actor.ppo_mini_batch_size=32 \
|
|
23
|
+
actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=4 \
|
|
24
|
+
actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=4 \
|
|
25
|
+
actor_rollout_ref.rollout.multi_turn.format=hermes \
|
|
26
|
+
actor_rollout_ref.model.path=${BASE_MODEL} \
|
|
27
|
+
data.max_prompt_length=4096 \
|
|
28
|
+
data.max_response_length=2048 \
|
|
29
|
+
data.truncation='error' \
|
|
30
|
+
trainer.val_before_train=True \
|
|
31
|
+
actor_rollout_ref.actor.optim.lr=1e-6 \
|
|
32
|
+
actor_rollout_ref.model.use_remove_padding=True \
|
|
33
|
+
actor_rollout_ref.actor.use_kl_loss=False \
|
|
34
|
+
actor_rollout_ref.actor.kl_loss_coef=0.000 \
|
|
35
|
+
actor_rollout_ref.actor.entropy_coeff=0 \
|
|
36
|
+
actor_rollout_ref.actor.clip_ratio_low=0.2 \
|
|
37
|
+
actor_rollout_ref.actor.clip_ratio_high=0.3 \
|
|
38
|
+
actor_rollout_ref.model.enable_gradient_checkpointing=True \
|
|
39
|
+
actor_rollout_ref.actor.fsdp_config.param_offload=True \
|
|
40
|
+
actor_rollout_ref.actor.fsdp_config.optimizer_offload=True \
|
|
41
|
+
actor_rollout_ref.rollout.name=vllm \
|
|
42
|
+
actor_rollout_ref.rollout.gpu_memory_utilization=0.8 \
|
|
43
|
+
actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu=8 \
|
|
44
|
+
actor_rollout_ref.ref.fsdp_config.param_offload=True \
|
|
45
|
+
algorithm.use_kl_in_reward=False \
|
|
46
|
+
trainer.critic_warmup=0 \
|
|
47
|
+
trainer.logger=['console','wandb'] \
|
|
48
|
+
trainer.project_name=${PROJECT_NAME} \
|
|
49
|
+
trainer.experiment_name=${EXPERIMENT_NAME} \
|
|
50
|
+
trainer.nnodes=1 \
|
|
51
|
+
trainer.save_freq=256 \
|
|
52
|
+
trainer.test_freq=32 \
|
|
53
|
+
trainer.total_epochs=2 $@
|
|
@@ -65,7 +65,7 @@ DEFAULT_COZELOOP_SPACE_NAME = "VeADK Space"
|
|
|
65
65
|
DEFAULT_IMAGE_EDIT_MODEL_NAME = "doubao-seededit-3-0-i2i-250628"
|
|
66
66
|
DEFAULT_IMAGE_EDIT_MODEL_API_BASE = "https://ark.cn-beijing.volces.com/api/v3/"
|
|
67
67
|
|
|
68
|
-
DEFAULT_VIDEO_MODEL_NAME = "doubao-seedance-1-
|
|
68
|
+
DEFAULT_VIDEO_MODEL_NAME = "doubao-seedance-1-5-pro-251215"
|
|
69
69
|
DEFAULT_VIDEO_MODEL_API_BASE = "https://ark.cn-beijing.volces.com/api/v3/"
|
|
70
70
|
|
|
71
71
|
DEFAULT_IMAGE_GENERATE_MODEL_NAME = "doubao-seedream-4-5-251128"
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import time
|
|
16
|
+
from google.adk.agents.callback_context import CallbackContext
|
|
17
|
+
from veadk.config import getenv
|
|
18
|
+
from veadk.utils.logger import get_logger
|
|
19
|
+
|
|
20
|
+
logger = get_logger(__name__)
|
|
21
|
+
|
|
22
|
+
# Session-level cache for tracking save state
|
|
23
|
+
# Format: {(app_name, user_id, session_id): {'last_save_time': float, 'last_event_count': int}}
|
|
24
|
+
_session_save_cache: dict = {}
|
|
25
|
+
|
|
26
|
+
# Track active session per user to detect session switches
|
|
27
|
+
# Format: {(app_name, user_id): session_id}
|
|
28
|
+
_active_sessions: dict = {}
|
|
29
|
+
|
|
30
|
+
# Configurable thresholds
|
|
31
|
+
MIN_MESSAGES_THRESHOLD = getenv(
|
|
32
|
+
"MIN_MESSAGES_THRESHOLD", 10
|
|
33
|
+
) # Minimum number of new messages before saving
|
|
34
|
+
MIN_TIME_THRESHOLD = getenv(
|
|
35
|
+
"MIN_TIME_THRESHOLD", 60
|
|
36
|
+
) # Minimum seconds between saves (1 minute)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
async def save_session_to_long_term_memory(
|
|
40
|
+
callback_context: CallbackContext,
|
|
41
|
+
) -> None:
|
|
42
|
+
"""Save the current session to long-term memory.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
callback_context: The callback context containing invocation information.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
None
|
|
49
|
+
"""
|
|
50
|
+
try:
|
|
51
|
+
agent = callback_context._invocation_context.agent
|
|
52
|
+
|
|
53
|
+
long_term_memory = getattr(agent, "long_term_memory", None)
|
|
54
|
+
if not long_term_memory:
|
|
55
|
+
logger.error(
|
|
56
|
+
"Long-term memory is not initialized in agent, cannot save session to memory."
|
|
57
|
+
)
|
|
58
|
+
return None
|
|
59
|
+
|
|
60
|
+
app_name = callback_context._invocation_context.app_name
|
|
61
|
+
user_id = callback_context._invocation_context.user_id
|
|
62
|
+
session_id = callback_context._invocation_context.session.id
|
|
63
|
+
session_service = callback_context._invocation_context.session_service
|
|
64
|
+
|
|
65
|
+
current_time = time.time()
|
|
66
|
+
|
|
67
|
+
# Detect session switch and force save previous session
|
|
68
|
+
user_key = (app_name, user_id)
|
|
69
|
+
previous_session_id = _active_sessions.get(user_key)
|
|
70
|
+
|
|
71
|
+
if previous_session_id and previous_session_id != session_id:
|
|
72
|
+
logger.info(
|
|
73
|
+
f"Session switch detected for user {user_id}: "
|
|
74
|
+
f"{previous_session_id} -> {session_id}. "
|
|
75
|
+
f"Force saving previous session."
|
|
76
|
+
)
|
|
77
|
+
old_session = await session_service.get_session(
|
|
78
|
+
app_name=app_name,
|
|
79
|
+
user_id=user_id,
|
|
80
|
+
session_id=previous_session_id,
|
|
81
|
+
)
|
|
82
|
+
if old_session:
|
|
83
|
+
old_events = getattr(old_session, "events", [])
|
|
84
|
+
old_event_count = len(old_events)
|
|
85
|
+
await long_term_memory.add_session_to_memory(old_session)
|
|
86
|
+
old_cache_key = (app_name, user_id, previous_session_id)
|
|
87
|
+
|
|
88
|
+
_session_save_cache[old_cache_key] = {
|
|
89
|
+
"last_save_time": current_time,
|
|
90
|
+
"last_event_count": old_event_count,
|
|
91
|
+
}
|
|
92
|
+
logger.info(
|
|
93
|
+
f"Previous session `{old_session.id}` saved to long term memory due to session switch."
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# Update active session
|
|
97
|
+
_active_sessions[user_key] = session_id
|
|
98
|
+
|
|
99
|
+
session = await session_service.get_session(
|
|
100
|
+
app_name=app_name,
|
|
101
|
+
user_id=user_id,
|
|
102
|
+
session_id=session_id,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
if not session:
|
|
106
|
+
logger.error(
|
|
107
|
+
f"Session {session_id} (app_name={app_name}, user_id={user_id}) not found in session service, cannot save to long-term memory."
|
|
108
|
+
)
|
|
109
|
+
return None
|
|
110
|
+
|
|
111
|
+
current_events = getattr(session, "events", [])
|
|
112
|
+
current_event_count = len(current_events)
|
|
113
|
+
# logger.debug(f"Current event count: {current_event_count}")
|
|
114
|
+
|
|
115
|
+
# Create cache key
|
|
116
|
+
cache_key = (app_name, user_id, session_id)
|
|
117
|
+
|
|
118
|
+
cache_info = _session_save_cache.get(cache_key)
|
|
119
|
+
|
|
120
|
+
if cache_info:
|
|
121
|
+
last_save_time = cache_info.get("last_save_time", 0)
|
|
122
|
+
last_event_count = cache_info.get("last_event_count", 0)
|
|
123
|
+
|
|
124
|
+
time_elapsed = current_time - last_save_time
|
|
125
|
+
new_events_count = current_event_count - last_event_count
|
|
126
|
+
|
|
127
|
+
# Check if we should skip save
|
|
128
|
+
if (
|
|
129
|
+
time_elapsed < MIN_TIME_THRESHOLD
|
|
130
|
+
and new_events_count < MIN_MESSAGES_THRESHOLD
|
|
131
|
+
):
|
|
132
|
+
logger.info(
|
|
133
|
+
f"Skipping save for session {session_id}: "
|
|
134
|
+
f"only {new_events_count} new events (need {MIN_MESSAGES_THRESHOLD}) "
|
|
135
|
+
f"and {time_elapsed:.1f}s elapsed (need {MIN_TIME_THRESHOLD}s)"
|
|
136
|
+
)
|
|
137
|
+
return None
|
|
138
|
+
else:
|
|
139
|
+
logger.info(f"First save for session {session_id}.")
|
|
140
|
+
|
|
141
|
+
# Save to long-term memory
|
|
142
|
+
await long_term_memory.add_session_to_memory(session)
|
|
143
|
+
|
|
144
|
+
# Update cache
|
|
145
|
+
_session_save_cache[cache_key] = {
|
|
146
|
+
"last_save_time": current_time,
|
|
147
|
+
"last_event_count": current_event_count,
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
logger.info(f"Add session `{session.id}` to long term memory.")
|
|
151
|
+
|
|
152
|
+
return None
|
|
153
|
+
|
|
154
|
+
except AttributeError as e:
|
|
155
|
+
logger.error(f"AttributeError while saving session to memory: {e}")
|
|
156
|
+
return None
|
|
157
|
+
except Exception as e:
|
|
158
|
+
logger.error(f"Unexpected error while saving session to memory: {e}")
|
|
159
|
+
return None
|
|
@@ -83,7 +83,10 @@ def _build_input_parts(item: dict, task_type: str, image_field):
|
|
|
83
83
|
|
|
84
84
|
|
|
85
85
|
def handle_single_task_sync(
|
|
86
|
-
idx: int,
|
|
86
|
+
idx: int,
|
|
87
|
+
item: dict,
|
|
88
|
+
timeout: int,
|
|
89
|
+
tool_context,
|
|
87
90
|
) -> tuple[list[dict], list[str]]:
|
|
88
91
|
logger.debug(f"handle_single_task_sync item {idx}: {item}")
|
|
89
92
|
success_list: list[dict] = []
|
|
@@ -139,6 +142,7 @@ def handle_single_task_sync(
|
|
|
139
142
|
"MODEL_AGENT_CLIENT_REQ_ID", f"veadk/{VERSION}"
|
|
140
143
|
),
|
|
141
144
|
},
|
|
145
|
+
timeout=timeout,
|
|
142
146
|
)
|
|
143
147
|
else:
|
|
144
148
|
response = client.images.generate(
|
|
@@ -152,6 +156,7 @@ def handle_single_task_sync(
|
|
|
152
156
|
"MODEL_AGENT_CLIENT_REQ_ID", f"veadk/{VERSION}"
|
|
153
157
|
),
|
|
154
158
|
},
|
|
159
|
+
timeout=timeout,
|
|
155
160
|
)
|
|
156
161
|
|
|
157
162
|
if not response.error:
|
|
@@ -228,14 +233,16 @@ def handle_single_task_sync(
|
|
|
228
233
|
return success_list, error_list
|
|
229
234
|
|
|
230
235
|
|
|
231
|
-
async def image_generate(tasks: list[dict], tool_context) -> Dict:
|
|
232
|
-
"""Generate images with Seedream 4.0.
|
|
236
|
+
async def image_generate(tasks: list[dict], tool_context, timeout: int = 600) -> Dict:
|
|
237
|
+
"""Generate images with Seedream 4.0 / 4.5
|
|
233
238
|
|
|
234
239
|
Commit batch image generation requests via tasks.
|
|
235
240
|
|
|
236
241
|
Args:
|
|
237
242
|
tasks (list[dict]):
|
|
238
243
|
A list of image-generation tasks. Each task is a dict.
|
|
244
|
+
timeout (int)
|
|
245
|
+
The timeout limit for the image generation task request, in seconds, with a default value of 600 seconds.
|
|
239
246
|
Per-task schema
|
|
240
247
|
---------------
|
|
241
248
|
Required:
|
|
@@ -336,7 +343,9 @@ async def image_generate(tasks: list[dict], tool_context) -> Dict:
|
|
|
336
343
|
|
|
337
344
|
def make_task(idx, item):
|
|
338
345
|
ctx = base_ctx.copy()
|
|
339
|
-
return lambda: ctx.run(
|
|
346
|
+
return lambda: ctx.run(
|
|
347
|
+
handle_single_task_sync, idx, item, timeout, tool_context
|
|
348
|
+
)
|
|
340
349
|
|
|
341
350
|
loop = asyncio.get_event_loop()
|
|
342
351
|
futures = [
|