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
-
#agent_as_tool(agent_class, name: nil, description: nil, model: nil, tools: nil, preserve_context: false) ⇒ Object
Exposes
agent_classas one ordinary tool. -
#agent_tool_declarations ⇒ Object
:nodoc:.
-
#agents_as_tools(*agent_classes, **options) ⇒ Object
Exposes several agent classes as ordinary tools with shared options.
-
#subagent(agent_class, kind: nil, description: nil, model: nil, tools: nil, factory: nil, persist: true) ⇒ Object
Adds
agent_classas an available managed subagent. -
#subagent_declarations ⇒ Object
:nodoc:.
-
#subagent_long_poll_duration(*values) ⇒ Object
:call-seq: subagent_long_poll_duration() -> Float subagent_long_poll_duration(seconds) -> Float.
-
#subagent_resolvers ⇒ Object
:nodoc:.
-
#subagents(*agent_classes, **options, &resolver) ⇒ Object
Adds several static subagents and an optional dynamic definition resolver.
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_declarations ⇒ Object
: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, **) agent_classes.each { |agent_class| agent_as_tool(agent_class, **) } 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_declarations ⇒ Object
: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_resolvers ⇒ Object
: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, **, &resolver) agent_classes.each { |agent_class| subagent(agent_class, **) } self.subagent_resolvers_value = [*subagent_resolvers, resolver] if resolver subagent_declarations end |