class RubyLLM::Tool

end
end
{ error: e.message }
rescue StandardError => e
“Current time in #{timezone}: #{time}”
time = TZInfo::Timezone.get(timezone).now.strftime(‘%Y-%m-%d %H:%M:%S’)
def execute(timezone:)
param :timezone, desc: “Timezone name (e.g., ‘UTC’, ‘America/New_York’)”
description ‘Gets the current time in various timezones’
class TimeInfo < RubyLLM::Tool
require ‘tzinfo’
Example:
interface for defining parameters and implementing tool behavior.
Base class for creating tools that AI models can use. Provides a simple

def call(args)

def call(args)
  RubyLLM.logger.debug "Tool #{name} called with: #{args.inspect}"
  result = execute(**args.transform_keys(&:to_sym))
  RubyLLM.logger.debug "Tool #{name} returned: #{result.inspect}"
  result
end

def description(text = nil)

def description(text = nil)
  return @description unless text
  @description = text
end

def description

def description
  self.class.description
end

def execute(...)

def execute(...)
  raise NotImplementedError, 'Subclasses must implement #execute'
end

def name

def name
  self.class.name
      .unicode_normalize(:nfkd)
      .encode('ASCII', replace: '')
      .gsub(/[^a-zA-Z0-9_-]/, '-')
      .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
      .gsub(/([a-z\d])([A-Z])/, '\1_\2')
      .downcase
      .delete_suffix('_tool')
end

def param(name, **options)

def param(name, **options)
  parameters[name] = Parameter.new(name, **options)
end

def parameters

def parameters
  @parameters ||= {}
end

def parameters

def parameters
  self.class.parameters
end