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.
-
#assemblies_as_tools(*assembly_classes, **options) ⇒ Object
Exposes several assembly classes as ordinary tools with shared options.
-
#assembly_as_tool(assembly_class, name: nil, description: nil, model: nil, tools: nil, preserve_context: false) ⇒ Object
Exposes an Agent, Workflow, Swarm, or Graph as one ordinary tool.
-
#assembly_tool_declarations ⇒ Object
:nodoc:.
-
#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.
By default, every tool call builds and closes a fresh delegated Agent. Pass preserve_context: true to serialize calls through one Agent and retain its conversational history between calls.
99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/little_ghost/agent/delegation.rb', line 99 def agent_as_tool(agent_class, name: nil, description: nil, model: nil, tools: nil, preserve_context: false) assembly_as_tool( agent_class, name:, description:, model:, tools:, preserve_context: ) end |
#agent_tool_declarations ⇒ Object
:nodoc:
146 |
# File 'lib/little_ghost/agent/delegation.rb', line 146 def agent_tool_declarations = assembly_tool_declarations # :nodoc: |
#agents_as_tools(*agent_classes, **options) ⇒ Object
Exposes several agent classes as ordinary tools with shared options.
134 135 136 137 |
# File 'lib/little_ghost/agent/delegation.rb', line 134 def agents_as_tools(*agent_classes, **) agent_classes.each { |agent_class| agent_as_tool(agent_class, **) } assembly_tool_declarations end |
#assemblies_as_tools(*assembly_classes, **options) ⇒ Object
Exposes several assembly classes as ordinary tools with shared options.
140 141 142 143 |
# File 'lib/little_ghost/agent/delegation.rb', line 140 def assemblies_as_tools(*assembly_classes, **) assembly_classes.each { |assembly_class| assembly_as_tool(assembly_class, **) } assembly_tool_declarations end |
#assembly_as_tool(assembly_class, name: nil, description: nil, model: nil, tools: nil, preserve_context: false) ⇒ Object
Exposes an Agent, Workflow, Swarm, or Graph as one ordinary tool.
Agent-only model and tools overrides are rejected for composites.
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/little_ghost/agent/delegation.rb', line 113 def assembly_as_tool(assembly_class, name: nil, description: nil, model: nil, tools: nil, preserve_context: false) unless assembly_class.is_a?(Class) && assembly_class <= Assembly raise ConfigurationError, "Delegated assemblies must inherit from LittleGhost::Assembly" end validate_delegated_tools!(tools) if !(assembly_class <= Agent) && (model || tools) raise ConfigurationError, "Composite assemblies do not accept delegated model or tool overrides" end declaration = { assembly: assembly_class, name: (name || assembly_class.assembly_id).to_s, description: description || assembly_class.description, model:, tools:, preserve_context: } self.assembly_tool_declarations_value = [*assembly_tool_declarations, declaration] end |
#assembly_tool_declarations ⇒ Object
:nodoc:
145 |
# File 'lib/little_ghost/agent/delegation.rb', line 145 def assembly_tool_declarations = assembly_tool_declarations_value # :nodoc: |
#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"
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/little_ghost/agent/delegation.rb', line 69 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:
90 |
# File 'lib/little_ghost/agent/delegation.rb', line 90 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
How long wait_for_subagents watches for progress before returning.
The default comes from Subagents::Manager. Values must be positive, finite numbers and are normalized to Float.
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/little_ghost/agent/delegation.rb', line 49 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:
92 |
# File 'lib/little_ghost/agent/delegation.rb', line 92 def subagent_resolvers = subagent_resolvers_value # :nodoc: |
#subagents(*agent_classes, **options, &resolver) ⇒ Object
Adds several static subagents and an optional dynamic definition resolver.
84 85 86 87 88 |
# File 'lib/little_ghost/agent/delegation.rb', line 84 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 |