Module: Legion::Extensions::Llm::Canonical::ToolSchema

Defined in:
lib/legion/extensions/llm/canonical/tool_schema.rb

Overview

Extracts and normalizes tool schemas from heterogeneous sources.

Constant Summary collapse

EMPTY_OBJECT =
{ type: 'object', properties: {} }.freeze

Class Method Summary collapse

Class Method Details

.extract(tool) ⇒ Object



13
14
15
16
# File 'lib/legion/extensions/llm/canonical/tool_schema.rb', line 13

def extract(tool)
  raw = raw_schema(tool)
  ToolDefinition.normalize_parameters(raw)
end

.raw_schema(tool) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/legion/extensions/llm/canonical/tool_schema.rb', line 18

def raw_schema(tool)
  return nil if tool.nil?
  return tool.params_schema if tool.respond_to?(:params_schema) && tool.params_schema
  return tool.parameters if tool.respond_to?(:parameters) && tool.parameters

  return unless tool.respond_to?(:[])

  tool[:parameters] || tool['parameters'] || tool[:input_schema] || tool['input_schema'] ||
    tool[:params_schema] || tool['params_schema']
end

.tool_description(tool) ⇒ Object



36
37
38
39
40
41
# File 'lib/legion/extensions/llm/canonical/tool_schema.rb', line 36

def tool_description(tool)
  return tool.description if tool.respond_to?(:description) && !tool.is_a?(Hash)
  return (tool[:description] || tool['description'] || '').to_s if tool.respond_to?(:[])

  ''
end

.tool_name(tool) ⇒ Object



29
30
31
32
33
34
# File 'lib/legion/extensions/llm/canonical/tool_schema.rb', line 29

def tool_name(tool)
  return tool.name if tool.respond_to?(:name) && !tool.is_a?(Hash)
  return tool[:name] || tool['name'] if tool.respond_to?(:[])

  'unknown'
end