Class: DSPy::LM::Strategies::GeminiStructuredOutputStrategy

Inherits:
BaseStrategy
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dspy/lm/strategies/gemini_structured_output_strategy.rb

Overview

Strategy for using Gemini’s native structured output feature

Instance Method Summary collapse

Methods inherited from BaseStrategy

#initialize

Constructor Details

This class inherits a constructor from DSPy::LM::Strategies::BaseStrategy

Instance Method Details

#available?Boolean

Returns:

  • (Boolean)


14
15
16
17
18
19
20
# File 'lib/dspy/lm/strategies/gemini_structured_output_strategy.rb', line 14

def available?
  # Check if adapter is Gemini and supports structured outputs
  return false unless adapter.is_a?(DSPy::LM::GeminiAdapter)
  return false unless adapter.instance_variable_get(:@structured_outputs_enabled)
  
  DSPy::LM::Adapters::Gemini::SchemaConverter.supports_structured_outputs?(adapter.model)
end

#extract_json(response) ⇒ Object



45
46
47
48
49
# File 'lib/dspy/lm/strategies/gemini_structured_output_strategy.rb', line 45

def extract_json(response)
  # With Gemini structured outputs, the response should already be valid JSON
  # Just return the content as-is
  response.content
end

#handle_error(error) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/dspy/lm/strategies/gemini_structured_output_strategy.rb', line 52

def handle_error(error)
  # Handle Gemini-specific structured output errors
  error_msg = error.message.to_s.downcase
  if error_msg.include?("schema") || error_msg.include?("generation_config") || error_msg.include?("response_schema")
    # Log the error and return true to indicate we handled it
    # This allows fallback to another strategy
    DSPy.logger.warn("Gemini structured output failed: #{error.message}")
    true
  else
    false
  end
end

#nameObject



28
29
30
# File 'lib/dspy/lm/strategies/gemini_structured_output_strategy.rb', line 28

def name
  "gemini_structured_output"
end

#prepare_request(messages, request_params) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/dspy/lm/strategies/gemini_structured_output_strategy.rb', line 33

def prepare_request(messages, request_params)
  # Convert signature to Gemini schema format
  schema = DSPy::LM::Adapters::Gemini::SchemaConverter.to_gemini_format(signature_class)
  
  # Add generation_config for structured output
  request_params[:generation_config] = {
    response_mime_type: "application/json",
    response_schema: schema
  }
end

#priorityObject



23
24
25
# File 'lib/dspy/lm/strategies/gemini_structured_output_strategy.rb', line 23

def priority
  100 # Highest priority - native structured outputs are most reliable
end