Resolves providers to backend lanes and runtime metadata.
Lane selection is discovery-driven and independent from execution mode:
provider_info/1describes the provider and installed runtime-kit surfacelane_info/2resolves the preferred lane from:auto | :core | :sdkresolve/2applies execution-mode compatibility to produce the effective backend
Summary
Types
@type execution_mode() :: :local | :remote_node
@type lane() :: :auto | :core | :sdk
@type lane_info() :: %{ provider: ASM.Provider.t(), requested_lane: lane(), preferred_lane: :core | :sdk, backend: module(), core_profile: module(), core_profile_id: atom(), sdk_runtime: module() | nil, sdk_available?: boolean(), available_lanes: [atom()], capabilities: [atom()], lane_reason: atom(), observability: map() }
@type resolution() :: %{ provider: ASM.Provider.t(), requested_lane: lane(), preferred_lane: :core | :sdk, lane: :core | :sdk, backend: module(), sdk_available?: boolean(), core_profile: module(), core_profile_id: atom(), sdk_runtime: module() | nil, capabilities: [atom()], execution_mode: execution_mode(), lane_reason: atom(), lane_fallback_reason: atom() | nil, observability: map() }
Functions
@spec core_profile_id(atom()) :: {:ok, atom()} | {:error, ASM.Error.t()}
@spec fetch(atom() | ASM.Provider.t()) :: {:ok, ASM.Provider.t()} | {:error, ASM.Error.t()}
@spec lane_info( atom() | ASM.Provider.t(), keyword() ) :: {:ok, lane_info()} | {:error, ASM.Error.t()}
@spec provider_info(atom() | ASM.Provider.t()) :: {:ok, provider_info()} | {:error, ASM.Error.t()}
@spec resolve( atom(), keyword() ) :: {:ok, resolution()} | {:error, ASM.Error.t()}
@spec resolve_lane( atom() | ASM.Provider.t(), keyword() ) :: {:ok, :core | :sdk} | {:error, ASM.Error.t()}
@spec sdk_available?(atom() | ASM.Provider.t()) :: boolean()
@spec supported_providers() :: [atom()]