Class: SwarmSDK::NodeContext
- Inherits:
-
Object
- Object
- SwarmSDK::NodeContext
- Defined in:
- lib/swarm_sdk/node_context.rb
Overview
NodeContext provides context information to node transformers
This class is passed to input and output transformers, giving them access to:
- The original user prompt
- Results from all previous nodes
- Current node metadata
- Convenience accessors for common operations
Instance Attribute Summary collapse
-
#all_results ⇒ Object
readonly
Returns the value of attribute all_results.
-
#dependencies ⇒ Object
readonly
Returns the value of attribute dependencies.
-
#node_name ⇒ Object
readonly
Returns the value of attribute node_name.
-
#original_prompt ⇒ Object
readonly
Returns the value of attribute original_prompt.
-
#previous_result ⇒ Object
readonly
For input transformers: result from previous node(s).
-
#result ⇒ Object
readonly
For output transformers: current node's result.
Class Method Summary collapse
-
.for_input(previous_result:, all_results:, original_prompt:, node_name:, dependencies:, transformed_content: nil) ⇒ NodeContext
Create a NodeContext for input transformers.
-
.for_output(result:, all_results:, original_prompt:, node_name:) ⇒ NodeContext
Create a NodeContext for output transformers.
Instance Method Summary collapse
-
#agent ⇒ String?
Convenience accessor: Get agent from previous_result or result.
-
#content ⇒ String?
Convenience accessor: Get content from previous_result or result.
-
#duration ⇒ Float?
Convenience accessor: Get duration from previous_result or result.
-
#error ⇒ Exception?
Convenience accessor: Get error from previous_result or result.
-
#goto_node(node, content:) ⇒ Hash
Jump to a different node with provided content as input.
-
#halt_workflow(content:) ⇒ Hash
Halt entire workflow and return content as final result.
-
#initialize(previous_result:, all_results:, original_prompt:, node_name:, dependencies:, result:, transformed_content:) ⇒ NodeContext
constructor
A new instance of NodeContext.
-
#logs ⇒ Array?
Convenience accessor: Get logs from previous_result or result.
-
#skip_execution(content:) ⇒ Hash
Skip current node's LLM execution and return content immediately.
-
#success? ⇒ Boolean?
Convenience accessor: Check success status.
Constructor Details
#initialize(previous_result:, all_results:, original_prompt:, node_name:, dependencies:, result:, transformed_content:) ⇒ NodeContext
Returns a new instance of NodeContext.
77 78 79 80 81 82 83 84 85 |
# File 'lib/swarm_sdk/node_context.rb', line 77 def initialize(previous_result:, all_results:, original_prompt:, node_name:, dependencies:, result:, transformed_content:) @previous_result = previous_result @result = result @all_results = all_results @original_prompt = original_prompt @node_name = node_name @dependencies = dependencies @transformed_content = transformed_content end |
Instance Attribute Details
#all_results ⇒ Object (readonly)
Returns the value of attribute all_results.
27 28 29 |
# File 'lib/swarm_sdk/node_context.rb', line 27 def all_results @all_results end |
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
27 28 29 |
# File 'lib/swarm_sdk/node_context.rb', line 27 def dependencies @dependencies end |
#node_name ⇒ Object (readonly)
Returns the value of attribute node_name.
27 28 29 |
# File 'lib/swarm_sdk/node_context.rb', line 27 def node_name @node_name end |
#original_prompt ⇒ Object (readonly)
Returns the value of attribute original_prompt.
27 28 29 |
# File 'lib/swarm_sdk/node_context.rb', line 27 def original_prompt @original_prompt end |
#previous_result ⇒ Object (readonly)
For input transformers: result from previous node(s)
30 31 32 |
# File 'lib/swarm_sdk/node_context.rb', line 30 def previous_result @previous_result end |
#result ⇒ Object (readonly)
For output transformers: current node's result
33 34 35 |
# File 'lib/swarm_sdk/node_context.rb', line 33 def result @result end |
Class Method Details
.for_input(previous_result:, all_results:, original_prompt:, node_name:, dependencies:, transformed_content: nil) ⇒ NodeContext
Create a NodeContext for input transformers
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/swarm_sdk/node_context.rb', line 45 def for_input(previous_result:, all_results:, original_prompt:, node_name:, dependencies:, transformed_content: nil) new( previous_result: previous_result, all_results: all_results, original_prompt: original_prompt, node_name: node_name, dependencies: dependencies, result: nil, transformed_content: transformed_content, ) end |
.for_output(result:, all_results:, original_prompt:, node_name:) ⇒ NodeContext
Create a NodeContext for output transformers
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/swarm_sdk/node_context.rb', line 64 def for_output(result:, all_results:, original_prompt:, node_name:) new( result: result, all_results: all_results, original_prompt: original_prompt, node_name: node_name, dependencies: [], previous_result: nil, transformed_content: nil, ) end |
Instance Method Details
#agent ⇒ String?
Convenience accessor: Get agent from previous_result or result
118 119 120 121 122 123 124 |
# File 'lib/swarm_sdk/node_context.rb', line 118 def agent if @result @result.agent elsif @previous_result.respond_to?(:agent) @previous_result.agent end end |
#content ⇒ String?
Convenience accessor: Get content from previous_result or result
For input transformers:
- Returns transformed_content if available (from previous output transformer)
- Otherwise returns previous_result.content (original content)
- Returns nil for multiple dependencies (use all_results instead)
For output transformers: returns result.content
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/swarm_sdk/node_context.rb', line 96 def content if @result # Output transformer context: return current result's content @result.content elsif @transformed_content # Input transformer with transformed content from previous output @transformed_content elsif @previous_result.respond_to?(:content) # Input transformer context with Result object (original content) @previous_result.content elsif @previous_result.is_a?(Hash) # Input transformer with multiple dependencies (hash of results) nil # No single "content" - user must pick from all_results hash else # String or other type (initial prompt, no dependencies) @previous_result.to_s end end |
#duration ⇒ Float?
Convenience accessor: Get duration from previous_result or result
140 141 142 143 144 145 146 |
# File 'lib/swarm_sdk/node_context.rb', line 140 def duration if @result @result.duration elsif @previous_result.respond_to?(:duration) @previous_result.duration end end |
#error ⇒ Exception?
Convenience accessor: Get error from previous_result or result
151 152 153 154 155 156 157 |
# File 'lib/swarm_sdk/node_context.rb', line 151 def error if @result @result.error elsif @previous_result.respond_to?(:error) @previous_result.error end end |
#goto_node(node, content:) ⇒ Hash
Jump to a different node with provided content as input
Valid for both input and output transformers.
234 235 236 237 238 239 240 241 242 243 |
# File 'lib/swarm_sdk/node_context.rb', line 234 def goto_node(node, content:) if content.nil? raise ArgumentError, "goto_node requires content (got nil). " \ "Check that ctx.content or your content source is not nil. " \ "This often happens when the previous node failed with an error. " \ "Node: #{@node_name}, Target: #{node}" end { goto_node: node.to_sym, content: content } end |
#halt_workflow(content:) ⇒ Hash
Halt entire workflow and return content as final result
Valid for both input and output transformers.
210 211 212 213 214 215 216 217 218 |
# File 'lib/swarm_sdk/node_context.rb', line 210 def halt_workflow(content:) if content.nil? raise ArgumentError, "halt_workflow requires content (got nil). " \ "Check that ctx.content or your content source is not nil. " \ "Node: #{@node_name}" end { halt_workflow: true, content: content } end |
#logs ⇒ Array?
Convenience accessor: Get logs from previous_result or result
129 130 131 132 133 134 135 |
# File 'lib/swarm_sdk/node_context.rb', line 129 def logs if @result @result.logs elsif @previous_result.respond_to?(:logs) @previous_result.logs end end |
#skip_execution(content:) ⇒ Hash
Skip current node's LLM execution and return content immediately
Only valid for input transformers.
187 188 189 190 191 192 193 194 195 |
# File 'lib/swarm_sdk/node_context.rb', line 187 def skip_execution(content:) if content.nil? raise ArgumentError, "skip_execution requires content (got nil). " \ "Check that ctx.content or your content source is not nil. " \ "Node: #{@node_name}" end { skip_execution: true, content: content } end |
#success? ⇒ Boolean?
Convenience accessor: Check success status
162 163 164 165 166 167 168 |
# File 'lib/swarm_sdk/node_context.rb', line 162 def success? if @result @result.success? elsif @previous_result.respond_to?(:success?) @previous_result.success? end end |