veadk-python 0.5.22__tar.gz → 0.5.23__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 (341) hide show
  1. {veadk_python-0.5.22/veadk_python.egg-info → veadk_python-0.5.23}/PKG-INFO +1 -1
  2. {veadk_python-0.5.22 → veadk_python-0.5.23}/pyproject.toml +1 -1
  3. veadk_python-0.5.23/veadk/knowledgebase/backends/context_search_backend.py +639 -0
  4. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/knowledgebase.py +9 -1
  5. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/skills/skill.py +1 -0
  6. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/skills/utils.py +13 -15
  7. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/apps/reverse_mcp/server_with_reverse_mcp.py +17 -2
  8. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/execute_skills.py +1 -0
  9. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/skills_tools/skills_tool.py +83 -1
  10. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/exporters/apmplus_exporter.py +8 -0
  11. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/version.py +1 -1
  12. {veadk_python-0.5.22 → veadk_python-0.5.23/veadk_python.egg-info}/PKG-INFO +1 -1
  13. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk_python.egg-info/SOURCES.txt +1 -0
  14. {veadk_python-0.5.22 → veadk_python-0.5.23}/LICENSE +0 -0
  15. {veadk_python-0.5.22 → veadk_python-0.5.23}/README.md +0 -0
  16. {veadk_python-0.5.22 → veadk_python-0.5.23}/setup.cfg +0 -0
  17. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_agent.py +0 -0
  18. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_cloud.py +0 -0
  19. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_evaluator.py +0 -0
  20. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_knowledgebase.py +0 -0
  21. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_long_term_memory.py +0 -0
  22. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_misc.py +0 -0
  23. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_multiple_agents.py +0 -0
  24. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_runner.py +0 -0
  25. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_runtime_data_collecting.py +0 -0
  26. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_short_term_memory.py +0 -0
  27. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_tracing.py +0 -0
  28. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_ve_a2a_middlewares.py +0 -0
  29. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_ve_identity_auth_config.py +0 -0
  30. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_ve_identity_function_tool.py +0 -0
  31. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_ve_identity_mcp_tool.py +0 -0
  32. {veadk_python-0.5.22 → veadk_python-0.5.23}/tests/test_ve_identity_mcp_toolset.py +0 -0
  33. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/__init__.py +0 -0
  34. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/__init__.py +0 -0
  35. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/agent_card.py +0 -0
  36. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/hub/__init__.py +0 -0
  37. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/hub/a2a_hub_client.py +0 -0
  38. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/hub/a2a_hub_server.py +0 -0
  39. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/hub/models.py +0 -0
  40. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/hub/rocketmq_middleware.py +0 -0
  41. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/remote_ve_agent.py +0 -0
  42. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/utils/__init__.py +0 -0
  43. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/utils/agent_to_a2a.py +0 -0
  44. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/ve_a2a_server.py +0 -0
  45. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/ve_agent_executor.py +0 -0
  46. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/ve_middlewares.py +0 -0
  47. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/a2a/ve_task_store.py +0 -0
  48. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/agent.py +0 -0
  49. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/agent_builder.py +0 -0
  50. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/agents/loop_agent.py +0 -0
  51. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/agents/parallel_agent.py +0 -0
  52. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/agents/sequential_agent.py +0 -0
  53. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/agents/supervise_agent.py +0 -0
  54. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/__init__.py +0 -0
  55. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/base_auth.py +0 -0
  56. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/middleware/__init__.py +0 -0
  57. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/middleware/oauth2_auth.py +0 -0
  58. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/ve_credential_service.py +0 -0
  59. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/__init__.py +0 -0
  60. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/apmplus_veauth.py +0 -0
  61. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/ark_veauth.py +0 -0
  62. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/base_veauth.py +0 -0
  63. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/cozeloop_veauth.py +0 -0
  64. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/mse_veauth.py +0 -0
  65. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/opensearch_veauth.py +0 -0
  66. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/postgresql_veauth.py +0 -0
  67. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/prompt_pilot_veauth.py +0 -0
  68. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/speech_veauth.py +0 -0
  69. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/utils.py +0 -0
  70. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/vesearch_veauth.py +0 -0
  71. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/auth/veauth/viking_mem0_veauth.py +0 -0
  72. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/__init__.py +0 -0
  73. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli.py +0 -0
  74. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_agentkit.py +0 -0
  75. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_clean.py +0 -0
  76. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_create.py +0 -0
  77. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_deploy.py +0 -0
  78. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_eval.py +0 -0
  79. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_init.py +0 -0
  80. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_kb.py +0 -0
  81. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_pipeline.py +0 -0
  82. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_prompt.py +0 -0
  83. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_rl.py +0 -0
  84. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_update.py +0 -0
  85. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_uploadevalset.py +0 -0
  86. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/cli_web.py +0 -0
  87. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/README.md +0 -0
  88. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/arkworkspace.toml +0 -0
  89. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/data/demo_dataset.jsonl +0 -0
  90. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/job.py +0 -0
  91. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/job.yaml +0 -0
  92. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/plugins/random_reward.py +0 -0
  93. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/plugins/raw_async_veadk_rollout.py +0 -0
  94. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/plugins/test_utils.py +0 -0
  95. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/requirements.txt +0 -0
  96. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/ark/test_faas.py +0 -0
  97. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/lightning/README.md +0 -0
  98. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/lightning/data/demo_test.parquet +0 -0
  99. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/lightning/data/demo_train.parquet +0 -0
  100. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/lightning/demo_calculate_agent.py +0 -0
  101. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/lightning/restart_ray.sh +0 -0
  102. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cli/templates/rl/lightning/train.sh +0 -0
  103. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cloud/__init__.py +0 -0
  104. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cloud/cloud_agent_engine.py +0 -0
  105. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/cloud/cloud_app.py +0 -0
  106. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/checkpoint/__init__.py +0 -0
  107. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/checkpoint/memory/__init__.py +0 -0
  108. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/middlewares/__init__.py +0 -0
  109. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/middlewares/save_session.py +0 -0
  110. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/models/__init__.py +0 -0
  111. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/models/ark_model.py +0 -0
  112. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/store/__init__.py +0 -0
  113. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/store/memory/__init__.py +0 -0
  114. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/store/memory/viking_memory.py +0 -0
  115. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/tools/__init__.py +0 -0
  116. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/tools/execute_skills.py +0 -0
  117. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/tools/load_knowledgebase.py +0 -0
  118. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/tools/load_memory.py +0 -0
  119. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/tools/run_code.py +0 -0
  120. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/community/langchain_ai/tools/web_search.py +0 -0
  121. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/config.py +0 -0
  122. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/configs/__init__.py +0 -0
  123. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/configs/auth_configs.py +0 -0
  124. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/configs/database_configs.py +0 -0
  125. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/configs/dynamic_config_manager.py +0 -0
  126. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/configs/model_configs.py +0 -0
  127. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/configs/tool_configs.py +0 -0
  128. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/configs/tracing_configs.py +0 -0
  129. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/consts.py +0 -0
  130. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/__init__.py +0 -0
  131. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/adk_evaluator/__init__.py +0 -0
  132. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/adk_evaluator/adk_evaluator.py +0 -0
  133. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/base_evaluator.py +0 -0
  134. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/deepeval_evaluator/__init__.py +0 -0
  135. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +0 -0
  136. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/eval_set_file_loader.py +0 -0
  137. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/eval_set_recorder.py +0 -0
  138. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/types.py +0 -0
  139. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/evaluation/utils/prometheus.py +0 -0
  140. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/examples/in_memory_example_store.py +0 -0
  141. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/examples/types.py +0 -0
  142. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/flows/__init__.py +0 -0
  143. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/flows/supervise_auto_flow.py +0 -0
  144. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/flows/supervise_single_flow.py +0 -0
  145. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/__init__.py +0 -0
  146. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_apig/__init__.py +0 -0
  147. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_apig/ve_apig.py +0 -0
  148. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_apig/ve_apig_utils.py +0 -0
  149. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_code_pipeline/__init__.py +0 -0
  150. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +0 -0
  151. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_cozeloop/__init__.py +0 -0
  152. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_cozeloop/ve_cozeloop.py +0 -0
  153. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_cr/__init__.py +0 -0
  154. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_cr/ve_cr.py +0 -0
  155. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/__init__.py +0 -0
  156. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/cookiecutter.json +0 -0
  157. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
  158. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
  159. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
  160. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
  161. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/__init__.py +0 -0
  162. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +0 -0
  163. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
  164. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
  165. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
  166. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/__init__.py +0 -0
  167. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/agent.py +0 -0
  168. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/ve_faas.py +0 -0
  169. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/ve_faas_utils.py +0 -0
  170. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/cookiecutter.json +0 -0
  171. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/__init__.py +0 -0
  172. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
  173. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
  174. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
  175. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +0 -0
  176. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
  177. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +0 -0
  178. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +0 -0
  179. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
  180. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
  181. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +0 -0
  182. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
  183. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +0 -0
  184. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +0 -0
  185. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +0 -0
  186. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +0 -0
  187. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +0 -0
  188. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +0 -0
  189. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +0 -0
  190. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/__init__.py +0 -0
  191. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/auth_config.py +0 -0
  192. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/auth_mixins.py +0 -0
  193. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/auth_processor.py +0 -0
  194. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/function_tool.py +0 -0
  195. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/identity_client.py +0 -0
  196. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/mcp_tool.py +0 -0
  197. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/mcp_toolset.py +0 -0
  198. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/models.py +0 -0
  199. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/token_manager.py +0 -0
  200. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_identity/utils.py +0 -0
  201. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_prompt_pilot/__init__.py +0 -0
  202. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +0 -0
  203. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_tls/__init__.py +0 -0
  204. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_tls/utils.py +0 -0
  205. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_tls/ve_tls.py +0 -0
  206. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_tos/ve_tos.py +0 -0
  207. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_viking_db_memory/__init__.py +0 -0
  208. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/integrations/ve_viking_db_memory/ve_viking_db_memory.py +0 -0
  209. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/__init__.py +0 -0
  210. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/backends/__init__.py +0 -0
  211. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/backends/base_backend.py +0 -0
  212. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/backends/in_memory_backend.py +0 -0
  213. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/backends/opensearch_backend.py +0 -0
  214. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/backends/redis_backend.py +0 -0
  215. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/backends/tos_vector_backend.py +0 -0
  216. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/backends/utils.py +0 -0
  217. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +0 -0
  218. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/entry.py +0 -0
  219. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/knowledgebase/types.py +0 -0
  220. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/__init__.py +0 -0
  221. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/long_term_memory.py +0 -0
  222. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/long_term_memory_backends/__init__.py +0 -0
  223. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/long_term_memory_backends/base_backend.py +0 -0
  224. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/long_term_memory_backends/in_memory_backend.py +0 -0
  225. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/long_term_memory_backends/mem0_backend.py +0 -0
  226. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/long_term_memory_backends/opensearch_backend.py +0 -0
  227. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/long_term_memory_backends/redis_backend.py +0 -0
  228. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +0 -0
  229. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/save_session_callback.py +0 -0
  230. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/short_term_memory.py +0 -0
  231. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/short_term_memory_backends/__init__.py +0 -0
  232. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/short_term_memory_backends/base_backend.py +0 -0
  233. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/short_term_memory_backends/mysql_backend.py +0 -0
  234. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/short_term_memory_backends/postgresql_backend.py +0 -0
  235. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/short_term_memory_backends/sqlite_backend.py +0 -0
  236. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/short_term_memory_processor.py +0 -0
  237. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/memory/types.py +0 -0
  238. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/models/__init__.py +0 -0
  239. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/models/ark_embedding.py +0 -0
  240. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/models/ark_llm.py +0 -0
  241. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/processors/__init__.py +0 -0
  242. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/processors/base_run_processor.py +0 -0
  243. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/prompts/__init__.py +0 -0
  244. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/prompts/agent_default_prompt.py +0 -0
  245. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/prompts/prompt_evaluator.py +0 -0
  246. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/prompts/prompt_manager.py +0 -0
  247. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/prompts/prompt_memory_processor.py +0 -0
  248. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/prompts/prompt_optimization.py +0 -0
  249. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/realtime/__init__.py +0 -0
  250. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/realtime/client.py +0 -0
  251. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/realtime/doubao_realtime_voice_llm.py +0 -0
  252. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/realtime/doubao_realtime_voice_llm_connection.py +0 -0
  253. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/realtime/live.py +0 -0
  254. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/realtime/protocol.py +0 -0
  255. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/reflector/__init__.py +0 -0
  256. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/reflector/base_reflector.py +0 -0
  257. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/reflector/local_reflector.py +0 -0
  258. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/runner.py +0 -0
  259. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/skills/__init__.py +0 -0
  260. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/skills/check_skills_callback.py +0 -0
  261. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/__init__.py +0 -0
  262. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/apps/__init__.py +0 -0
  263. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/apps/reverse_mcp/__init__.py +0 -0
  264. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/apps/reverse_mcp/client_with_reverse_mcp.py +0 -0
  265. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/audio/__init__.py +0 -0
  266. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/audio/asr/__init__.py +0 -0
  267. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/audio/asr/asr_client.py +0 -0
  268. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/audio/tts/__init__.py +0 -0
  269. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/audio/tts/protocols.py +0 -0
  270. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/audio/tts/tts_client.py +0 -0
  271. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/toolkits/dataset_auto_gen_callback.py +0 -0
  272. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/__init__.py +0 -0
  273. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/__init__.py +0 -0
  274. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/agent_authorization.py +0 -0
  275. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/generate_image.py +0 -0
  276. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/image_edit.py +0 -0
  277. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/image_generate.py +0 -0
  278. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/lark.py +0 -0
  279. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/las.py +0 -0
  280. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/link_reader.py +0 -0
  281. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/llm_shield.py +0 -0
  282. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/load_kb_queries.py +0 -0
  283. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/load_knowledgebase.py +0 -0
  284. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/mcp_router.py +0 -0
  285. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/mobile_run.py +0 -0
  286. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/parallel_web_search.py +0 -0
  287. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/playwright.py +0 -0
  288. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/run_code.py +0 -0
  289. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/supabase_toolset.py +0 -0
  290. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/tts.py +0 -0
  291. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/vesearch.py +0 -0
  292. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/video_generate.py +0 -0
  293. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/vod.py +0 -0
  294. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/web_scraper.py +0 -0
  295. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/builtin_tools/web_search.py +0 -0
  296. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/demo_tools.py +0 -0
  297. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/ghost_char.py +0 -0
  298. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/load_history_events.py +0 -0
  299. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/load_knowledgebase_tool.py +0 -0
  300. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/mcp_tool/__init__.py +0 -0
  301. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/mcp_tool/trusted_mcp_session_manager.py +0 -0
  302. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/mcp_tool/trusted_mcp_toolset.py +0 -0
  303. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/sandbox/__init__.py +0 -0
  304. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/sandbox/browser_sandbox.py +0 -0
  305. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/sandbox/code_sandbox.py +0 -0
  306. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/sandbox/computer_sandbox.py +0 -0
  307. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/skills_tools/__init__.py +0 -0
  308. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/skills_tools/bash_tool.py +0 -0
  309. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/skills_tools/download_skills_tool.py +0 -0
  310. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/skills_tools/file_tool.py +0 -0
  311. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/skills_tools/register_skills_tool.py +0 -0
  312. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/skills_tools/session_path.py +0 -0
  313. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tools/skills_tools/skills_toolset.py +0 -0
  314. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/__init__.py +0 -0
  315. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/base_tracer.py +0 -0
  316. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/__init__.py +0 -0
  317. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/attributes/attributes.py +0 -0
  318. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +0 -0
  319. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +0 -0
  320. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/attributes/extractors/tool_attributes_extractors.py +0 -0
  321. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/attributes/extractors/types.py +0 -0
  322. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/exporters/__init__.py +0 -0
  323. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/exporters/base_exporter.py +0 -0
  324. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/exporters/cozeloop_exporter.py +0 -0
  325. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/exporters/inmemory_exporter.py +0 -0
  326. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/exporters/tls_exporter.py +0 -0
  327. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/opentelemetry_tracer.py +0 -0
  328. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/tracing/telemetry/telemetry.py +0 -0
  329. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/types.py +0 -0
  330. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/utils/__init__.py +0 -0
  331. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/utils/audio_manager.py +0 -0
  332. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/utils/auth.py +0 -0
  333. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/utils/logger.py +0 -0
  334. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/utils/mcp_utils.py +0 -0
  335. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/utils/misc.py +0 -0
  336. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/utils/patches.py +0 -0
  337. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk/utils/volcengine_sign.py +0 -0
  338. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk_python.egg-info/dependency_links.txt +0 -0
  339. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk_python.egg-info/entry_points.txt +0 -0
  340. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk_python.egg-info/requires.txt +0 -0
  341. {veadk_python-0.5.22 → veadk_python-0.5.23}/veadk_python.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: veadk-python
