Module: RubyLLM::Providers::OpenAI::Tools
- Included in:
- RubyLLM::Providers::OpenAI
- Defined in:
- lib/ruby_llm/providers/openai/tools.rb
Overview
Tools methods of the OpenAI API integration
Constant Summary collapse
- EMPTY_PARAMETERS_SCHEMA =
{ 'type' => 'object', 'properties' => {}, 'required' => [], 'additionalProperties' => false, 'strict' => true }.freeze
Class Method Summary collapse
- .format_tool_calls(tool_calls) ⇒ Object
- .param_schema(param) ⇒ Object
- .parameters_schema_for(tool) ⇒ Object
- .parse_tool_call_arguments(tool_call) ⇒ Object
- .parse_tool_calls(tool_calls, parse_arguments: true) ⇒ Object
- .schema_from_parameters(parameters) ⇒ Object
- .tool_for(tool) ⇒ Object
Class Method Details
.format_tool_calls(tool_calls) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/ruby_llm/providers/openai/tools.rb', line 52 def format_tool_calls(tool_calls) return nil unless tool_calls&.any? tool_calls.map do |_, tc| { id: tc.id, type: 'function', function: { name: tc.name, arguments: JSON.generate(tc.arguments) } } end end |
.param_schema(param) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/ruby_llm/providers/openai/tools.rb', line 45 def param_schema(param) { type: param.type, description: param.description }.compact end |
.parameters_schema_for(tool) ⇒ Object
18 19 20 21 |
# File 'lib/ruby_llm/providers/openai/tools.rb', line 18 def parameters_schema_for(tool) tool.params_schema || schema_from_parameters(tool.parameters) end |
.parse_tool_call_arguments(tool_call) ⇒ Object
67 68 69 70 71 72 73 74 75 |
# File 'lib/ruby_llm/providers/openai/tools.rb', line 67 def parse_tool_call_arguments(tool_call) arguments = tool_call.dig('function', 'arguments') if arguments.nil? || arguments.empty? {} else JSON.parse(arguments) end end |
.parse_tool_calls(tool_calls, parse_arguments: true) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/ruby_llm/providers/openai/tools.rb', line 77 def parse_tool_calls(tool_calls, parse_arguments: true) return nil unless tool_calls&.any? tool_calls.to_h do |tc| [ tc['id'], ToolCall.new( id: tc['id'], name: tc.dig('function', 'name'), arguments: if parse_arguments parse_tool_call_arguments(tc) else tc.dig('function', 'arguments') end ) ] end end |
.schema_from_parameters(parameters) ⇒ Object
23 24 25 26 |
# File 'lib/ruby_llm/providers/openai/tools.rb', line 23 def schema_from_parameters(parameters) schema_definition = RubyLLM::Tool::SchemaDefinition.from_parameters(parameters) schema_definition&.json_schema || EMPTY_PARAMETERS_SCHEMA end |
.tool_for(tool) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/ruby_llm/providers/openai/tools.rb', line 28 def tool_for(tool) parameters_schema = parameters_schema_for(tool) definition = { type: 'function', function: { name: tool.name, description: tool.description, parameters: parameters_schema } } return definition if tool.provider_params.empty? RubyLLM::Utils.deep_merge(definition, tool.provider_params) end |