Skip to content

Bind Tool Inputs and Outputs

Map flow variables to tool parameters and capture tool results using input_bindings and output_bindings in the InvokeTool step.

QType YAML

steps:
  # Tool with no inputs, only output binding
  - type: InvokeTool
    id: get_current_time
    tool: qtype.application.commons.tools.get_current_timestamp
    input_bindings: {}
    output_bindings:
      result: current_time
    outputs: [current_time]

  # Tool with multiple input bindings
  - type: InvokeTool
    id: add_days
    tool: qtype.application.commons.tools.timedelta
    input_bindings:
      timestamp: current_time      # Tool param ← flow variable
      days: days_until_due          # Tool param ← flow variable
    output_bindings:
      result: deadline_time         # Tool output → flow variable
    outputs: [deadline_time]

Explanation

  • input_bindings: Maps tool parameter names (left) to flow variable names (right)
  • output_bindings: Maps tool output names (left) to flow variable names (right)
  • outputs: Lists flow variables this step produces (must match output_bindings values)
  • Chaining: Output variables from one tool become input variables for the next tool

Complete Example

# Tutorial 4: Adding Tools to Your Application
#
# This tutorial demonstrates how to:
# 1. Import pre-built tools from the commons library
# 2. Use InvokeTool to call Python functions
# 3. Chain multiple tools together with input/output bindings
#
# Scenario: Calculate a deadline by adding days to the current time
#
# Run with:
#   uv run qtype run -i '{"days_until_due": 3}' examples/tutorials/04_tools_and_function_calling.qtype.yaml

id: deadline_calculator
description: |
  Calculates a deadline by adding days to the current timestamp.
  Demonstrates tool imports, InvokeTool step, and tool chaining.

# Import pre-built tools from the commons library
references:
  - !include https://raw.githubusercontent.com/bazaarvoice/qtype/refs/tags/v0.1.11/common/tools.qtype.yaml

flows:
  - id: calculate_deadline
    description: Calculate a formatted deadline from current time plus days
    inputs:
      - days_until_due
    outputs:
      - deadline_formatted

    variables:
      # Input
      - id: days_until_due
        type: int

      # Tool outputs
      - id: current_time
        type: datetime
      - id: deadline_time
        type: datetime
      - id: format_string
        type: text
      - id: deadline_formatted
        type: text

    steps:
      # Step 1: Get current timestamp using a tool
      # This tool takes no inputs and returns the current UTC time
      - id: get_current_time
        type: InvokeTool
        tool: qtype.application.commons.tools.get_current_timestamp
        input_bindings: {}
        output_bindings:
          result: current_time
        outputs:
          - current_time

      # Step 2: Create a format string constant
      - id: create_format_string
        type: PromptTemplate
        template: "%B %d, %Y at %I:%M %p UTC"
        inputs: []
        outputs:
          - format_string

      # Step 3: Calculate deadline by adding days to current time
      # input_bindings maps flow variables to tool parameters
      - id: add_days
        type: InvokeTool
        tool: qtype.application.commons.tools.timedelta
        input_bindings:
          timestamp: current_time
          days: days_until_due
        output_bindings:
          result: deadline_time
        outputs:
          - deadline_time

      # Step 4: Format deadline for human readability
      # Shows chaining: output from previous tool becomes input to this one
      - id: format_deadline
        type: InvokeTool
        tool: qtype.application.commons.tools.format_datetime
        input_bindings:
          timestamp: deadline_time
          format_string: format_string
        output_bindings:
          result: deadline_formatted
        outputs:
          - deadline_formatted

See Also