veadk-python 0.2.31__tar.gz → 0.2.33__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.2.31 → veadk_python-0.2.33}/PKG-INFO +1 -1
- {veadk_python-0.2.31 → veadk_python-0.2.33}/pyproject.toml +1 -1
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_create.py +3 -2
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/config.py +2 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/database_configs.py +44 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/model_configs.py +15 -0
- veadk_python-0.2.33/veadk/knowledgebase/backends/tos_vector_backend.py +190 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/knowledgebase.py +8 -1
- veadk_python-0.2.33/veadk/realtime/__init__.py +22 -0
- veadk_python-0.2.33/veadk/realtime/client.py +52 -0
- veadk_python-0.2.33/veadk/realtime/doubao_realtime_voice_llm.py +166 -0
- veadk_python-0.2.33/veadk/realtime/doubao_realtime_voice_llm_connection.py +50 -0
- veadk_python-0.2.33/veadk/realtime/live.py +471 -0
- veadk_python-0.2.33/veadk/realtime/protocol.py +158 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/execute_skills.py +62 -4
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/types.py +5 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/version.py +1 -1
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/PKG-INFO +1 -1
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/SOURCES.txt +7 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/LICENSE +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/README.md +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/setup.cfg +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_agent.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_cloud.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_evaluator.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_knowledgebase.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_long_term_memory.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_misc.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_multiple_agents.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_runner.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_runtime_data_collecting.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_short_term_memory.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_tracing.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_a2a_middlewares.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_identity_auth_config.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_identity_function_tool.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_identity_mcp_tool.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_identity_mcp_toolset.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/agent_card.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/remote_ve_agent.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/utils/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/utils/agent_to_a2a.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/ve_a2a_server.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/ve_agent_executor.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/ve_middlewares.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/ve_task_store.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agent.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agent_builder.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agents/loop_agent.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agents/parallel_agent.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agents/sequential_agent.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/base_auth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/ve_credential_service.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/apmplus_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/ark_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/base_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/cozeloop_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/opensearch_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/postgresql_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/prompt_pilot_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/speech_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/utils.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/vesearch_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/viking_mem0_veauth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_agentkit.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_clean.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_deploy.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_eval.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_init.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_kb.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_pipeline.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_prompt.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_rl.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_update.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_uploadevalset.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_web.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/README.md +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/arkworkspace.toml +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/data/demo_dataset.jsonl +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/job.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/job.yaml +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/plugins/random_reward.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/plugins/raw_async_veadk_rollout.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/plugins/test_utils.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/requirements.txt +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/test_faas.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cloud/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cloud/cloud_agent_engine.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cloud/cloud_app.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/auth_configs.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/tool_configs.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/tracing_configs.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/consts.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/adk_evaluator/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/adk_evaluator/adk_evaluator.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/base_evaluator.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/deepeval_evaluator/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/eval_set_file_loader.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/eval_set_recorder.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/types.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/utils/prometheus.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_apig/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_apig/ve_apig.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_apig/ve_apig_utils.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_code_pipeline/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_cozeloop/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_cozeloop/ve_cozeloop.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_cr/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_cr/ve_cr.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/cookiecutter.json +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/agent.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/ve_faas.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/ve_faas_utils.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/cookiecutter.json +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/auth_config.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/auth_mixins.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/auth_processor.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/function_tool.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/identity_client.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/mcp_tool.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/mcp_toolset.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/models.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/token_manager.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/utils.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_prompt_pilot/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_tls/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_tls/utils.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_tls/ve_tls.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_tos/ve_tos.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_viking_db_memory/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_viking_db_memory/ve_viking_db_memory.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/base_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/in_memory_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/opensearch_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/redis_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/utils.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/entry.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/base_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/in_memory_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/mem0_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/opensearch_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/redis_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/base_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/mysql_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/postgresql_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/sqlite_backend.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_processor.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/processors/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/processors/base_run_processor.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/agent_default_prompt.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/prompt_evaluator.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/prompt_memory_processor.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/prompt_optimization.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/runner.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/agent_authorization.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/generate_image.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/image_edit.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/image_generate.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/lark.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/las.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/link_reader.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/llm_shield.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/load_knowledgebase.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/mcp_router.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/mobile_run.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/run_code.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/tts.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/vesearch.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/video_generate.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/web_scraper.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/web_search.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/demo_tools.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/load_knowledgebase_tool.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/mcp_tool/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/mcp_tool/trusted_mcp_session_manager.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/mcp_tool/trusted_mcp_toolset.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/sandbox/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/sandbox/browser_sandbox.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/sandbox/code_sandbox.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/sandbox/computer_sandbox.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/base_tracer.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/attributes.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/extractors/tool_attributes_extractors.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/extractors/types.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/apmplus_exporter.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/base_exporter.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/cozeloop_exporter.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/inmemory_exporter.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/tls_exporter.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/opentelemetry_tracer.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/telemetry.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/__init__.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/audio_manager.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/auth.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/logger.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/mcp_utils.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/misc.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/patches.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/volcengine_sign.py +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/dependency_links.txt +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/entry_points.txt +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/requires.txt +0 -0
- {veadk_python-0.2.31 → veadk_python-0.2.33}/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.2.
|
|
3
|
+
Version: 0.2.33
|
|
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
|
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
import click
|
|
16
15
|
import shutil
|
|
17
16
|
from pathlib import Path
|
|
18
17
|
|
|
18
|
+
import click
|
|
19
|
+
|
|
19
20
|
_ENV_TEMPLATE = """\
|
|
20
21
|
MODEL_AGENT_API_KEY={ark_api_key}
|
|
21
22
|
"""
|
|
@@ -31,7 +32,7 @@ root_agent = Agent(
|
|
|
31
32
|
name="root_agent",
|
|
32
33
|
description="A helpful assistant for user questions.",
|
|
33
34
|
instruction="Answer user questions to the best of your knowledge",
|
|
34
|
-
model_name="doubao-seed-1-
|
|
35
|
+
model_name="doubao-seed-1-8-251215", # <---- change model here
|
|
35
36
|
)
|
|
36
37
|
"""
|
|
37
38
|
|
|
@@ -19,6 +19,7 @@ from dotenv import find_dotenv, load_dotenv, dotenv_values
|
|
|
19
19
|
from pydantic import BaseModel, Field
|
|
20
20
|
|
|
21
21
|
from veadk.configs.auth_configs import VeIdentityConfig
|
|
22
|
+
from veadk.configs.model_configs import RealtimeModelConfig
|
|
22
23
|
from veadk.configs.database_configs import (
|
|
23
24
|
MysqlConfig,
|
|
24
25
|
OpensearchConfig,
|
|
@@ -70,6 +71,7 @@ class VeADKConfig(BaseModel):
|
|
|
70
71
|
)
|
|
71
72
|
|
|
72
73
|
veidentity: VeIdentityConfig = Field(default_factory=VeIdentityConfig)
|
|
74
|
+
realtime_model: RealtimeModelConfig = Field(default_factory=RealtimeModelConfig)
|
|
73
75
|
|
|
74
76
|
|
|
75
77
|
def getenv(
|
|
@@ -130,3 +130,47 @@ class NormalTOSConfig(BaseSettings):
|
|
|
130
130
|
region: str = "cn-beijing"
|
|
131
131
|
|
|
132
132
|
bucket: str
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class TOSVectorConfig(BaseSettings):
|
|
136
|
+
model_config = SettingsConfigDict(env_prefix="DATABASE_TOS_VECTOR_")
|
|
137
|
+
|
|
138
|
+
endpoint: str = "tosvectors-cn-beijing.volces.com"
|
|
139
|
+
|
|
140
|
+
region: str = "cn-beijing"
|
|
141
|
+
|
|
142
|
+
security_token: str | None = None
|
|
143
|
+
|
|
144
|
+
max_retry_count: int = 3
|
|
145
|
+
|
|
146
|
+
max_connections: int = 1024
|
|
147
|
+
|
|
148
|
+
connection_time: int = 10
|
|
149
|
+
|
|
150
|
+
enable_verify_ssl: bool = True
|
|
151
|
+
|
|
152
|
+
dns_cache_time: int = 15
|
|
153
|
+
|
|
154
|
+
proxy_host: str | None = None
|
|
155
|
+
|
|
156
|
+
proxy_port: int | None = None
|
|
157
|
+
|
|
158
|
+
proxy_username: str | None = None
|
|
159
|
+
|
|
160
|
+
proxy_password: str | None = None
|
|
161
|
+
|
|
162
|
+
high_latency_log_threshold: int = 100
|
|
163
|
+
|
|
164
|
+
socket_timeout: int = 30
|
|
165
|
+
|
|
166
|
+
credentials_provider: object | None = None
|
|
167
|
+
|
|
168
|
+
except100_continue_threshold: int = 65536
|
|
169
|
+
|
|
170
|
+
user_agent_product_name: str | None = None
|
|
171
|
+
|
|
172
|
+
user_agent_soft_name: str | None = None
|
|
173
|
+
|
|
174
|
+
user_agent_soft_version: str | None = None
|
|
175
|
+
|
|
176
|
+
user_agent_customized_key_values: dict[str, str] | None = None
|
|
@@ -18,6 +18,7 @@ from functools import cached_property
|
|
|
18
18
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
19
19
|
|
|
20
20
|
from veadk.auth.veauth.ark_veauth import get_ark_token
|
|
21
|
+
from veadk.auth.veauth.speech_veauth import get_speech_token
|
|
21
22
|
from veadk.consts import (
|
|
22
23
|
DEFAULT_MODEL_AGENT_API_BASE,
|
|
23
24
|
DEFAULT_MODEL_AGENT_NAME,
|
|
@@ -76,3 +77,17 @@ class NormalEmbeddingModelConfig(BaseSettings):
|
|
|
76
77
|
"""The api base of the model for embedding."""
|
|
77
78
|
|
|
78
79
|
api_key: str
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class RealtimeModelConfig(BaseSettings):
|
|
83
|
+
model_config = SettingsConfigDict(env_prefix="MODEL_REALTIME_")
|
|
84
|
+
|
|
85
|
+
name: str = "doubao_realtime_voice_model"
|
|
86
|
+
"""Model name for realtime."""
|
|
87
|
+
|
|
88
|
+
api_base: str = "wss://openspeech.bytedance.com/api/v3/realtime/dialogue"
|
|
89
|
+
"""The api base of the model for realtime."""
|
|
90
|
+
|
|
91
|
+
@cached_property
|
|
92
|
+
def api_key(self) -> str:
|
|
93
|
+
return os.getenv("MODEL_REALTIME_API_KEY") or get_speech_token()
|
|
@@ -0,0 +1,190 @@
|
|
|
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 json
|
|
16
|
+
import os
|
|
17
|
+
|
|
18
|
+
from llama_index.core import (
|
|
19
|
+
Document,
|
|
20
|
+
SimpleDirectoryReader,
|
|
21
|
+
)
|
|
22
|
+
from llama_index.core.schema import BaseNode
|
|
23
|
+
from llama_index.embeddings.openai_like import OpenAILikeEmbedding
|
|
24
|
+
from pydantic import Field
|
|
25
|
+
from typing_extensions import Any, override
|
|
26
|
+
|
|
27
|
+
import veadk.config # noqa E401
|
|
28
|
+
from veadk.configs.database_configs import TOSVectorConfig
|
|
29
|
+
from veadk.configs.model_configs import EmbeddingModelConfig, NormalEmbeddingModelConfig
|
|
30
|
+
|
|
31
|
+
from veadk.knowledgebase.backends.base_backend import BaseKnowledgebaseBackend
|
|
32
|
+
from veadk.knowledgebase.backends.utils import get_llama_index_splitter
|
|
33
|
+
from veadk.utils.logger import get_logger
|
|
34
|
+
|
|
35
|
+
logger = get_logger(__name__)
|
|
36
|
+
try:
|
|
37
|
+
from tos.vector_client import VectorClient
|
|
38
|
+
from tos import DataType, DistanceMetricType
|
|
39
|
+
from tos.exceptions import TosServerError
|
|
40
|
+
from tos.models2 import Vector, VectorData
|
|
41
|
+
except ImportError:
|
|
42
|
+
raise ImportError(
|
|
43
|
+
"Please install VeADK extensions\npip install veadk-python[extensions]"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class TosVectorKnowledgeBackend(BaseKnowledgebaseBackend):
|
|
48
|
+
"""TOS-based backend for knowledgebase."""
|
|
49
|
+
|
|
50
|
+
volcengine_access_key: str | None = Field(
|
|
51
|
+
default_factory=lambda: os.getenv("VOLCENGINE_ACCESS_KEY")
|
|
52
|
+
)
|
|
53
|
+
volcengine_secret_key: str | None = Field(
|
|
54
|
+
default_factory=lambda: os.getenv("VOLCENGINE_SECRET_KEY")
|
|
55
|
+
)
|
|
56
|
+
tos_vector_bucket_name: str | None = Field(
|
|
57
|
+
default_factory=lambda: os.getenv("DATABASE_TOS_VECTOR_BUCKET")
|
|
58
|
+
)
|
|
59
|
+
tos_vector_account_id: str | None = Field(
|
|
60
|
+
default_factory=lambda: os.getenv("DATABASE_TOS_VECTOR_ACCOUNT_ID")
|
|
61
|
+
)
|
|
62
|
+
tos_vector_config: TOSVectorConfig = Field(default_factory=TOSVectorConfig)
|
|
63
|
+
|
|
64
|
+
session_token: str = ""
|
|
65
|
+
|
|
66
|
+
embedding_config: EmbeddingModelConfig | NormalEmbeddingModelConfig = Field(
|
|
67
|
+
default_factory=EmbeddingModelConfig
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
def model_post_init(self, __context: Any) -> None:
|
|
71
|
+
self.precheck_index_naming()
|
|
72
|
+
self._tos_vector_client = VectorClient(
|
|
73
|
+
ak=self.volcengine_access_key,
|
|
74
|
+
sk=self.volcengine_secret_key,
|
|
75
|
+
**self.tos_vector_config.model_dump(),
|
|
76
|
+
)
|
|
77
|
+
# create_bucket and index if not exist
|
|
78
|
+
self._create_index()
|
|
79
|
+
|
|
80
|
+
self._embed_model = OpenAILikeEmbedding(
|
|
81
|
+
model_name=self.embedding_config.name,
|
|
82
|
+
api_key=self.embedding_config.api_key,
|
|
83
|
+
api_base=self.embedding_config.api_base,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
def _index_exists(self) -> bool:
|
|
87
|
+
try:
|
|
88
|
+
index_exist = self._tos_vector_client.get_index(
|
|
89
|
+
vector_bucket_name=self.tos_vector_bucket_name,
|
|
90
|
+
account_id=self.tos_vector_account_id,
|
|
91
|
+
index_name=self.index,
|
|
92
|
+
)
|
|
93
|
+
return index_exist.status_code == 200
|
|
94
|
+
except TosServerError as e:
|
|
95
|
+
if e.status_code == 404:
|
|
96
|
+
return False
|
|
97
|
+
else:
|
|
98
|
+
raise e
|
|
99
|
+
|
|
100
|
+
def _split_documents(self, documents: list[Document]) -> list[BaseNode]:
|
|
101
|
+
"""Split document into chunks"""
|
|
102
|
+
nodes = []
|
|
103
|
+
for document in documents:
|
|
104
|
+
splitter = get_llama_index_splitter(document.metadata.get("file_path", ""))
|
|
105
|
+
_nodes = splitter.get_nodes_from_documents([document])
|
|
106
|
+
nodes.extend(_nodes)
|
|
107
|
+
return nodes
|
|
108
|
+
|
|
109
|
+
def _create_index(self):
|
|
110
|
+
# no need to check if bucket exists, create_bucket will create it if not exist
|
|
111
|
+
self._tos_vector_client.create_vector_bucket(
|
|
112
|
+
vector_bucket_name=self.tos_vector_bucket_name,
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
if not self._index_exists():
|
|
116
|
+
self._tos_vector_client.create_index(
|
|
117
|
+
vector_bucket_name=self.tos_vector_bucket_name,
|
|
118
|
+
account_id=self.tos_vector_account_id,
|
|
119
|
+
index_name=self.index,
|
|
120
|
+
data_type=DataType.DataTypeFloat32,
|
|
121
|
+
dimension=self.embedding_config.dim,
|
|
122
|
+
distance_metric=DistanceMetricType.DistanceMetricCosine,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
def precheck_index_naming(self) -> None:
|
|
126
|
+
pass
|
|
127
|
+
|
|
128
|
+
def _process_and_store_documents(self, documents: list[Document]) -> bool:
|
|
129
|
+
nodes = self._split_documents(documents)
|
|
130
|
+
vectors = []
|
|
131
|
+
for node in nodes:
|
|
132
|
+
if not node.text:
|
|
133
|
+
continue
|
|
134
|
+
embedding = self._embed_model.get_text_embedding(node.text)
|
|
135
|
+
vectors.append(
|
|
136
|
+
Vector(
|
|
137
|
+
key=node.node_id,
|
|
138
|
+
data=VectorData(float32=embedding),
|
|
139
|
+
metadata={"text": node.text, "metadata": json.dumps(node.metadata)},
|
|
140
|
+
)
|
|
141
|
+
)
|
|
142
|
+
result = self._tos_vector_client.put_vectors(
|
|
143
|
+
vector_bucket_name=self.tos_vector_bucket_name,
|
|
144
|
+
account_id=self.tos_vector_account_id,
|
|
145
|
+
index_name=self.index,
|
|
146
|
+
vectors=vectors,
|
|
147
|
+
)
|
|
148
|
+
return result.status_code == 200
|
|
149
|
+
|
|
150
|
+
@override
|
|
151
|
+
def add_from_directory(self, directory: str, *args, **kwargs) -> bool:
|
|
152
|
+
# fixme
|
|
153
|
+
logger.warning(
|
|
154
|
+
"add_from_directory is not yet fully developed and may have issues such as missing images."
|
|
155
|
+
)
|
|
156
|
+
documents = SimpleDirectoryReader(input_dir=directory).load_data()
|
|
157
|
+
return self._process_and_store_documents(documents)
|
|
158
|
+
|
|
159
|
+
@override
|
|
160
|
+
def add_from_files(self, files: list[str], *args, **kwargs) -> bool:
|
|
161
|
+
# fixme
|
|
162
|
+
logger.warning(
|
|
163
|
+
"add_from_files is not yet fully developed and may have issues such as missing images."
|
|
164
|
+
)
|
|
165
|
+
documents = SimpleDirectoryReader(input_files=files).load_data()
|
|
166
|
+
return self._process_and_store_documents(documents)
|
|
167
|
+
|
|
168
|
+
@override
|
|
169
|
+
def add_from_text(self, text: str | list[str], *args, **kwargs) -> bool:
|
|
170
|
+
if isinstance(text, str):
|
|
171
|
+
documents = [Document(text=text)]
|
|
172
|
+
else:
|
|
173
|
+
documents = [Document(text=t) for t in text]
|
|
174
|
+
|
|
175
|
+
return self._process_and_store_documents(documents)
|
|
176
|
+
|
|
177
|
+
@override
|
|
178
|
+
def search(self, query: str, top_k: int = 5) -> list[str]:
|
|
179
|
+
query_vector = self._embed_model.get_text_embedding(query)
|
|
180
|
+
|
|
181
|
+
search_result = self._tos_vector_client.query_vectors(
|
|
182
|
+
vector_bucket_name=self.tos_vector_bucket_name,
|
|
183
|
+
account_id=self.tos_vector_account_id,
|
|
184
|
+
index_name=self.index,
|
|
185
|
+
query_vector=VectorData(float32=query_vector),
|
|
186
|
+
top_k=top_k,
|
|
187
|
+
return_metadata=True,
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
return [vector.metadata["text"] for vector in search_result.vectors]
|
|
@@ -51,6 +51,12 @@ def _get_backend_cls(backend: str) -> type[BaseKnowledgebaseBackend]:
|
|
|
51
51
|
)
|
|
52
52
|
|
|
53
53
|
return RedisKnowledgeBackend
|
|
54
|
+
case "tos_vector":
|
|
55
|
+
from veadk.knowledgebase.backends.tos_vector_backend import (
|
|
56
|
+
TosVectorKnowledgeBackend,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
return TosVectorKnowledgeBackend
|
|
54
60
|
|
|
55
61
|
raise ValueError(f"Unsupported knowledgebase backend: {backend}")
|
|
56
62
|
|
|
@@ -165,7 +171,8 @@ class KnowledgeBase(BaseModel):
|
|
|
165
171
|
description: str = "This knowledgebase stores some user-related information."
|
|
166
172
|
|
|
167
173
|
backend: Union[
|
|
168
|
-
Literal["local", "opensearch", "viking", "redis"],
|
|
174
|
+
Literal["local", "opensearch", "viking", "redis", "tos_vector"],
|
|
175
|
+
BaseKnowledgebaseBackend,
|
|
169
176
|
] = "local"
|
|
170
177
|
|
|
171
178
|
backend_config: dict = Field(default_factory=dict)
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
from .doubao_realtime_voice_llm import DoubaoRealtimeVoice
|
|
16
|
+
from google.adk.models.registry import LLMRegistry
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"DoubaoRealtimeVoice",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
LLMRegistry.register(DoubaoRealtimeVoice)
|
|
@@ -0,0 +1,52 @@
|
|
|
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 os
|
|
16
|
+
from google.genai.client import Client, AsyncClient
|
|
17
|
+
from google.genai._api_client import BaseApiClient
|
|
18
|
+
from .live import DoubaoAsyncLive
|
|
19
|
+
from veadk.utils.logger import get_logger
|
|
20
|
+
|
|
21
|
+
logger = get_logger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class DoubaoAsyncClient(AsyncClient):
|
|
25
|
+
"""Client for making asynchronous (non-blocking) requests."""
|
|
26
|
+
|
|
27
|
+
def __init__(self, api_client: BaseApiClient):
|
|
28
|
+
super().__init__(api_client)
|
|
29
|
+
self._live = DoubaoAsyncLive(self._api_client)
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def live(self) -> DoubaoAsyncLive:
|
|
33
|
+
return self._live
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class DoubaoClient(Client):
|
|
37
|
+
"""The synchronous client for doubao realtime voice model, with async support via the aio property."""
|
|
38
|
+
|
|
39
|
+
def __init__(self, *args, **kwargs):
|
|
40
|
+
# Temporary workaround to set Google API key for Gemini client
|
|
41
|
+
if not os.environ.get("GOOGLE_API_KEY"):
|
|
42
|
+
os.environ["GOOGLE_API_KEY"] = "hack_google_api_key"
|
|
43
|
+
try:
|
|
44
|
+
super().__init__(*args, **kwargs)
|
|
45
|
+
self._aio = DoubaoAsyncClient(self._api_client)
|
|
46
|
+
except Exception as e:
|
|
47
|
+
logger.info(f"Failed to initialize DoubaoAsyncClient: {e}")
|
|
48
|
+
self._aio = None
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def aio(self) -> DoubaoAsyncClient:
|
|
52
|
+
return self._aio
|
|
@@ -0,0 +1,166 @@
|
|
|
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
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import contextlib
|
|
18
|
+
from functools import cached_property
|
|
19
|
+
import os
|
|
20
|
+
import sys
|
|
21
|
+
|
|
22
|
+
from typing import Optional
|
|
23
|
+
from typing import TYPE_CHECKING
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
from .client import DoubaoClient
|
|
27
|
+
from google.genai import types
|
|
28
|
+
from typing_extensions import override
|
|
29
|
+
from google.adk import version
|
|
30
|
+
from google.adk.models.google_llm import Gemini
|
|
31
|
+
from google.adk.models.base_llm_connection import BaseLlmConnection
|
|
32
|
+
from .doubao_realtime_voice_llm_connection import DoubaoRealtimeVoiceLlmConnection
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if TYPE_CHECKING:
|
|
36
|
+
from google.adk.models.llm_request import LlmRequest
|
|
37
|
+
|
|
38
|
+
from veadk.utils.logger import get_logger
|
|
39
|
+
|
|
40
|
+
logger = get_logger(__name__)
|
|
41
|
+
|
|
42
|
+
_NEW_LINE = "\n"
|
|
43
|
+
_EXCLUDED_PART_FIELD = {"inline_data": {"data"}}
|
|
44
|
+
_AGENT_ENGINE_TELEMETRY_TAG = "remote_reasoning_engine"
|
|
45
|
+
_AGENT_ENGINE_TELEMETRY_ENV_VARIABLE_NAME = "VOLCENGINE_CLOUD_AGENT_ENGINE_ID"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class DoubaoRealtimeVoice(Gemini):
|
|
49
|
+
"""Integration for doubao realtime voice model.
|
|
50
|
+
|
|
51
|
+
Attributes:
|
|
52
|
+
model: The name of the doubao realtime voice model (default: 'doubao_realtime_voice').
|
|
53
|
+
speech_config: Optional speech configuration for voice input/output (type: google.genai.types.SpeechConfig).
|
|
54
|
+
retry_options: Optional HTTP retry configuration for failed requests (type: google.genai.types.HttpRetryOptions).
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
model: str = "doubao_realtime_voice"
|
|
58
|
+
|
|
59
|
+
speech_config: Optional[types.SpeechConfig] = None
|
|
60
|
+
|
|
61
|
+
retry_options: Optional[types.HttpRetryOptions] = None
|
|
62
|
+
"""Allow doubao realtime voice model to retry failed responses.
|
|
63
|
+
|
|
64
|
+
Sample:
|
|
65
|
+
```python
|
|
66
|
+
from google.genai import types
|
|
67
|
+
|
|
68
|
+
# ...
|
|
69
|
+
|
|
70
|
+
agent = Agent(
|
|
71
|
+
model=DoubaoRealtimeVoice(
|
|
72
|
+
retry_options=types.HttpRetryOptions(initial_delay=1, attempts=2),
|
|
73
|
+
)
|
|
74
|
+
)
|
|
75
|
+
```
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
@classmethod
|
|
79
|
+
@override
|
|
80
|
+
def supported_models(cls) -> list[str]:
|
|
81
|
+
"""Provides the list of supported models.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
A list of supported models.
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
return [
|
|
88
|
+
r"doubao_realtime_voice.*",
|
|
89
|
+
r"Doubao_scene_SLM_Doubao_realtime_voice_model.*",
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
@cached_property
|
|
93
|
+
def api_client(self) -> DoubaoClient:
|
|
94
|
+
"""Provides the api client.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
The api client.
|
|
98
|
+
"""
|
|
99
|
+
return DoubaoClient(
|
|
100
|
+
http_options=types.HttpOptions(
|
|
101
|
+
headers=self._tracking_headers,
|
|
102
|
+
retry_options=self.retry_options,
|
|
103
|
+
)
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
@cached_property
|
|
107
|
+
def _live_api_client(self) -> DoubaoClient:
|
|
108
|
+
return DoubaoClient(
|
|
109
|
+
http_options=types.HttpOptions(
|
|
110
|
+
headers=self._tracking_headers, api_version=self._live_api_version
|
|
111
|
+
)
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
@cached_property
|
|
115
|
+
def _tracking_headers(self) -> dict[str, str]:
|
|
116
|
+
framework_label = f"veadk/{version.__version__}"
|
|
117
|
+
if os.environ.get(_AGENT_ENGINE_TELEMETRY_ENV_VARIABLE_NAME):
|
|
118
|
+
framework_label = f"{framework_label}+{_AGENT_ENGINE_TELEMETRY_TAG}"
|
|
119
|
+
language_label = "ve-python/" + sys.version.split()[0]
|
|
120
|
+
version_header_value = f"{framework_label} {language_label}"
|
|
121
|
+
tracking_headers = {
|
|
122
|
+
"x-volcengine-api-client": version_header_value,
|
|
123
|
+
"user-agent": version_header_value,
|
|
124
|
+
}
|
|
125
|
+
return tracking_headers
|
|
126
|
+
|
|
127
|
+
@contextlib.asynccontextmanager
|
|
128
|
+
async def connect(self, llm_request: LlmRequest) -> BaseLlmConnection:
|
|
129
|
+
"""Connects to the doubao realtime voice LLM model and returns an llm connection.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
llm_request: LlmRequest, the request to send to the Seed LLM model.
|
|
133
|
+
|
|
134
|
+
Yields:
|
|
135
|
+
BaseLlmConnection, the connection to the Seed LLM model.
|
|
136
|
+
"""
|
|
137
|
+
# add tracking headers to custom headers and set api_version given
|
|
138
|
+
# the customized http options will override the one set in the api client
|
|
139
|
+
# constructor
|
|
140
|
+
if (
|
|
141
|
+
llm_request.live_connect_config
|
|
142
|
+
and llm_request.live_connect_config.http_options
|
|
143
|
+
):
|
|
144
|
+
if not llm_request.live_connect_config.http_options.headers:
|
|
145
|
+
llm_request.live_connect_config.http_options.headers = {}
|
|
146
|
+
llm_request.live_connect_config.http_options.headers.update(
|
|
147
|
+
self._tracking_headers
|
|
148
|
+
)
|
|
149
|
+
llm_request.live_connect_config.http_options.api_version = (
|
|
150
|
+
self._live_api_version
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
if self.speech_config is not None:
|
|
154
|
+
llm_request.live_connect_config.speech_config = self.speech_config
|
|
155
|
+
|
|
156
|
+
llm_request.live_connect_config.system_instruction = types.Content(
|
|
157
|
+
role="system",
|
|
158
|
+
parts=[types.Part.from_text(text=llm_request.config.system_instruction)],
|
|
159
|
+
)
|
|
160
|
+
llm_request.live_connect_config.tools = llm_request.config.tools
|
|
161
|
+
logger.info("Connecting to live with llm_request:%s", llm_request)
|
|
162
|
+
async with self._live_api_client.aio.live.connect(
|
|
163
|
+
model=llm_request.model, config=llm_request.live_connect_config
|
|
164
|
+
) as live_session:
|
|
165
|
+
# use DoubaoRealtimeVoiceLlmConnection in place of GeminiLlmConnection
|
|
166
|
+
yield DoubaoRealtimeVoiceLlmConnection(live_session)
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import Union
|
|
18
|
+
|
|
19
|
+
from google.adk.models.gemini_llm_connection import GeminiLlmConnection
|
|
20
|
+
from google.genai import types
|
|
21
|
+
from veadk.utils.logger import get_logger
|
|
22
|
+
|
|
23
|
+
logger = get_logger(__name__)
|
|
24
|
+
|
|
25
|
+
RealtimeInput = Union[types.Blob, types.ActivityStart, types.ActivityEnd]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class DoubaoRealtimeVoiceLlmConnection(GeminiLlmConnection):
|
|
29
|
+
"""The doubao realtime voice model connection."""
|
|
30
|
+
|
|
31
|
+
async def send_realtime(self, input: RealtimeInput):
|
|
32
|
+
"""Sends a chunk of audio or a frame of video to the model in realtime.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
input: The input to send to the model.
|
|
36
|
+
"""
|
|
37
|
+
if isinstance(input, types.Blob):
|
|
38
|
+
# The blob is binary and is very large. So let's not log it.
|
|
39
|
+
# logger.debug('Sending LLM Blob.')
|
|
40
|
+
# bugfix: 'error': 'decode ws request failed: unsupported protocol version 7'
|
|
41
|
+
await self._gemini_session.send_realtime_input(media=input)
|
|
42
|
+
|
|
43
|
+
elif isinstance(input, types.ActivityStart):
|
|
44
|
+
logger.debug("Sending LLM activity start signal.")
|
|
45
|
+
await self._gemini_session.send_realtime_input(activity_start=input)
|
|
46
|
+
elif isinstance(input, types.ActivityEnd):
|
|
47
|
+
logger.debug("Sending LLM activity end signal.")
|
|
48
|
+
await self._gemini_session.send_realtime_input(activity_end=input)
|
|
49
|
+
else:
|
|
50
|
+
raise ValueError("Unsupported input type: %s" % type(input))
|