Class: TurnKit::SubAgentTool
Constant Summary
Constants inherited from Tool
Tool::NAME_PATTERN, Tool::TYPES
Class Method Summary collapse
Instance Method Summary collapse
Methods inherited from Tool
call, completion_message, description, ends_turn?, input_schema, parameter, parameters, tool_name, usage_hint, validate_arguments, validate_definition!
Class Method Details
.for(agent) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/turnkit/sub_agent_tool.rb', line 8 def self.for(agent) Class.new(self) do @agent = agent tool_name agent.name description agent.description.empty? ? "Delegate work to #{agent.name}." : agent.description usage_hint "Use when work can be delegated independently to #{agent.name}. Pass a complete task and only relevant context." class << self attr_reader :agent end end end |
Instance Method Details
#call(task:, context: nil, turnkit_context:) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/turnkit/sub_agent_tool.rb', line 21 def call(task:, context: nil, turnkit_context:) sub_agent = self.class.agent parent_turn = turnkit_context.turn prompt = [ task, context ].compact.join("\n\n") conversation = sub_agent.conversation(metadata: { "parent_conversation_id" => parent_turn.conversation.id, "parent_turn_id" => parent_turn.id, "parent_tool_execution_id" => turnkit_context.execution.id }) trigger = conversation.say(prompt, metadata: { "parent_conversation_id" => parent_turn.conversation.id, "parent_turn_id" => parent_turn.id, "parent_tool_execution_id" => turnkit_context.execution.id }) child = conversation.run!( trigger_message_id: trigger.id, budget: parent_turn.budget, parent_turn: parent_turn, parent_tool_execution: turnkit_context.execution, depth: parent_turn.depth + 1, model: sub_agent.effective_model, agent: sub_agent, on_event: parent_turn.agent.effective_on_event ) { "conversation_id" => conversation.id, "turn_id" => child.id, "status" => child.status, "result" => child.output_text, "output_data" => child.output_data }.compact end |