Skip to content

Commit 761e491

Browse files
authored
fix: resolve fixed hint url in byteplus issue (#60)
2 parents 6802b1a + 37700b6 commit 761e491

13 files changed

Lines changed: 167 additions & 28 deletions

File tree

agentkit/apps/agent_server_app/agent_server_app.py

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -169,20 +169,18 @@ async def run_agent_sse(req: RunAgentRequest) -> StreamingResponse:
169169
async def event_generator():
170170
try:
171171
stream_mode = (
172-
StreamingMode.SSE
173-
if req.streaming
174-
else StreamingMode.NONE
172+
StreamingMode.SSE if req.streaming else StreamingMode.NONE
175173
)
176174
runner = await self.server.get_runner_async(req.app_name)
177175
async with Aclosing(
178-
runner.run_async(
179-
user_id=req.user_id,
180-
session_id=req.session_id,
181-
new_message=req.new_message,
182-
state_delta=req.state_delta,
183-
run_config=RunConfig(streaming_mode=stream_mode),
184-
invocation_id=req.invocation_id,
185-
)
176+
runner.run_async(
177+
user_id=req.user_id,
178+
session_id=req.session_id,
179+
new_message=req.new_message,
180+
state_delta=req.state_delta,
181+
run_config=RunConfig(streaming_mode=stream_mode),
182+
invocation_id=req.invocation_id,
183+
)
186184
) as agen:
187185
async for event in agen:
188186
# ADK Web renders artifacts from `actions.artifactDelta`
@@ -191,9 +189,9 @@ async def event_generator():
191189
# 2) a content-less "action-only" event carrying `artifactDelta`
192190
events_to_stream = [event]
193191
if (
194-
event.actions.artifact_delta
195-
and event.content
196-
and event.content.parts
192+
event.actions.artifact_delta
193+
and event.content
194+
and event.content.parts
197195
):
198196
content_event = event.model_copy(deep=True)
199197
content_event.actions.artifact_delta = {}
@@ -230,9 +228,9 @@ async def event_generator():
230228
routes = self.app.router.routes
231229
for i, r in enumerate(routes):
232230
if (
233-
getattr(r, "path", None) == "/run_sse"
234-
and "POST" in getattr(r, "methods", set())
235-
and getattr(r,"endpoint", None) == run_agent_sse
231+
getattr(r, "path", None) == "/run_sse"
232+
and "POST" in getattr(r, "methods", set())
233+
and getattr(r, "endpoint", None) == run_agent_sse
236234
):
237235
routes.insert(0, routes.pop(i))
238236
break
@@ -265,7 +263,9 @@ async def _invoke_compat(request: Request):
265263
# Determine app_name from loader
266264
app_names = self.server.agent_loader.list_agents()
267265
if not app_names:
268-
exception = HTTPException(status_code=404, detail="No agents configured")
266+
exception = HTTPException(
267+
status_code=404, detail="No agents configured"
268+
)
269269
telemetry.trace_agent_server_finish(
270270
path="/invoke", func_result="", exception=exception
271271
)
@@ -293,7 +293,6 @@ async def _invoke_compat(request: Request):
293293
text = ""
294294
content = types.UserContent(parts=[types.Part(text=text or "")])
295295

296-
297296
# Ensure session exists
298297
session = await self.server.session_service.get_session(
299298
app_name=app_name, user_id=user_id, session_id=session_id

agentkit/apps/agent_server_app/telemetry.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,9 @@ def trace_agent_server_finish(
106106
if exception:
107107
self.handle_exception(span, exception)
108108
if getattr(exception, "status_code", None):
109-
attributes["error_type"] = f"{exception.__class__.__name__}_{exception.status_code}"
109+
attributes["error_type"] = (
110+
f"{exception.__class__.__name__}_{exception.status_code}"
111+
)
110112
else:
111113
attributes["error_type"] = exception.__class__.__name__
112114
# only record invoke request latency metrics

agentkit/platform/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from typing import Optional
1818

1919
from agentkit.platform.configuration import VolcConfiguration, Endpoint, Credentials
20+
from agentkit.platform.console_urls import agentkit_enable_services_url
2021
from agentkit.platform.provider import CloudProvider
2122
from agentkit.platform.constants import DEFAULT_REGION_RULES
2223

@@ -27,6 +28,7 @@
2728
"CloudProvider",
2829
"resolve_endpoint",
2930
"resolve_credentials",
31+
"agentkit_enable_services_url",
3032
"DEFAULT_REGION_RULES",
3133
]
3234

agentkit/platform/console_urls.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from __future__ import annotations
2+
3+
import os
4+
from typing import Optional
5+
from urllib.parse import urlencode
6+
7+
from agentkit.platform.configuration import VolcConfiguration
8+
from agentkit.platform.provider import CloudProvider
9+
10+
11+
def agentkit_enable_services_url(
12+
*,
13+
region: Optional[str] = None,
14+
project_name: Optional[str] = None,
15+
platform_config: Optional[VolcConfiguration] = None,
16+
) -> str:
17+
if platform_config is not None and region is not None:
18+
raise ValueError("Only one of 'region' or 'platform_config' can be provided.")
19+
cfg = platform_config or VolcConfiguration(region=region)
20+
ep = cfg.get_service_endpoint("agentkit")
21+
22+
base = (
23+
"https://console.byteplus.com"
24+
if cfg.provider == CloudProvider.BYTEPLUS
25+
else "https://console.volcengine.com"
26+
)
27+
28+
path = f"/agentkit/region:agentkit+{ep.region}/auth"
29+
30+
if cfg.provider != CloudProvider.BYTEPLUS:
31+
return f"{base}{path}"
32+
33+
project = project_name or os.getenv("AGENTKIT_CONSOLE_PROJECT_NAME") or "default"
34+
query = urlencode({"projectName": project})
35+
return f"{base}{path}?{query}"

agentkit/toolkit/builders/ve_pipeline.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class VeCPCRBuilderConfig(AutoSerializableMixin):
6464
default=None,
6565
metadata={"system": True, "description": "Resolved cloud provider"},
6666
)
67+
agentkit_region: str = field(
68+
default="",
69+
metadata={"system": True, "description": "AgentKit service region"},
70+
)
6771

6872
tos_bucket: str = field(
6973
default=AUTO_CREATE_VE,
@@ -1054,8 +1058,28 @@ def check_owned() -> bool:
10541058

10551059
except Exception as e:
10561060
if "AccountDisable" in str(e):
1061+
from agentkit.platform import (
1062+
VolcConfiguration,
1063+
agentkit_enable_services_url,
1064+
)
1065+
1066+
provider = getattr(config, "cloud_provider", None) or getattr(
1067+
getattr(config, "common_config", None), "cloud_provider", None
1068+
)
1069+
region_hint = (
1070+
getattr(config, "agentkit_region", None)
1071+
or getattr(config, "cp_region", None)
1072+
or getattr(config, "cr_region", None)
1073+
or getattr(config, "tos_region", None)
1074+
)
1075+
url = agentkit_enable_services_url(
1076+
platform_config=VolcConfiguration(
1077+
region=region_hint or None, provider=provider or None
1078+
)
1079+
)
10571080
raise Exception(
1058-
"Tos Service is not enabled, please enable it in the console. Enable services at: https://console.volcengine.com/agentkit/region:agentkit+cn-beijing/auth"
1081+
"Tos Service is not enabled, please enable it in the console. "
1082+
f"Enable services at: {url}"
10591083
)
10601084
if "TooManyBuckets" in str(e):
10611085
raise Exception(

agentkit/toolkit/executors/base_executor.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,13 @@ def _preflight_check(
295295

296296
if missing:
297297
self.logger.warning(f"Services not enabled: {missing}")
298-
return PreflightResult(passed=False, missing_services=missing)
298+
from agentkit.platform import agentkit_enable_services_url
299+
300+
return PreflightResult(
301+
passed=False,
302+
missing_services=missing,
303+
auth_url=agentkit_enable_services_url(region=region),
304+
)
299305

300306
self.logger.debug(f"All required services are enabled: {required_services}")
301307
return PreflightResult(passed=True, missing_services=[])

agentkit/toolkit/executors/lifecycle_executor.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,13 @@ def _combined_preflight_check(
102102

103103
if missing:
104104
self.logger.warning(f"Services not enabled: {missing}")
105-
return PreflightResult(passed=False, missing_services=missing)
105+
from agentkit.platform import agentkit_enable_services_url
106+
107+
return PreflightResult(
108+
passed=False,
109+
missing_services=missing,
110+
auth_url=agentkit_enable_services_url(region=region),
111+
)
106112

107113
self.logger.debug(f"All required services are enabled: {required_list}")
108114
return PreflightResult(passed=True, missing_services=[])

agentkit/toolkit/models.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,7 @@ class PreflightResult:
200200

201201
passed: bool
202202
missing_services: List[str] = field(default_factory=list)
203-
auth_url: str = (
204-
"https://console.volcengine.com/agentkit/region:agentkit+cn-beijing/auth"
205-
)
203+
auth_url: str = ""
206204

207205
@property
208206
def message(self) -> str:

agentkit/toolkit/strategies/cloud_strategy.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ def _to_builder_config(
301301
return VeCPCRBuilderConfig(
302302
common_config=common_config,
303303
cloud_provider=resolved_provider,
304+
agentkit_region=resolver.resolve("agentkit"),
304305
cp_region=resolver.resolve("cp"),
305306
tos_bucket=strategy_config.tos_bucket,
306307
tos_region=resolver.resolve("tos"),

agentkit/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
VERSION = "0.5.3"
15+
VERSION = "0.5.4"

0 commit comments

Comments
 (0)