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