Module: DSPy::LM::UsageFactory

Extended by:
T::Sig
Defined in:
lib/dspy/lm/usage.rb

Overview

Factory for creating appropriate usage objects

Class Method Summary collapse

Class Method Details

.create(provider, usage_data) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/dspy/lm/usage.rb', line 53

def self.create(provider, usage_data)
  return nil if usage_data.nil?
  
  # If already a Usage struct, return as-is
  return usage_data if usage_data.is_a?(Usage)
  
  # Handle test doubles by converting to hash
  if usage_data.respond_to?(:to_h)
    usage_data = usage_data.to_h
  end
  
  # Convert hash to appropriate struct
  return nil unless usage_data.is_a?(Hash)
  
  # Normalize keys to symbols
  normalized = usage_data.transform_keys(&:to_sym)
  
  case provider.to_s.downcase
  when 'openai'
    create_openai_usage(normalized)
  when 'anthropic'
    create_anthropic_usage(normalized)
  when 'gemini'
    create_gemini_usage(normalized)
  else
    create_generic_usage(normalized)
  end
end