veadk-python 0.2.9__tar.gz → 0.2.10__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.
- {veadk_python-0.2.9 → veadk_python-0.2.10}/PKG-INFO +3 -3
- {veadk_python-0.2.9 → veadk_python-0.2.10}/pyproject.toml +4 -7
- veadk_python-0.2.10/veadk/a2a/remote_ve_agent.py +90 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/agent.py +3 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/agent_builder.py +2 -3
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cli/cli.py +2 -0
- veadk_python-0.2.10/veadk/cli/cli_kb.py +75 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cli/cli_web.py +4 -0
- veadk_python-0.2.10/veadk/integrations/ve_viking_db_memory/ve_viking_db_memory.py +293 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/__init__.py +1 -1
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/long_term_memory.py +25 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/long_term_memory_backends/mem0_backend.py +17 -2
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +4 -8
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/short_term_memory.py +9 -3
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/short_term_memory_backends/postgresql_backend.py +3 -1
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/runner.py +23 -8
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/generate_image.py +50 -16
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/image_edit.py +9 -4
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/image_generate.py +9 -4
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/video_generate.py +6 -6
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/web_search.py +10 -3
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/load_knowledgebase_tool.py +12 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +5 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/attributes/extractors/tool_attributes_extractors.py +7 -0
- veadk_python-0.2.10/veadk/tracing/telemetry/exporters/__init__.py +13 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/exporters/apmplus_exporter.py +82 -2
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/exporters/inmemory_exporter.py +8 -2
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/telemetry.py +41 -5
- veadk_python-0.2.10/veadk/utils/__init__.py +13 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/version.py +1 -1
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk_python.egg-info/PKG-INFO +3 -3
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk_python.egg-info/SOURCES.txt +4 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk_python.egg-info/requires.txt +2 -2
- veadk_python-0.2.9/veadk/a2a/remote_ve_agent.py +0 -33
- {veadk_python-0.2.9 → veadk_python-0.2.10}/LICENSE +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/README.md +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/setup.cfg +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_agent.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_cloud.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_evaluator.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_knowledgebase.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_long_term_memory.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_multiple_agents.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_runner.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_runtime_data_collecting.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_short_term_memory.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/tests/test_tracing.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/a2a/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/a2a/agent_card.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/a2a/ve_a2a_server.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/a2a/ve_agent_executor.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/a2a/ve_task_store.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/agents/loop_agent.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/agents/parallel_agent.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/agents/sequential_agent.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/base_auth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/apmplus_veauth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/ark_veauth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/base_veauth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/cozeloop_veauth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/opensearch_veauth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/postgresql_veauth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/prompt_pilot_veauth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/auth/veauth/vesearch_veauth.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cli/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cli/cli_deploy.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cli/cli_eval.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cli/cli_init.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cli/cli_pipeline.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cli/cli_prompt.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cloud/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cloud/cloud_agent_engine.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/cloud/cloud_app.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/config.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/configs/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/configs/database_configs.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/configs/model_configs.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/configs/tool_configs.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/configs/tracing_configs.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/consts.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/adk_evaluator/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/adk_evaluator/adk_evaluator.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/base_evaluator.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/deepeval_evaluator/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/eval_set_file_loader.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/eval_set_recorder.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/types.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/evaluation/utils/prometheus.py +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_apig → veadk_python-0.2.10/veadk/integrations}/__init__.py +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_code_pipeline → veadk_python-0.2.10/veadk/integrations/ve_apig}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_apig/ve_apig.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_apig/ve_apig_utils.py +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_cozeloop → veadk_python-0.2.10/veadk/integrations/ve_code_pipeline}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_cr → veadk_python-0.2.10/veadk/integrations/ve_cozeloop}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_cozeloop/ve_cozeloop.py +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_faas → veadk_python-0.2.10/veadk/integrations/ve_cr}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_cr/ve_cr.py +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}} → veadk_python-0.2.10/veadk/integrations/ve_faas}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/cookiecutter.json +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src → veadk_python-0.2.10/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}} → veadk_python-0.2.10/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/agent.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/ve_faas.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/ve_faas_utils.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/cookiecutter.json +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_prompt_pilot → veadk_python-0.2.10/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +0 -0
- {veadk_python-0.2.9/veadk/integrations/ve_tls → veadk_python-0.2.10/veadk/integrations/ve_prompt_pilot}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +0 -0
- {veadk_python-0.2.9/veadk/knowledgebase/backends → veadk_python-0.2.10/veadk/integrations/ve_tls}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_tls/utils.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_tls/ve_tls.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/integrations/ve_tos/ve_tos.py +0 -0
- {veadk_python-0.2.9/veadk/memory/long_term_memory_backends → veadk_python-0.2.10/veadk/integrations/ve_viking_db_memory}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/__init__.py +0 -0
- {veadk_python-0.2.9/veadk/memory/short_term_memory_backends → veadk_python-0.2.10/veadk/knowledgebase/backends}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/backends/base_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/backends/in_memory_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/backends/opensearch_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/backends/redis_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/backends/utils.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/entry.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/knowledgebase/knowledgebase.py +0 -0
- {veadk_python-0.2.9/veadk/prompts → veadk_python-0.2.10/veadk/memory/long_term_memory_backends}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/long_term_memory_backends/base_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/long_term_memory_backends/in_memory_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/long_term_memory_backends/opensearch_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/long_term_memory_backends/redis_backend.py +0 -0
- {veadk_python-0.2.9/veadk/tools → veadk_python-0.2.10/veadk/memory/short_term_memory_backends}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/short_term_memory_backends/base_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/short_term_memory_backends/mysql_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/short_term_memory_backends/sqlite_backend.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/short_term_memory_processor.py +0 -0
- {veadk_python-0.2.9/veadk/tools/builtin_tools → veadk_python-0.2.10/veadk/prompts}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/prompts/agent_default_prompt.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/prompts/prompt_evaluator.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/prompts/prompt_memory_processor.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/prompts/prompt_optimization.py +0 -0
- {veadk_python-0.2.9/veadk/tools/sandbox → veadk_python-0.2.10/veadk/tools}/__init__.py +0 -0
- {veadk_python-0.2.9/veadk/tracing → veadk_python-0.2.10/veadk/tools/builtin_tools}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/lark.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/las.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/mcp_router.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/vesearch.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/builtin_tools/web_scraper.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/demo_tools.py +0 -0
- {veadk_python-0.2.9/veadk/tracing/telemetry → veadk_python-0.2.10/veadk/tools/sandbox}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/sandbox/browser_sandbox.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/sandbox/code_sandbox.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tools/sandbox/computer_sandbox.py +0 -0
- {veadk_python-0.2.9/veadk/tracing/telemetry/exporters → veadk_python-0.2.10/veadk/tracing}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/base_tracer.py +0 -0
- {veadk_python-0.2.9/veadk/utils → veadk_python-0.2.10/veadk/tracing/telemetry}/__init__.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/attributes/attributes.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/attributes/extractors/types.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/exporters/base_exporter.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/exporters/cozeloop_exporter.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/exporters/tls_exporter.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/tracing/telemetry/opentelemetry_tracer.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/types.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/utils/logger.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/utils/mcp_utils.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/utils/misc.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/utils/patches.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/utils/volcengine_sign.py +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk_python.egg-info/dependency_links.txt +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk_python.egg-info/entry_points.txt +0 -0
- {veadk_python-0.2.9 → veadk_python-0.2.10}/veadk_python.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: veadk-python
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.10
|
|
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
|
|
@@ -218,7 +218,7 @@ Requires-Dist: opentelemetry-exporter-otlp>=1.35.0
|
|
|
218
218
|
Requires-Dist: opentelemetry-instrumentation-logging>=0.56b0
|
|
219
219
|
Requires-Dist: wrapt>=1.17.2
|
|
220
220
|
Requires-Dist: openai<1.100
|
|
221
|
-
Requires-Dist: volcengine-python-sdk>=4.0.
|
|
221
|
+
Requires-Dist: volcengine-python-sdk>=4.0.18
|
|
222
222
|
Requires-Dist: volcengine>=1.0.193
|
|
223
223
|
Requires-Dist: agent-pilot-sdk>=0.1.2
|
|
224
224
|
Requires-Dist: fastmcp>=2.11.3
|
|
@@ -235,12 +235,12 @@ Provides-Extra: extensions
|
|
|
235
235
|
Requires-Dist: redis>=5.0; extra == "extensions"
|
|
236
236
|
Requires-Dist: tos>=2.8.4; extra == "extensions"
|
|
237
237
|
Requires-Dist: llama-index-vector-stores-redis>=0.6.1; extra == "extensions"
|
|
238
|
-
Requires-Dist: mcp-server-vikingdb-memory; extra == "extensions"
|
|
239
238
|
Provides-Extra: database
|
|
240
239
|
Requires-Dist: redis>=5.0; extra == "database"
|
|
241
240
|
Requires-Dist: pymysql>=1.1.1; extra == "database"
|
|
242
241
|
Requires-Dist: volcengine>=1.0.193; extra == "database"
|
|
243
242
|
Requires-Dist: tos>=2.8.4; extra == "database"
|
|
243
|
+
Requires-Dist: mem0ai==0.1.118; extra == "database"
|
|
244
244
|
Provides-Extra: eval
|
|
245
245
|
Requires-Dist: prometheus-client>=0.22.1; extra == "eval"
|
|
246
246
|
Requires-Dist: deepeval>=3.2.6; extra == "eval"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "veadk-python"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.10"
|
|
4
4
|
description = "Volcengine agent development kit, integrations with Volcengine cloud services."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
@@ -22,8 +22,8 @@ dependencies = [
|
|
|
22
22
|
"opentelemetry-instrumentation-logging>=0.56b0",
|
|
23
23
|
"wrapt>=1.17.2", # For patching built-in functions
|
|
24
24
|
"openai<1.100", # For fix https://github.com/BerriAI/litellm/issues/13710
|
|
25
|
-
"volcengine-python-sdk>=4.0.
|
|
26
|
-
"volcengine>=1.0.193",
|
|
25
|
+
"volcengine-python-sdk>=4.0.18", # For Volcengine API
|
|
26
|
+
"volcengine>=1.0.193", # For Volcengine sign
|
|
27
27
|
"agent-pilot-sdk>=0.1.2", # Prompt optimization by Volcengine AgentPilot/PromptPilot toolkits
|
|
28
28
|
"fastmcp>=2.11.3", # For running MCP
|
|
29
29
|
"cookiecutter>=2.6.0", # For cloud deploy
|
|
@@ -45,13 +45,13 @@ extensions = [
|
|
|
45
45
|
"redis>=5.0", # For Redis database
|
|
46
46
|
"tos>=2.8.4", # For TOS storage and Viking DB
|
|
47
47
|
"llama-index-vector-stores-redis>=0.6.1",
|
|
48
|
-
"mcp-server-vikingdb-memory",
|
|
49
48
|
]
|
|
50
49
|
database = [
|
|
51
50
|
"redis>=5.0", # For Redis database
|
|
52
51
|
"pymysql>=1.1.1", # For MySQL database
|
|
53
52
|
"volcengine>=1.0.193", # For Viking DB
|
|
54
53
|
"tos>=2.8.4", # For TOS storage and Viking DB
|
|
54
|
+
"mem0ai==0.1.118", # For mem0
|
|
55
55
|
]
|
|
56
56
|
eval = [
|
|
57
57
|
"prometheus-client>=0.22.1", # For exporting data to Prometheus pushgateway
|
|
@@ -91,6 +91,3 @@ exclude = [
|
|
|
91
91
|
"veadk/integrations/ve_faas/template/*",
|
|
92
92
|
"veadk/integrations/ve_faas/web_template/*"
|
|
93
93
|
]
|
|
94
|
-
|
|
95
|
-
[tool.uv.sources]
|
|
96
|
-
mcp-server-vikingdb-memory = { git = "https://github.com/volcengine/mcp-server", subdirectory = "server/mcp_server_vikingdb_memory" }
|
|
@@ -0,0 +1,90 @@
|
|
|
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 typing import Literal
|
|
17
|
+
|
|
18
|
+
import httpx
|
|
19
|
+
import requests
|
|
20
|
+
from a2a.types import AgentCard
|
|
21
|
+
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent
|
|
22
|
+
|
|
23
|
+
from veadk.utils.logger import get_logger
|
|
24
|
+
|
|
25
|
+
logger = get_logger(__name__)
|
|
26
|
+
|
|
27
|
+
AGENT_CARD_WELL_KNOWN_PATH = "/.well-known/agent-card.json"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _convert_agent_card_dict_to_obj(agent_card_dict: dict) -> AgentCard:
|
|
31
|
+
agent_card_json_str = json.dumps(agent_card_dict, ensure_ascii=False, indent=2)
|
|
32
|
+
agent_card_object = AgentCard.model_validate_json(str(agent_card_json_str))
|
|
33
|
+
return agent_card_object
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class RemoteVeAgent(RemoteA2aAgent):
|
|
37
|
+
"""Connect to remote agent on VeFaaS platform."""
|
|
38
|
+
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
name: str,
|
|
42
|
+
url: str,
|
|
43
|
+
auth_token: str | None = None,
|
|
44
|
+
auth_method: Literal["header", "querystring"] | None = None,
|
|
45
|
+
):
|
|
46
|
+
if not auth_token:
|
|
47
|
+
agent_card_dict = requests.get(url + AGENT_CARD_WELL_KNOWN_PATH).json()
|
|
48
|
+
# replace agent_card_url with actual host
|
|
49
|
+
agent_card_dict["url"] = url
|
|
50
|
+
|
|
51
|
+
agent_card_object = _convert_agent_card_dict_to_obj(agent_card_dict)
|
|
52
|
+
|
|
53
|
+
logger.debug(f"Agent card of {name}: {agent_card_object}")
|
|
54
|
+
super().__init__(name=name, agent_card=agent_card_object)
|
|
55
|
+
else:
|
|
56
|
+
if auth_method == "header":
|
|
57
|
+
headers = {"Authorization": f"Bearer {auth_token}"}
|
|
58
|
+
agent_card_dict = requests.get(
|
|
59
|
+
url + AGENT_CARD_WELL_KNOWN_PATH, headers=headers
|
|
60
|
+
).json()
|
|
61
|
+
agent_card_dict["url"] = url
|
|
62
|
+
|
|
63
|
+
agent_card_object = _convert_agent_card_dict_to_obj(agent_card_dict)
|
|
64
|
+
httpx_client = httpx.AsyncClient(
|
|
65
|
+
base_url=url, headers=headers, timeout=600
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
logger.debug(f"Agent card of {name}: {agent_card_object}")
|
|
69
|
+
super().__init__(
|
|
70
|
+
name=name, agent_card=agent_card_object, httpx_client=httpx_client
|
|
71
|
+
)
|
|
72
|
+
elif auth_method == "querystring":
|
|
73
|
+
agent_card_dict = requests.get(
|
|
74
|
+
url + AGENT_CARD_WELL_KNOWN_PATH + f"?token={auth_token}"
|
|
75
|
+
).json()
|
|
76
|
+
agent_card_dict["url"] = url
|
|
77
|
+
|
|
78
|
+
agent_card_object = _convert_agent_card_dict_to_obj(agent_card_dict)
|
|
79
|
+
httpx_client = httpx.AsyncClient(
|
|
80
|
+
base_url=url, params={"token": auth_token}, timeout=600
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
logger.debug(f"Agent card of {name}: {agent_card_object}")
|
|
84
|
+
super().__init__(
|
|
85
|
+
name=name, agent_card=agent_card_object, httpx_client=httpx_client
|
|
86
|
+
)
|
|
87
|
+
else:
|
|
88
|
+
raise ValueError(
|
|
89
|
+
f"Unsupported auth method {auth_method}, use `header` or `querystring` instead."
|
|
90
|
+
)
|
|
@@ -141,6 +141,9 @@ class Agent(LlmAgent):
|
|
|
141
141
|
if self.long_term_memory is not None:
|
|
142
142
|
from google.adk.tools import load_memory
|
|
143
143
|
|
|
144
|
+
if not load_memory.custom_metadata:
|
|
145
|
+
load_memory.custom_metadata = {}
|
|
146
|
+
load_memory.custom_metadata["backend"] = self.long_term_memory.backend
|
|
144
147
|
self.tools.append(load_memory)
|
|
145
148
|
|
|
146
149
|
logger.info(f"VeADK version: {VERSION}")
|
|
@@ -52,9 +52,8 @@ class AgentBuilder:
|
|
|
52
52
|
tools = []
|
|
53
53
|
if agent_config.get("tools", []):
|
|
54
54
|
for tool in agent_config["tools"]:
|
|
55
|
-
|
|
56
|
-
func_name =
|
|
57
|
-
|
|
55
|
+
name = tool["name"]
|
|
56
|
+
module_name, func_name = name.rsplit(".", 1)
|
|
58
57
|
module = importlib.import_module(module_name)
|
|
59
58
|
func = getattr(module, func_name)
|
|
60
59
|
|
|
@@ -18,6 +18,7 @@ import click
|
|
|
18
18
|
from veadk.cli.cli_deploy import deploy
|
|
19
19
|
from veadk.cli.cli_eval import eval
|
|
20
20
|
from veadk.cli.cli_init import init
|
|
21
|
+
from veadk.cli.cli_kb import kb
|
|
21
22
|
from veadk.cli.cli_pipeline import pipeline
|
|
22
23
|
from veadk.cli.cli_prompt import prompt
|
|
23
24
|
from veadk.cli.cli_web import web
|
|
@@ -39,6 +40,7 @@ veadk.add_command(prompt)
|
|
|
39
40
|
veadk.add_command(web)
|
|
40
41
|
veadk.add_command(pipeline)
|
|
41
42
|
veadk.add_command(eval)
|
|
43
|
+
veadk.add_command(kb)
|
|
42
44
|
|
|
43
45
|
if __name__ == "__main__":
|
|
44
46
|
veadk()
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Literal
|
|
17
|
+
|
|
18
|
+
import click
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@click.command()
|
|
22
|
+
@click.option(
|
|
23
|
+
"--backend",
|
|
24
|
+
type=click.Choice(
|
|
25
|
+
["local", "opensearch", "viking", "redis"],
|
|
26
|
+
case_sensitive=False,
|
|
27
|
+
),
|
|
28
|
+
required=True,
|
|
29
|
+
)
|
|
30
|
+
@click.option(
|
|
31
|
+
"--app_name",
|
|
32
|
+
default="",
|
|
33
|
+
help="`app_name` for init your knowledgebase",
|
|
34
|
+
)
|
|
35
|
+
@click.option(
|
|
36
|
+
"--index",
|
|
37
|
+
default="",
|
|
38
|
+
help="Knowledgebase index",
|
|
39
|
+
)
|
|
40
|
+
@click.option(
|
|
41
|
+
"--path",
|
|
42
|
+
required=True,
|
|
43
|
+
help="Knowledge file or directory path",
|
|
44
|
+
)
|
|
45
|
+
def add(
|
|
46
|
+
backend: Literal["local", "opensearch", "viking", "redis"],
|
|
47
|
+
app_name: str,
|
|
48
|
+
index: str,
|
|
49
|
+
path: str,
|
|
50
|
+
):
|
|
51
|
+
"""Add files to knowledgebase"""
|
|
52
|
+
_path = Path(path)
|
|
53
|
+
assert _path.exists(), f"Path {path} not exists. Please check your input."
|
|
54
|
+
|
|
55
|
+
from veadk.knowledgebase import KnowledgeBase
|
|
56
|
+
|
|
57
|
+
knowledgebase = KnowledgeBase(backend=backend, app_name=app_name, index=index)
|
|
58
|
+
|
|
59
|
+
if _path.is_file():
|
|
60
|
+
knowledgebase.add_from_files(files=[path])
|
|
61
|
+
elif _path.is_dir():
|
|
62
|
+
knowledgebase.add_from_directory(directory=path)
|
|
63
|
+
else:
|
|
64
|
+
raise RuntimeError(
|
|
65
|
+
"Unsupported knowledgebase file type, only support a single file and a directory."
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@click.group()
|
|
70
|
+
def kb():
|
|
71
|
+
"""VeADK Knowledgebase management"""
|
|
72
|
+
pass
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
kb.add_command(add)
|
|
@@ -154,6 +154,7 @@ def web(host: str) -> None:
|
|
|
154
154
|
eval_set_results_manager: Any,
|
|
155
155
|
agents_dir: str,
|
|
156
156
|
extra_plugins: Optional[list[str]] = None,
|
|
157
|
+
**kwargs: Any,
|
|
157
158
|
):
|
|
158
159
|
self.agent_loader = agent_loader
|
|
159
160
|
self.artifact_service = artifact_service
|
|
@@ -166,6 +167,9 @@ def web(host: str) -> None:
|
|
|
166
167
|
self.runner_dict = {}
|
|
167
168
|
self.extra_plugins = extra_plugins or []
|
|
168
169
|
|
|
170
|
+
for key, value in kwargs.items():
|
|
171
|
+
setattr(self, key, value)
|
|
172
|
+
|
|
169
173
|
# parse VeADK memories
|
|
170
174
|
short_term_memory, long_term_memory = _get_memory(module_path=agents_dir)
|
|
171
175
|
self.session_service = short_term_memory.session_service
|
|
@@ -0,0 +1,293 @@
|
|
|
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 threading
|
|
17
|
+
|
|
18
|
+
from volcengine.ApiInfo import ApiInfo
|
|
19
|
+
from volcengine.auth.SignerV4 import SignerV4
|
|
20
|
+
from volcengine.base.Service import Service
|
|
21
|
+
from volcengine.Credentials import Credentials
|
|
22
|
+
from volcengine.ServiceInfo import ServiceInfo
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class VikingDBMemoryException(Exception):
|
|
26
|
+
def __init__(self, code, request_id, message=None):
|
|
27
|
+
self.code = code
|
|
28
|
+
self.request_id = request_id
|
|
29
|
+
self.message = "{}, code:{},request_id:{}".format(
|
|
30
|
+
message, self.code, self.request_id
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
def __str__(self):
|
|
34
|
+
return self.message
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class VikingDBMemoryClient(Service):
|
|
38
|
+
_instance_lock = threading.Lock()
|
|
39
|
+
|
|
40
|
+
def __new__(cls, *args, **kwargs):
|
|
41
|
+
if not hasattr(VikingDBMemoryClient, "_instance"):
|
|
42
|
+
with VikingDBMemoryClient._instance_lock:
|
|
43
|
+
if not hasattr(VikingDBMemoryClient, "_instance"):
|
|
44
|
+
VikingDBMemoryClient._instance = object.__new__(cls)
|
|
45
|
+
return VikingDBMemoryClient._instance
|
|
46
|
+
|
|
47
|
+
def __init__(
|
|
48
|
+
self,
|
|
49
|
+
host="api-knowledgebase.mlp.cn-beijing.volces.com",
|
|
50
|
+
region="cn-beijing",
|
|
51
|
+
ak="",
|
|
52
|
+
sk="",
|
|
53
|
+
sts_token="",
|
|
54
|
+
scheme="http",
|
|
55
|
+
connection_timeout=30,
|
|
56
|
+
socket_timeout=30,
|
|
57
|
+
):
|
|
58
|
+
self.service_info = VikingDBMemoryClient.get_service_info(
|
|
59
|
+
host, region, scheme, connection_timeout, socket_timeout
|
|
60
|
+
)
|
|
61
|
+
self.api_info = VikingDBMemoryClient.get_api_info()
|
|
62
|
+
super(VikingDBMemoryClient, self).__init__(self.service_info, self.api_info)
|
|
63
|
+
if ak:
|
|
64
|
+
self.set_ak(ak)
|
|
65
|
+
if sk:
|
|
66
|
+
self.set_sk(sk)
|
|
67
|
+
if sts_token:
|
|
68
|
+
self.set_session_token(session_token=sts_token)
|
|
69
|
+
try:
|
|
70
|
+
self.get_body("Ping", {}, json.dumps({}))
|
|
71
|
+
except Exception as e:
|
|
72
|
+
raise VikingDBMemoryException(
|
|
73
|
+
1000028, "missed", "host or region is incorrect: {}".format(str(e))
|
|
74
|
+
) from None
|
|
75
|
+
|
|
76
|
+
def setHeader(self, header):
|
|
77
|
+
api_info = VikingDBMemoryClient.get_api_info()
|
|
78
|
+
for key in api_info:
|
|
79
|
+
for item in header:
|
|
80
|
+
api_info[key].header[item] = header[item]
|
|
81
|
+
self.api_info = api_info
|
|
82
|
+
|
|
83
|
+
@staticmethod
|
|
84
|
+
def get_service_info(host, region, scheme, connection_timeout, socket_timeout):
|
|
85
|
+
service_info = ServiceInfo(
|
|
86
|
+
host,
|
|
87
|
+
{"Host": host},
|
|
88
|
+
Credentials("", "", "air", region),
|
|
89
|
+
connection_timeout,
|
|
90
|
+
socket_timeout,
|
|
91
|
+
scheme=scheme,
|
|
92
|
+
)
|
|
93
|
+
return service_info
|
|
94
|
+
|
|
95
|
+
@staticmethod
|
|
96
|
+
def get_api_info():
|
|
97
|
+
api_info = {
|
|
98
|
+
"CreateCollection": ApiInfo(
|
|
99
|
+
"POST",
|
|
100
|
+
"/api/memory/collection/create",
|
|
101
|
+
{},
|
|
102
|
+
{},
|
|
103
|
+
{"Accept": "application/json", "Content-Type": "application/json"},
|
|
104
|
+
),
|
|
105
|
+
"GetCollection": ApiInfo(
|
|
106
|
+
"POST",
|
|
107
|
+
"/api/memory/collection/info",
|
|
108
|
+
{},
|
|
109
|
+
{},
|
|
110
|
+
{"Accept": "application/json", "Content-Type": "application/json"},
|
|
111
|
+
),
|
|
112
|
+
"DropCollection": ApiInfo(
|
|
113
|
+
"POST",
|
|
114
|
+
"/api/memory/collection/delete",
|
|
115
|
+
{},
|
|
116
|
+
{},
|
|
117
|
+
{"Accept": "application/json", "Content-Type": "application/json"},
|
|
118
|
+
),
|
|
119
|
+
"UpdateCollection": ApiInfo(
|
|
120
|
+
"POST",
|
|
121
|
+
"/api/memory/collection/update",
|
|
122
|
+
{},
|
|
123
|
+
{},
|
|
124
|
+
{"Accept": "application/json", "Content-Type": "application/json"},
|
|
125
|
+
),
|
|
126
|
+
"SearchMemory": ApiInfo(
|
|
127
|
+
"POST",
|
|
128
|
+
"/api/memory/search",
|
|
129
|
+
{},
|
|
130
|
+
{},
|
|
131
|
+
{"Accept": "application/json", "Content-Type": "application/json"},
|
|
132
|
+
),
|
|
133
|
+
"AddMessages": ApiInfo(
|
|
134
|
+
"POST",
|
|
135
|
+
"/api/memory/messages/add",
|
|
136
|
+
{},
|
|
137
|
+
{},
|
|
138
|
+
{"Accept": "application/json", "Content-Type": "application/json"},
|
|
139
|
+
),
|
|
140
|
+
"Ping": ApiInfo(
|
|
141
|
+
"GET",
|
|
142
|
+
"/api/memory/ping",
|
|
143
|
+
{},
|
|
144
|
+
{},
|
|
145
|
+
{"Accept": "application/json", "Content-Type": "application/json"},
|
|
146
|
+
),
|
|
147
|
+
}
|
|
148
|
+
return api_info
|
|
149
|
+
|
|
150
|
+
def get_body(self, api, params, body):
|
|
151
|
+
if api not in self.api_info:
|
|
152
|
+
raise Exception("no such api")
|
|
153
|
+
api_info = self.api_info[api]
|
|
154
|
+
r = self.prepare_request(api_info, params)
|
|
155
|
+
r.headers["Content-Type"] = "application/json"
|
|
156
|
+
r.headers["Traffic-Source"] = "SDK"
|
|
157
|
+
r.body = body
|
|
158
|
+
|
|
159
|
+
SignerV4.sign(r, self.service_info.credentials)
|
|
160
|
+
|
|
161
|
+
url = r.build()
|
|
162
|
+
resp = self.session.get(
|
|
163
|
+
url,
|
|
164
|
+
headers=r.headers,
|
|
165
|
+
data=r.body,
|
|
166
|
+
timeout=(
|
|
167
|
+
self.service_info.connection_timeout,
|
|
168
|
+
self.service_info.socket_timeout,
|
|
169
|
+
),
|
|
170
|
+
)
|
|
171
|
+
if resp.status_code == 200:
|
|
172
|
+
return json.dumps(resp.json())
|
|
173
|
+
else:
|
|
174
|
+
raise Exception(resp.text.encode("utf-8"))
|
|
175
|
+
|
|
176
|
+
def get_body_exception(self, api, params, body):
|
|
177
|
+
try:
|
|
178
|
+
res = self.get_body(api, params, body)
|
|
179
|
+
except Exception as e:
|
|
180
|
+
try:
|
|
181
|
+
res_json = json.loads(e.args[0].decode("utf-8"))
|
|
182
|
+
except Exception as e:
|
|
183
|
+
raise VikingDBMemoryException(
|
|
184
|
+
1000028, "missed", "json load res error, res:{}".format(str(e))
|
|
185
|
+
) from None
|
|
186
|
+
code = res_json.get("code", 1000028)
|
|
187
|
+
request_id = res_json.get("request_id", 1000028)
|
|
188
|
+
message = res_json.get("message", None)
|
|
189
|
+
|
|
190
|
+
raise VikingDBMemoryException(code, request_id, message)
|
|
191
|
+
|
|
192
|
+
if res == "":
|
|
193
|
+
raise VikingDBMemoryException(
|
|
194
|
+
1000028,
|
|
195
|
+
"missed",
|
|
196
|
+
"empty response due to unknown error, please contact customer service",
|
|
197
|
+
) from None
|
|
198
|
+
return res
|
|
199
|
+
|
|
200
|
+
def get_exception(self, api, params):
|
|
201
|
+
try:
|
|
202
|
+
res = self.get(api, params)
|
|
203
|
+
except Exception as e:
|
|
204
|
+
try:
|
|
205
|
+
res_json = json.loads(e.args[0].decode("utf-8"))
|
|
206
|
+
except Exception as e:
|
|
207
|
+
raise VikingDBMemoryException(
|
|
208
|
+
1000028, "missed", "json load res error, res:{}".format(str(e))
|
|
209
|
+
) from None
|
|
210
|
+
code = res_json.get("code", 1000028)
|
|
211
|
+
request_id = res_json.get("request_id", 1000028)
|
|
212
|
+
message = res_json.get("message", None)
|
|
213
|
+
raise VikingDBMemoryException(code, request_id, message)
|
|
214
|
+
if res == "":
|
|
215
|
+
raise VikingDBMemoryException(
|
|
216
|
+
1000028,
|
|
217
|
+
"missed",
|
|
218
|
+
"empty response due to unknown error, please contact customer service",
|
|
219
|
+
) from None
|
|
220
|
+
return res
|
|
221
|
+
|
|
222
|
+
def create_collection(
|
|
223
|
+
self,
|
|
224
|
+
collection_name,
|
|
225
|
+
description="",
|
|
226
|
+
custom_event_type_schemas=[],
|
|
227
|
+
custom_entity_type_schemas=[],
|
|
228
|
+
builtin_event_types=[],
|
|
229
|
+
builtin_entity_types=[],
|
|
230
|
+
):
|
|
231
|
+
params = {
|
|
232
|
+
"CollectionName": collection_name,
|
|
233
|
+
"Description": description,
|
|
234
|
+
"CustomEventTypeSchemas": custom_event_type_schemas,
|
|
235
|
+
"CustomEntityTypeSchemas": custom_entity_type_schemas,
|
|
236
|
+
"BuiltinEventTypes": builtin_event_types,
|
|
237
|
+
"BuiltinEntityTypes": builtin_entity_types,
|
|
238
|
+
}
|
|
239
|
+
res = self.json("CreateCollection", {}, json.dumps(params))
|
|
240
|
+
return json.loads(res)
|
|
241
|
+
|
|
242
|
+
def get_collection(self, collection_name):
|
|
243
|
+
params = {"CollectionName": collection_name}
|
|
244
|
+
res = self.json("GetCollection", {}, json.dumps(params))
|
|
245
|
+
return json.loads(res)
|
|
246
|
+
|
|
247
|
+
def drop_collection(self, collection_name):
|
|
248
|
+
params = {"CollectionName": collection_name}
|
|
249
|
+
res = self.json("DropCollection", {}, json.dumps(params))
|
|
250
|
+
return json.loads(res)
|
|
251
|
+
|
|
252
|
+
def update_collection(
|
|
253
|
+
self,
|
|
254
|
+
collection_name,
|
|
255
|
+
custom_event_type_schemas=[],
|
|
256
|
+
custom_entity_type_schemas=[],
|
|
257
|
+
builtin_event_types=[],
|
|
258
|
+
builtin_entity_types=[],
|
|
259
|
+
):
|
|
260
|
+
params = {
|
|
261
|
+
"CollectionName": collection_name,
|
|
262
|
+
"CustomEventTypeSchemas": custom_event_type_schemas,
|
|
263
|
+
"CustomEntityTypeSchemas": custom_entity_type_schemas,
|
|
264
|
+
"BuiltinEventTypes": builtin_event_types,
|
|
265
|
+
"BuiltinEntityTypes": builtin_entity_types,
|
|
266
|
+
}
|
|
267
|
+
res = self.json("UpdateCollection", {}, json.dumps(params))
|
|
268
|
+
return json.loads(res)
|
|
269
|
+
|
|
270
|
+
def search_memory(self, collection_name, query, filter, limit=10):
|
|
271
|
+
params = {
|
|
272
|
+
"collection_name": collection_name,
|
|
273
|
+
"limit": limit,
|
|
274
|
+
"filter": filter,
|
|
275
|
+
}
|
|
276
|
+
if query:
|
|
277
|
+
params["query"] = query
|
|
278
|
+
res = self.json("SearchMemory", {}, json.dumps(params))
|
|
279
|
+
return json.loads(res)
|
|
280
|
+
|
|
281
|
+
def add_messages(
|
|
282
|
+
self, collection_name, session_id, messages, metadata, entities=None
|
|
283
|
+
):
|
|
284
|
+
params = {
|
|
285
|
+
"collection_name": collection_name,
|
|
286
|
+
"session_id": session_id,
|
|
287
|
+
"messages": messages,
|
|
288
|
+
"metadata": metadata,
|
|
289
|
+
}
|
|
290
|
+
if entities is not None:
|
|
291
|
+
params["entities"] = entities
|
|
292
|
+
res = self.json("AddMessages", {}, json.dumps(params))
|
|
293
|
+
return json.loads(res)
|
|
@@ -25,7 +25,7 @@ def __getattr__(name):
|
|
|
25
25
|
from veadk.memory.short_term_memory import ShortTermMemory
|
|
26
26
|
|
|
27
27
|
return ShortTermMemory
|
|
28
|
-
if name == "
|
|
28
|
+
if name == "LongTermMemory":
|
|
29
29
|
from veadk.memory.long_term_memory import LongTermMemory
|
|
30
30
|
|
|
31
31
|
return LongTermMemory
|
|
@@ -115,6 +115,14 @@ class LongTermMemory(BaseMemoryService, BaseModel):
|
|
|
115
115
|
f"Initialized long term memory backend {self.backend} with config. We will ignore `app_name` and `user_id` if provided."
|
|
116
116
|
)
|
|
117
117
|
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
|
+
)
|
|
118
126
|
return
|
|
119
127
|
|
|
120
128
|
if self.app_name and self.user_id:
|
|
@@ -195,6 +203,23 @@ class LongTermMemory(BaseMemoryService, BaseModel):
|
|
|
195
203
|
@override
|
|
196
204
|
async def search_memory(self, *, app_name: str, user_id: str, query: str):
|
|
197
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
|
+
)
|
|
214
|
+
|
|
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."
|
|
220
|
+
)
|
|
221
|
+
return SearchMemoryResponse(memories=[])
|
|
222
|
+
|
|
198
223
|
if not self._backend:
|
|
199
224
|
logger.error(
|
|
200
225
|
"Long term memory backend is not initialized, cannot search memory."
|
{veadk_python-0.2.9 → veadk_python-0.2.10}/veadk/memory/long_term_memory_backends/mem0_backend.py
RENAMED
|
@@ -46,12 +46,17 @@ class Mem0LTMBackend(BaseLongTermMemoryBackend):
|
|
|
46
46
|
|
|
47
47
|
try:
|
|
48
48
|
self._mem0_client = MemoryClient(
|
|
49
|
-
|
|
49
|
+
host=self.mem0_config.base_url, # mem0 endpoint
|
|
50
50
|
api_key=self.mem0_config.api_key, # mem0 API key
|
|
51
51
|
)
|
|
52
|
+
logger.info(
|
|
53
|
+
f"Initialized Mem0 client for host: {self.mem0_config.base_url}"
|
|
54
|
+
)
|
|
52
55
|
logger.info(f"Initialized Mem0 client for index: {self.index}")
|
|
53
56
|
except Exception as e:
|
|
54
|
-
logger.error(
|
|
57
|
+
logger.error(
|
|
58
|
+
f"Failed to initialize Mem0 client for host {self.mem0_config.base_url} : {str(e)}"
|
|
59
|
+
)
|
|
55
60
|
raise
|
|
56
61
|
|
|
57
62
|
def precheck_index_naming(self):
|
|
@@ -84,6 +89,7 @@ class Mem0LTMBackend(BaseLongTermMemoryBackend):
|
|
|
84
89
|
[{"role": "user", "content": event_string}],
|
|
85
90
|
user_id=user_id,
|
|
86
91
|
output_format="v1.1",
|
|
92
|
+
async_mode=True,
|
|
87
93
|
)
|
|
88
94
|
logger.debug(f"Saved memory result: {result}")
|
|
89
95
|
|
|
@@ -116,7 +122,16 @@ class Mem0LTMBackend(BaseLongTermMemoryBackend):
|
|
|
116
122
|
query, user_id=user_id, output_format="v1.1", top_k=top_k
|
|
117
123
|
)
|
|
118
124
|
|
|
125
|
+
logger.debug(f"return relevant memories: {memories}")
|
|
126
|
+
|
|
119
127
|
memory_list = []
|
|
128
|
+
# 如果 memories 是列表,直接返回
|
|
129
|
+
if isinstance(memories, list):
|
|
130
|
+
for mem in memories:
|
|
131
|
+
if "memory" in mem:
|
|
132
|
+
memory_list.append(mem["memory"])
|
|
133
|
+
return memory_list
|
|
134
|
+
|
|
120
135
|
if memories.get("results", []):
|
|
121
136
|
for mem in memories["results"]:
|
|
122
137
|
if "memory" in mem:
|