veadk-python 0.2.10__tar.gz → 0.2.11__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 (203) hide show
  1. {veadk_python-0.2.10 → veadk_python-0.2.11}/PKG-INFO +2 -1
  2. {veadk_python-0.2.10 → veadk_python-0.2.11}/pyproject.toml +2 -1
  3. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_agent.py +5 -7
  4. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_knowledgebase.py +4 -5
  5. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_long_term_memory.py +7 -9
  6. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_runner.py +5 -3
  7. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/agent.py +7 -3
  8. veadk_python-0.2.11/veadk/auth/veauth/ark_veauth.py +69 -0
  9. veadk_python-0.2.11/veadk/auth/veauth/utils.py +57 -0
  10. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/configs/model_configs.py +3 -3
  11. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/consts.py +9 -0
  12. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/knowledgebase.py +19 -32
  13. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/long_term_memory.py +39 -92
  14. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/long_term_memory_backends/base_backend.py +4 -2
  15. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/long_term_memory_backends/in_memory_backend.py +8 -6
  16. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/long_term_memory_backends/mem0_backend.py +8 -8
  17. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/long_term_memory_backends/opensearch_backend.py +40 -36
  18. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/long_term_memory_backends/redis_backend.py +59 -46
  19. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +53 -28
  20. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/short_term_memory.py +9 -11
  21. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/runner.py +19 -11
  22. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/generate_image.py +11 -6
  23. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/image_edit.py +9 -4
  24. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/image_generate.py +9 -4
  25. veadk_python-0.2.11/veadk/tools/builtin_tools/load_knowledgebase.py +97 -0
  26. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/video_generate.py +6 -4
  27. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/utils/misc.py +6 -10
  28. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/utils/volcengine_sign.py +2 -0
  29. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/version.py +1 -1
  30. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk_python.egg-info/PKG-INFO +2 -1
  31. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk_python.egg-info/SOURCES.txt +2 -0
  32. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk_python.egg-info/requires.txt +1 -0
  33. veadk_python-0.2.10/veadk/auth/veauth/ark_veauth.py +0 -77
  34. {veadk_python-0.2.10 → veadk_python-0.2.11}/LICENSE +0 -0
  35. {veadk_python-0.2.10 → veadk_python-0.2.11}/README.md +0 -0
  36. {veadk_python-0.2.10 → veadk_python-0.2.11}/setup.cfg +0 -0
  37. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_cloud.py +0 -0
  38. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_evaluator.py +0 -0
  39. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_multiple_agents.py +0 -0
  40. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_runtime_data_collecting.py +0 -0
  41. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_short_term_memory.py +0 -0
  42. {veadk_python-0.2.10 → veadk_python-0.2.11}/tests/test_tracing.py +0 -0
  43. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/__init__.py +0 -0
  44. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/a2a/__init__.py +0 -0
  45. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/a2a/agent_card.py +0 -0
  46. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/a2a/remote_ve_agent.py +0 -0
  47. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/a2a/ve_a2a_server.py +0 -0
  48. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/a2a/ve_agent_executor.py +0 -0
  49. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/a2a/ve_task_store.py +0 -0
  50. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/agent_builder.py +0 -0
  51. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/agents/loop_agent.py +0 -0
  52. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/agents/parallel_agent.py +0 -0
  53. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/agents/sequential_agent.py +0 -0
  54. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/__init__.py +0 -0
  55. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/base_auth.py +0 -0
  56. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/veauth/__init__.py +0 -0
  57. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/veauth/apmplus_veauth.py +0 -0
  58. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/veauth/base_veauth.py +0 -0
  59. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/veauth/cozeloop_veauth.py +0 -0
  60. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/veauth/opensearch_veauth.py +0 -0
  61. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/veauth/postgresql_veauth.py +0 -0
  62. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/veauth/prompt_pilot_veauth.py +0 -0
  63. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/auth/veauth/vesearch_veauth.py +0 -0
  64. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/__init__.py +0 -0
  65. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/cli.py +0 -0
  66. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/cli_deploy.py +0 -0
  67. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/cli_eval.py +0 -0
  68. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/cli_init.py +0 -0
  69. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/cli_kb.py +0 -0
  70. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/cli_pipeline.py +0 -0
  71. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/cli_prompt.py +0 -0
  72. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cli/cli_web.py +0 -0
  73. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cloud/__init__.py +0 -0
  74. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cloud/cloud_agent_engine.py +0 -0
  75. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/cloud/cloud_app.py +0 -0
  76. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/config.py +0 -0
  77. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/configs/__init__.py +0 -0
  78. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/configs/database_configs.py +0 -0
  79. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/configs/tool_configs.py +0 -0
  80. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/configs/tracing_configs.py +0 -0
  81. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/__init__.py +0 -0
  82. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/adk_evaluator/__init__.py +0 -0
  83. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/adk_evaluator/adk_evaluator.py +0 -0
  84. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/base_evaluator.py +0 -0
  85. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/deepeval_evaluator/__init__.py +0 -0
  86. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +0 -0
  87. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/eval_set_file_loader.py +0 -0
  88. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/eval_set_recorder.py +0 -0
  89. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/types.py +0 -0
  90. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/evaluation/utils/prometheus.py +0 -0
  91. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/__init__.py +0 -0
  92. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_apig/__init__.py +0 -0
  93. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_apig/ve_apig.py +0 -0
  94. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_apig/ve_apig_utils.py +0 -0
  95. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_code_pipeline/__init__.py +0 -0
  96. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +0 -0
  97. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_cozeloop/__init__.py +0 -0
  98. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_cozeloop/ve_cozeloop.py +0 -0
  99. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_cr/__init__.py +0 -0
  100. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_cr/ve_cr.py +0 -0
  101. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/__init__.py +0 -0
  102. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/cookiecutter.json +0 -0
  103. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
  104. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
  105. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
  106. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
  107. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/__init__.py +0 -0
  108. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +0 -0
  109. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
  110. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
  111. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
  112. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/__init__.py +0 -0
  113. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/agent.py +0 -0
  114. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/ve_faas.py +0 -0
  115. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/ve_faas_utils.py +0 -0
  116. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/cookiecutter.json +0 -0
  117. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
  118. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
  119. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
  120. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
  121. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +0 -0
  122. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
  123. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +0 -0
  124. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +0 -0
  125. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
  126. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
  127. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +0 -0
  128. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
  129. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +0 -0
  130. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +0 -0
  131. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +0 -0
  132. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +0 -0
  133. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +0 -0
  134. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +0 -0
  135. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +0 -0
  136. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_prompt_pilot/__init__.py +0 -0
  137. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +0 -0
  138. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_tls/__init__.py +0 -0
  139. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_tls/utils.py +0 -0
  140. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_tls/ve_tls.py +0 -0
  141. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_tos/ve_tos.py +0 -0
  142. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_viking_db_memory/__init__.py +0 -0
  143. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/integrations/ve_viking_db_memory/ve_viking_db_memory.py +0 -0
  144. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/__init__.py +0 -0
  145. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/backends/__init__.py +0 -0
  146. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/backends/base_backend.py +0 -0
  147. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/backends/in_memory_backend.py +0 -0
  148. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/backends/opensearch_backend.py +0 -0
  149. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/backends/redis_backend.py +0 -0
  150. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/backends/utils.py +0 -0
  151. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +0 -0
  152. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/knowledgebase/entry.py +0 -0
  153. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/__init__.py +0 -0
  154. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/long_term_memory_backends/__init__.py +0 -0
  155. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/short_term_memory_backends/__init__.py +0 -0
  156. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/short_term_memory_backends/base_backend.py +0 -0
  157. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/short_term_memory_backends/mysql_backend.py +0 -0
  158. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/short_term_memory_backends/postgresql_backend.py +0 -0
  159. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/short_term_memory_backends/sqlite_backend.py +0 -0
  160. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/memory/short_term_memory_processor.py +0 -0
  161. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/prompts/__init__.py +0 -0
  162. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/prompts/agent_default_prompt.py +0 -0
  163. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/prompts/prompt_evaluator.py +0 -0
  164. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/prompts/prompt_memory_processor.py +0 -0
  165. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/prompts/prompt_optimization.py +0 -0
  166. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/__init__.py +0 -0
  167. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/__init__.py +0 -0
  168. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/lark.py +0 -0
  169. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/las.py +0 -0
  170. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/mcp_router.py +0 -0
  171. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/vesearch.py +0 -0
  172. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/web_scraper.py +0 -0
  173. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/builtin_tools/web_search.py +0 -0
  174. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/demo_tools.py +0 -0
  175. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/load_knowledgebase_tool.py +0 -0
  176. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/sandbox/__init__.py +0 -0
  177. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/sandbox/browser_sandbox.py +0 -0
  178. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/sandbox/code_sandbox.py +0 -0
  179. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tools/sandbox/computer_sandbox.py +0 -0
  180. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/__init__.py +0 -0
  181. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/base_tracer.py +0 -0
  182. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/__init__.py +0 -0
  183. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/attributes/attributes.py +0 -0
  184. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +0 -0
  185. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +0 -0
  186. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/attributes/extractors/tool_attributes_extractors.py +0 -0
  187. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/attributes/extractors/types.py +0 -0
  188. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/exporters/__init__.py +0 -0
  189. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/exporters/apmplus_exporter.py +0 -0
  190. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/exporters/base_exporter.py +0 -0
  191. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/exporters/cozeloop_exporter.py +0 -0
  192. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/exporters/inmemory_exporter.py +0 -0
  193. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/exporters/tls_exporter.py +0 -0
  194. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/opentelemetry_tracer.py +0 -0
  195. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/tracing/telemetry/telemetry.py +0 -0
  196. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/types.py +0 -0
  197. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/utils/__init__.py +0 -0
  198. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/utils/logger.py +0 -0
  199. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/utils/mcp_utils.py +0 -0
  200. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk/utils/patches.py +0 -0
  201. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk_python.egg-info/dependency_links.txt +0 -0
  202. {veadk_python-0.2.10 → veadk_python-0.2.11}/veadk_python.egg-info/entry_points.txt +0 -0
  203. {veadk_python-0.2.10 → veadk_python-0.2.11}/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.10
