ASM.ProviderRegistry (ASM v0.9.2)

Copy Markdown View Source

Resolves providers to backend lanes and runtime metadata.

Lane selection is discovery-driven and independent from execution mode:

  • provider_info/1 describes the provider and installed runtime-kit surface
  • lane_info/2 resolves the preferred lane from :auto | :core | :sdk

  • resolve/2 applies execution-mode compatibility to produce the effective backend

Summary

Types

execution_mode()

@type execution_mode() :: :local | :remote_node

lane()

@type lane() :: :auto | :core | :sdk

lane_info()

@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()
}

provider_info()

@type provider_info() :: %{
  provider: ASM.Provider.t(),
  core_profile: module(),
  core_profile_id: atom(),
  sdk_runtime: module() | nil,
  sdk_available?: boolean(),
  available_lanes: [atom()],
  default_lane: :auto,
  core_capabilities: [atom()],
  sdk_capabilities: [atom()],
  observability: map()
}

resolution()

@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

core_profile_id(provider)

@spec core_profile_id(atom()) :: {:ok, atom()} | {:error, ASM.Error.t()}

fetch(provider)

@spec fetch(atom() | ASM.Provider.t()) ::
  {:ok, ASM.Provider.t()} | {:error, ASM.Error.t()}

lane_info(provider, opts \\ [])

@spec lane_info(
  atom() | ASM.Provider.t(),
  keyword()
) :: {:ok, lane_info()} | {:error, ASM.Error.t()}

provider_info(provider)

@spec provider_info(atom() | ASM.Provider.t()) ::
  {:ok, provider_info()} | {:error, ASM.Error.t()}

resolve(provider, opts \\ [])

@spec resolve(
  atom(),
  keyword()
) :: {:ok, resolution()} | {:error, ASM.Error.t()}

resolve_lane(provider, opts)

@spec resolve_lane(
  atom() | ASM.Provider.t(),
  keyword()
) :: {:ok, :core | :sdk} | {:error, ASM.Error.t()}

sdk_available?(provider)

@spec sdk_available?(atom() | ASM.Provider.t()) :: boolean()

supported_providers()

@spec supported_providers() :: [atom()]