Module: DSPy::LM::VisionModels

Defined in:
lib/dspy/lm/vision_models.rb

Constant Summary collapse

OPENAI_VISION_MODELS =

OpenAI vision-capable models

[
  'gpt-4-vision-preview',
  'gpt-4-turbo',
  'gpt-4-turbo-2024-04-09',
  'gpt-4-turbo-preview',
  'gpt-4o',
  'gpt-4o-2024-05-13',
  'gpt-4o-2024-08-06',
  'gpt-4o-mini',
  'gpt-4o-mini-2024-07-18'
].freeze
ANTHROPIC_VISION_MODELS =

Anthropic vision-capable models

[
  'claude-3-opus-20240229',
  'claude-3-sonnet-20240229',
  'claude-3-haiku-20240307',
  'claude-3-5-sonnet-20241022',
  'claude-3-5-sonnet-20240620',
  'claude-3-5-haiku-20241022'
].freeze
GEMINI_VISION_MODELS =

Gemini vision-capable models (all Gemini models support vision) Based on official Google AI API documentation (March 2025)

[
  # Gemini 2.5 series (2025)
  'gemini-2.5-pro',
  'gemini-2.5-flash',
  'gemini-2.5-flash-lite',
  # Gemini 2.0 series (2024-2025)
  'gemini-2.0-flash',
  'gemini-2.0-flash-lite',
  # Gemini 1.5 series
  'gemini-1.5-pro',
  'gemini-1.5-flash',
  'gemini-1.5-flash-8b'
].freeze

Class Method Summary collapse

Class Method Details

.supports_vision?(provider, model) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/dspy/lm/vision_models.rb', line 45

def self.supports_vision?(provider, model)
  case provider.to_s.downcase
  when 'openai'
    OPENAI_VISION_MODELS.any? { |m| model.include?(m) }
  when 'anthropic'
    ANTHROPIC_VISION_MODELS.any? { |m| model.include?(m) }
  when 'gemini'
    GEMINI_VISION_MODELS.any? { |m| model.include?(m) }
  else
    false
  end
end

.validate_vision_support!(provider, model) ⇒ Object



58
59
60
61
62
# File 'lib/dspy/lm/vision_models.rb', line 58

def self.validate_vision_support!(provider, model)
  unless supports_vision?(provider, model)
    raise ArgumentError, "Model #{model} does not support vision. Vision-capable models for #{provider}: #{vision_models_for(provider).join(', ')}"
  end
end

.vision_models_for(provider) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/dspy/lm/vision_models.rb', line 64

def self.vision_models_for(provider)
  case provider.to_s.downcase
  when 'openai'
    OPENAI_VISION_MODELS
  when 'anthropic'
    ANTHROPIC_VISION_MODELS
  when 'gemini'
    GEMINI_VISION_MODELS
  else
    []
  end
end