veadk-python 0.2.4__tar.gz → 0.2.6__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.

Potentially problematic release.


This version of veadk-python might be problematic. Click here for more details.

Files changed (172) hide show
  1. {veadk_python-0.2.4 → veadk_python-0.2.6}/PKG-INFO +1 -1
  2. {veadk_python-0.2.4 → veadk_python-0.2.6}/pyproject.toml +3 -2
  3. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_agent.py +13 -0
  4. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_cloud.py +6 -3
  5. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_runner.py +6 -2
  6. veadk_python-0.2.6/tests/test_tos.py +169 -0
  7. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/agent.py +40 -8
  8. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cli/cli_deploy.py +5 -1
  9. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cli/cli_init.py +25 -6
  10. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cloud/cloud_app.py +21 -6
  11. veadk_python-0.2.6/veadk/consts.py +49 -0
  12. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/database_adapter.py +88 -0
  13. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/kv/redis_database.py +47 -0
  14. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/local_database.py +22 -4
  15. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/relational/mysql_database.py +58 -0
  16. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/vector/opensearch_vector_database.py +6 -3
  17. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/viking/viking_database.py +72 -3
  18. veadk_python-0.2.6/veadk/integrations/ve_cr/ve_cr.py +205 -0
  19. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/template/cookiecutter.json +2 -1
  20. veadk_python-0.2.6/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/clean.py +23 -0
  21. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +28 -2
  22. veadk_python-0.2.6/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +3 -0
  23. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +5 -2
  24. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/ve_faas.py +2 -0
  25. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/cookiecutter.json +17 -0
  26. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +23 -0
  27. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +2 -0
  28. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +41 -0
  29. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +23 -0
  30. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +123 -0
  31. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +46 -0
  32. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +36 -0
  33. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +4 -0
  34. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +21 -0
  35. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +368 -0
  36. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
  37. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +21 -0
  38. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +24 -0
  39. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +21 -0
  40. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +53 -0
  41. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +45 -0
  42. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +29 -0
  43. veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +14 -0
  44. veadk_python-0.2.6/veadk/integrations/ve_tos/ve_tos.py +238 -0
  45. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/knowledgebase/knowledgebase.py +8 -0
  46. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/runner.py +140 -34
  47. veadk_python-0.2.6/veadk/tools/builtin_tools/image_edit.py +236 -0
  48. veadk_python-0.2.6/veadk/tools/builtin_tools/image_generate.py +236 -0
  49. veadk_python-0.2.6/veadk/tools/builtin_tools/video_generate.py +326 -0
  50. veadk_python-0.2.6/veadk/tools/sandbox/browser_sandbox.py +37 -0
  51. veadk_python-0.2.6/veadk/tools/sandbox/code_sandbox.py +40 -0
  52. veadk_python-0.2.4/veadk/tools/sandbox/code_sandbox.py → veadk_python-0.2.6/veadk/tools/sandbox/computer_sandbox.py +15 -11
  53. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/base_tracer.py +0 -19
  54. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +5 -0
  55. veadk_python-0.2.6/veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +575 -0
  56. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/attributes/extractors/tool_attributes_extractors.py +20 -14
  57. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/attributes/extractors/types.py +15 -4
  58. veadk_python-0.2.6/veadk/tracing/telemetry/exporters/__init__.py +13 -0
  59. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/exporters/inmemory_exporter.py +3 -0
  60. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/opentelemetry_tracer.py +15 -6
  61. veadk_python-0.2.6/veadk/tracing/telemetry/telemetry.py +253 -0
  62. veadk_python-0.2.6/veadk/utils/__init__.py +13 -0
  63. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/utils/misc.py +40 -0
  64. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/version.py +1 -1
  65. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk_python.egg-info/PKG-INFO +1 -1
  66. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk_python.egg-info/SOURCES.txt +28 -0
  67. veadk_python-0.2.4/veadk/consts.py +0 -17
  68. veadk_python-0.2.4/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -1
  69. veadk_python-0.2.4/veadk/tools/sandbox/browser_sandbox.py +0 -27
  70. veadk_python-0.2.4/veadk/tools/sandbox/computer_sandbox.py +0 -27
  71. veadk_python-0.2.4/veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +0 -392
  72. veadk_python-0.2.4/veadk/tracing/telemetry/telemetry.py +0 -149
  73. {veadk_python-0.2.4 → veadk_python-0.2.6}/LICENSE +0 -0
  74. {veadk_python-0.2.4 → veadk_python-0.2.6}/README.md +0 -0
  75. {veadk_python-0.2.4 → veadk_python-0.2.6}/setup.cfg +0 -0
  76. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_agent_card.py +0 -0
  77. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_evaluator.py +0 -0
  78. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_knowledgebase.py +0 -0
  79. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_long_term_memory.py +0 -0
  80. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_multiple_agents.py +0 -0
  81. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_runtime_data_collecting.py +0 -0
  82. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_short_term_memory.py +0 -0
  83. {veadk_python-0.2.4 → veadk_python-0.2.6}/tests/test_tracing.py +0 -0
  84. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/__init__.py +0 -0
  85. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/a2a/__init__.py +0 -0
  86. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/a2a/agent_card.py +0 -0
  87. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/a2a/remote_ve_agent.py +0 -0
  88. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/a2a/ve_a2a_server.py +0 -0
  89. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/a2a/ve_agent_executor.py +0 -0
  90. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/a2a/ve_task_store.py +0 -0
  91. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/agents/loop_agent.py +0 -0
  92. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/agents/parallel_agent.py +0 -0
  93. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/agents/sequential_agent.py +0 -0
  94. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cli/__init__.py +0 -0
  95. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cli/cli.py +0 -0
  96. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cli/cli_prompt.py +0 -0
  97. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cli/cli_web.py +0 -0
  98. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cloud/__init__.py +0 -0
  99. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/cloud/cloud_agent_engine.py +0 -0
  100. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/config.py +0 -0
  101. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/__init__.py +0 -0
  102. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/base_database.py +0 -0
  103. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/database_factory.py +0 -0
  104. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/kv/__init__.py +0 -0
  105. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/relational/__init__.py +0 -0
  106. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/vector/__init__.py +0 -0
  107. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/vector/type.py +0 -0
  108. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/viking/__init__.py +0 -0
  109. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/database/viking/viking_memory_db.py +0 -0
  110. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/__init__.py +0 -0
  111. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/adk_evaluator/__init__.py +0 -0
  112. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/adk_evaluator/adk_evaluator.py +0 -0
  113. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/base_evaluator.py +0 -0
  114. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/deepeval_evaluator/__init__.py +0 -0
  115. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +0 -0
  116. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/eval_set_file_loader.py +0 -0
  117. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/eval_set_recorder.py +0 -0
  118. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/types.py +0 -0
  119. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/evaluation/utils/prometheus.py +0 -0
  120. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_apig/__init__.py +0 -0
  121. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_apig/ve_apig.py +0 -0
  122. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_apig/ve_apig_utils.py +0 -0
  123. {veadk_python-0.2.4/veadk/integrations/ve_faas → veadk_python-0.2.6/veadk/integrations/ve_cr}/__init__.py +0 -0
  124. {veadk_python-0.2.4/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}} → veadk_python-0.2.6/veadk/integrations/ve_faas}/__init__.py +0 -0
  125. {veadk_python-0.2.4/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src → veadk_python-0.2.6/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}}/__init__.py +0 -0
  126. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
  127. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
  128. {veadk_python-0.2.4/veadk/integrations/ve_prompt_pilot → veadk_python-0.2.6/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src}/__init__.py +0 -0
  129. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +0 -0
  130. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name|replace('-', '_') }}/__init__.py +0 -0
  131. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name|replace('-', '_') }}/agent.py +0 -0
  132. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_faas/ve_faas_utils.py +0 -0
  133. {veadk_python-0.2.4/veadk/memory → veadk_python-0.2.6/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}}/__init__.py +0 -0
  134. {veadk_python-0.2.4/veadk/prompts → veadk_python-0.2.6/veadk/integrations/ve_prompt_pilot}/__init__.py +0 -0
  135. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +0 -0
  136. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/knowledgebase/__init__.py +0 -0
  137. {veadk_python-0.2.4/veadk/tools → veadk_python-0.2.6/veadk/memory}/__init__.py +0 -0
  138. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/memory/long_term_memory.py +0 -0
  139. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/memory/short_term_memory.py +0 -0
  140. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/memory/short_term_memory_processor.py +0 -0
  141. {veadk_python-0.2.4/veadk/tools/builtin_tools → veadk_python-0.2.6/veadk/prompts}/__init__.py +0 -0
  142. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/prompts/agent_default_prompt.py +0 -0
  143. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/prompts/prompt_evaluator.py +0 -0
  144. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/prompts/prompt_memory_processor.py +0 -0
  145. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/prompts/prompt_optimization.py +0 -0
  146. {veadk_python-0.2.4/veadk/tools/sandbox → veadk_python-0.2.6/veadk/tools}/__init__.py +0 -0
  147. {veadk_python-0.2.4/veadk/tracing → veadk_python-0.2.6/veadk/tools/builtin_tools}/__init__.py +0 -0
  148. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tools/builtin_tools/lark.py +0 -0
  149. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tools/builtin_tools/las.py +0 -0
  150. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tools/builtin_tools/mcp_router.py +0 -0
  151. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tools/builtin_tools/vesearch.py +0 -0
  152. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tools/builtin_tools/web_scraper.py +0 -0
  153. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tools/builtin_tools/web_search.py +0 -0
  154. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tools/demo_tools.py +0 -0
  155. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tools/load_knowledgebase_tool.py +0 -0
  156. {veadk_python-0.2.4/veadk/tracing/telemetry → veadk_python-0.2.6/veadk/tools/sandbox}/__init__.py +0 -0
  157. {veadk_python-0.2.4/veadk/tracing/telemetry/exporters → veadk_python-0.2.6/veadk/tracing}/__init__.py +0 -0
  158. {veadk_python-0.2.4/veadk/utils → veadk_python-0.2.6/veadk/tracing/telemetry}/__init__.py +0 -0
  159. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/attributes/attributes.py +0 -0
  160. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/exporters/apmplus_exporter.py +0 -0
  161. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/exporters/base_exporter.py +0 -0
  162. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/exporters/cozeloop_exporter.py +0 -0
  163. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/tracing/telemetry/exporters/tls_exporter.py +0 -0
  164. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/types.py +0 -0
  165. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/utils/logger.py +0 -0
  166. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/utils/mcp_utils.py +0 -0
  167. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/utils/patches.py +0 -0
  168. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk/utils/volcengine_sign.py +0 -0
  169. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk_python.egg-info/dependency_links.txt +0 -0
  170. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk_python.egg-info/entry_points.txt +0 -0
  171. {veadk_python-0.2.4 → veadk_python-0.2.6}/veadk_python.egg-info/requires.txt +0 -0
  172. {veadk_python-0.2.4 → veadk_python-0.2.6}/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.4