3
- Version: 0.5.22
3
+ Version: 0.5.23
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.5.22"
3
+ version = "0.5.23"
4
4
  description = "Volcengine agent development kit, integrations with Volcengine cloud services."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -0,0 +1,639 @@
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
+ import uuid
18
+ import tempfile
19
+ import shutil
20
+ from typing import Any
21
+ from urllib.parse import urlparse
22
+ from pathlib import Path
23
+ from pydantic import Field
24
+ from typing_extensions import override
25
+
26
+ import veadk.config # noqa E401
27
+ from veadk.knowledgebase.backends.base_backend import BaseKnowledgebaseBackend
28
+ from veadk.utils.logger import get_logger
29
+ from veadk.utils.volcengine_sign import ve_request
30
+ import requests
31
+
32
+ logger = get_logger(__name__)
33
+
34
+
35
+ class ContextSearchBackend(BaseKnowledgebaseBackend):
36
+ """Context Search backend implementation for knowledge base operations.
37
+
38
+ This backend integrates with Volcengine Context Search service to provide
39
+ document indexing, storage, and semantic search capabilities. It supports
40
+ multiple data sources including files, directories, and raw text.
41
+
42
+ Attributes:
43
+ volcengine_access_key: Volcengine access key for API authentication.
44
+ volcengine_secret_key: Volcengine secret key for API authentication.
45
+ volcengine_session_token: Optional session token for temporary credentials.
46
+ context_search_region: Region where the Context Search service is deployed.
47
+ context_search_project: Project name in Context Search.
48
+ context_search_engine_id: Engine ID for the search endpoint.
49
+ context_search_engine_endpoint: Full URL of the search endpoint.
50
+ context_search_engine_apikey: API key for search operations.
51
+ context_search_service: Service identifier for API requests.
52
+ context_search_version: API version string.
53
+ context_search_host: Hostname for the Context Search API.
54
+ context_search_scheme: Protocol scheme (http or https).
55
+
56
+ Example:
57
+ >>> backend = ContextSearchBackend(
58
+ ... index="123456789",
59
+ ... volcengine_access_key="your-ak",
60
+ ... volcengine_secret_key="your-sk",
61
+ ... )
62
+ >>> backend.add_from_text("Sample document content")
63
+ >>> results = backend.search("query", top_k=5)
64
+
65
+ Note:
66
+ Configuration can be provided via constructor parameters or environment
67
+ variables. Environment variables take precedence over config file values.
68
+ """
69
+
70
+ volcengine_access_key: str | None = Field(
71
+ default_factory=lambda: os.getenv("VOLCENGINE_ACCESS_KEY")
72
+ )
73
+ volcengine_secret_key: str | None = Field(
74
+ default_factory=lambda: os.getenv("VOLCENGINE_SECRET_KEY")
75
+ )
76
+ volcengine_session_token: str | None = Field(
77
+ default_factory=lambda: os.getenv("VOLCENGINE_SESSION_TOKEN")
78
+ )
79
+
80
+ context_search_region: str | None = Field(
81
+ default_factory=lambda: os.getenv("DATABASE_CONTEXT_SEARCH_REGION")
82
+ )
83
+ context_search_project: str | None = Field(
84
+ default_factory=lambda: os.getenv("DATABASE_CONTEXT_SEARCH_PROJECT")
85
+ )
86
+ context_search_engine_id: str | None = Field(
87
+ default_factory=lambda: os.getenv("DATABASE_CONTEXT_SEARCH_ENGINE_ID")
88
+ )
89
+ context_search_engine_endpoint: str | None = Field(
90
+ default_factory=lambda: os.getenv("DATABASE_CONTEXT_SEARCH_ENGINE_ENDPOINT")
91
+ )
92
+ context_search_engine_apikey: str | None = Field(
93
+ default_factory=lambda: os.getenv("DATABASE_CONTEXT_SEARCH_ENGINE_APIKEY")
94
+ )
95
+
96
+ context_search_service: str = "ctxsearch"
97
+ context_search_version: str = "2025-09-01"
98
+ context_search_host: str = "ctxsearch.volcengineapi.com"
99
+ context_search_scheme: str = "https"
100
+
101
+ def model_post_init(self, __context: Any) -> None:
102
+ """Initialize additional attributes after model instantiation.
103
+
104
+ This method is automatically called after the model is initialized.
105
+ It handles cloud provider-specific configurations and sets default
106
+ values for region and project if not provided.
107
+
108
+ Args:
109
+ __context: Pydantic internal context (unused).
110
+ """
111
+ provider = (os.getenv("CLOUD_PROVIDER") or "").lower()
112
+ is_byteplus = provider == "byteplus"
113
+ if is_byteplus and "volcengineapi.com" in self.context_search_host:
114
+ self.context_search_host = self.context_search_host.replace(
115
+ "volcengineapi.com",
116
+ "byteplusapi.com",
117
+ )
118
+ if not self.context_search_region:
119
+ self.context_search_region = (
120
+ "ap-southeast-1" if is_byteplus else "cn-beijing"
121
+ )
122
+ if not self.context_search_project:
123
+ self.context_search_project = "default"
124
+
125
+ def _get_scene_id(self) -> str:
126
+ """Retrieve the scene ID for Context Search operations.
127
+
128
+ Returns the scene identifier used for API requests. Prefers
129
+ context_search_engine_id if set, otherwise falls back to index.
130
+
131
+ Returns:
132
+ str: The scene ID as a numeric string.
133
+ """
134
+ return self.context_search_engine_id or self.index
135
+
136
+ def _do_request(
137
+ self,
138
+ action: str,
139
+ method: str = "POST",
140
+ query: dict | None = None,
141
+ request_body: dict | None = None,
142
+ ) -> dict:
143
+ """Execute a signed request to the Context Search API.
144
+
145
+ This internal method handles the authentication and communication
146
+ with the Context Search service. It automatically signs requests
147
+ using Volcengine credentials and handles error responses.
148
+
149
+ Args:
150
+ action: The API action/operation name (e.g., "GetScene", "AddSceneData").
151
+ method: HTTP method for the request. Defaults to "POST".
152
+ query: Optional query parameters for GET requests.
153
+ request_body: Optional JSON body for POST/PUT requests.
154
+
155
+ Returns:
156
+ dict: The "Result" field from the API response.
157
+
158
+ Raises:
159
+ ValueError: If the API returns an error response.
160
+
161
+ Example:
162
+ >>> result = self._do_request(
163
+ ... action="GetScene",
164
+ ... method="GET",
165
+ ... query={"Project": "default", "Id": "12345"}
166
+ ... )
167
+ """
168
+ header = {}
169
+ if self.volcengine_session_token:
170
+ header["X-Security-Token"] = self.volcengine_session_token
171
+
172
+ res = ve_request(
173
+ request_body=request_body or {},
174
+ action=action,
175
+ ak=self.volcengine_access_key,
176
+ sk=self.volcengine_secret_key,
177
+ service=self.context_search_service,
178
+ version=self.context_search_version,
179
+ region=self.context_search_region,
180
+ host=self.context_search_host,
181
+ scheme=self.context_search_scheme,
182
+ query=query or {},
183
+ header=header,
184
+ method=method,
185
+ )
186
+
187
+ if res.get("ResponseMetadata", {}).get("Error"):
188
+ error = res["ResponseMetadata"]["Error"]
189
+ raise ValueError(
190
+ f"Context Search API Error (Action: {action}): {error.get('Message')} (Code: {error.get('Code')})"
191
+ )
192
+
193
+ return res.get("Result")
194
+
195
+ @override
196
+ def precheck_index_naming(self) -> None:
197
+ """Validate the index format and verify its existence in Context Search.
198
+
199
+ This method performs two checks:
200
+ 1. Validates that the scene ID is a numeric string (required by Context Search)
201
+ 2. Makes an API call to verify the scene exists and is accessible
202
+
203
+ Raises:
204
+ ValueError: If the scene ID is not a numeric string or if the scene
205
+ does not exist in Context Search.
206
+
207
+ Example:
208
+ >>> backend = ContextSearchBackend(index="123456789", ...)
209
+ >>> backend.precheck_index_naming() # Validates and verifies the scene
210
+ # Logs: Successfully verified index '123456789' via GetScene.
211
+ """
212
+ scene_id = self._get_scene_id()
213
+ if not (isinstance(scene_id, str) and scene_id.isdigit()):
214
+ raise ValueError(
215
+ f"The index name (Scene Id) must be a numeric string (long), got: {scene_id}"
216
+ )
217
+
218
+ self._do_request(
219
+ action="GetScene",
220
+ method="GET",
221
+ query={
222
+ "Project": self.context_search_project,
223
+ "SceneType": "RAG",
224
+ "Id": scene_id,
225
+ },
226
+ )
227
+
228
+ logger.info(f"Successfully verified index '{scene_id}' via GetScene.")
229
+
230
+ @override
231
+ def add_from_directory(self, directory: str, *args, **kwargs) -> bool:
232
+ """Index all files from a directory into the knowledge base.
233
+
234
+ Recursively scans the specified directory and indexes all files found.
235
+ The files are uploaded to Context Search for processing and embedding.
236
+
237
+ Args:
238
+ directory: Path to the directory containing files to index.
239
+ *args: Additional positional arguments passed to add_from_files.
240
+ **kwargs: Additional keyword arguments passed to add_from_files.
241
+
242
+ Returns:
243
+ bool: True if all files were successfully queued for indexing.
244
+
245
+ Raises:
246
+ ValueError: If the directory does not exist, is not a directory,
247
+ or contains no files.
248
+
249
+ Example:
250
+ >>> backend.add_from_directory("/path/to/documents")
251
+ # Indexes all files in the directory recursively
252
+ """
253
+ logger.info(f"Adding from directory: {directory}")
254
+ dir_path = Path(directory)
255
+ if not dir_path.exists() or not dir_path.is_dir():
256
+ raise ValueError(f"Directory not found: {directory}")
257
+ files = [str(path) for path in dir_path.rglob("*") if path.is_file()]
258
+ if not files:
259
+ raise ValueError(f"No files found in directory: {directory}")
260
+ return self.add_from_files(files, *args, **kwargs)
261
+
262
+ @override
263
+ def add_from_files(self, files: list[str], *args, **kwargs) -> bool:
264
+ """Index a list of files into the knowledge base.
265
+
266
+ Uploads files to Context Search for processing and embedding generation.
267
+ The upload process involves:
268
+ 1. Validating all files exist
269
+ 2. Obtaining pre-signed upload URLs from Context Search
270
+ 3. Uploading files directly to TOS (Volcengine Object Storage)
271
+ 4. Registering the uploaded files with Context Search for indexing
272
+
273
+ Note:
274
+ This operation is asynchronous. Files are queued for indexing and
275
+ may not be immediately searchable. Use search() after a reasonable
276
+ delay to allow indexing to complete.
277
+
278
+ Args:
279
+ files: List of file paths to index.
280
+ *args: Additional positional arguments (reserved for future use).
281
+ **kwargs: Additional keyword arguments (reserved for future use).
282
+
283
+ Returns:
284
+ bool: True if files were successfully uploaded and queued for indexing.
285
+
286
+ Raises:
287
+ ValueError: If any file does not exist or if the upload fails.
288
+
289
+ Example:
290
+ >>> files = ["/docs/doc1.pdf", "/docs/doc2.txt"]
291
+ >>> backend.add_from_files(files)
292
+ # Files uploaded asynchronously. Wait for Context Search indexing...
293
+ """
294
+ logger.info(f"Adding from files: {files}")
295
+ self._validate_files(files)
296
+
297
+ uuid_prefix, upload_infos = self._get_upload_url(files)
298
+ file_info_list = []
299
+ for upload in upload_infos:
300
+ file_path = upload.get("file_path")
301
+ tos_path = upload.get("tos_path")
302
+ upload_url = upload.get("upload_url")
303
+ headers = upload.get("headers") or {}
304
+ self._upload_file(file_path, upload_url, headers)
305
+ file_info_list.append(
306
+ json.dumps(
307
+ {
308
+ "file_path": tos_path,
309
+ }
310
+ )
311
+ )
312
+
313
+ self._do_request(
314
+ action="AddSceneData",
315
+ method="POST",
316
+ request_body={
317
+ "Project": self.context_search_project,
318
+ "SceneType": "RAG",
319
+ "SceneId": self._get_scene_id(),
320
+ "Type": "LOCAL",
321
+ "FileInfoList": file_info_list,
322
+ "TosConfig": {
323
+ "Prefix": uuid_prefix,
324
+ },
325
+ },
326
+ )
327
+
328
+ logger.info(
329
+ f"Files uploaded asynchronously. Wait for Context Search indexing to complete before searching. files={files}"
330
+ )
331
+
332
+ return True
333
+
334
+ @override
335
+ def add_from_text(self, text: str | list[str], *args, **kwargs) -> bool:
336
+ """Index raw text content into the knowledge base.
337
+
338
+ Converts text content into temporary files and indexes them. This is useful
339
+ for indexing content that is generated dynamically or retrieved from
340
+ external sources without persisting to disk first.
341
+
342
+ Note:
343
+ Temporary files are created in a system temp directory and are
344
+ automatically cleaned up after indexing, regardless of success or failure.
345
+
346
+ Args:
347
+ text: Single text string or list of text strings to index.
348
+ *args: Additional positional arguments passed to add_from_files.
349
+ **kwargs: Additional keyword arguments passed to add_from_files.
350
+
351
+ Returns:
352
+ bool: True if text was successfully queued for indexing.
353
+
354
+ Raises:
355
+ ValueError: If text is empty or if file operations fail.
356
+
357
+ Example:
358
+ >>> backend.add_from_text("This is a sample document.")
359
+ >>> backend.add_from_text(["Doc 1 content", "Doc 2 content"])
360
+ """
361
+ if isinstance(text, str):
362
+ texts = [text]
363
+ else:
364
+ texts = text
365
+
366
+ file_paths = []
367
+ temp_dir = tempfile.mkdtemp()
368
+ try:
369
+ for i, t in enumerate(texts):
370
+ file_path = Path(temp_dir) / f"text_{uuid.uuid4().hex}_{i}.txt"
371
+ with open(file_path, "w", encoding="utf-8") as f:
372
+ f.write(t)
373
+ file_paths.append(str(file_path))
374
+
375
+ return self.add_from_files(file_paths, *args, **kwargs)
376
+ finally:
377
+ shutil.rmtree(temp_dir)
378
+
379
+ @override
380
+ def search(self, query: str, top_k: int = 5) -> list[str]:
381
+ """Perform semantic search against the indexed knowledge base.
382
+
383
+ Sends a search query to the Context Search engine and returns relevant
384
+ document chunks based on semantic similarity. The search uses the
385
+ configured engine endpoint and API key for authentication.
386
+
387
+ Args:
388
+ query: The search query string.
389
+ top_k: Maximum number of results to return. Defaults to 5.
390
+
391
+ Returns:
392
+ list[str]: List of document content strings matching the query,
393
+ ordered by relevance (most relevant first).
394
+
395
+ Raises:
396
+ ValueError: If the engine endpoint or API key is not configured,
397
+ if the API returns an error, or if the response is invalid.
398
+
399
+ Example:
400
+ >>> results = backend.search("machine learning", top_k=3)
401
+ >>> for doc in results:
402
+ ... print(doc)
403
+ """
404
+ if not self.context_search_engine_endpoint:
405
+ raise ValueError("Context Search engine endpoint is not set.")
406
+ if not self.context_search_engine_apikey:
407
+ raise ValueError("Context Search engine apikey is not set.")
408
+
409
+ headers = {
410
+ "Content-Type": "application/json",
411
+ "Authorization": f"Bearer {self.context_search_engine_apikey}",
412
+ }
413
+ url = f"{self.context_search_engine_endpoint}/v2/search"
414
+ json_data = {"text": query, "size": top_k}
415
+ response = requests.post(url, json=json_data, headers=headers)
416
+ try:
417
+ result = response.json()
418
+ except ValueError:
419
+ text = response.text.strip()
420
+ raise ValueError(
421
+ f"Context Search response is not JSON. status={response.status_code}, body={text[:500]}"
422
+ )
423
+ if result.get("error"):
424
+ raise ValueError(result.get("error").get("message"))
425
+ return [
426
+ doc.get("content").get("sys.content") or ""
427
+ for doc in result.get("documents", [])
428
+ ]
429
+
430
+ def _get_upload_url(self, files: list[str]) -> tuple[str, list[dict]]:
431
+ """Obtain pre-signed upload URLs for file indexing.
432
+
433
+ Requests upload URLs from Context Search API for the specified files.
434
+ The returned URLs are pre-signed for direct upload to TOS (Volcengine
435
+ Object Storage) without requiring additional authentication.
436
+
437
+ Args:
438
+ files: List of file paths to be uploaded.
439
+
440
+ Returns:
441
+ tuple[str, list[dict]]: A tuple containing:
442
+ - UUID prefix string used for organizing uploads
443
+ - List of upload information dictionaries with keys:
444
+ file_path, file_name, upload_url, tos_path, headers
445
+
446
+ Raises:
447
+ ValueError: If the files list is empty or if the API response
448
+ is missing required upload information.
449
+
450
+ Note:
451
+ This is an internal method typically called by add_from_files().
452
+ """
453
+ if not files:
454
+ raise ValueError("Files list is empty.")
455
+
456
+ uuid_prefix = str(uuid.uuid4())
457
+ res = self._do_request(
458
+ action="GetIndexerUploadFileInfo",
459
+ method="POST",
460
+ request_body={
461
+ "UuidPrefix": uuid_prefix,
462
+ "SseEnabled": False,
463
+ "FileInfos": self._build_file_infos(files),
464
+ },
465
+ )
466
+ upload_file_infos = res.get("UploadFileInfos") or []
467
+ if not upload_file_infos:
468
+ raise ValueError("UploadFileInfos is empty.")
469
+
470
+ results = []
471
+ for index, info in enumerate(upload_file_infos):
472
+ upload_url = info.get("UploadUrl")
473
+ if not upload_url:
474
+ raise ValueError("UploadUrl is missing in UploadFileInfos.")
475
+ if index >= len(files):
476
+ raise ValueError("UploadFileInfos size does not match files list.")
477
+ file_path = files[index]
478
+ file_name = os.path.basename(file_path)
479
+ tos_path = self._build_tos_path(upload_url, file_path)
480
+ results.append(
481
+ {
482
+ "file_path": file_path,
483
+ "file_name": file_name,
484
+ "upload_url": upload_url,
485
+ "tos_path": tos_path,
486
+ "headers": self._normalize_headers(info.get("Headers")),
487
+ }
488
+ )
489
+ return uuid_prefix, results
490
+
491
+ def _validate_files(self, files: list[str]) -> None:
492
+ """Validate that all files in the list exist and are accessible.
493
+
494
+ Performs existence checks on all file paths before attempting upload.
495
+ This prevents partial uploads and provides clear error messages for
496
+ missing files.
497
+
498
+ Args:
499
+ files: List of file paths to validate.
500
+
501
+ Raises:
502
+ ValueError: If the files list is empty or if any file does not exist.
503
+
504
+ Note:
505
+ This is an internal method called by add_from_files() to ensure
506
+ all files are available before initiating the upload process.
507
+ """
508
+ if not files:
509
+ raise ValueError("Files list is empty.")
510
+ for path in files:
511
+ if not Path(path).exists():
512
+ raise ValueError(f"File not found: {path}")
513
+
514
+ def _build_file_infos(self, files: list[str]) -> list[dict]:
515
+ """Build file metadata for upload requests.
516
+
517
+ Extracts file name and size information required by the Context Search
518
+ API when requesting upload URLs.
519
+
520
+ Args:
521
+ files: List of file paths to extract metadata from.
522
+
523
+ Returns:
524
+ list[dict]: List of file info dictionaries containing:
525
+ - Name: The base filename
526
+ - Size: File size in bytes
527
+
528
+ Note:
529
+ This is an internal method used by _get_upload_url() to construct
530
+ the request body for the GetIndexerUploadFileInfo API call.
531
+ """
532
+ return [
533
+ {
534
+ "Name": os.path.basename(file),
535
+ "Size": os.path.getsize(file),
536
+ }
537
+ for file in files
538
+ ]
539
+
540
+ def _normalize_headers(self, headers: object) -> dict:
541
+ """Normalize HTTP headers from various formats to a dictionary.
542
+
543
+ Context Search API may return headers in different formats (dict or list
544
+ of key-value pairs). This method normalizes them into a standard
545
+ dictionary format for use with the requests library.
546
+
547
+ Args:
548
+ headers: Headers in various formats (None, dict, or list of dicts).
549
+ List format may contain {"Key": "...", "Value": "..."} objects
550
+ or direct key-value mappings.
551
+
552
+ Returns:
553
+ dict: Normalized headers as a dictionary mapping header names to values.
554
+
555
+ Raises:
556
+ ValueError: If headers is in an unrecognized format.
557
+
558
+ Note:
559
+ This is an internal method used by _get_upload_url() to process
560
+ the Headers field from the GetIndexerUploadFileInfo API response.
561
+ """
562
+ if not headers:
563
+ return {}
564
+ if isinstance(headers, dict):
565
+ return headers
566
+ if not isinstance(headers, list):
567
+ raise ValueError("Headers format is invalid.")
568
+ normalized_headers: dict[str, str] = {}
569
+ for item in headers:
570
+ if not isinstance(item, dict):
571
+ continue
572
+ if "Key" in item and "Value" in item:
573
+ normalized_headers[item["Key"]] = item["Value"]
574
+ continue
575
+ for key, value in item.items():
576
+ normalized_headers[key] = value
577
+ return normalized_headers
578
+
579
+ def _upload_file(self, file_path: str, upload_url: str, headers: dict) -> None:
580
+ """Upload a single file to TOS using a pre-signed URL.
581
+
582
+ Performs a direct HTTP PUT upload to Volcengine Object Storage (TOS)
583
+ using a pre-signed URL obtained from Context Search. The pre-signed
584
+ URL contains temporary authentication credentials.
585
+
586
+ Args:
587
+ file_path: Local path to the file to upload.
588
+ upload_url: Pre-signed URL for uploading to TOS.
589
+ headers: HTTP headers required for the upload (e.g., Content-Type).
590
+
591
+ Raises:
592
+ ValueError: If the upload fails (non-2xx status code).
593
+
594
+ Note:
595
+ This is an internal method called by add_from_files() for each file.
596
+ The file is opened in binary mode and streamed to minimize memory usage.
597
+ """
598
+ with open(file_path, "rb") as file_handle:
599
+ response = requests.put(upload_url, data=file_handle, headers=headers)
600
+ if response.status_code not in (200, 201, 204):
601
+ raise ValueError(
602
+ f"Upload failed for {file_path}: {response.status_code} {response.text}"
603
+ )
604
+
605
+ def _build_tos_path(self, upload_url: str, file_path: str) -> str:
606
+ """Construct a TOS (Tinder Object Storage) URI from an upload URL.
607
+
608
+ Parses the pre-signed upload URL to extract the bucket name and object
609
+ key prefix, then constructs a TOS URI in the format:
610
+ tos://{bucket}/{prefix}/{filename}
611
+
612
+ Args:
613
+ upload_url: The pre-signed URL from Context Search API.
614
+ file_path: Original local file path (used for filename extraction).
615
+
616
+ Returns:
617
+ str: TOS URI in the format "tos://bucket/prefix/filename".
618
+
619
+ Raises:
620
+ ValueError: If the upload URL is missing hostname or path components.
621
+
622
+ Example:
623
+ >>> url = "https://mybucket.tos-cn-beijing.volces.com/prefix/obj?token=xxx"
624
+ >>> backend._build_tos_path(url, "/local/path/file.txt")
625
+ 'tos://mybucket/prefix/file.txt'
626
+
627
+ Note:
628
+ This is an internal method used by _get_upload_url() to construct
629
+ the TOS path for registering uploaded files with Context Search.
630
+ """
631
+ parsed_url = urlparse(upload_url)
632
+ hostname = parsed_url.hostname or ""
633
+ if not hostname:
634
+ raise ValueError("UploadUrl hostname is missing.")
635
+ bucket = hostname.split(".")[0]
636
+ path_segments = parsed_url.path.lstrip("/").split("/")
637
+ if not path_segments or not path_segments[0]:
638
+ raise ValueError("UploadUrl path is missing.")
639
+ return f"tos://{bucket}/{path_segments[0]}/{os.path.basename(file_path)}"
@@ -59,6 +59,12 @@ def _get_backend_cls(backend: str) -> type[BaseKnowledgebaseBackend]:
59
59
  )
