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.
Files changed (263) hide show
  1. {veadk_python-0.2.31 → veadk_python-0.2.33}/PKG-INFO +1 -1
  2. {veadk_python-0.2.31 → veadk_python-0.2.33}/pyproject.toml +1 -1
  3. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_create.py +3 -2
  4. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/config.py +2 -0
  5. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/database_configs.py +44 -0
  6. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/model_configs.py +15 -0
  7. veadk_python-0.2.33/veadk/knowledgebase/backends/tos_vector_backend.py +190 -0
  8. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/knowledgebase.py +8 -1
  9. veadk_python-0.2.33/veadk/realtime/__init__.py +22 -0
  10. veadk_python-0.2.33/veadk/realtime/client.py +52 -0
  11. veadk_python-0.2.33/veadk/realtime/doubao_realtime_voice_llm.py +166 -0
  12. veadk_python-0.2.33/veadk/realtime/doubao_realtime_voice_llm_connection.py +50 -0
  13. veadk_python-0.2.33/veadk/realtime/live.py +471 -0
  14. veadk_python-0.2.33/veadk/realtime/protocol.py +158 -0
  15. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/execute_skills.py +62 -4
  16. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/types.py +5 -0
  17. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/version.py +1 -1
  18. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/PKG-INFO +1 -1
  19. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/SOURCES.txt +7 -0
  20. {veadk_python-0.2.31 → veadk_python-0.2.33}/LICENSE +0 -0
  21. {veadk_python-0.2.31 → veadk_python-0.2.33}/README.md +0 -0
  22. {veadk_python-0.2.31 → veadk_python-0.2.33}/setup.cfg +0 -0
  23. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_agent.py +0 -0
  24. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_cloud.py +0 -0
  25. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_evaluator.py +0 -0
  26. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_knowledgebase.py +0 -0
  27. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_long_term_memory.py +0 -0
  28. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_misc.py +0 -0
  29. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_multiple_agents.py +0 -0
  30. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_runner.py +0 -0
  31. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_runtime_data_collecting.py +0 -0
  32. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_short_term_memory.py +0 -0
  33. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_tracing.py +0 -0
  34. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_a2a_middlewares.py +0 -0
  35. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_identity_auth_config.py +0 -0
  36. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_identity_function_tool.py +0 -0
  37. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_identity_mcp_tool.py +0 -0
  38. {veadk_python-0.2.31 → veadk_python-0.2.33}/tests/test_ve_identity_mcp_toolset.py +0 -0
  39. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/__init__.py +0 -0
  40. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/__init__.py +0 -0
  41. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/agent_card.py +0 -0
  42. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/remote_ve_agent.py +0 -0
  43. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/utils/__init__.py +0 -0
  44. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/utils/agent_to_a2a.py +0 -0
  45. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/ve_a2a_server.py +0 -0
  46. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/ve_agent_executor.py +0 -0
  47. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/ve_middlewares.py +0 -0
  48. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/a2a/ve_task_store.py +0 -0
  49. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agent.py +0 -0
  50. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agent_builder.py +0 -0
  51. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agents/loop_agent.py +0 -0
  52. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agents/parallel_agent.py +0 -0
  53. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/agents/sequential_agent.py +0 -0
  54. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/__init__.py +0 -0
  55. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/base_auth.py +0 -0
  56. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/ve_credential_service.py +0 -0
  57. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/__init__.py +0 -0
  58. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/apmplus_veauth.py +0 -0
  59. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/ark_veauth.py +0 -0
  60. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/base_veauth.py +0 -0
  61. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/cozeloop_veauth.py +0 -0
  62. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/opensearch_veauth.py +0 -0
  63. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/postgresql_veauth.py +0 -0
  64. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/prompt_pilot_veauth.py +0 -0
  65. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/speech_veauth.py +0 -0
  66. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/utils.py +0 -0
  67. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/vesearch_veauth.py +0 -0
  68. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/auth/veauth/viking_mem0_veauth.py +0 -0
  69. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/__init__.py +0 -0
  70. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli.py +0 -0
  71. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_agentkit.py +0 -0
  72. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_clean.py +0 -0
  73. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_deploy.py +0 -0
  74. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_eval.py +0 -0
  75. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_init.py +0 -0
  76. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_kb.py +0 -0
  77. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_pipeline.py +0 -0
  78. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_prompt.py +0 -0
  79. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_rl.py +0 -0
  80. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_update.py +0 -0
  81. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_uploadevalset.py +0 -0
  82. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/cli_web.py +0 -0
  83. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/README.md +0 -0
  84. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/arkworkspace.toml +0 -0
  85. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/data/demo_dataset.jsonl +0 -0
  86. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/job.py +0 -0
  87. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/job.yaml +0 -0
  88. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/plugins/random_reward.py +0 -0
  89. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/plugins/raw_async_veadk_rollout.py +0 -0
  90. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/plugins/test_utils.py +0 -0
  91. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/requirements.txt +0 -0
  92. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cli/templates/rl/ark/test_faas.py +0 -0
  93. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cloud/__init__.py +0 -0
  94. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cloud/cloud_agent_engine.py +0 -0
  95. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/cloud/cloud_app.py +0 -0
  96. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/__init__.py +0 -0
  97. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/auth_configs.py +0 -0
  98. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/tool_configs.py +0 -0
  99. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/configs/tracing_configs.py +0 -0
  100. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/consts.py +0 -0
  101. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/__init__.py +0 -0
  102. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/adk_evaluator/__init__.py +0 -0
  103. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/adk_evaluator/adk_evaluator.py +0 -0
  104. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/base_evaluator.py +0 -0
  105. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/deepeval_evaluator/__init__.py +0 -0
  106. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +0 -0
  107. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/eval_set_file_loader.py +0 -0
  108. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/eval_set_recorder.py +0 -0
  109. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/types.py +0 -0
  110. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/evaluation/utils/prometheus.py +0 -0
  111. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/__init__.py +0 -0
  112. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_apig/__init__.py +0 -0
  113. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_apig/ve_apig.py +0 -0
  114. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_apig/ve_apig_utils.py +0 -0
  115. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_code_pipeline/__init__.py +0 -0
  116. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +0 -0
  117. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_cozeloop/__init__.py +0 -0
  118. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_cozeloop/ve_cozeloop.py +0 -0
  119. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_cr/__init__.py +0 -0
  120. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_cr/ve_cr.py +0 -0
  121. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/__init__.py +0 -0
  122. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/cookiecutter.json +0 -0
  123. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
  124. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
  125. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
  126. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
  127. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/__init__.py +0 -0
  128. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +0 -0
  129. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
  130. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
  131. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
  132. {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
  133. {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
  134. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/ve_faas.py +0 -0
  135. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/ve_faas_utils.py +0 -0
  136. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/cookiecutter.json +0 -0
  137. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
  138. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
  139. {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
  140. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
  141. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +0 -0
  142. {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
  143. {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
  144. {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
  145. {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
  146. {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
  147. {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
  148. {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
  149. {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
  150. {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
  151. {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
  152. {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
  153. {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
  154. {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
  155. {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
  156. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/__init__.py +0 -0
  157. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/auth_config.py +0 -0
  158. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/auth_mixins.py +0 -0
  159. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/auth_processor.py +0 -0
  160. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/function_tool.py +0 -0
  161. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/identity_client.py +0 -0
  162. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/mcp_tool.py +0 -0
  163. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/mcp_toolset.py +0 -0
  164. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/models.py +0 -0
  165. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/token_manager.py +0 -0
  166. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_identity/utils.py +0 -0
  167. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_prompt_pilot/__init__.py +0 -0
  168. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +0 -0
  169. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_tls/__init__.py +0 -0
  170. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_tls/utils.py +0 -0
  171. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_tls/ve_tls.py +0 -0
  172. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_tos/ve_tos.py +0 -0
  173. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_viking_db_memory/__init__.py +0 -0
  174. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/integrations/ve_viking_db_memory/ve_viking_db_memory.py +0 -0
  175. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/__init__.py +0 -0
  176. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/__init__.py +0 -0
  177. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/base_backend.py +0 -0
  178. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/in_memory_backend.py +0 -0
  179. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/opensearch_backend.py +0 -0
  180. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/redis_backend.py +0 -0
  181. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/utils.py +0 -0
  182. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +0 -0
  183. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/knowledgebase/entry.py +0 -0
  184. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/__init__.py +0 -0
  185. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory.py +0 -0
  186. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/__init__.py +0 -0
  187. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/base_backend.py +0 -0
  188. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/in_memory_backend.py +0 -0
  189. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/mem0_backend.py +0 -0
  190. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/opensearch_backend.py +0 -0
  191. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/redis_backend.py +0 -0
  192. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +0 -0
  193. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory.py +0 -0
  194. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/__init__.py +0 -0
  195. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/base_backend.py +0 -0
  196. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/mysql_backend.py +0 -0
  197. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/postgresql_backend.py +0 -0
  198. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_backends/sqlite_backend.py +0 -0
  199. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/memory/short_term_memory_processor.py +0 -0
  200. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/processors/__init__.py +0 -0
  201. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/processors/base_run_processor.py +0 -0
  202. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/__init__.py +0 -0
  203. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/agent_default_prompt.py +0 -0
  204. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/prompt_evaluator.py +0 -0
  205. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/prompt_memory_processor.py +0 -0
  206. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/prompts/prompt_optimization.py +0 -0
  207. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/runner.py +0 -0
  208. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/__init__.py +0 -0
  209. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/__init__.py +0 -0
  210. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/agent_authorization.py +0 -0
  211. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/generate_image.py +0 -0
  212. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/image_edit.py +0 -0
  213. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/image_generate.py +0 -0
  214. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/lark.py +0 -0
  215. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/las.py +0 -0
  216. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/link_reader.py +0 -0
  217. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/llm_shield.py +0 -0
  218. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/load_knowledgebase.py +0 -0
  219. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/mcp_router.py +0 -0
  220. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/mobile_run.py +0 -0
  221. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/run_code.py +0 -0
  222. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/tts.py +0 -0
  223. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/vesearch.py +0 -0
  224. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/video_generate.py +0 -0
  225. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/web_scraper.py +0 -0
  226. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/builtin_tools/web_search.py +0 -0
  227. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/demo_tools.py +0 -0
  228. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/load_knowledgebase_tool.py +0 -0
  229. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/mcp_tool/__init__.py +0 -0
  230. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/mcp_tool/trusted_mcp_session_manager.py +0 -0
  231. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/mcp_tool/trusted_mcp_toolset.py +0 -0
  232. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/sandbox/__init__.py +0 -0
  233. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/sandbox/browser_sandbox.py +0 -0
  234. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/sandbox/code_sandbox.py +0 -0
  235. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tools/sandbox/computer_sandbox.py +0 -0
  236. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/__init__.py +0 -0
  237. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/base_tracer.py +0 -0
  238. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/__init__.py +0 -0
  239. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/attributes.py +0 -0
  240. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +0 -0
  241. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +0 -0
  242. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/extractors/tool_attributes_extractors.py +0 -0
  243. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/attributes/extractors/types.py +0 -0
  244. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/__init__.py +0 -0
  245. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/apmplus_exporter.py +0 -0
  246. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/base_exporter.py +0 -0
  247. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/cozeloop_exporter.py +0 -0
  248. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/inmemory_exporter.py +0 -0
  249. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/exporters/tls_exporter.py +0 -0
  250. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/opentelemetry_tracer.py +0 -0
  251. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/tracing/telemetry/telemetry.py +0 -0
  252. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/__init__.py +0 -0
  253. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/audio_manager.py +0 -0
  254. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/auth.py +0 -0
  255. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/logger.py +0 -0
  256. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/mcp_utils.py +0 -0
  257. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/misc.py +0 -0
  258. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/patches.py +0 -0
  259. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk/utils/volcengine_sign.py +0 -0
  260. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/dependency_links.txt +0 -0
  261. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/entry_points.txt +0 -0
  262. {veadk_python-0.2.31 → veadk_python-0.2.33}/veadk_python.egg-info/requires.txt +0 -0
  263. {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.31
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "veadk-python"
3
- version = "0.2.31"
3
+ version = "0.2.33"
4
4
  description = "Volcengine agent development kit, integrations with Volcengine cloud services."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -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-6-251015", # <---- you can change your model here
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"], BaseKnowledgebaseBackend
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))