3
+ Version: 0.2.6
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.4"
3
+ version = "0.2.6"
4
4
  description = "Volcengine agent development kit, integrations with Volcengine cloud services."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -74,5 +74,6 @@ include-package-data = true
74
74
 
75
75
  [tool.ruff]
76
76
  exclude = [
77
- "veadk/integrations/ve_faas/template/*"
77
+ "veadk/integrations/ve_faas/template/*",
78
+ "veadk/integrations/ve_faas/web_template/*"
78
79
  ]
@@ -15,6 +15,7 @@
15
15
  from google.adk.tools import load_memory
16
16
 
17
17
  from veadk import Agent
18
+ from veadk.consts import DEFAULT_MODEL_EXTRA_CONFIG
18
19
  from veadk.knowledgebase import KnowledgeBase
19
20
  from veadk.memory.long_term_memory import LongTermMemory
20
21
  from veadk.tools import load_knowledgebase_tool
@@ -26,11 +27,17 @@ def test_agent():
26
27
  long_term_memory = LongTermMemory(backend="local")
27
28
  tracer = OpentelemetryTracer()
28
29
 
30
+ extra_config = {
31
+ "extra_headers": {"thinking": "test"},
32
+ "extra_body": {"content": "test"},
33
+ }
34
+
29
35
  agent = Agent(
30
36
  model_name="test_model_name",
31
37
  model_provider="test_model_provider",
32
38
  model_api_key="test_model_api_key",
33
39
  model_api_base="test_model_api_base",
40
+ model_extra_config=extra_config,
34
41
  tools=[],
35
42
  sub_agents=[],
36
43
  knowledgebase=knowledgebase,
@@ -41,6 +48,12 @@ def test_agent():
41
48
 
42
49
  assert agent.model.model == f"{agent.model_provider}/{agent.model_name}"
43
50
 
51
+ expected_config = DEFAULT_MODEL_EXTRA_CONFIG.copy()
52
+ expected_config["extra_headers"] |= extra_config["extra_headers"]
53
+ expected_config["extra_body"] |= extra_config["extra_body"]
54
+
55
+ assert agent.model_extra_config == expected_config
56
+
44
57
  assert agent.knowledgebase == knowledgebase
45
58
  assert agent.knowledgebase.backend == "local"
46
59
  assert load_knowledgebase_tool.knowledgebase == agent.knowledgebase
@@ -115,9 +115,12 @@ async def test_cloud():
115
115
  mock_vefaas_client = Mock()
116
116
  mock_vefaas_in_app.return_value = mock_vefaas_client
117
117
  mock_vefaas_client.delete.return_value = None
118
-
119
- cloud_app.delete_self()
120
- mock_vefaas_client.delete.assert_called_with("app-123")
118
+ with patch.object(
119
+ cloud_app, "_get_vefaas_application_id_by_name"
120
+ ) as mock_get_id_by_name:
121
+ mock_get_id_by_name.return_value = None
122
+ cloud_app.delete_self()
123
+ mock_vefaas_client.delete.assert_called_with("app-123")
121
124
 
122
125
  # Verify all mocks were called as expected
123
126
  mock_vefaas_service.deploy.assert_called_once()
@@ -28,7 +28,9 @@ def _test_convert_messages(runner):
28
28
  role="user",
29
29
  )