60
60
 
61
61
  return VikingDBKnowledgeBackend
62
+ case "context_search":
63
+ from veadk.knowledgebase.backends.context_search_backend import (
64
+ ContextSearchBackend,
65
+ )
66
+
67
+ return ContextSearchBackend
62
68
  case _:
63
69
  raise ValueError(f"Unsupported knowledgebase backend: {backend}")
64
70
  except ImportError as e:
@@ -102,7 +108,9 @@ class KnowledgeBase(BaseModel):
102
108
  description: str = "This knowledgebase stores some user-related information."
103
109
 
104
110
  backend: Union[
105
- Literal["local", "opensearch", "viking", "redis", "tos_vector"],
111
+ Literal[
112
+ "local", "opensearch", "viking", "redis", "tos_vector", "context_search"
113
+ ],
106
114
  BaseKnowledgebaseBackend,
107
115
  ] = "local"
108
116
 
@@ -23,6 +23,7 @@ class Skill(BaseModel):
23
23
  skill_space_id: Optional[str] = None
24
24
  bucket_name: Optional[str] = None
25
25
  checklist: List[Dict[str, str]] = []
26
+ id: Optional[str] = None
26
27
 
27
28
  def get_checklist_items(self) -> List[str]:
28
29
  return [item.get("item", item.get("id", "")) for item in self.checklist]