veadk-python 0.2.27__py3-none-any.whl
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.
- veadk/__init__.py +37 -0
- veadk/a2a/__init__.py +13 -0
- veadk/a2a/agent_card.py +45 -0
- veadk/a2a/remote_ve_agent.py +390 -0
- veadk/a2a/utils/__init__.py +13 -0
- veadk/a2a/utils/agent_to_a2a.py +170 -0
- veadk/a2a/ve_a2a_server.py +93 -0
- veadk/a2a/ve_agent_executor.py +78 -0
- veadk/a2a/ve_middlewares.py +313 -0
- veadk/a2a/ve_task_store.py +37 -0
- veadk/agent.py +402 -0
- veadk/agent_builder.py +93 -0
- veadk/agents/loop_agent.py +68 -0
- veadk/agents/parallel_agent.py +72 -0
- veadk/agents/sequential_agent.py +64 -0
- veadk/auth/__init__.py +13 -0
- veadk/auth/base_auth.py +22 -0
- veadk/auth/ve_credential_service.py +203 -0
- veadk/auth/veauth/__init__.py +13 -0
- veadk/auth/veauth/apmplus_veauth.py +58 -0
- veadk/auth/veauth/ark_veauth.py +75 -0
- veadk/auth/veauth/base_veauth.py +50 -0
- veadk/auth/veauth/cozeloop_veauth.py +13 -0
- veadk/auth/veauth/opensearch_veauth.py +75 -0
- veadk/auth/veauth/postgresql_veauth.py +75 -0
- veadk/auth/veauth/prompt_pilot_veauth.py +60 -0
- veadk/auth/veauth/speech_veauth.py +54 -0
- veadk/auth/veauth/utils.py +69 -0
- veadk/auth/veauth/vesearch_veauth.py +62 -0
- veadk/auth/veauth/viking_mem0_veauth.py +91 -0
- veadk/cli/__init__.py +13 -0
- veadk/cli/cli.py +58 -0
- veadk/cli/cli_clean.py +87 -0
- veadk/cli/cli_create.py +163 -0
- veadk/cli/cli_deploy.py +233 -0
- veadk/cli/cli_eval.py +215 -0
- veadk/cli/cli_init.py +214 -0
- veadk/cli/cli_kb.py +110 -0
- veadk/cli/cli_pipeline.py +285 -0
- veadk/cli/cli_prompt.py +86 -0
- veadk/cli/cli_update.py +106 -0
- veadk/cli/cli_uploadevalset.py +139 -0
- veadk/cli/cli_web.py +143 -0
- veadk/cloud/__init__.py +13 -0
- veadk/cloud/cloud_agent_engine.py +485 -0
- veadk/cloud/cloud_app.py +475 -0
- veadk/config.py +115 -0
- veadk/configs/__init__.py +13 -0
- veadk/configs/auth_configs.py +133 -0
- veadk/configs/database_configs.py +132 -0
- veadk/configs/model_configs.py +78 -0
- veadk/configs/tool_configs.py +54 -0
- veadk/configs/tracing_configs.py +110 -0
- veadk/consts.py +74 -0
- veadk/evaluation/__init__.py +17 -0
- veadk/evaluation/adk_evaluator/__init__.py +17 -0
- veadk/evaluation/adk_evaluator/adk_evaluator.py +302 -0
- veadk/evaluation/base_evaluator.py +642 -0
- veadk/evaluation/deepeval_evaluator/__init__.py +17 -0
- veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +339 -0
- veadk/evaluation/eval_set_file_loader.py +48 -0
- veadk/evaluation/eval_set_recorder.py +146 -0
- veadk/evaluation/types.py +65 -0
- veadk/evaluation/utils/prometheus.py +196 -0
- veadk/integrations/__init__.py +13 -0
- veadk/integrations/ve_apig/__init__.py +13 -0
- veadk/integrations/ve_apig/ve_apig.py +349 -0
- veadk/integrations/ve_apig/ve_apig_utils.py +332 -0
- veadk/integrations/ve_code_pipeline/__init__.py +13 -0
- veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +431 -0
- veadk/integrations/ve_cozeloop/__init__.py +13 -0
- veadk/integrations/ve_cozeloop/ve_cozeloop.py +96 -0
- veadk/integrations/ve_cr/__init__.py +13 -0
- veadk/integrations/ve_cr/ve_cr.py +220 -0
- veadk/integrations/ve_faas/__init__.py +13 -0
- veadk/integrations/ve_faas/template/cookiecutter.json +15 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/__init__.py +13 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/clean.py +23 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/config.yaml.example +6 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +106 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/__init__.py +13 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +25 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +202 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +3 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +49 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/__init__.py +14 -0
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{ cookiecutter.app_name }}/agent.py +27 -0
- veadk/integrations/ve_faas/ve_faas.py +754 -0
- veadk/integrations/ve_faas/ve_faas_utils.py +408 -0
- veadk/integrations/ve_faas/web_template/cookiecutter.json +20 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/__init__.py +13 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +23 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +2 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +44 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +23 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +123 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +46 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +36 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +4 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +21 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +368 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +21 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +24 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +21 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +53 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +45 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +29 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +14 -0
- veadk/integrations/ve_identity/__init__.py +110 -0
- veadk/integrations/ve_identity/auth_config.py +261 -0
- veadk/integrations/ve_identity/auth_mixins.py +650 -0
- veadk/integrations/ve_identity/auth_processor.py +385 -0
- veadk/integrations/ve_identity/function_tool.py +158 -0
- veadk/integrations/ve_identity/identity_client.py +864 -0
- veadk/integrations/ve_identity/mcp_tool.py +181 -0
- veadk/integrations/ve_identity/mcp_toolset.py +431 -0
- veadk/integrations/ve_identity/models.py +228 -0
- veadk/integrations/ve_identity/token_manager.py +188 -0
- veadk/integrations/ve_identity/utils.py +151 -0
- veadk/integrations/ve_prompt_pilot/__init__.py +13 -0
- veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +85 -0
- veadk/integrations/ve_tls/__init__.py +13 -0
- veadk/integrations/ve_tls/utils.py +116 -0
- veadk/integrations/ve_tls/ve_tls.py +212 -0
- veadk/integrations/ve_tos/ve_tos.py +710 -0
- veadk/integrations/ve_viking_db_memory/__init__.py +13 -0
- veadk/integrations/ve_viking_db_memory/ve_viking_db_memory.py +308 -0
- veadk/knowledgebase/__init__.py +17 -0
- veadk/knowledgebase/backends/__init__.py +13 -0
- veadk/knowledgebase/backends/base_backend.py +72 -0
- veadk/knowledgebase/backends/in_memory_backend.py +91 -0
- veadk/knowledgebase/backends/opensearch_backend.py +162 -0
- veadk/knowledgebase/backends/redis_backend.py +172 -0
- veadk/knowledgebase/backends/utils.py +92 -0
- veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +608 -0
- veadk/knowledgebase/entry.py +25 -0
- veadk/knowledgebase/knowledgebase.py +307 -0
- veadk/memory/__init__.py +35 -0
- veadk/memory/long_term_memory.py +365 -0
- veadk/memory/long_term_memory_backends/__init__.py +13 -0
- veadk/memory/long_term_memory_backends/base_backend.py +35 -0
- veadk/memory/long_term_memory_backends/in_memory_backend.py +67 -0
- veadk/memory/long_term_memory_backends/mem0_backend.py +155 -0
- veadk/memory/long_term_memory_backends/opensearch_backend.py +124 -0
- veadk/memory/long_term_memory_backends/redis_backend.py +140 -0
- veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +189 -0
- veadk/memory/short_term_memory.py +252 -0
- veadk/memory/short_term_memory_backends/__init__.py +13 -0
- veadk/memory/short_term_memory_backends/base_backend.py +31 -0
- veadk/memory/short_term_memory_backends/mysql_backend.py +49 -0
- veadk/memory/short_term_memory_backends/postgresql_backend.py +49 -0
- veadk/memory/short_term_memory_backends/sqlite_backend.py +55 -0
- veadk/memory/short_term_memory_processor.py +100 -0
- veadk/processors/__init__.py +26 -0
- veadk/processors/base_run_processor.py +120 -0
- veadk/prompts/__init__.py +13 -0
- veadk/prompts/agent_default_prompt.py +30 -0
- veadk/prompts/prompt_evaluator.py +20 -0
- veadk/prompts/prompt_memory_processor.py +55 -0
- veadk/prompts/prompt_optimization.py +150 -0
- veadk/runner.py +732 -0
- veadk/tools/__init__.py +13 -0
- veadk/tools/builtin_tools/__init__.py +13 -0
- veadk/tools/builtin_tools/agent_authorization.py +94 -0
- veadk/tools/builtin_tools/generate_image.py +23 -0
- veadk/tools/builtin_tools/image_edit.py +300 -0
- veadk/tools/builtin_tools/image_generate.py +446 -0
- veadk/tools/builtin_tools/lark.py +67 -0
- veadk/tools/builtin_tools/las.py +24 -0
- veadk/tools/builtin_tools/link_reader.py +66 -0
- veadk/tools/builtin_tools/llm_shield.py +381 -0
- veadk/tools/builtin_tools/load_knowledgebase.py +97 -0
- veadk/tools/builtin_tools/mcp_router.py +29 -0
- veadk/tools/builtin_tools/run_code.py +113 -0
- veadk/tools/builtin_tools/tts.py +253 -0
- veadk/tools/builtin_tools/vesearch.py +49 -0
- veadk/tools/builtin_tools/video_generate.py +363 -0
- veadk/tools/builtin_tools/web_scraper.py +76 -0
- veadk/tools/builtin_tools/web_search.py +83 -0
- veadk/tools/demo_tools.py +58 -0
- veadk/tools/load_knowledgebase_tool.py +149 -0
- veadk/tools/sandbox/__init__.py +13 -0
- veadk/tools/sandbox/browser_sandbox.py +37 -0
- veadk/tools/sandbox/code_sandbox.py +40 -0
- veadk/tools/sandbox/computer_sandbox.py +34 -0
- veadk/tracing/__init__.py +13 -0
- veadk/tracing/base_tracer.py +58 -0
- veadk/tracing/telemetry/__init__.py +13 -0
- veadk/tracing/telemetry/attributes/attributes.py +29 -0
- veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +180 -0
- veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +858 -0
- veadk/tracing/telemetry/attributes/extractors/tool_attributes_extractors.py +152 -0
- veadk/tracing/telemetry/attributes/extractors/types.py +164 -0
- veadk/tracing/telemetry/exporters/__init__.py +13 -0
- veadk/tracing/telemetry/exporters/apmplus_exporter.py +558 -0
- veadk/tracing/telemetry/exporters/base_exporter.py +39 -0
- veadk/tracing/telemetry/exporters/cozeloop_exporter.py +129 -0
- veadk/tracing/telemetry/exporters/inmemory_exporter.py +248 -0
- veadk/tracing/telemetry/exporters/tls_exporter.py +139 -0
- veadk/tracing/telemetry/opentelemetry_tracer.py +320 -0
- veadk/tracing/telemetry/telemetry.py +411 -0
- veadk/types.py +47 -0
- veadk/utils/__init__.py +13 -0
- veadk/utils/audio_manager.py +95 -0
- veadk/utils/auth.py +294 -0
- veadk/utils/logger.py +59 -0
- veadk/utils/mcp_utils.py +44 -0
- veadk/utils/misc.py +184 -0
- veadk/utils/patches.py +101 -0
- veadk/utils/volcengine_sign.py +205 -0
- veadk/version.py +15 -0
- veadk_python-0.2.27.dist-info/METADATA +373 -0
- veadk_python-0.2.27.dist-info/RECORD +218 -0
- veadk_python-0.2.27.dist-info/WHEEL +5 -0
- veadk_python-0.2.27.dist-info/entry_points.txt +2 -0
- veadk_python-0.2.27.dist-info/licenses/LICENSE +201 -0
- veadk_python-0.2.27.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,116 @@
|
|
|
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 hashlib
|
|
16
|
+
import json
|
|
17
|
+
from typing import Any, Literal
|
|
18
|
+
|
|
19
|
+
import httpx
|
|
20
|
+
from veadk.utils.logger import get_logger
|
|
21
|
+
from volcengine.ApiInfo import ApiInfo
|
|
22
|
+
from volcengine.auth.SignerV4 import SignerV4
|
|
23
|
+
from volcengine.tls.const import (
|
|
24
|
+
APPLICATION_JSON,
|
|
25
|
+
CONTENT_MD5,
|
|
26
|
+
CONTENT_TYPE,
|
|
27
|
+
DATA,
|
|
28
|
+
WEB_TRACKS,
|
|
29
|
+
)
|
|
30
|
+
from volcengine.tls.TLSService import TLSService
|
|
31
|
+
|
|
32
|
+
logger = get_logger(__name__)
|
|
33
|
+
|
|
34
|
+
HEADER_API_VERSION = "x-tls-apiversion"
|
|
35
|
+
API_VERSION_V_0_3_0 = "0.3.0"
|
|
36
|
+
|
|
37
|
+
API_INFO = {
|
|
38
|
+
"CreateProject": ApiInfo("POST", "/CreateProject", {}, {}, {}),
|
|
39
|
+
"DescribeProjects": ApiInfo("GET", "/DescribeProjects", {}, {}, {}),
|
|
40
|
+
"CreateTraceInstance": ApiInfo("POST", "/CreateTraceInstance", {}, {}, {}),
|
|
41
|
+
"DescribeTraceInstances": ApiInfo("GET", "/DescribeTraceInstances", {}, {}, {}),
|
|
42
|
+
"DescribeTraceInstance": ApiInfo("GET", "/DescribeTraceInstance", {}, {}, {}),
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def __prepare_request(
|
|
47
|
+
client: TLSService,
|
|
48
|
+
api: str,
|
|
49
|
+
params: dict | None = None,
|
|
50
|
+
body: Any | None = None,
|
|
51
|
+
request_headers: dict | None = None,
|
|
52
|
+
):
|
|
53
|
+
if params is None:
|
|
54
|
+
params = {}
|
|
55
|
+
if body is None:
|
|
56
|
+
body = {}
|
|
57
|
+
|
|
58
|
+
request = client.prepare_request(API_INFO[api], params)
|
|
59
|
+
|
|
60
|
+
if request_headers is None:
|
|
61
|
+
request_headers = {CONTENT_TYPE: APPLICATION_JSON}
|
|
62
|
+
request.headers.update(request_headers)
|
|
63
|
+
|
|
64
|
+
if "json" in request.headers[CONTENT_TYPE] and api != WEB_TRACKS:
|
|
65
|
+
request.body = json.dumps(body)
|
|
66
|
+
else:
|
|
67
|
+
request.body = body[DATA]
|
|
68
|
+
|
|
69
|
+
if len(request.body) != 0:
|
|
70
|
+
if isinstance(request.body, str):
|
|
71
|
+
request.headers[CONTENT_MD5] = hashlib.md5(
|
|
72
|
+
request.body.encode("utf-8")
|
|
73
|
+
).hexdigest()
|
|
74
|
+
else:
|
|
75
|
+
request.headers[CONTENT_MD5] = hashlib.md5(request.body).hexdigest()
|
|
76
|
+
|
|
77
|
+
SignerV4.sign(request, client.service_info.credentials)
|
|
78
|
+
|
|
79
|
+
return request
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def ve_tls_request(
|
|
83
|
+
client: TLSService,
|
|
84
|
+
api: str,
|
|
85
|
+
params: dict | None = None,
|
|
86
|
+
body: dict | None = None,
|
|
87
|
+
request_headers: dict | None = None,
|
|
88
|
+
method: Literal["POST", "GET", "PUT", "DELETE"] = "POST",
|
|
89
|
+
):
|
|
90
|
+
"""Customize a standard HTTP request to the Volcengine TLS API"""
|
|
91
|
+
|
|
92
|
+
if request_headers is None:
|
|
93
|
+
request_headers = {HEADER_API_VERSION: API_VERSION_V_0_3_0}
|
|
94
|
+
elif HEADER_API_VERSION not in request_headers:
|
|
95
|
+
request_headers[HEADER_API_VERSION] = API_VERSION_V_0_3_0
|
|
96
|
+
if CONTENT_TYPE not in request_headers:
|
|
97
|
+
request_headers[CONTENT_TYPE] = APPLICATION_JSON
|
|
98
|
+
request = __prepare_request(client, api, params, body, request_headers)
|
|
99
|
+
|
|
100
|
+
url = request.build()
|
|
101
|
+
|
|
102
|
+
with httpx.Client() as session:
|
|
103
|
+
while True:
|
|
104
|
+
try:
|
|
105
|
+
response = session.request(
|
|
106
|
+
method=method,
|
|
107
|
+
url=url,
|
|
108
|
+
headers=request.headers,
|
|
109
|
+
data=request.body, # type: ignore
|
|
110
|
+
timeout=60,
|
|
111
|
+
)
|
|
112
|
+
return response.json()
|
|
113
|
+
except Exception as e:
|
|
114
|
+
logger.error(
|
|
115
|
+
f"Error occurred while making {method} request to {url}: {e}. Response: {response}"
|
|
116
|
+
)
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import os
|
|
16
|
+
|
|
17
|
+
from veadk.consts import DEFAULT_TLS_LOG_PROJECT_NAME, DEFAULT_TLS_TRACING_INSTANCE_NAME
|
|
18
|
+
from veadk.utils.logger import get_logger
|
|
19
|
+
|
|
20
|
+
logger = get_logger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class VeTLS:
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
access_key: str | None = None,
|
|
27
|
+
secret_key: str | None = None,
|
|
28
|
+
region: str = "cn-beijing",
|
|
29
|
+
):
|
|
30
|
+
try:
|
|
31
|
+
from veadk.integrations.ve_tls.utils import ve_tls_request
|
|
32
|
+
from volcengine.tls.TLSService import TLSService
|
|
33
|
+
except ImportError:
|
|
34
|
+
raise ImportError(
|
|
35
|
+
"Please install volcengine SDK before init VeTLS: pip install volcengine"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
self._ve_tls_request = ve_tls_request
|
|
39
|
+
|
|
40
|
+
self.access_key = (
|
|
41
|
+
access_key if access_key else os.getenv("VOLCENGINE_ACCESS_KEY", "")
|
|
42
|
+
)
|
|
43
|
+
self.secret_key = (
|
|
44
|
+
secret_key if secret_key else os.getenv("VOLCENGINE_SECRET_KEY", "")
|
|
45
|
+
)
|
|
46
|
+
self.region = region
|
|
47
|
+
|
|
48
|
+
self._client = TLSService(
|
|
49
|
+
endpoint=f"https://tls-{self.region}.volces.com",
|
|
50
|
+
access_key_id=self.access_key,
|
|
51
|
+
access_key_secret=self.secret_key,
|
|
52
|
+
region=self.region,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
def get_project_id_by_name(self, project_name: str) -> str:
|
|
56
|
+
"""Get the ID of a log project by its name.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
project_name (str): The name of the log project.
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
str: The ID of the log project, or None if not found.
|
|
63
|
+
"""
|
|
64
|
+
logger.info(f"Getting ID for log project '{project_name}' in TLS...")
|
|
65
|
+
|
|
66
|
+
request_body = {
|
|
67
|
+
"ProjectName": project_name,
|
|
68
|
+
"IsFullName": True,
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
try:
|
|
72
|
+
res = None
|
|
73
|
+
res = self._ve_tls_request(
|
|
74
|
+
client=self._client,
|
|
75
|
+
api="DescribeProjects",
|
|
76
|
+
body=request_body,
|
|
77
|
+
method="GET",
|
|
78
|
+
)
|
|
79
|
+
projects = res["Projects"]
|
|
80
|
+
for project in projects:
|
|
81
|
+
if project["ProjectName"] == project_name:
|
|
82
|
+
return project["ProjectId"]
|
|
83
|
+
return "<no_project_id_found>"
|
|
84
|
+
except KeyError:
|
|
85
|
+
raise ValueError(f"Failed to get log project ID: {res}")
|
|
86
|
+
|
|
87
|
+
def create_log_project(self, project_name: str) -> str:
|
|
88
|
+
"""Create a log project in TLS.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
project_name (str): The name of the log project to create.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
str: The ID of the created log project.
|
|
95
|
+
"""
|
|
96
|
+
logger.info(f"Creating log project '{project_name}' in TLS...")
|
|
97
|
+
|
|
98
|
+
request_body = {
|
|
99
|
+
"ProjectName": project_name,
|
|
100
|
+
"Region": self.region,
|
|
101
|
+
"Description": "Created by Volcengine Agent Development Kit (VeADK)",
|
|
102
|
+
"Tags": [{"Key": "provider", "Value": "VeADK"}],
|
|
103
|
+
}
|
|
104
|
+
try:
|
|
105
|
+
res = self._ve_tls_request(
|
|
106
|
+
client=self._client, api="CreateProject", body=request_body
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
if res["ErrorCode"] == "ProjectAlreadyExist":
|
|
110
|
+
logger.debug(
|
|
111
|
+
f"Log project '{project_name}' already exists. Check its ID."
|
|
112
|
+
)
|
|
113
|
+
return self.get_project_id_by_name(project_name)
|
|
114
|
+
|
|
115
|
+
return res["ProjectId"]
|
|
116
|
+
except KeyError:
|
|
117
|
+
raise ValueError(f"Failed to create log project: {res}")
|
|
118
|
+
|
|
119
|
+
def get_trace_instance_by_name(self, log_project_id: str, trace_instance_name: str):
|
|
120
|
+
logger.info(f"Getting trace instance '{trace_instance_name}' in TLS...")
|
|
121
|
+
|
|
122
|
+
request_body = {
|
|
123
|
+
"PageSize": 100,
|
|
124
|
+
"ProjectId": log_project_id,
|
|
125
|
+
"TraceInstanceName": trace_instance_name,
|
|
126
|
+
}
|
|
127
|
+
try:
|
|
128
|
+
res = self._ve_tls_request(
|
|
129
|
+
client=self._client,
|
|
130
|
+
api="DescribeTraceInstances",
|
|
131
|
+
body=request_body,
|
|
132
|
+
method="GET",
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
for instance in res["TraceInstances"]:
|
|
136
|
+
if instance["TraceInstanceName"] == trace_instance_name:
|
|
137
|
+
return instance
|
|
138
|
+
except KeyError:
|
|
139
|
+
raise ValueError(f"Failed to create log project: {res}")
|
|
140
|
+
|
|
141
|
+
def create_tracing_instance(self, log_project_id: str, trace_instance_name: str):
|
|
142
|
+
"""Create a tracing instance in TLS.
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
instance_name (str): The name of the tracing instance to create.
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
dict: The tracing instance.
|
|
149
|
+
"""
|
|
150
|
+
logger.info(f"Creating tracing instance '{trace_instance_name}' in TLS...")
|
|
151
|
+
|
|
152
|
+
request_body = {
|
|
153
|
+
"ProjectId": log_project_id,
|
|
154
|
+
"TraceInstanceName": trace_instance_name,
|
|
155
|
+
"Description": "Created by Volcengine Agent Development Kit (VeADK)",
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
try:
|
|
159
|
+
res = None
|
|
160
|
+
res = self._ve_tls_request(
|
|
161
|
+
client=self._client,
|
|
162
|
+
api="CreateTraceInstance",
|
|
163
|
+
body=request_body,
|
|
164
|
+
request_headers={"TraceTag": "veadk"},
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
if "ErrorCode" in res and res["ErrorCode"] == "TopicAlreadyExist":
|
|
168
|
+
logger.debug(
|
|
169
|
+
f"Tracing instance '{trace_instance_name}' already exists. Check its ID."
|
|
170
|
+
)
|
|
171
|
+
return self.get_trace_instance_by_name(
|
|
172
|
+
log_project_id, trace_instance_name
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
# after creation, get the trace instance details
|
|
176
|
+
res = self._ve_tls_request(
|
|
177
|
+
client=self._client,
|
|
178
|
+
api="DescribeTraceInstance",
|
|
179
|
+
params={"TraceInstanceId": res["TraceInstanceId"]},
|
|
180
|
+
method="GET",
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
logger.info(
|
|
184
|
+
f"Create tracing instance finished, tracing instance ID: {res['TraceInstanceId']}"
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
return res
|
|
188
|
+
except KeyError:
|
|
189
|
+
raise ValueError(f"Failed to create tracing instance: {res}")
|
|
190
|
+
|
|
191
|
+
def get_trace_topic_id(self):
|
|
192
|
+
"""Get the trace topic ID under VeADK default names.
|
|
193
|
+
|
|
194
|
+
This method is a tool function just designed for `veadk/config.py`.
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
str: The trace topic ID.
|
|
198
|
+
"""
|
|
199
|
+
logger.info("Getting trace topic ID for tracing instance in TLS...")
|
|
200
|
+
|
|
201
|
+
log_project_id = self.create_log_project(DEFAULT_TLS_LOG_PROJECT_NAME)
|
|
202
|
+
|
|
203
|
+
instance = self.create_tracing_instance(
|
|
204
|
+
log_project_id, DEFAULT_TLS_TRACING_INSTANCE_NAME
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
if not instance:
|
|
208
|
+
raise ValueError("None instance")
|
|
209
|
+
|
|
210
|
+
logger.info(f"Fetched trace topic id: {instance['TraceTopicId']}")
|
|
211
|
+
|
|
212
|
+
return instance["TraceTopicId"]
|