30
30
  ]
31
- actual_message = runner._convert_messages(message)
31
+ actual_message = runner._convert_messages(
32
+ message, session_id="test_session_id", upload_inline_data_to_tos=True
33
+ )
32
34
  assert actual_message == expected_message
33
35
 
34
36
  message = ["test message 1", "test message 2"]
@@ -42,7 +44,9 @@ def _test_convert_messages(runner):
42
44
  role="user",
43
45
  ),
44
46
  ]
45
- actual_message = runner._convert_messages(message)
47
+ actual_message = runner._convert_messages(
48
+ message, session_id="test_session_id", upload_inline_data_to_tos=True
49
+ )
46
50
  assert actual_message == expected_message
47
51
 
48
52
 
@@ -0,0 +1,169 @@
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 pytest
16
+ from unittest import mock
17
+
18
+ # Check if tos module is available
19
+ import importlib
20
+
21
+ TOS_AVAILABLE = False
22
+ try:
23
+ importlib.import_module("veadk.integrations.ve_tos.ve_tos")
24
+ TOS_AVAILABLE = True
25
+ except ImportError:
26
+ pass
27
+
28
+ # Skip tests that require tos module if it's not available
29
+ require_tos = pytest.mark.skipif(not TOS_AVAILABLE, reason="tos module not available")
30
+
31
+ # 使用 pytest-asyncio
32
+ pytest_plugins = ("pytest_asyncio",)
33
+
34
+
35
+ @pytest.fixture
36
+ @require_tos
37
+ def mock_client(monkeypatch):
38
+ import veadk.integrations.ve_tos.ve_tos as tos_mod
39
+
40
+ fake_client = mock.Mock()
41
+
42
+ monkeypatch.setenv("DATABASE_TOS_REGION", "test-region")
43
+ monkeypatch.setenv("VOLCENGINE_ACCESS_KEY", "test-access-key")
44
+ monkeypatch.setenv("VOLCENGINE_SECRET_KEY", "test-secret-key")
45
+ monkeypatch.setenv("DATABASE_TOS_BUCKET", "test-bucket")
46
+
47
+ monkeypatch.setattr(tos_mod.tos, "TosClientV2", lambda *a, **k: fake_client)
48
+
49
+ class FakeExceptions:
50
+ class TosServerError(Exception):
51
+ def __init__(
52
+ self,
53
+ msg: str,
54
+ code: int = 0,
55
+ host_id: str = "",
56
+ resource: str = "",
57
+ request_id: str = "",
58
+ header=None,
59
+ ):
60
+ super().__init__(msg)
61
+ self.status_code = code
62
+
63
+ monkeypatch.setattr(tos_mod.tos, "exceptions", FakeExceptions)
64
+ monkeypatch.setattr(
65
+ tos_mod.tos,
66
+ "StorageClassType",
67
+ type("S", (), {"Storage_Class_Standard": "STANDARD"}),
68
+ )
69
+ monkeypatch.setattr(
70
+ tos_mod.tos,
71
+ "ACLType",
72
+ type("A", (), {"ACL_Private": "private", "ACL_Public_Read": "public-read"}),
73
+ )
74
+
75
+ return fake_client
76
+
77
+
78
+ @pytest.fixture
79
+ @require_tos
80
+ def tos_client(mock_client):
81
+ import veadk.integrations.ve_tos.ve_tos as tos_mod
82
+
83
+ return tos_mod.VeTOS()
84
+
85
+
86
+ @require_tos
87
+ def test_create_bucket_exists(tos_client, mock_client):
88
+ mock_client.head_bucket.return_value = None # head_bucket 正常返回表示存在
89
+ result = tos_client.create_bucket()
90
+ assert result is True
91
+ mock_client.create_bucket.assert_not_called()
92
+
93
+
94
+ @require_tos
95
+ def test_create_bucket_not_exists(tos_client, mock_client):
96
+ import veadk.integrations.ve_tos.ve_tos as tos_mod
97
+
98
+ exc = tos_mod.tos.exceptions.TosServerError(msg="not found", code=404)
99
+ mock_client.head_bucket.side_effect = exc
100
+
101
+ result = tos_client.create_bucket()
102
+ assert result is True
103
+ mock_client.create_bucket.assert_called_once()
104
+
105
+
106
+ @require_tos
107
+ @pytest.mark.asyncio
108
+ async def test_upload_bytes_success(tos_client, mock_client):
109
+ mock_client.head_bucket.return_value = True
110
+ data = b"hello world"
111
+
112
+ result = await tos_client.upload("obj-key", data)
113
+ assert result is None
114
+ mock_client.put_object.assert_called_once()
115
+ mock_client.close.assert_called_once()
116
+
117
+
118
+ @require_tos
119
+ @pytest.mark.asyncio
120
+ async def test_upload_file_success(tmp_path, tos_client, mock_client):
121
+ mock_client.head_bucket.return_value = True
122
+ file_path = tmp_path / "file.txt"
123
+ file_path.write_text("hello file")
124
+
125
+ result = await tos_client.upload("obj-key", str(file_path))
126
+ assert result is None
127
+ mock_client.put_object_from_file.assert_called_once()
128
+ mock_client.close.assert_called_once()
129
+
130
+
131
+ @require_tos
132
+ def test_download_success(tmp_path, tos_client, mock_client):
133
+ save_path = tmp_path / "out.txt"
134
+ mock_client.get_object.return_value = [b"abc", b"def"]
135
+
136
+ result = tos_client.download("obj-key", str(save_path))
137
+ assert result is True
138
+ assert save_path.read_bytes() == b"abcdef"
139
+
140
+
141
+ @require_tos
142
+ def test_download_fail(tos_client, mock_client):
143
+ mock_client.get_object.side_effect = Exception("boom")
144
+ result = tos_client.download("obj-key", "somewhere.txt")
145
+ assert result is False
146
+
147
+
148
+ @require_tos
149
+ @pytest.mark.skipif(TOS_AVAILABLE, reason="tos module is available")
150
+ def test_tos_import_error():
151
+ """Test VeTOS behavior when tos module is not installed"""
152
+ # Remove tos from sys.modules to simulate it's not installed
153
+ import sys
154
+
155
+ original_tos = sys.modules.get("tos")
156
+ if "tos" in sys.modules:
157
+ del sys.modules["tos"]
158
+
159
+ try:
160
+ # Try to import ve_tos module, which should raise ImportError
161
+ with pytest.raises(ImportError) as exc_info:
162
+ pass
163
+
164
+ # Check that the error message contains installation instructions
165
+ assert "pip install tos" in str(exc_info.value)
166
+ finally:
167
+ # Restore original state
168
+ if original_tos is not None:
169
+ sys.modules["tos"] = original_tos
@@ -28,9 +28,10 @@ from typing_extensions import Any
28
28
 
