Skip to content

Commit b99e547

Browse files
author
dawnguo
committed
refactor(skills): 提取vestack技能下载逻辑到独立函数并更新环境变量
将vestack环境下的技能下载逻辑提取到独立函数`_download_skill_via_vestack`中,提高代码复用性 同时将环境变量`AGENTKIT_TOOL_SCHEME`统一更新为`AGENTKIT_TOP_SCHEME`
1 parent f9a7d95 commit b99e547

File tree

5 files changed

+207
-156
lines changed

5 files changed

+207
-156
lines changed

docs/docs/tools/builtin.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ VeADK 集成了以下火山引擎工具:
187187
- `AGENTKIT_TOOL_HOST`:用于调用火山引擎AgentKit Tools的EndPoint
188188
- `AGENTKIT_TOOL_SERVICE_CODE`:用于调用AgentKit Tools的ServiceCode
189189
- `AGENTKIT_TOOL_SCHEME`:用于切换调用 AgentKit Tools 的协议,允许 `http`/`https`,默认 `https`
190+
- `AGENTKIT_TOP_SCHEME`:用于切换调用 AgentKit TOP 的协议,允许 `http`/`https`,默认 `https`
190191

191192
环境变量列表:
192193

veadk/skills/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def load_skills_from_cloud(skill_space_ids: str) -> list[Skill]:
174174
"InnerTags": {"source": "sandbox"},
175175
}
176176
logger.debug(f"ListSkillsBySpaceId request body: {request_body}")
177-
scheme = os.getenv("AGENTKIT_TOOL_SCHEME", "https").lower()
177+
scheme = os.getenv("AGENTKIT_TOP_SCHEME", "https").lower()
178178