3
+ Version: 0.2.11
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
@@ -231,6 +231,7 @@ Requires-Dist: llama-index-vector-stores-opensearch>=0.6.1
231
231
  Requires-Dist: psycopg2-binary>=2.9.10
232
232
  Requires-Dist: pymysql>=1.1.1
233
233
  Requires-Dist: opensearch-py==2.8.0
234
+ Requires-Dist: filetype>=1.2.0
234
235
  Provides-Extra: extensions
235
236
  Requires-Dist: redis>=5.0; extra == "extensions"
236
237
  Requires-Dist: tos>=2.8.4; extra == "extensions"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "veadk-python"
3
- version = "0.2.10"
3
+ version = "0.2.11"
4
4
  description = "Volcengine agent development kit, integrations with Volcengine cloud services."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -35,6 +35,7 @@ dependencies = [
35
35
  "psycopg2-binary>=2.9.10", # For PostgreSQL database (short term memory)
36
36
  "pymysql>=1.1.1", # For MySQL database (short term memory)
37
37
  "opensearch-py==2.8.0",
38
+ "filetype>=1.2.0",
38
39
  ]
39
40
 
40
41
  [project.scripts]
@@ -12,6 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import os
15
16
  from unittest.mock import Mock, patch
16
17
 
17
18
  from google.adk.agents.llm_agent import LlmAgent