29
29
  from veadk.config import getenv
30
30
  from veadk.consts import (
31
- DEFALUT_MODEL_AGENT_PROVIDER,
32
31
  DEFAULT_MODEL_AGENT_API_BASE,
33
32
  DEFAULT_MODEL_AGENT_NAME,
33
+ DEFAULT_MODEL_AGENT_PROVIDER,
34
+ DEFAULT_MODEL_EXTRA_CONFIG,
34
35
  )
35
36
  from veadk.evaluation import EvalSetRecorder
36
37
  from veadk.knowledgebase import KnowledgeBase
@@ -64,7 +65,7 @@ class Agent(LlmAgent):
64
65
  model_name: str = getenv("MODEL_AGENT_NAME", DEFAULT_MODEL_AGENT_NAME)
65
66
  """The name of the model for agent running."""
66
67
 
67
- model_provider: str = getenv("MODEL_AGENT_PROVIDER", DEFALUT_MODEL_AGENT_PROVIDER)
68
+ model_provider: str = getenv("MODEL_AGENT_PROVIDER", DEFAULT_MODEL_AGENT_PROVIDER)
68
69
  """The provider of the model for agent running."""
69
70
 
70
71
  model_api_base: str = getenv("MODEL_AGENT_API_BASE", DEFAULT_MODEL_AGENT_API_BASE)
