veadk-python 0.2.5__py3-none-any.whl → 0.2.7__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.

Potentially problematic release.


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

Files changed (94) hide show
  1. veadk/agent.py +29 -22
  2. veadk/agent_builder.py +94 -0
  3. veadk/auth/__init__.py +13 -0
  4. veadk/auth/base_auth.py +22 -0
  5. veadk/auth/veauth/__init__.py +13 -0
  6. veadk/auth/veauth/apmplus_veauth.py +65 -0
  7. veadk/auth/veauth/ark_veauth.py +77 -0
  8. veadk/auth/veauth/base_veauth.py +50 -0
  9. veadk/auth/veauth/cozeloop_veauth.py +13 -0
  10. veadk/auth/veauth/prompt_pilot_veauth.py +60 -0
  11. veadk/auth/veauth/vesearch_veauth.py +62 -0
  12. veadk/cli/cli.py +2 -0
  13. veadk/cli/cli_deploy.py +5 -2
  14. veadk/cli/cli_init.py +25 -6
  15. veadk/cli/cli_pipeline.py +220 -0
  16. veadk/cli/cli_prompt.py +4 -4
  17. veadk/config.py +45 -81
  18. veadk/configs/__init__.py +13 -0
  19. veadk/configs/database_configs.py +83 -0
  20. veadk/configs/model_configs.py +42 -0
  21. veadk/configs/tool_configs.py +42 -0
  22. veadk/configs/tracing_configs.py +110 -0
  23. veadk/consts.py +32 -1
  24. veadk/database/database_adapter.py +256 -3
  25. veadk/database/kv/redis_database.py +47 -0
  26. veadk/database/local_database.py +23 -4
  27. veadk/database/relational/mysql_database.py +58 -0
  28. veadk/database/vector/opensearch_vector_database.py +6 -3
  29. veadk/database/viking/viking_database.py +272 -36
  30. veadk/integrations/ve_code_pipeline/__init__.py +13 -0
  31. veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +431 -0
  32. veadk/integrations/ve_cozeloop/__init__.py +13 -0
  33. veadk/integrations/ve_cozeloop/ve_cozeloop.py +96 -0
  34. veadk/integrations/ve_cr/__init__.py +13 -0
  35. veadk/integrations/ve_cr/ve_cr.py +220 -0
  36. veadk/integrations/ve_faas/template/cookiecutter.json +3 -2
  37. veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +2 -2
  38. veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +1 -1
  39. veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +24 -1
  40. veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +3 -1
  41. veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +1 -12
  42. veadk/integrations/ve_faas/ve_faas.py +352 -35
  43. veadk/integrations/ve_faas/web_template/cookiecutter.json +17 -0
  44. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/__init__.py +13 -0
  45. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +23 -0
  46. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +2 -0
  47. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +41 -0
  48. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +23 -0
  49. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +123 -0
  50. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +46 -0
  51. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +36 -0
  52. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +4 -0
  53. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +21 -0
  54. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +368 -0
  55. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
  56. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +21 -0
  57. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +24 -0
  58. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +21 -0
  59. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +53 -0
  60. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +45 -0
  61. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +29 -0
  62. veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +14 -0
  63. veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +6 -3
  64. veadk/integrations/ve_tls/__init__.py +13 -0
  65. veadk/integrations/ve_tls/utils.py +117 -0
  66. veadk/integrations/ve_tls/ve_tls.py +208 -0
  67. veadk/integrations/ve_tos/ve_tos.py +128 -73
  68. veadk/knowledgebase/knowledgebase.py +116 -20
  69. veadk/memory/long_term_memory.py +20 -21
  70. veadk/memory/short_term_memory_processor.py +9 -4
  71. veadk/runner.py +213 -223
  72. veadk/tools/builtin_tools/vesearch.py +2 -2
  73. veadk/tools/builtin_tools/video_generate.py +27 -20
  74. veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +5 -0
  75. veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +253 -129
  76. veadk/tracing/telemetry/attributes/extractors/types.py +15 -4
  77. veadk/tracing/telemetry/exporters/apmplus_exporter.py +158 -12
  78. veadk/tracing/telemetry/exporters/cozeloop_exporter.py +4 -9
  79. veadk/tracing/telemetry/exporters/tls_exporter.py +4 -10
  80. veadk/tracing/telemetry/opentelemetry_tracer.py +11 -5
  81. veadk/tracing/telemetry/telemetry.py +23 -5
  82. veadk/utils/logger.py +1 -1
  83. veadk/utils/misc.py +48 -0
  84. veadk/utils/volcengine_sign.py +6 -2
  85. veadk/version.py +1 -1
  86. {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/METADATA +2 -1
  87. veadk_python-0.2.7.dist-info/RECORD +172 -0
  88. veadk_python-0.2.5.dist-info/RECORD +0 -127
  89. /veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{{ cookiecutter.app_name|replace('-', '_') }} → {{ cookiecutter.app_name }}}/__init__.py +0 -0
  90. /veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{{ cookiecutter.app_name|replace('-', '_') }} → {{ cookiecutter.app_name }}}/agent.py +0 -0
  91. {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/WHEEL +0 -0
  92. {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/entry_points.txt +0 -0
  93. {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/licenses/LICENSE +0 -0
  94. {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,220 @@
1
+ # Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import time
16
+
17
+ from veadk.consts import (
18
+ DEFAULT_CR_INSTANCE_NAME,
19
+ DEFAULT_CR_NAMESPACE_NAME,
20
+ DEFAULT_CR_REPO_NAME,
21
+ )
22
+ from veadk.utils.logger import get_logger
23
+ from veadk.utils.volcengine_sign import ve_request
24
+
25
+ logger = get_logger(__name__)
26
+
27
+
28
+ class VeCR:
29
+ def __init__(self, access_key: str, secret_key: str, region: str = "cn-beijing"):
30
+ self.ak = access_key
31
+ self.sk = secret_key
32
+ self.region = region
33
+ assert region in ["cn-beijing", "cn-guangzhou", "cn-shanghai"]
34
+ self.version = "2022-05-12"
35
+
36
+ def _create_instance(self, instance_name: str = DEFAULT_CR_INSTANCE_NAME) -> str:
37
+ """
38
+ create cr instance
39
+
40
+ Args:
41
+ instance_name: cr instance name
42
+
43
+ Returns:
44
+ cr instance name
45
+ """
46
+ status = self._check_instance(instance_name)
47
+ if status != "NONEXIST":
48
+ logger.debug(f"cr instance {instance_name} already running")
49
+ return instance_name
50
+ response = ve_request(
51
+ request_body={
52
+ "Name": instance_name,
53
+ "ResourceTags": [
54
+ {"Key": "provider", "Value": "veadk"},
55
+ ],
56
+ },
57
+ action="CreateRegistry",
58
+ ak=self.ak,
59
+ sk=self.sk,
60
+ service="cr",
61
+ version=self.version,
62
+ region=self.region,
63
+ host=f"cr.{self.region}.volcengineapi.com",
64
+ )
65
+ logger.debug(f"create cr instance {instance_name}: {response}")
66
+
67
+ if "Error" in response["ResponseMetadata"]:
68
+ error_code = response["ResponseMetadata"]["Error"]["Code"]
69
+ error_message = response["ResponseMetadata"]["Error"]["Message"]
70
+ if error_code == "AlreadyExists.Registry":
71
+ logger.debug(f"cr instance {instance_name} already exists")
72
+ return instance_name
73
+ else:
74
+ logger.error(
75
+ f"Error create cr instance {instance_name}: {error_code} {error_message}"
76
+ )
77
+ raise ValueError(
78
+ f"Error create cr instance {instance_name}: {error_code} {error_message}"
79
+ )
80
+
81
+ while True:
82
+ status = self._check_instance(instance_name)
83
+ if status == "Running":
84
+ break
85
+ elif status == "Failed":
86
+ raise ValueError(f"cr instance {instance_name} create failed")
87
+ else:
88
+ logger.debug(f"cr instance status: {status}")
89
+ time.sleep(30)
90
+
91
+ return instance_name
92
+
93
+ def _check_instance(self, instance_name: str) -> str:
94
+ """
95
+ check cr instance status
96
+
97
+ Args:
98
+ instance_name: cr instance name
99
+
100
+ Returns:
101
+ cr instance status
102
+ """
103
+ response = ve_request(
104
+ request_body={
105
+ "Filter": {
106
+ "Names": [instance_name],
107
+ }
108
+ },
109
+ action="ListRegistries",
110
+ ak=self.ak,
111
+ sk=self.sk,
112
+ service="cr",
113
+ version=self.version,
114
+ region=self.region,
115
+ host=f"cr.{self.region}.volcengineapi.com",
116
+ )
117
+ logger.debug(f"check cr instance {instance_name}: {response}")
118
+
119
+ try:
120
+ if response["Result"]["TotalCount"] == 0:
121
+ return "NONEXIST"
122
+ return response["Result"]["Items"][0]["Status"]["Phase"]
123
+ except Exception as _:
124
+ raise ValueError(f"Error check cr instance {instance_name}: {response}")
125
+
126
+ def _create_namespace(
127
+ self,
128
+ instance_name: str = DEFAULT_CR_INSTANCE_NAME,
129
+ namespace_name: str = DEFAULT_CR_NAMESPACE_NAME,
130
+ ) -> str:
131
+ """
132
+ create cr namespace
133
+
134
+ Args:
135
+ instance_name: cr instance name
136
+ namespace_name: cr namespace name
137
+
138
+ Returns:
139
+ cr namespace name
140
+ """
141
+ response = ve_request(
142
+ request_body={
143
+ "Name": namespace_name,
144
+ "Registry": instance_name,
145
+ },
146
+ action="CreateNamespace",
147
+ ak=self.ak,
148
+ sk=self.sk,
149
+ service="cr",
150
+ version=self.version,
151
+ region=self.region,
152
+ host=f"cr.{self.region}.volcengineapi.com",
153
+ )
154
+ logger.debug(f"create cr namespace {namespace_name}: {response}")
155
+
156
+ if "Error" in response["ResponseMetadata"]:
157
+ error_code = response["ResponseMetadata"]["Error"]["Code"]
158
+ error_message = response["ResponseMetadata"]["Error"]["Message"]
159
+ if error_code == "AlreadyExists.Namespace":
160
+ logger.warning(f"cr namespace {namespace_name} already exists")
161
+ return namespace_name
162
+ else:
163
+ logger.error(
164
+ f"Error create cr namespace {namespace_name}: {error_code} {error_message}"
165
+ )
166
+ raise ValueError(
167
+ f"Error create cr namespace {namespace_name}: {error_code} {error_message}"
168
+ )
169
+
170
+ return namespace_name
171
+
172
+ def _create_repo(
173
+ self,
174
+ instance_name: str = DEFAULT_CR_INSTANCE_NAME,
175
+ namespace_name: str = DEFAULT_CR_NAMESPACE_NAME,
176
+ repo_name: str = DEFAULT_CR_REPO_NAME,
177
+ ) -> str:
178
+ """
179
+ create cr repo
180
+
181
+ Args:
182
+ instance_name: cr instance name
183
+ namespace_name: cr namespace name
184
+ repo_name: cr repo name
185
+
186
+ Returns:
187
+ cr repo name
188
+ """
189
+ response = ve_request(
190
+ request_body={
191
+ "Name": repo_name,
192
+ "Registry": instance_name,
193
+ "Namespace": namespace_name,
194
+ "Description": "veadk cr repo",
195
+ },
196
+ action="CreateRepository",
197
+ ak=self.ak,
198
+ sk=self.sk,
199
+ service="cr",
200
+ version=self.version,
201
+ region=self.region,
202
+ host=f"cr.{self.region}.volcengineapi.com",
203
+ )
204
+ logger.debug(f"create cr repo {repo_name}: {response}")
205
+
206
+ if "Error" in response["ResponseMetadata"]:
207
+ error_code = response["ResponseMetadata"]["Error"]["Code"]
208
+ error_message = response["ResponseMetadata"]["Error"]["Message"]
209
+ if error_code == "AlreadyExists.Repository":
210
+ logger.debug(f"cr repo {repo_name} already exists")
211
+ return repo_name
212
+ else:
213
+ logger.error(
214
+ f"Error create cr repo {repo_name}: {error_code} {error_message}"
215
+ )
216
+ raise ValueError(
217
+ f"Error create cr repo {repo_name}: {error_code} {error_message}"
218
+ )
219
+
220
+ return repo_name
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "local_dir_name": "veadk_vefaas_proj",
3
- "app_name": "weather-report",
3
+ "app_name": "weather_report",
4
4
  "agent_module_name": "weather_agent",
5
5
  "short_term_memory_backend": "local",
6
6
  "vefaas_application_name": "weather-reporter",
7
7
  "veapig_instance_name": "",
8
8
  "veapig_service_name": "",
9
9
  "veapig_upstream_name": "",
10
- "use_adk_web": false
10
+ "use_adk_web": false,
11
+ "veadk_version": ""
11
12
  }
@@ -95,8 +95,8 @@ async def main():
95
95
  message = "How is the weather like in Beijing?"
96
96
  print(f"Test message: {message}")
97
97
 
98
- await _send_msg_with_a2a(cloud_app=cloud_app, message=message)
99
- await _send_msg_with_mcp(cloud_app=cloud_app, message=message)
98
+ # await _send_msg_with_a2a(cloud_app=cloud_app, message=message)
99
+ # await _send_msg_with_mcp(cloud_app=cloud_app, message=message)
100
100
 
101
101
 
102
102
  if __name__ == "__main__":
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from {{ cookiecutter.app_name|replace('-', '_') }}.agent import agent # type: ignore
15
+ from {{ cookiecutter.app_name }}.agent import agent # type: ignore
16
16
 
17
17
  from veadk.memory.short_term_memory import ShortTermMemory
18
18
  from veadk.types import AgentRunConfig
@@ -36,6 +36,8 @@ from veadk.tracing.telemetry.exporters.tls_exporter import TLSExporter
36
36
  from veadk.tracing.telemetry.opentelemetry_tracer import OpentelemetryTracer
37
37
  from veadk.types import AgentRunConfig
38
38
  from veadk.utils.logger import get_logger
39
+ from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
40
+ from opentelemetry import context
39
41
 
40
42
  logger = get_logger(__name__)
41
43
 
@@ -117,6 +119,8 @@ async def agent_card() -> dict:
117
119
  agent_card = await agent_card_builder.build()
118
120
  return agent_card.model_dump()
119
121
 
122
+ async def get_cozeloop_space_id() -> dict:
123
+ return {"space_id": os.getenv("OBSERVABILITY_OPENTELEMETRY_COZELOOP_SERVICE_NAME", default="")}
120
124
 
121
125
  load_tracer()
122
126
 
@@ -132,7 +136,7 @@ a2a_app = init_app(
132
136
 
133
137
  a2a_app.post("/run_agent", operation_id="run_agent", tags=["mcp"])(run_agent_func)
134
138
  a2a_app.get("/agent_card", operation_id="agent_card", tags=["mcp"])(agent_card)
135
-
139
+ a2a_app.get("/get_cozeloop_space_id", operation_id="get_cozeloop_space_id", tags=["mcp"])(get_cozeloop_space_id)
136
140
 
137
141
  # === Build mcp server ===
138
142
 
@@ -159,6 +163,25 @@ app = FastAPI(
159
163
  redoc_url=None
160
164
  )
161
165
 
166
+ @app.middleware("http")
167
+ async def otel_context_middleware(request, call_next):
168
+ carrier = {
169
+ "traceparent": request.headers.get("Traceparent"),
170
+ "tracestate": request.headers.get("Tracestate"),
171
+ }
172
+ logger.debug(f"carrier: {carrier}")
173
+ if carrier["traceparent"] is None:
174
+ return await call_next(request)
175
+ else:
176
+ ctx = TraceContextTextMapPropagator().extract(carrier=carrier)
177
+ logger.debug(f"ctx: {ctx}")
178
+ token = context.attach(ctx)
179
+ try:
180
+ response = await call_next(request)
181
+ finally:
182
+ context.detach(token)
183
+ return response
184
+
162
185
  # Mount A2A routes to main app
163
186
  for route in a2a_app.routes:
164
187
  app.routes.append(route)
@@ -1 +1,3 @@
1
- veadk-python
1
+ veadk-python=={{ cookiecutter.veadk_version }}
2
+ fastapi
3
+ uvicorn[standard]
@@ -16,6 +16,7 @@ export SERVER_HOST=$HOST
16
16
  export SERVER_PORT=$PORT
17
17
 
18
18
  export PYTHONPATH=$PYTHONPATH:./site-packages
19
+
19
20
  # Parse arguments
20
21
  while [[ $# -gt 0 ]]; do
21
22
  case $1 in
@@ -33,18 +34,6 @@ while [[ $# -gt 0 ]]; do
33
34
  esac
34
35
  done
35
36
 
36
- # in case of deployment deps not installed in user's requirements.txt
37
- if pip list | grep -q "^fastapi \|^uvicorn "; then
38
- echo "fastapi and uvicorn already installed"
39
- else
40
- python3 -m pip install uvicorn[standard] fastapi
41
- fi
42
-
43
- # Check if MODEL_AGENT_API_KEY is set
44
- if [ -z "$MODEL_AGENT_API_KEY" ]; then
45
- echo "MODEL_AGENT_API_KEY is not set. Please set it in your environment variables."
46
- exit 1
47
- fi
48
37
 
49
38
  USE_ADK_WEB=${USE_ADK_WEB:-False}
50
39