Class: Agentic::DefaultCompositionStrategy

Inherits:
AgentCompositionStrategy show all
Defined in:
lib/agentic/agent_assembly_engine.rb

Overview

Default strategy for agent composition

Instance Method Summary collapse

Instance Method Details

#select_capabilities(requirements, registry) ⇒ Array<Hash>

Select capabilities based on requirements

Parameters:

  • requirements (Hash)

    The capability requirements

  • registry (AgentCapabilityRegistry)

    The capability registry

Returns:

  • (Array<Hash>)

    The selected capabilities



389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
# File 'lib/agentic/agent_assembly_engine.rb', line 389

def select_capabilities(requirements, registry)
  selected = []

  # Sort requirements by importance (highest first)
  sorted_requirements = requirements.sort_by { |_, info| -info[:importance] }

  # Select capabilities for each requirement
  sorted_requirements.each do |name, info|
    # Find the capability in the registry
    capability = registry.get(name, info[:version_constraint])

    # Skip if not found
    next unless capability

    # Add to selected capabilities
    selected << {
      name: capability.name,
      version: capability.version
    }

    # Add dependencies
    capability.dependencies.each do |dep|
      # Check if we already selected this dependency
      next if selected.any? { |sel| sel[:name] == dep[:name] }

      # Find the dependency in the registry
      dep_capability = registry.get(dep[:name], dep[:version])

      # Skip if not found
      next unless dep_capability

      # Add to selected capabilities
      selected << {
        name: dep_capability.name,
        version: dep_capability.version
      }
    end
  end

  # If no capabilities were selected, add a default text generation capability
  if selected.empty?
    default_capability = registry.get("text_generation")
    if default_capability
      selected << {
        name: default_capability.name,
        version: default_capability.version
      }
    end
  end

  selected
end