2121 SDKObjectCreateParams ,
2222 SDKScenarioListParams ,
2323 SDKScorerCreateParams ,
24+ SDKBenchmarkListParams ,
2425 SDKBlueprintListParams ,
26+ SDKBenchmarkCreateParams ,
2527 SDKBlueprintCreateParams ,
2628 SDKDiskSnapshotListParams ,
2729 SDKDevboxCreateFromImageParams ,
3436from .async_scorer import AsyncScorer
3537from .async_scenario import AsyncScenario
3638from .async_snapshot import AsyncSnapshot
39+ from .async_benchmark import AsyncBenchmark
3740from .async_blueprint import AsyncBlueprint
3841from ..lib .context_loader import TarFilter , build_directory_tar
3942from .async_storage_object import AsyncStorageObject
@@ -815,6 +818,55 @@ async def list(self, **params: Unpack[SDKScenarioListParams]) -> list[AsyncScena
815818 return [AsyncScenario (self ._client , item .id ) async for item in page ]
816819
817820
821+ class AsyncBenchmarkOps :
822+ """Manage benchmarks (async). Access via ``runloop.benchmark``.
823+
824+ Example:
825+ >>> runloop = AsyncRunloopSDK()
826+ >>> benchmarks = await runloop.benchmark.list()
827+ >>> benchmark = runloop.benchmark.from_id("bmd_xxx")
828+ >>> run = await benchmark.start_run(run_name="evaluation-v1")
829+ """
830+
831+ def __init__ (self , client : AsyncRunloop ) -> None :
832+ """Initialize AsyncBenchmarkOps.
833+
834+ :param client: AsyncRunloop client instance
835+ :type client: AsyncRunloop
836+ """
837+ self ._client = client
838+
839+ async def create (self , ** params : Unpack [SDKBenchmarkCreateParams ]) -> AsyncBenchmark :
840+ """Create a new benchmark.
841+
842+ :param params: See :typeddict:`~runloop_api_client.sdk._types.SDKBenchmarkCreateParams` for available parameters
843+ :return: The newly created benchmark
844+ :rtype: AsyncBenchmark
845+ """
846+ response = await self ._client .benchmarks .create (** params )
847+ return AsyncBenchmark (self ._client , response .id )
848+
849+ def from_id (self , benchmark_id : str ) -> AsyncBenchmark :
850+ """Get an AsyncBenchmark instance for an existing benchmark ID.
851+
852+ :param benchmark_id: ID of the benchmark
853+ :type benchmark_id: str
854+ :return: AsyncBenchmark instance for the given ID
855+ :rtype: AsyncBenchmark
856+ """
857+ return AsyncBenchmark (self ._client , benchmark_id )
858+
859+ async def list (self , ** params : Unpack [SDKBenchmarkListParams ]) -> list [AsyncBenchmark ]:
860+ """List all benchmarks, optionally filtered by parameters.
861+
862+ :param params: See :typeddict:`~runloop_api_client.sdk._types.SDKBenchmarkListParams` for available parameters
863+ :return: List of benchmarks
864+ :rtype: list[AsyncBenchmark]
865+ """
866+ page = await self ._client .benchmarks .list (** params )
867+ return [AsyncBenchmark (self ._client , item .id ) for item in page .benchmarks ]
868+
869+
818870class AsyncRunloopSDK :
819871 """High-level asynchronous entry point for the Runloop SDK.
820872
@@ -826,6 +878,8 @@ class AsyncRunloopSDK:
826878 :vartype api: AsyncRunloop
827879 :ivar agent: High-level async interface for agent management.
828880 :vartype agent: AsyncAgentOps
881+ :ivar benchmark: High-level async interface for benchmark management
882+ :vartype benchmark: AsyncBenchmarkOps
829883 :ivar devbox: High-level async interface for devbox management
830884 :vartype devbox: AsyncDevboxOps
831885 :ivar blueprint: High-level async interface for blueprint management
@@ -849,6 +903,7 @@ class AsyncRunloopSDK:
849903
850904 api : AsyncRunloop
851905 agent : AsyncAgentOps
906+ benchmark : AsyncBenchmarkOps
852907 devbox : AsyncDevboxOps
853908 blueprint : AsyncBlueprintOps
854909 scenario : AsyncScenarioOps
@@ -895,6 +950,7 @@ def __init__(
895950 )
896951
897952 self .agent = AsyncAgentOps (self .api )
953+ self .benchmark = AsyncBenchmarkOps (self .api )
898954 self .devbox = AsyncDevboxOps (self .api )
899955 self .blueprint = AsyncBlueprintOps (self .api )
900956 self .scenario = AsyncScenarioOps (self .api )
0 commit comments