@@ -73,6 +74,9 @@ class Agent(LlmAgent):
73
74
  model_api_key: str = Field(default_factory=lambda: getenv("MODEL_AGENT_API_KEY"))
74
75
  """The api key of the model for agent running."""
75
76
 
77
+ model_extra_config: dict = Field(default_factory=dict)
78
+ """The extra config to include in the model requests."""
79
+
76
80
  tools: list[ToolUnion] = []
77
81
  """The tools provided to agent."""
78
82
 
@@ -96,11 +100,39 @@ class Agent(LlmAgent):
96
100
 
97
101
  def model_post_init(self, __context: Any) -> None:
98
102
  super().model_post_init(None) # for sub_agents init
99
- self.model = LiteLlm(
100
- model=f"{self.model_provider}/{self.model_name}",
101
- api_key=self.model_api_key,
102
- api_base=self.model_api_base,
103
- )
103
+
104
+ # combine user model config with VeADK defaults
105
+ headers = DEFAULT_MODEL_EXTRA_CONFIG["extra_headers"].copy()
106
+ body = DEFAULT_MODEL_EXTRA_CONFIG["extra_body"].copy()
107
+
108
+ if self.model_extra_config:
109
+ user_headers = self.model_extra_config.get("extra_headers", {})
110
+ user_body = self.model_extra_config.get("extra_body", {})
111
+
112
+ headers |= user_headers
113
+ body |= user_body
114
+
115
+ self.model_extra_config |= {
116
+ "extra_headers": headers,
117
+ "extra_body": body,
118
+ }
119
+
120
+ logger.info(f"Model extra config: {self.model_extra_config}")
121
+
122
+ if not self.model:
123
+ self.model = LiteLlm(
124
+ model=f"{self.model_provider}/{self.model_name}",
125
+ api_key=self.model_api_key,
126
+ api_base=self.model_api_base,
127
+ **self.model_extra_config,
128
+ )
129
+ logger.debug(
130
+ f"LiteLLM client created with config: {self.model_extra_config}"
131
+ )
132
+ else:
133
+ logger.warning(
134
+ "You are trying to use your own LiteLLM client, some default request headers may be missing."
135
+ )
104
136
 
