Module: LittleGhost::StructuredOutput

Defined in:
lib/little_ghost/structured_output.rb

Overview

:nodoc: all

Defined Under Namespace

Classes: ProviderStrategy, Strategy, ToolStrategy

Constant Summary collapse

STRATEGIES =
%i[auto provider tool].freeze

Class Method Summary collapse

Class Method Details

.resolve(configuration, model:, ordinary_tools:) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/little_ghost/structured_output.rb', line 55

def resolve(configuration, model:, ordinary_tools:)
  return unless configuration

  requested = configuration.fetch(:strategy, :auto).to_sym
  capabilities = model.capabilities
  strategy = case requested
  when :auto then automatic_strategy(model, capabilities, ordinary_tools)
  when :provider
    validate_explicit_provider!(model, capabilities)
    ProviderStrategy
  when :tool
    validate_explicit_tool!(model, capabilities)
    ToolStrategy
  else
    raise ConfigurationError, "Unknown structured output strategy: #{requested}"
  end
  resolved = strategy.new(configuration)
  validate_tool_collision!(resolved, ordinary_tools)
  resolved
end

.validate_tool_collision!(strategy, ordinary_tools) ⇒ Object

Raises:



76
77
78
79
80
81
# File 'lib/little_ghost/structured_output.rb', line 76

def validate_tool_collision!(strategy, ordinary_tools)
  return unless strategy.tool?
  return unless ordinary_tools.any? { |tool| tool.fetch(:name).to_s == strategy.schema_name }

  raise ConfigurationError, "Structured result tool name collides with an agent tool: #{strategy.schema_name}"
end