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.
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 |
# 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) assembly_as_tool( agent_class, name:, description:, model:, tools:, preserve_context: ) end |
#agent_tool_declarations ⇒ Object
:nodoc:
143 |
# File 'lib/little_ghost/agent/delegation.rb', line 143 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.
131 132 133 134 |
# File 'lib/little_ghost/agent/delegation.rb', line 131 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.
137 138 139 140 |
# File 'lib/little_ghost/agent/delegation.rb', line 137 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.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/little_ghost/agent/delegation.rb', line 110 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:
142 |
# File 'lib/little_ghost/agent/delegation.rb', line 142 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"
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 |