179179
response = ve_request(
180180
request_body=request_body,

veadk/tools/skills_tools/download_skills_tool.py

Lines changed: 95 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,93 @@
2828
logger = get_logger(__name__)
2929

3030

31+
def _download_skill_via_vestack(
32+
tos_path: str,
33+
skill_name: str,
34+
access_key: str,
35+
secret_key: str,
36+
session_token: str,
37+
service: str,
38+
region: str,
39+
host: str,
40+
scheme: str,
41+
zip_path: Path,
42+
) -> bool:
43+
import json
44+
import requests
45+
from veadk.utils.volcengine_sign import ve_request
46+
47+
try:
48+
path_parts = tos_path.split("/")
49+
if len(path_parts) >= 3:
50+
skill_id = path_parts[1]
51+
skill_version = path_parts[2]
52+
else:
53+
logger.error(
54+
f"Invalid TosPath format for skill '{skill_name}': {tos_path}"
55+
)
56+
return False
57+
except Exception as e:
58+
logger.error(
59+
f"Failed to parse TosPath for skill '{skill_name}': {e}"
60+
)
61+
return False
62+
63+
# Call GenTempTosObjectDownloadUrl API
64+
temp_url_request_body = {
65+
"SkillId": skill_id,
66+
"SkillVersion": skill_version,
67+
}
68+
logger.debug(
69+
f"GenTempTosObjectDownloadUrl request body: {temp_url_request_body}"
70+
)
71+
72+
temp_url_res = ve_request(
73+
request_body=temp_url_request_body,
74+
action="GenTempTosObjectDownloadUrl",
75+
ak=access_key,
76+
sk=secret_key,
77+
service=service,
78+
version="2025-10-30",
79+
region=region,
80+
host=host,
81+
header={"X-Security-Token": session_token},
82+
scheme=scheme,
83+
)
84+
85+
if isinstance(temp_url_res, str):
86+
temp_url_res = json.loads(temp_url_res)
87+
88+
if (
89+
"ResponseMetadata" in temp_url_res
90+
and "Error" in temp_url_res["ResponseMetadata"]
91+
):
92+
error_details = temp_url_res["ResponseMetadata"]["Error"]
93+
logger.error(
94+
f"Failed to get temporary download URL for '{skill_name}': {error_details}"
95+
)
96+
return False
97+
else:
98+
signed_url = temp_url_res.get("Result", {}).get("SignedUrl")
99+
if not signed_url:
100+
logger.error(
101+
f"Failed to get SignedUrl from GenTempTosObjectDownloadUrl response: {temp_url_res}"
102+
)
103+
return False
104+
else:
105+
try:
106+
response = requests.get(signed_url)
107+
response.raise_for_status()
108+
with open(zip_path, "wb") as f:
109+
f.write(response.content)
110+
return True
111+
except Exception as e:
112+
logger.warning(
113+
f"Failed to download skill '{skill_name}' from minio: {e}"
114+
)
115+
return False
116+
117+
31118
def download_skills_tool(
32119
download_path: str, skill_names: Optional[list[str]] = None
33120
) -> str:
@@ -92,7 +179,7 @@ def download_skills_tool(
92179

93180
all_downloaded_skills = []
94181

95-
scheme = os.getenv("AGENTKIT_TOOL_SCHEME", "https").lower()
182+
scheme = os.getenv("AGENTKIT_TOP_SCHEME", "https").lower()
96183
# Iterate through each skill space
97184
for skill_space_id in skill_space_ids_list:
98185
try:
@@ -165,79 +252,18 @@ def download_skills_tool(
165252
zip_path = download_dir / f"{skill_name}.zip"
166253

167254
if cloud_provider == "vestack":
168-
import requests
169-
170-
try:
171-
path_parts = tos_path.split("/")
172-
if len(path_parts) >= 3:
173-
skill_id = path_parts[1]
174-
skill_version = path_parts[2]
175-
else:
176-
logger.error(
177-
f"Invalid TosPath format for skill '{skill_name}': {tos_path}"
178-
)
179-
success = False
180-
continue
181-
except Exception as e:
182-
logger.error(
183-
f"Failed to parse TosPath for skill '{skill_name}': {e}"
184-
)
185-
success = False
186-
continue
187-
188-
# Call GenTempTosObjectDownloadUrl API
189-
temp_url_request_body = {
190-
"SkillId": skill_id,
191-
"SkillVersion": skill_version,
192-
}
193-
logger.debug(
194-
f"GenTempTosObjectDownloadUrl request body: {temp_url_request_body}"
195-
)
196-
197-
temp_url_res = ve_request(
198-
request_body=temp_url_request_body,
199-
action="GenTempTosObjectDownloadUrl",
200-
ak=access_key,
201-
sk=secret_key,
255+
success = _download_skill_via_vestack(
256+
tos_path=tos_path,
257+
skill_name=skill_name,
258+
access_key=access_key,
259+
secret_key=secret_key,
260+
session_token=session_token,
202261
service=service,
203-
version="2025-10-30",
204262
region=region,
205263
host=host,
206-
header={"X-Security-Token": session_token},
207264
scheme=scheme,
265+
zip_path=zip_path,
208266
)
209-
210-
if isinstance(temp_url_res, str):
211-
temp_url_res = json.loads(temp_url_res)
212-
213-
if (
214-
"ResponseMetadata" in temp_url_res
215-
and "Error" in temp_url_res["ResponseMetadata"]
216-
):
217-
error_details = temp_url_res["ResponseMetadata"]["Error"]
218-
logger.error(
219-
f"Failed to get temporary download URL for '{skill_name}': {error_details}"
220-
)
221-
success = False
222-
else:
223-
signed_url = temp_url_res.get("Result", {}).get("SignedUrl")
224-
if not signed_url:
225-
logger.error(
226-
f"Failed to get SignedUrl from GenTempTosObjectDownloadUrl response: {temp_url_res}"
227-
)
228-
success = False
229-
else:
230-
try:
231-
response = requests.get(signed_url)
232-
response.raise_for_status()
233-
with open(zip_path, "wb") as f:
234-
f.write(response.content)
235-
success = True
236-
except Exception as e:
237-
logger.warning(
238-
f"Failed to download skill '{skill_name}' from minio: {e}"
239-
)
240-
success = False
241267
else:
242268
success = tos_client.download(
243269
bucket_name=tos_bucket,

veadk/tools/skills_tools/register_skills_tool.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def register_skills_tool(
135135
return f"Error: Failed to get account id when registering skill '{skill_name}'."
136136

137137
tos_bucket = f"agentkit-platform-{region}-{account_id}-skill"
138-
scheme = os.getenv("AGENTKIT_TOOL_SCHEME", "https").lower()
138+
scheme = os.getenv("AGENTKIT_TOP_SCHEME", "https").lower()
139139
if cloud_provider == "vestack":
140140
import requests
141141

0 commit comments

Comments
 (0)