Class: Agentic::AgentCapabilityRegistry

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/agentic/agent_capability_registry.rb

Overview

Central registry for agent capabilities

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeAgentCapabilityRegistry

Returns a new instance of AgentCapabilityRegistry.



14
15
16
17
18
# File 'lib/agentic/agent_capability_registry.rb', line 14

def initialize
  @capabilities = {}
  @providers = {}
  @capability_versions = {}
end

Instance Attribute Details

#capabilitiesHash (readonly)

The registered capabilities by name and version

Returns:

  • (Hash)

    the current value of capabilities



9
10
11
# File 'lib/agentic/agent_capability_registry.rb', line 9

def capabilities
  @capabilities
end

#providersHash (readonly)

The registered capability providers by name and version

Returns:

  • (Hash)

    the current value of providers



9
10
11
# File 'lib/agentic/agent_capability_registry.rb', line 9

def providers
  @providers
end

Instance Method Details

#clearvoid

This method returns an undefined value.

Clear all registered capabilities



173
174
175
176
177
# File 'lib/agentic/agent_capability_registry.rb', line 173

def clear
  @capabilities = {}
  @providers = {}
  @capability_versions = {}
end

#compose(name, description, version, capabilities, compose_fn) ⇒ CapabilitySpecification

Compose capabilities into a new capability

Parameters:

  • name (String)

    The name of the composed capability

  • description (String)

    Description of the composed capability

  • version (String)

    The version of the composed capability

  • capabilities (Array<Hash>)

    The capabilities to compose

  • compose_fn (Proc)

    The function to use for composition

Returns:



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/agentic/agent_capability_registry.rb', line 124

def compose(name, description, version, capabilities, compose_fn)
  # Get the individual capabilities
  capability_instances = []
  capability_providers = []

  capabilities.each do |cap_spec|
    cap_name = cap_spec[:name]
    cap_version = cap_spec[:version]

    capability = get(cap_name, cap_version)
    raise "Capability not found: #{cap_name} v#{cap_version}" unless capability

    provider = get_provider(cap_name, cap_version)
    raise "Provider not found for capability: #{cap_name} v#{cap_version}" unless provider

    capability_instances << capability
    capability_providers << provider
  end

  # Create the composed capability
  dependencies = capabilities.map do |cap_spec|
    {
      name: cap_spec[:name],
      version: cap_spec[:version] || get_latest_version(cap_spec[:name])
    }
  end

  composed_capability = CapabilitySpecification.new(
    name: name,
    description: description,
    version: version,
    dependencies: dependencies
  )

  # Create the composed provider
  composed_provider = CapabilityProvider.new(
    capability: composed_capability,
    implementation: lambda do |inputs|
      # Call the composition function with the individual providers and inputs
      compose_fn.call(capability_providers, inputs)
    end
  )

  # Register the composed capability
  register(composed_capability, composed_provider)
end

#find(criteria = {}) ⇒ Array<CapabilitySpecification>

Find capabilities matching criteria

Parameters:

  • criteria (Hash) (defaults to: {})

    The search criteria

Returns:



79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/agentic/agent_capability_registry.rb', line 79

def find(criteria = {})
  # Filter capabilities based on criteria
  results = []

  @capabilities.each do |name, versions|
    versions.each do |version, capability|
      if matches_criteria?(capability, criteria)
        results << capability
      end
    end
  end

  results
end

#get(name, version = nil) ⇒ CapabilitySpecification?

Get a capability by name and version

Parameters:

  • name (String)

    The name of the capability

  • version (String, nil) (defaults to: nil)

    The version of the capability, or nil for latest

Returns:



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/agentic/agent_capability_registry.rb', line 48

def get(name, version = nil)
  return nil unless @capabilities[name]

  if version.nil?
    # Get the latest version
    version = get_latest_version(name)
    return nil unless version
  end

  @capabilities[name][version]
end

#get_provider(name, version = nil) ⇒ CapabilityProvider?

Get the provider for a capability

Parameters:

  • name (String)

    The name of the capability

  • version (String, nil) (defaults to: nil)

    The version of the capability, or nil for latest

Returns:



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/agentic/agent_capability_registry.rb', line 64

def get_provider(name, version = nil)
  return nil unless @providers[name]

  if version.nil?
    # Get the latest version
    version = get_latest_version(name)
    return nil unless version
  end

  @providers[name][version]
end

#list(include_providers: false) ⇒ Hash

List all registered capabilities

Parameters:

  • include_providers (Boolean) (defaults to: false)

    Whether to include providers in the output

Returns:

  • (Hash)

    Map of capability names to arrays of version strings



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/agentic/agent_capability_registry.rb', line 97

def list(include_providers: false)
  result = {}

  @capabilities.each do |name, versions|
    result[name] = {
      versions: versions.keys,
      latest: get_latest_version(name)
    }

    if include_providers
      result[name][:providers] = {}
      versions.each do |version, _|
        result[name][:providers][version] = @providers[name][version] if @providers[name][version]
      end
    end
  end

  result
end

#register(capability, provider) ⇒ CapabilitySpecification

Register a capability with the registry

Parameters:

Returns:



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/agentic/agent_capability_registry.rb', line 24

def register(capability, provider)
  validate_capability!(capability)

  # Store by name and version
  @capabilities[capability.name] ||= {}
  @capabilities[capability.name][capability.version] = capability

  # Track the provider
  @providers[capability.name] ||= {}
  @providers[capability.name][capability.version] = provider

  # Update version tracking
  update_version_tracking(capability)

  # Log the registration
  Agentic.logger.info("Registered capability: #{capability.name} v#{capability.version}")

  capability
end