@@ -87,6 +87,7 @@ async def create_async(
8787 template_type : Literal [TemplateType .CODE_INTERPRETER ],
8888 template_name : Optional [str ] = None ,
8989 sandbox_idle_timeout_seconds : Optional [int ] = 600 ,
90+ sandbox_id : Optional [str ] = None ,
9091 nas_config : Optional ["NASConfig" ] = None ,
9192 oss_mount_config : Optional ["OSSMountConfig" ] = None ,
9293 polar_fs_config : Optional ["PolarFsConfig" ] = None ,
@@ -101,6 +102,7 @@ async def create_async(
101102 template_type : Literal [TemplateType .BROWSER ],
102103 template_name : Optional [str ] = None ,
103104 sandbox_idle_timeout_seconds : Optional [int ] = 600 ,
105+ sandbox_id : Optional [str ] = None ,
104106 nas_config : Optional ["NASConfig" ] = None ,
105107 oss_mount_config : Optional ["OSSMountConfig" ] = None ,
106108 polar_fs_config : Optional ["PolarFsConfig" ] = None ,
@@ -115,6 +117,7 @@ async def create_async(
115117 template_type : Literal [TemplateType .AIO ],
116118 template_name : Optional [str ] = None ,
117119 sandbox_idle_timeout_seconds : Optional [int ] = 600 ,
120+ sandbox_id : Optional [str ] = None ,
118121 nas_config : Optional ["NASConfig" ] = None ,
119122 oss_mount_config : Optional ["OSSMountConfig" ] = None ,
120123 polar_fs_config : Optional ["PolarFsConfig" ] = None ,
@@ -129,6 +132,7 @@ async def create_async(
129132 template_type : Literal [TemplateType .CUSTOM ],
130133 template_name : Optional [str ] = None ,
131134 sandbox_idle_timeout_seconds : Optional [int ] = 600 ,
135+ sandbox_id : Optional [str ] = None ,
132136 nas_config : Optional ["NASConfig" ] = None ,
133137 oss_mount_config : Optional ["OSSMountConfig" ] = None ,
134138 polar_fs_config : Optional ["PolarFsConfig" ] = None ,
@@ -142,6 +146,7 @@ async def create_async(
142146 template_type : TemplateType ,
143147 template_name : Optional [str ] = None ,
144148 sandbox_idle_timeout_seconds : Optional [int ] = 600 ,
149+ sandbox_id : Optional [str ] = None ,
145150 nas_config : Optional ["NASConfig" ] = None ,
146151 oss_mount_config : Optional ["OSSMountConfig" ] = None ,
147152 polar_fs_config : Optional ["PolarFsConfig" ] = None ,
@@ -178,6 +183,7 @@ async def create_async(
178183 base_sandbox = await cls .__get_client ().create_sandbox_async (
179184 template_name = template_name ,
180185 sandbox_idle_timeout_seconds = sandbox_idle_timeout_seconds ,
186+ sandbox_id = sandbox_id ,
181187 nas_config = nas_config ,
182188 oss_mount_config = oss_mount_config ,
183189 polar_fs_config = polar_fs_config ,
@@ -308,7 +314,9 @@ async def connect_async(
308314
309315 Args:
310316 sandbox_id: Sandbox ID
311- type: 可选的类型参数,用于类型提示和运行时验证
317+ template_type: 可选的类型参数,用于类型提示和运行时类型决定。
318+ 提供时直接使用该类型决定返回的子类,不调用 get_template(无需 AKSK)。
319+ 未提供时通过 get_template 获取类型(需要 AKSK)。
312320 config: 配置对象
313321
314322 Returns:
@@ -325,47 +333,38 @@ async def connect_async(
325333 sandbox_id , config = config
326334 )
327335
328- # 根据 template_name 获取 template 类型
329- if sandbox .template_name is None :
330- raise ValueError (f"Sandbox { sandbox_id } has no template_name" )
336+ resolved_type = template_type
337+ if resolved_type is None :
338+ if sandbox .template_name is None :
339+ raise ValueError (f"Sandbox { sandbox_id } has no template_name" )
331340
332- template = await cls .get_template_async (
333- sandbox .template_name , config = config
334- )
335-
336- # 如果提供了 type 参数,验证类型是否匹配
337- if (
338- template_type is not None
339- and template .template_type != template_type
340- ):
341- raise ValueError (
342- f"Sandbox { sandbox_id } has template type"
343- f" { template .template_type } , but expected { template_type } "
341+ template = await cls .get_template_async (
342+ sandbox .template_name , config = config
344343 )
344+ resolved_type = template .template_type
345345
346- # 根据 template 类型创建相应的 Sandbox 子类
347346 from agentrun .sandbox .aio_sandbox import AioSandbox
348347 from agentrun .sandbox .browser_sandbox import BrowserSandbox
349348 from agentrun .sandbox .code_interpreter_sandbox import (
350349 CodeInterpreterSandbox ,
351350 )
352351
353352 result = None
354- if template . template_type == TemplateType .CODE_INTERPRETER :
353+ if resolved_type == TemplateType .CODE_INTERPRETER :
355354 result = CodeInterpreterSandbox .model_validate (
356355 sandbox .model_dump (by_alias = False )
357356 )
358- elif template . template_type == TemplateType .BROWSER :
357+ elif resolved_type == TemplateType .BROWSER :
359358 result = BrowserSandbox .model_validate (
360359 sandbox .model_dump (by_alias = False )
361360 )
362- elif template . template_type == TemplateType .AIO :
361+ elif resolved_type == TemplateType .AIO :
363362 result = AioSandbox .model_validate (
364363 sandbox .model_dump (by_alias = False )
365364 )
366365 else :
367366 raise ValueError (
368- f"Unsupported template type: { template . template_type } . "
367+ f"Unsupported template type: { resolved_type } . "
369368 "Expected 'code-interpreter', 'browser' or 'aio'"
370369 )
371370
0 commit comments