ASM.ProviderFeatures (ASM v0.12.1)

Copy Markdown View Source

Public provider feature manifests for ASM.

This module exposes two related surfaces:

  • provider-native permission mode metadata inherited from CliSubprocessCore.ProviderFeatures
  • ASM common features that are only supported by some providers, such as the common Ollama surface

Summary

Types

capability_manifest()

@type capability_manifest() :: %{
  supported?: boolean(),
  lane: atom() | [atom()],
  provider_native?: boolean(),
  common_surface?: boolean(),
  support_state:
    :common | :native | :sdk_local | :event_only | :unsupported | :planned,
  asm_option_keys: [atom()],
  provider_native_option_keys: [atom()],
  event_kinds: [atom()],
  live_example: String.t() | nil,
  notes: [String.t()]
}

common_feature_manifest()

@type common_feature_manifest() :: %{
  supported?: boolean(),
  common_surface: true,
  common_opts: [atom()],
  activation: map() | nil,
  model_strategy: atom() | nil,
  compatibility: map() | nil,
  notes: [String.t()]
}

lane_manifest()

@type lane_manifest() :: %{
  provider: ASM.Provider.provider_name(),
  lane: atom(),
  composition_mode: :common_surface_only | :native_extension,
  sdk_available?: boolean(),
  native_namespaces: [module()],
  capabilities: %{optional(atom()) => capability_manifest()}
}

manifest()

@type manifest() :: %{
  provider: ASM.Provider.provider_name(),
  permission_modes: %{optional(atom()) => permission_manifest()},
  common_features: %{optional(atom()) => common_feature_manifest()},
  lanes: %{optional(atom()) => lane_manifest()}
}

permission_manifest()

Functions

capability(provider_or_name, lane, capability)

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

common_feature(provider_or_name, feature)

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

common_feature!(provider_or_name, feature)

lane_manifest(provider_or_name, lane)

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

lane_manifest!(provider_or_name, lane)

@spec lane_manifest!(ASM.Provider.t() | ASM.Provider.provider_name(), atom()) ::
  lane_manifest()

manifest(provider_or_name)

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

manifest!(provider_or_name)

@spec manifest!(ASM.Provider.t() | ASM.Provider.provider_name()) :: manifest()

permission_mode(provider_or_name, mode)

@spec permission_mode(
  ASM.Provider.t() | ASM.Provider.provider_name(),
  atom() | String.t()
) ::
  {:ok, permission_manifest()} | {:error, ASM.Error.t()}

permission_mode!(provider_or_name, mode)

@spec permission_mode!(
  ASM.Provider.t() | ASM.Provider.provider_name(),
  atom() | String.t()
) ::
  permission_manifest()

require_capability(provider_or_name, lane, capability)

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

support_states()

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

supports_common_feature?(provider_or_name, feature)

@spec supports_common_feature?(
  ASM.Provider.t() | ASM.Provider.provider_name(),
  atom()
) :: boolean()