Class: DSPy::LM::JSONStrategy

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

Overview

JSON extraction strategy with provider-specific handling

Instance Method Summary collapse

Constructor Details

#initialize(adapter, signature_class) ⇒ JSONStrategy

Returns a new instance of JSONStrategy.



12
13
14
15
# File 'lib/dspy/lm/json_strategy.rb', line 12

def initialize(adapter, signature_class)
  @adapter = adapter
  @signature_class = signature_class
end

Instance Method Details

#extract_json(response) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/dspy/lm/json_strategy.rb', line 34

def extract_json(response)
  adapter_class_name = adapter.class.name

  if adapter_class_name.include?('OpenAIAdapter') || adapter_class_name.include?('OllamaAdapter')
    # OpenAI/Ollama: try to extract JSON from various formats
    extract_json_from_content(response.content)
  elsif adapter_class_name.include?('AnthropicAdapter')
    # Anthropic: Beta API returns JSON in content, same as OpenAI/Gemini
    extract_json_from_content(response.content)
  elsif adapter_class_name.include?('GeminiAdapter')
    # Gemini: try to extract JSON from various formats
    extract_json_from_content(response.content)
  else
    # Unknown provider: try to extract JSON
    extract_json_from_content(response.content)
  end
end

#nameObject



53
54
55
# File 'lib/dspy/lm/json_strategy.rb', line 53

def name
  'json'
end

#prepare_request(messages, request_params) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/dspy/lm/json_strategy.rb', line 19

def prepare_request(messages, request_params)
  adapter_class_name = adapter.class.name

  if adapter_class_name.include?('OpenAIAdapter') || adapter_class_name.include?('OllamaAdapter')
    prepare_openai_request(request_params)
  elsif adapter_class_name.include?('AnthropicAdapter')
    prepare_anthropic_request(messages, request_params)
  elsif adapter_class_name.include?('GeminiAdapter')
    prepare_gemini_request(request_params)
  end
  # Unknown provider - no special handling
end