105
137
  if self.knowledgebase:
106
138
  from veadk.tools import load_knowledgebase_tool
@@ -117,7 +149,7 @@ class Agent(LlmAgent):
117
149
 
118
150
  logger.info(f"{self.__class__.__name__} `{self.name}` init done.")
119
151
  logger.debug(
120
- f"Agent: {self.model_dump(include={'name', 'model_name', 'model_api_base', 'tools', 'serve_url'})}"
152
+ f"Agent: {self.model_dump(include={'name', 'model_name', 'model_api_base', 'tools'})}"
121
153
  )
122
154
 
123
155
  async def _run(
@@ -14,6 +14,7 @@
14
14
 
15
15
 
16
16
  import click
17
+ from veadk.version import VERSION
17
18
 
18
19
  TEMP_PATH = "/tmp"
19
20
 
@@ -29,7 +30,9 @@ TEMP_PATH = "/tmp"
29
30
  default=None,
30
31
  help="Volcengine secret key",
31
32
  )
32
- @click.option("--vefaas-app-name", help="Expected Volcengine FaaS application name")
33
+ @click.option(
34
+ "--vefaas-app-name", required=True, help="Expected Volcengine FaaS application name"
35
+ )
33
36
  @click.option(
34
37
  "--veapig-instance-name", default="", help="Expected Volcengine APIG instance name"
35
38
  )
@@ -92,6 +95,7 @@ def deploy(
92
95
  "veapig_service_name": veapig_service_name,
93
96
  "veapig_upstream_name": veapig_upstream_name,
94
97
  "use_adk_web": use_adk_web,
98
+ "veadk_version": VERSION,
95
99
  }
96
100
 
