Module: LittleGhost::Agent::Delegation::ClassMethods

Defined in:
lib/little_ghost/agent/delegation.rb

Overview

Exposes delegation declarations on agent classes. These methods become inheritable DSL entries when the capability is included.

Instance Method Summary collapse

Instance Method Details

#agent_as_tool(agent_class, name: nil, description: nil, model: nil, tools: nil, preserve_context: false) ⇒ Object

Exposes agent_class as one ordinary tool.

Pass preserve_context: true to retain the delegated agent's conversational history between calls to that tool instance.



96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/little_ghost/agent/delegation.rb', line 96

def agent_as_tool(agent_class, name: nil, description: nil, model: nil, tools: nil,
  preserve_context: false)
  validate_delegated_tools!(tools)
  declaration = {
    agent: agent_class,
    name: (name || agent_class.agent_id).to_s,
    description: description || agent_class.description,
    model:,
    tools:,
    preserve_context:
  }
  self.agent_tool_declarations_value = [*agent_tool_declarations, declaration]
end

#agent_tool_declarationsObject

:nodoc:



116
# File 'lib/little_ghost/agent/delegation.rb', line 116

def agent_tool_declarations = agent_tool_declarations_value # :nodoc:

#agents_as_tools(*agent_classes, **options) ⇒ Object

Exposes several agent classes as ordinary tools with shared options.



111
112
113
114
# File 'lib/little_ghost/agent/delegation.rb', line 111

def agents_as_tools(*agent_classes, **options)
  agent_classes.each { |agent_class| agent_as_tool(agent_class, **options) }
  agent_tool_declarations
end

#subagent(agent_class, kind: nil, description: nil, model: nil, tools: nil, factory: nil, persist: true) ⇒ Object

Adds agent_class as an available managed subagent.

kind defaults to the agent ID and description defaults to the agent description. Conversations persist when a session store exists; pass persist: false for invocation-local work.

subagent ResearchAgent, kind: "research"


67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/little_ghost/agent/delegation.rb', line 67

def subagent(agent_class, kind: nil, description: nil, model: nil, tools: nil, factory: nil, persist: true)
  validate_delegated_tools!(tools)
  declaration = {
    agent: agent_class,
    kind: (kind || agent_class.agent_id).to_s,
    description: description || agent_class.description,
    model:,
    tools:,
    factory:,
    persist:
  }
  self.subagent_declarations_value = [*subagent_declarations, declaration]
end

#subagent_declarationsObject

:nodoc:



88
# File 'lib/little_ghost/agent/delegation.rb', line 88

def subagent_declarations = subagent_declarations_value # :nodoc:

#subagent_long_poll_duration(*values) ⇒ Object

:call-seq:

subagent_long_poll_duration() -> Float
subagent_long_poll_duration(seconds) -> Float

The maximum long-poll duration used by subagent wait tools.

The default comes from Subagents::Manager. Values must be positive, finite numbers and are normalized to Float.



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/little_ghost/agent/delegation.rb', line 47

def subagent_long_poll_duration(*values)
  return subagent_long_poll_duration_value if values.empty?

  timeout = Float(values.fetch(0))
  unless timeout.positive? && timeout.finite?
    raise ConfigurationError, "subagent_long_poll_duration must be a positive finite number"
  end

  self.subagent_long_poll_duration_value = timeout
rescue ArgumentError, TypeError
  raise ConfigurationError, "subagent_long_poll_duration must be a positive finite number"
end

#subagent_resolversObject

:nodoc:



90
# File 'lib/little_ghost/agent/delegation.rb', line 90

def subagent_resolvers = subagent_resolvers_value # :nodoc:

#subagents(*agent_classes, **options, &resolver) ⇒ Object

Adds several static subagents and an optional dynamic definition resolver.



82
83
84
85
86
# File 'lib/little_ghost/agent/delegation.rb', line 82

def subagents(*agent_classes, **options, &resolver)
  agent_classes.each { |agent_class| subagent(agent_class, **options) }
  self.subagent_resolvers_value = [*subagent_resolvers, resolver] if resolver
  subagent_declarations
end