Class: OmniAI::Tool
- Inherits:
-
Object
- Object
- OmniAI::Tool
- Defined in:
- lib/omniai/tool.rb
Overview
Usage:
class Weather < OmniAI::Tool
description 'Find the weather for a location'
parameter :location, :string, description: 'The location to find the weather for (e.g. "Toronto, Canada").'
parameter :unit, :string, description: 'The unit of measurement (e.g. "Celsius" or "Fahrenheit").'
required %i[location]
def execute!(location:)
# ...
end
end
Instance Attribute Summary collapse
Class Method Summary collapse
- .description(description = nil) ⇒ String
-
.namify ⇒ String
Converts a class name to a tool: - e.g.
- .parameter(name, kind) ⇒ Object
- .parameters ⇒ OmniAI::Schema::Object
- .required(names) ⇒ Object
Instance Method Summary collapse
- #call(args = {}) ⇒ String
- #execute ⇒ Object
-
#initialize(function = method(:execute), name: self.class.namify, description: self.class.description, parameters: self.class.parameters) ⇒ Tool
constructor
A new instance of Tool.
- #serialize(context: nil) ⇒ Hash
Constructor Details
#initialize(function = method(:execute), name: self.class.namify, description: self.class.description, parameters: self.class.parameters) ⇒ Tool
Returns a new instance of Tool.
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/omniai/tool.rb', line 78 def initialize( function = method(:execute), name: self.class.namify, description: self.class.description, parameters: self.class.parameters ) @function = function @name = name @description = description @parameters = parameters end |
Instance Attribute Details
#description ⇒ String?
68 69 70 |
# File 'lib/omniai/tool.rb', line 68 def description @description end |
#function ⇒ Proc
60 61 62 |
# File 'lib/omniai/tool.rb', line 60 def function @function end |
#name ⇒ String
64 65 66 |
# File 'lib/omniai/tool.rb', line 64 def name @name end |
#parameters ⇒ Hash?
72 73 74 |
# File 'lib/omniai/tool.rb', line 72 def parameters @parameters end |
Class Method Details
.description(description = nil) ⇒ String
22 23 24 25 26 |
# File 'lib/omniai/tool.rb', line 22 def description(description = nil) return @description if description.nil? @description = description end |
.namify ⇒ String
Converts a class name to a tool:
- e.g. "IBM::Watson::SearchTool" => "ibm_watson_search"
48 49 50 51 52 53 54 55 |
# File 'lib/omniai/tool.rb', line 48 def namify name .gsub("::", "_") .gsub(/(?<prefix>[A-Z+])(?<suffix>[A-Z][a-z])/, '\k<prefix>_\k<suffix>') .gsub(/(?<prefix>[a-z])(?<suffix>[A-Z])/, '\k<prefix>_\k<suffix>') .gsub(/_tool$/i, "") .downcase end |
.parameter(name, kind) ⇒ Object
35 36 37 |
# File 'lib/omniai/tool.rb', line 35 def parameter(name, kind, **) parameters.properties[name] = OmniAI::Schema.build(kind, **) end |
.parameters ⇒ OmniAI::Schema::Object
29 30 31 |
# File 'lib/omniai/tool.rb', line 29 def parameters @parameters ||= OmniAI::Schema::Object.new end |
.required(names) ⇒ Object
40 41 42 |
# File 'lib/omniai/tool.rb', line 40 def required(names) parameters.required = names end |
Instance Method Details
#call(args = {}) ⇒ String
136 137 138 |
# File 'lib/omniai/tool.rb', line 136 def call(args = {}) @function.call(**(@parameters.is_a?(Schema::Object) ? @parameters.parse(args) : args)) end |
#execute ⇒ Object
126 127 128 |
# File 'lib/omniai/tool.rb', line 126 def execute(...) raise NotImplementedError, "#{self.class}#execute undefined" end |
#serialize(context: nil) ⇒ Hash
112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/omniai/tool.rb', line 112 def serialize(context: nil) serialize = context&.serializer(:tool) return serialize.call(self, context:) if serialize { type: "function", function: { name: @name, description: @description, parameters: @parameters.is_a?(Schema::Object) ? @parameters.serialize : @parameters, }.compact, } end |