97
101
  cookiecutter(
@@ -16,6 +16,8 @@ import warnings
16
16
  from typing import Any
17
17
 
18
18
  import click
19
+ from veadk.version import VERSION
20
+
19
21
 
20
22
  warnings.filterwarnings(
21
23
  "ignore", category=UserWarning, module="pydantic._internal._fields"
@@ -58,12 +60,21 @@ def _render_prompts() -> dict[str, Any]:
58
60
  "veapig_service_name": veapig_service_name,
59
61
  "veapig_upstream_name": veapig_upstream_name,
60
62
  "use_adk_web": deploy_mode == "2",
63
+ "veadk_version": VERSION,
61
64
  }
62
65
 
63
66
 
64
67
  @click.command()
65
- def init() -> None:
66
- """Init a veadk project that can be deployed to Volcengine VeFaaS."""
68
+ @click.option(
69
+ "--vefaas-template-type", default="template", help="Expected template type"
70
+ )
71
+ def init(
72
+ vefaas_template_type: str,
73
+ ) -> None:
74
+ """Init a veadk project that can be deployed to Volcengine VeFaaS.
75
+
76
+ `template` is A2A/MCP/Web server template, `web_template` is for web applications (i.e., a simple blog).
77
+ """
67
78
  import shutil
68
79
  from pathlib import Path
69
80
 
@@ -71,9 +82,14 @@ def init() -> None:
71
82
 
72
83
  import veadk.integrations.ve_faas as vefaas
73
84
 
74
- click.echo(
75
- "Welcome use VeADK to create your project. We will generate a `weather-reporter` application for you."
76
- )
85
+ if vefaas_template_type == "web_template":
86
+ click.echo(
87
+ "Welcome use VeADK to create your project. We will generate a `simple-blog` web application for you."
88
+ )
89
+ else:
90
+ click.echo(
91
+ "Welcome use VeADK to create your project. We will generate a `weather-reporter` application for you."
92
+ )
77
93
 
78
94
  cwd = Path.cwd()
79
95
  local_dir_name = click.prompt("Local directory name", default="veadk-cloud-proj")
@@ -89,7 +105,10 @@ def init() -> None:
89
105
  settings = _render_prompts()
90
106
  settings["local_dir_name"] = local_dir_name
91
107
 
92
- template_dir_path = Path(vefaas.__file__).parent / "template"
108
+ if not vefaas_template_type:
109
+ vefaas_template_type = "template"
110
+
111
+ template_dir_path = Path(vefaas.__file__).parent / vefaas_template_type
93
112
 
94
113
  cookiecutter(
95
114
  template=str(template_dir_path),
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import json
16
+ import time
16
17
  from typing import Any
17
18
  from uuid import uuid4
18
19
 
@@ -60,9 +61,11 @@ class CloudApp:
60
61
  if not vefaas_endpoint:
61
62
  self.vefaas_endpoint = self._get_vefaas_endpoint()
62
63
 
63
- if not self.vefaas_endpoint.startswith(
64
- "http"
65
- ) and not self.vefaas_endpoint.startswith("https"):
64
+ if (
65
+ self.vefaas_endpoint
66
+ and not self.vefaas_endpoint.startswith("http")
67
+ and not self.vefaas_endpoint.startswith("https")
68
+ ):
66
69
  raise ValueError(
67
70
  f"Invalid endpoint: {vefaas_endpoint}. The endpoint must start with `http` or `https`."
68
71
  )
@@ -92,12 +95,13 @@ class CloudApp:
92
95
  raise ValueError(
93
96
  f"VeFaaS CloudAPP with application_id `{self.vefaas_application_id}` or application_name `{self.vefaas_application_name}` not found."
94
97
  )
95
- cloud_resource = json.loads(app["CloudResource"])
96
98
 
97
99
  try:
100
+ cloud_resource = json.loads(app["CloudResource"])
98
101
  vefaas_endpoint = cloud_resource["framework"]["url"]["system_url"]
99
102
  except Exception as e:
100
- raise ValueError(f"VeFaaS cloudAPP could not get endpoint. Error: {e}")
103
+ logger.warning(f"VeFaaS cloudAPP could not get endpoint. Error: {e}")
104
+ vefaas_endpoint = ""
101
105
  return vefaas_endpoint
102
106
 
103
107
  def _get_vefaas_application_id_by_name(self) -> str:
@@ -167,7 +171,18 @@ class CloudApp:
167
171
 
168
172
  vefaas_client = VeFaaS(access_key=volcengine_ak, secret_key=volcengine_sk)
169
173
  vefaas_client.delete(self.vefaas_application_id)
170
- print(f"Cloud app {self.vefaas_application_id} is deleting...")
174
+ print(
175
+ f"Cloud app {self.vefaas_application_id} delete request has been sent to VeFaaS"
176
+ )
177
+ while True:
178
+ try:
179
+ id = self._get_vefaas_application_id_by_name()
180
+ if not id:
181
+ break
182
+ time.sleep(3)
183
+ except Exception as _:
184
+ break
185
+ print("Delete application done.")
171
186
 
172
187
  async def message_send(
173
188
  self, message: str, session_id: str, user_id: str, timeout: float = 600.0
@@ -0,0 +1,49 @@
1
+ # Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import time
16
+
17
+ from veadk.config import getenv
18
+ from veadk.version import VERSION
19
+
20
+ DEFAULT_MODEL_AGENT_NAME = "doubao-seed-1-6-250615"
21
+ DEFAULT_MODEL_AGENT_PROVIDER = "openai"
22
+ DEFAULT_MODEL_AGENT_API_BASE = "https://ark.cn-beijing.volces.com/api/v3/"
23
+ DEFAULT_MODEL_EXTRA_CONFIG = {
24
+ "extra_headers": {
25
+ "x-is-encrypted": getenv("MODEL_AGENT_ENCRYPTED", "true"),
26
+ "veadk-source": "veadk",
27
+ "veadk-version": VERSION,
28
+ },
29
+ "extra_body": {
30
+ "caching": {
31
+ "type": getenv("MODEL_AGENT_CACHING", "enabled"),
32
+ },
33
+ "expire_at": int(time.time()) + 3600, # expire after 1 hour
34
+ },
35
+ }
36
+
37
+ DEFAULT_APMPLUS_OTEL_EXPORTER_ENDPOINT = "http://apmplus-cn-beijing.volces.com:4317"
38
+ DEFAULT_APMPLUS_OTEL_EXPORTER_SERVICE_NAME = "veadk_tracing"
39
+
40
+ DEFAULT_COZELOOP_OTEL_EXPORTER_ENDPOINT = (
41
+ "https://api.coze.cn/v1/loop/opentelemetry/v1/traces"
42
+ )
43
+
44
+ DEFAULT_TLS_OTEL_EXPORTER_ENDPOINT = "https://tls-cn-beijing.volces.com:4318/v1/traces"
45
+ DEFAULT_TLS_OTEL_EXPORTER_REGION = "cn-beijing"
46
+
47
+ DEFAULT_CR_INSTANCE_NAME = "veadk-user-instance"
48
+ DEFAULT_CR_NAMESPACE_NAME = "veadk-user-namespace"
49
+ DEFAULT_CR_REPO_NAME = "veadk-user-repo"
@@ -54,6 +54,33 @@ class KVDatabaseAdapter:
54
54
  logger.error(f"Failed to search from Redis: index={index} error={e}")
55
55
  raise e
56
56
 
57
+ def delete_doc(self, index: str, id: str) -> bool:
58
+ logger.debug(f"Deleting document from Redis database: index={index} id={id}")
59
+ try:
60
+ # For Redis, we need to handle deletion differently since RedisDatabase.delete_doc
61
+ # takes a key and a single id
62
+ result = self.client.delete_doc(key=index, id=id)
63
+ return result
64
+ except Exception as e:
65
+ logger.error(
66
+ f"Failed to delete document from Redis database: index={index} id={id} error={e}"
67
+ )
68
+ return False
69
+
70
+ def list_docs(self, index: str, offset: int = 0, limit: int = 100) -> list[dict]:
71
+ logger.debug(f"Listing documents from Redis database: index={index}")
72
+ try:
73
+ # Get all documents from Redis
74
+ docs = self.client.list_docs(key=index)
75
+
76
+ # Apply offset and limit for pagination
77
+ return docs[offset : offset + limit]
78
+ except Exception as e:
79
+ logger.error(
80
+ f"Failed to list documents from Redis database: index={index} error={e}"
81
+ )
82
+ return []
83
+
57
84
 
58
85
  class RelationalDatabaseAdapter:
59
86
  def __init__(self, client):
@@ -108,6 +135,28 @@ class RelationalDatabaseAdapter:
108
135
 
109
136
  return [item["data"] for item in results]
110
137
 
138
+ def delete_doc(self, index: str, id: str) -> bool:
139
+ logger.debug(f"Deleting document from SQL database: table_name={index} id={id}")
140
+ try:
141
+ # Convert single id to list for the client method
142
+ result = self.client.delete_doc(table=index, ids=[int(id)])
143
+ return result
144
+ except Exception as e:
145
+ logger.error(
146
+ f"Failed to delete document from SQL database: table_name={index} id={id} error={e}"
147
+ )
148
+ return False
149
+
150
+ def list_docs(self, index: str, offset: int = 0, limit: int = 100) -> list[dict]:
151
+ logger.debug(f"Listing documents from SQL database: table_name={index}")
152
+ try:
153
+ return self.client.list_docs(table=index, offset=offset, limit=limit)
154
+ except Exception as e:
155
+ logger.error(
156
+ f"Failed to list documents from SQL database: table_name={index} error={e}"
157
+ )
158
+ return []
159
+
111
160
 
112
161
  class VectorDatabaseAdapter:
113
162
  def __init__(self, client):
@@ -152,6 +201,23 @@ class VectorDatabaseAdapter:
152
201
  top_k=top_k,
153
202
  )
154
203
 
204
+ def delete_doc(self, index: str, id: str) -> bool:
205
+ self._validate_index(index)
206
+ logger.debug(f"Deleting documents from vector database: index={index} id={id}")
207
+ try:
208
+ self.client.delete_by_id(collection_name=index, id=id)
209
+ return True
210
+ except Exception as e:
211
+ logger.error(
212
+ f"Failed to delete document from vector database: index={index} id={id} error={e}"
213
+ )
214
+ return False
215
+
216
+ def list_docs(self, index: str, offset: int = 0, limit: int = 1000) -> list[dict]:
217
+ self._validate_index(index)
218
+ logger.debug(f"Listing documents from vector database: index={index}")
219
+ return self.client.list_docs(collection_name=index, offset=offset, limit=limit)
220
+
155
221
 
156
222
  class VikingDatabaseAdapter:
157
223
  def __init__(self, client):
@@ -212,6 +278,16 @@ class VikingDatabaseAdapter:
212
278
 
213
279
  return self.client.query(query, collection_name=index, top_k=top_k)
214
280
 
281
+ def delete_doc(self, index: str, id: str) -> bool:
282
+ self._validate_index(index)
283
+ logger.debug(f"Deleting documents from vector database: index={index} id={id}")
284
+ return self.client.delete_by_id(collection_name=index, id=id)
285
+
286
+ def list_docs(self, index: str, offset: int, limit: int) -> list[dict]:
287
+ self._validate_index(index)
288
+ logger.debug(f"Listing documents from vector database: index={index}")
289
+ return self.client.list_docs(collection_name=index, offset=offset, limit=limit)
290
+
215
291
 
216
292
  class VikingMemoryDatabaseAdapter:
217
293
  def __init__(self, client):
@@ -248,6 +324,12 @@ class VikingMemoryDatabaseAdapter:
248
324
  result = self.client.query(query, collection_name=index, top_k=top_k, **kwargs)
249
325
  return result
250
326
 
327
+ def delete_docs(self, index: str, ids: list[int]):
328
+ raise NotImplementedError("VikingMemoryDatabase does not support delete_docs")
329
+
330
+ def list_docs(self, index: str):
331
+ raise NotImplementedError("VikingMemoryDatabase does not support list_docs")
332
+
251
333
 
252
334
  class LocalDatabaseAdapter:
253
335
  def __init__(self, client):
@@ -261,6 +343,12 @@ class LocalDatabaseAdapter:
261
343
  def query(self, query: str, **kwargs):
262
344
  return self.client.query(query, **kwargs)
263
345
 
346
+ def delete_doc(self, index: str, id: str) -> bool:
347
+ return self.client.delete_doc(id)
348
+
349
+ def list_docs(self, index: str, offset: int = 0, limit: int = 100) -> list[dict]:
350
+ return self.client.list_docs(offset=offset, limit=limit)
351
+
264
352
 
265
353
  MAPPING = {
266
354
  "RedisDatabase": KVDatabaseAdapter,