@@ -33,11 +34,10 @@ from veadk.tracing.telemetry.opentelemetry_tracer import OpentelemetryTracer
33
34
 
34
35
 
35
36
  def test_agent():
36
- knowledgebase = KnowledgeBase(
37
- index="test_index",
38
- backend="local",
39
- backend_config={"embedding_config": {"api_key": "test"}},
40
- )
37
+ os.environ["MODEL_EMBEDDING_API_KEY"] = "mocked_api_key"
38
+
39
+ knowledgebase = KnowledgeBase(index="test_index", backend="local")
40
+
41
41
  long_term_memory = LongTermMemory(backend="local")
42
42
  tracer = OpentelemetryTracer()
43
43
 
@@ -69,8 +69,6 @@ def test_agent():
69
69
 
70
70
  assert agent.knowledgebase == knowledgebase
71
71
  assert agent.knowledgebase.backend == "local" # type: ignore
72
- assert load_knowledgebase_tool.knowledgebase == agent.knowledgebase
73
- assert load_knowledgebase_tool.load_knowledgebase_tool in agent.tools
74
72
 
75
73
  assert agent.long_term_memory.backend == "local" # type: ignore
76
74
  assert load_memory in agent.tools
@@ -12,6 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import os
15
16
 
16
17
  import pytest
17
18
 
@@ -21,11 +22,9 @@ from veadk.knowledgebase.backends.in_memory_backend import InMemoryKnowledgeBack
21
22
 
22
23
  @pytest.mark.asyncio
23
24
  async def test_knowledgebase():
25
+ os.environ["MODEL_EMBEDDING_API_KEY"] = "mocked_api_key"
26
+
24
27
  app_name = "kb_test_app"
25
- kb = KnowledgeBase(
26
- backend="local",
27
- app_name=app_name,
28
- backend_config={"embedding_config": {"api_key": "test"}},
29
- )
28
+ kb = KnowledgeBase(backend="local", app_name=app_name)
30
29
 
31
30
  assert isinstance(kb._backend, InMemoryKnowledgeBackend)
@@ -13,23 +13,20 @@
13
13
  # limitations under the License.
14
14
 
15
15
 
16
+ import os
17
+
16
18
  import pytest
17
19
  from google.adk.tools import load_memory
18
20
 
19
21
  from veadk.agent import Agent
20
22
  from veadk.memory.long_term_memory import LongTermMemory
21
23
 
22
- app_name = "test_ltm"
23
- user_id = "test_user"
24
-
25
24
 
26
25
  @pytest.mark.asyncio
27
26
  async def test_long_term_memory():
28
- long_term_memory = LongTermMemory(
29
- backend="local",
30
- # app_name=app_name,
31
- # user_id=user_id,
32
- )
27
+ os.environ["MODEL_EMBEDDING_API_KEY"] = "mocked_api_key"
28
+ long_term_memory = LongTermMemory(backend="local")
29
+
33
30
  agent = Agent(
34
31
  name="all_name",
35
32
  model_name="test_model_name",
@@ -43,7 +40,8 @@ async def test_long_term_memory():
43
40
 
44
41
  assert load_memory in agent.tools, "load_memory tool not found in agent tools"
45
42
 
46
- assert not agent.long_term_memory._backend
43
+ assert agent.long_term_memory
44
+ assert agent.long_term_memory._backend
47
45
 
48
46
  # assert agent.long_term_memory._backend.index == build_long_term_memory_index(
49
47
  # app_name, user_id
@@ -12,16 +12,16 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import os
16
+
15
17
  from google.genai import types
16
18
 
17
19
  from veadk.agent import Agent
18
20
  from veadk.memory.long_term_memory import LongTermMemory
19
21
  from veadk.memory.short_term_memory import ShortTermMemory
20
- from veadk.runner import Runner
21
-
22
22
 
23
23
  # Import the standalone function instead of accessing as class method
24
- from veadk.runner import _convert_messages
24
+ from veadk.runner import Runner, _convert_messages
25
25
 
26
26
 
27
27
  def _test_convert_messages(runner):
@@ -67,6 +67,8 @@ def _test_convert_messages(runner):
67
67
 
68
68
  def test_runner():
69
69
  """Test Runner class initialization and core properties"""
70
+ os.environ["MODEL_EMBEDDING_API_KEY"] = "mocked_api_key"
71
+
70
72
  short_term_memory = ShortTermMemory()
71
73
  long_term_memory = LongTermMemory(backend="local")
72
74
  agent = Agent(
@@ -133,10 +133,14 @@ class Agent(LlmAgent):
133
133
  )
134
134
 
135
135
  if self.knowledgebase:
136
- from veadk.tools import load_knowledgebase_tool
136
+ from veadk.tools.builtin_tools.load_knowledgebase import (
137
+ LoadKnowledgebaseTool,
138
+ )
137
139
 
138
- load_knowledgebase_tool.knowledgebase = self.knowledgebase
139
- self.tools.append(load_knowledgebase_tool.load_knowledgebase_tool)
140
+ load_knowledgebase_tool = LoadKnowledgebaseTool(
141
+ knowledgebase=self.knowledgebase
142
+ )
143
+ self.tools.append(load_knowledgebase_tool)
140
144
 
141
145
  if self.long_term_memory is not None:
142
146
  from google.adk.tools import load_memory
@@ -0,0 +1,69 @@
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
+
17
+ from veadk.auth.veauth.utils import get_credential_from_vefaas_iam
18
+ from veadk.utils.logger import get_logger
19
+ from veadk.utils.volcengine_sign import ve_request
20
+
21
+ logger = get_logger(__name__)
22
+
23
+
24
+ def get_ark_token(region: str = "cn-beijing") -> str:
25
+ logger.info("Fetching ARK token...")
26
+
27
+ access_key = os.getenv("VOLCENGINE_ACCESS_KEY")
28
+ secret_key = os.getenv("VOLCENGINE_SECRET_KEY")
29
+ session_token = ""
30
+
31
+ if not (access_key and secret_key):
32
+ # try to get from vefaas iam
33
+ cred = get_credential_from_vefaas_iam()
34
+ access_key = cred.access_key_id
35
+ secret_key = cred.secret_access_key
36
+ session_token = cred.session_token
37
+
38
+ res = ve_request(
39
+ request_body={"ProjectName": "default", "Filter": {}},
40
+ header={"X-Security-Token": session_token},
41
+ action="ListApiKeys",
42
+ ak=access_key,
43
+ sk=secret_key,
44
+ service="ark",
45
+ version="2024-01-01",
46
+ region=region,
47
+ host="open.volcengineapi.com",
48
+ )
49
+ try:
50
+ first_api_key_id = res["Result"]["Items"][0]["Id"]
51
+ except KeyError:
52
+ raise ValueError(f"Failed to get ARK api key list: {res}")
53
+
54
+ # get raw api key
55
+ res = ve_request(
56
+ request_body={"Id": first_api_key_id},
57
+ header={"X-Security-Token": session_token},
58
+ action="GetRawApiKey",
59
+ ak=access_key,
60
+ sk=secret_key,
61
+ service="ark",
62
+ version="2024-01-01",
63
+ region=region,
64
+ host="open.volcengineapi.com",
65
+ )
66
+ try:
67
+ return res["Result"]["ApiKey"]
68
+ except KeyError:
69
+ raise ValueError(f"Failed to get ARK api key: {res}")
@@ -0,0 +1,57 @@
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
+ from pathlib import Path
17
+
18
+ from pydantic import BaseModel
19
+
20
+ from veadk.consts import VEFAAS_IAM_CRIDENTIAL_PATH
21
+ from veadk.utils.logger import get_logger
22
+
23
+ logger = get_logger(__name__)
24
+
25
+
26
+ class VeIAMCredential(BaseModel):
27
+ access_key_id: str
28
+ secret_access_key: str
29
+ session_token: str
30
+
31
+
32
+ def get_credential_from_vefaas_iam() -> VeIAMCredential:
33
+ """Get credential from VeFaaS IAM file"""
34
+ logger.info(
35
+ f"Get Volcegnine access key or secret key from environment variables failed, try to get from VeFaaS IAM file (path={VEFAAS_IAM_CRIDENTIAL_PATH})."
36
+ )
37
+
38
+ path = Path(VEFAAS_IAM_CRIDENTIAL_PATH)
39
+
40
+ if not path.exists():
41
+ logger.error(
42
+ f"Get Volcegnine access key or secret key from environment variables failed, and VeFaaS IAM file (path={VEFAAS_IAM_CRIDENTIAL_PATH}) not exists. Please check your configuration."
43
+ )
44
+ raise FileNotFoundError(
45
+ f"Get Volcegnine access key or secret key from environment variables failed, and VeFaaS IAM file (path={VEFAAS_IAM_CRIDENTIAL_PATH}) not exists. Please check your configuration."
46
+ )
47
+
48
+ with open(VEFAAS_IAM_CRIDENTIAL_PATH, "r") as f:
49
+ cred_dict = json.load(f)
50
+ access_key = cred_dict["access_key_id"]
51
+ secret_key = cred_dict["secret_access_key"]
52
+ session_token = cred_dict["session_token"]
53
+ return VeIAMCredential(
54
+ access_key_id=access_key,
55
+ secret_access_key=secret_key,
56
+ session_token=session_token,
57
+ )
@@ -17,7 +17,7 @@ from functools import cached_property
17
17
 
18
18
  from pydantic_settings import BaseSettings, SettingsConfigDict
19
19
 
20
- from veadk.auth.veauth.ark_veauth import ARKVeAuth
20
+ from veadk.auth.veauth.ark_veauth import get_ark_token
21
21
  from veadk.consts import (
22
22
  DEFAULT_MODEL_AGENT_API_BASE,
23
23
  DEFAULT_MODEL_AGENT_NAME,
@@ -39,7 +39,7 @@ class ModelConfig(BaseSettings):
39
39
 
40
40
  @cached_property
41
41
  def api_key(self) -> str:
42
- return os.getenv("MODEL_AGENT_API_KEY") or ARKVeAuth().token
42
+ return os.getenv("MODEL_AGENT_API_KEY") or get_ark_token()
43
43
 
44
44
 
45
45
  class EmbeddingModelConfig(BaseSettings):
@@ -56,7 +56,7 @@ class EmbeddingModelConfig(BaseSettings):
56
56
 
57
57
  @cached_property
58
58
  def api_key(self) -> str:
59
- return os.getenv("MODEL_EMBEDDING_API_KEY") or ARKVeAuth().token
59
+ return os.getenv("MODEL_EMBEDDING_API_KEY") or get_ark_token()
60
60
 
61
61
 
62
62
  class NormalEmbeddingModelConfig(BaseSettings):
@@ -63,6 +63,15 @@ DEFAULT_TOS_BUCKET_NAME = "ark-tutorial"
63
63
  DEFAULT_COZELOOP_SPACE_NAME = "VeADK Space"
64
64
 
65
65
  DEFAULT_TEXT_TO_IMAGE_MODEL_NAME = "doubao-seedream-3-0-t2i-250415"
66
+ DEFAULT_TEXT_TO_IMAGE_MODEL_API_BASE = "https://ark.cn-beijing.volces.com/api/v3/"
67
+
66
68
  DEFAULT_IMAGE_EDIT_MODEL_NAME = "doubao-seededit-3-0-i2i-250628"
69
+ DEFAULT_IMAGE_EDIT_MODEL_API_BASE = "https://ark.cn-beijing.volces.com/api/v3/"
70
+
67
71
  DEFAULT_VIDEO_MODEL_NAME = "doubao-seedance-1-0-pro-250528"
72
+ DEFAULT_VIDEO_MODEL_API_BASE = "https://ark.cn-beijing.volces.com/api/v3/"
73
+
68
74
  DEFAULT_IMAGE_GENERATE_MODEL_NAME = "doubao-seedream-4-0-250828"
75
+ DEFAULT_IMAGE_GENERATE_MODEL_API_BASE = "https://ark.cn-beijing.volces.com/api/v3/"
76
+
77
+ VEFAAS_IAM_CRIDENTIAL_PATH = "/var/run/secrets/iam/credential"
@@ -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
- from typing import Any, Callable, Literal
15
+ from __future__ import annotations
16
+
17
+ from typing import Any, Callable, Literal, Union
16
18
 
17
19
  from pydantic import BaseModel, Field
18
- from typing_extensions import Union
19
20
 
20
21
  from veadk.knowledgebase.backends.base_backend import BaseKnowledgebaseBackend
21
22
  from veadk.knowledgebase.entry import KnowledgebaseEntry
@@ -54,11 +55,11 @@ def _get_backend_cls(backend: str) -> type[BaseKnowledgebaseBackend]:
54
55
  raise ValueError(f"Unsupported knowledgebase backend: {backend}")
55
56
 
56
57
 
57
- def build_knowledgebase_index(app_name: str):
58
- return f"veadk_kb_{app_name}"
58
+ class KnowledgeBase(BaseModel):
59
+ name: str = "user_knowledgebase"
59
60
 
61
+ description: str = "This knowledgebase stores some user-related information."
60
62
 
61
- class KnowledgeBase(BaseModel):
62
63
  backend: Union[
63
64
  Literal["local", "opensearch", "viking", "redis"], BaseKnowledgebaseBackend
64
65
  ] = "local"
@@ -73,9 +74,7 @@ class KnowledgeBase(BaseModel):
73
74
  """Configuration for the backend"""
74
75
 
75
76
  top_k: int = 10
76
- """Number of top similar documents to retrieve during search.
77
-
78
- Default is 10."""
77
+ """Number of top similar documents to retrieve during search"""
79
78
 
80
79
  app_name: str = ""
81
80
 
@@ -85,38 +84,27 @@ class KnowledgeBase(BaseModel):
85
84
  def model_post_init(self, __context: Any) -> None:
86
85
  if isinstance(self.backend, BaseKnowledgebaseBackend):
87
86
  self._backend = self.backend
87
+ self.index = self._backend.index
88
88
  logger.info(
89
89
  f"Initialized knowledgebase with provided backend instance {self._backend.__class__.__name__}"
90
90
  )
91
91
  return
92
92
 
93
- # must provide at least one of them
94
- if not self.app_name and not self.index:
95
- raise ValueError(
96
- "Either `app_name` or `index` must be provided one of them."
97
- )
98
-
99
- # priority use index
100
- if self.app_name and self.index:
101
- logger.warning(
102
- "`app_name` and `index` are both provided, using `index` as the knowledgebase index name."
103
- )
93
+ # Once user define backend config, use it directly
94
+ if self.backend_config:
95
+ self._backend = _get_backend_cls(self.backend)(**self.backend_config)
96
+ return
104
97
 
105
- # generate index name if `index` not provided but `app_name` is provided
106
- if self.app_name and not self.index:
107
- self.index = build_knowledgebase_index(self.app_name)
108
- logger.info(
109
- f"Knowledgebase index is set to {self.index} (generated by the app_name: {self.app_name})."
110
- )
98
+ self.index = self.index or self.app_name
99
+ if not self.index:
100
+ raise ValueError("Either `index` or `app_name` must be provided.")
111
101
 
112
102
  logger.info(
113
- f"Initializing knowledgebase: backend={self.backend} top_k={self.top_k}"
114
- )
115
- self._backend = _get_backend_cls(self.backend)(
116
- index=self.index, **self.backend_config if self.backend_config else {}
103
+ f"Initializing knowledgebase: backend={self.backend} index={self.index} top_k={self.top_k}"
117
104
  )
105
+ self._backend = _get_backend_cls(self.backend)(index=self.index)
118
106
  logger.info(
119
- f"Initialized knowledgebase with backend {self._backend.__class__.__name__}"
107
+ f"Initialized knowledgebase with backend {self.backend.__class__.__name__}"
120
108
  )
121
109
 
122
110
  def add_from_directory(self, directory: str, **kwargs) -> bool:
@@ -133,8 +121,7 @@ class KnowledgeBase(BaseModel):
133
121
 
134
122
  def search(self, query: str, top_k: int = 0, **kwargs) -> list[KnowledgebaseEntry]:
135
123
  """Search knowledge from knowledgebase"""
136
- if top_k == 0:
137
- top_k = self.top_k
124
+ top_k = top_k if top_k != 0 else self.top_k
138
125
 
139
126
  _entries = self._backend.search(query=query, top_k=top_k, **kwargs)
140
127
 
@@ -72,10 +72,6 @@ def _get_backend_cls(backend: str) -> type[BaseLongTermMemoryBackend]:
72
72
  raise ValueError(f"Unsupported long term memory backend: {backend}")
73
73
 
74
74
 
75
- def build_long_term_memory_index(app_name: str, user_id: str):
76
- return f"{app_name}_{user_id}"
77
-
78
-
79
75
  class LongTermMemory(BaseMemoryService, BaseModel):
80
76
  backend: Union[
81
77
  Literal["local", "opensearch", "redis", "viking", "viking_mem", "mem0"],
@@ -89,54 +85,48 @@ class LongTermMemory(BaseMemoryService, BaseModel):
89
85
  top_k: int = 5
90
86
  """Number of top similar documents to retrieve during search."""
91
87
 
88
+ index: str = ""
89
+
92
90
  app_name: str = ""
93
91
 
94
92
  user_id: str = ""
93
+ """Deprecated attribute"""
95
94
 
96
95
  def model_post_init(self, __context: Any) -> None:
97
- if self.backend == "viking_mem":
98
- logger.warning(
99
- "The `viking_mem` backend is deprecated, please use `viking` instead."
100
- )
101
- self.backend = "viking"
102
-
103
- self._backend = None
104
-
105
96
  # Once user define a backend instance, use it directly
106
97
  if isinstance(self.backend, BaseLongTermMemoryBackend):
107
98
  self._backend = self.backend
99
+ self.index = self._backend.index
108
100
  logger.info(
109
- f"Initialized long term memory with provided backend instance {self._backend.__class__.__name__}"
101
+ f"Initialized long term memory with provided backend instance {self._backend.__class__.__name__}, index={self.index}"
110
102
  )
111
103
  return
112
104
 
105
+ # Once user define backend config, use it directly
113
106
  if self.backend_config:
114
- logger.warning(
115
- f"Initialized long term memory backend {self.backend} with config. We will ignore `app_name` and `user_id` if provided."
116
- )
117
107
  self._backend = _get_backend_cls(self.backend)(**self.backend_config)
118
- _index = self.backend_config.get("index", None)
119
- if _index:
120
- self._index = _index
121
- logger.info(f"Long term memory index set to {self._index}.")
122
- else:
123
- logger.warning(
124
- "Cannot find index via backend_config, please set `index` parameter."
125
- )
126
108
  return
127
109
 
128
- if self.app_name and self.user_id:
129
- self._index = build_long_term_memory_index(
130
- app_name=self.app_name, user_id=self.user_id
131
- )
132
- logger.info(f"Long term memory index set to {self._index}.")
133
- self._backend = _get_backend_cls(self.backend)(
134
- index=self._index, **self.backend_config if self.backend_config else {}
110
+ # Check index
111
+ self.index = self.index or self.app_name
112
+ if not self.index:
113
+ logger.warning(
114
+ "Attribute `index` or `app_name` not provided, use `default_app` instead."
135
115
  )
136
- else:
116
+ self.index = "default_app"
117
+
118
+ # Forward compliance
119
+ if self.backend == "viking_mem":
137
120
  logger.warning(
138
- "Neither `backend_instance`, `backend_config`, nor (`app_name`/`user_id`) is provided, the long term memory storage will initialize when adding a session."
121
+ "The `viking_mem` backend is deprecated, change to `viking` instead."
139
122
  )
123
+ self.backend = "viking"
124
+
125
+ self._backend = _get_backend_cls(self.backend)(index=self.index)
126
+
127
+ logger.info(
128
+ f"Initialized long term memory with provided backend instance {self._backend.__class__.__name__}, index={self.index}"
129
+ )
140
130
 
141
131
  def _filter_and_convert_events(self, events: list[Event]) -> list[str]:
142
132
  final_events = []
@@ -164,75 +154,32 @@ class LongTermMemory(BaseMemoryService, BaseModel):
164
154
  self,
165
155
  session: Session,
166
156
  ):
167
- app_name = session.app_name
168
157
  user_id = session.user_id
169
-
170
- if not self._backend and isinstance(self.backend, str):
171
- self._index = build_long_term_memory_index(app_name, user_id)
172
- self._backend = _get_backend_cls(self.backend)(
173
- index=self._index, **self.backend_config if self.backend_config else {}
174
- )
175
- logger.info(
176
- f"Initialize long term memory backend now, index is {self._index}"
177
- )
178
-
179
- if not self._index and self._index != build_long_term_memory_index(
180
- app_name, user_id
181
- ):
182
- logger.warning(
183
- f"The `app_name` or `user_id` is different from the initialized one, skip add session to memory. Initialized index: {self._index}, current built index: {build_long_term_memory_index(app_name, user_id)}"
184
- )
185
- return
186
158
  event_strings = self._filter_and_convert_events(session.events)
187
159
 
188
160
  logger.info(
189
- f"Adding {len(event_strings)} events to long term memory: index={self._index}"
161
+ f"Adding {len(event_strings)} events to long term memory: index={self.index}"
162
+ )
163
+ self._backend.save_memory(user_id=user_id, event_strings=event_strings)
164
+ logger.info(
165
+ f"Added {len(event_strings)} events to long term memory: index={self.index}, user_id={user_id}"
190
166
  )
191
-
192
- if self._backend:
193
- self._backend.save_memory(event_strings=event_strings, user_id=user_id)
194
-
195
- logger.info(
196
- f"Added {len(event_strings)} events to long term memory: index={self._index}"
197
- )
198
- else:
199
- logger.error(
200
- "Long term memory backend initialize failed, cannot add session to memory."
201
- )
202
167
 
203
168
  @override
204
- async def search_memory(self, *, app_name: str, user_id: str, query: str):
205
- # prevent model invoke `load_memory` before add session to this memory
206
- if not self._backend and isinstance(self.backend, str):
207
- self._index = build_long_term_memory_index(app_name, user_id)
208
- self._backend = _get_backend_cls(self.backend)(
209
- index=self._index, **self.backend_config if self.backend_config else {}
210
- )
211
- logger.info(
212
- f"Initialize long term memory backend now, index is {self._index}"
213
- )
169
+ async def search_memory(
170
+ self, *, app_name: str, user_id: str, query: str
171
+ ) -> SearchMemoryResponse:
172
+ logger.info(f"Search memory with query={query}")
214
173
 
215
- if not self._index and self._index != build_long_term_memory_index(
216
- app_name, user_id
217
- ):
218
- logger.warning(
219
- f"The `app_name` or `user_id` is different from the initialized one. Initialized index: {self._index}, current built index: {build_long_term_memory_index(app_name, user_id)}. Search memory return empty list."
174
+ memory_chunks = []
175
+ try:
176
+ memory_chunks = self._backend.search_memory(
177
+ query=query, top_k=self.top_k, user_id=user_id
220
178
  )
221
- return SearchMemoryResponse(memories=[])
222
-
223
- if not self._backend:
179
+ except Exception as e:
224
180
  logger.error(
225
- "Long term memory backend is not initialized, cannot search memory."
181
+ f"Exception orrcus during memory search: {e}. Return empty memory chunks"
226
182
  )
227
- return SearchMemoryResponse(memories=[])
228
-
229
- logger.info(
230
- f"Searching long term memory: query={query} index={self._index} top_k={self.top_k}"
231
- )
232
-
233
- memory_chunks = self._backend.search_memory(
234
- query=query, top_k=self.top_k, user_id=user_id
235
- )
236
183
 
237
184
  memory_events = []
238
185
  for memory in memory_chunks:
@@ -260,6 +207,6 @@ class LongTermMemory(BaseMemoryService, BaseModel):
260
207
  )
261
208
 
262
209
  logger.info(
263
- f"Return {len(memory_events)} memory events for query: {query} index={self._index}"
210
+ f"Return {len(memory_events)} memory events for query: {query} index={self.index} user_id={user_id}"
264
211
  )
265
212
  return SearchMemoryResponse(memories=memory_events)
@@ -25,9 +25,11 @@ class BaseLongTermMemoryBackend(ABC, BaseModel):
25
25
  """Check the index name is valid or not"""
26
26
 
27
27
  @abstractmethod
28
- def save_memory(self, event_strings: list[str], **kwargs) -> bool:
28
+ def save_memory(self, user_id: str, event_strings: list[str], **kwargs) -> bool:
29
29
  """Save memory to long term memory backend"""
30
30
 
31
31
  @abstractmethod
32
- def search_memory(self, query: str, top_k: int, **kwargs) -> list[str]:
32
+ def search_memory(
33
+ self, user_id: str, query: str, top_k: int, **kwargs
34
+ ) -> list[str]:
33
35
  """Retrieve memory from long term memory backend"""