Class: ActiveCanvas::AiModels
- Inherits:
-
Object
- Object
- ActiveCanvas::AiModels
- Defined in:
- app/services/active_canvas/ai_models.rb
Constant Summary collapse
- DEFAULT_TEXT_MODELS =
Fallback models when database is empty
[ { id: "gpt-4o", name: "GPT-4o", provider: "openai", input_modalities: %w[text image], output_modalities: %w[text] }, { id: "gpt-4o-mini", name: "GPT-4o Mini", provider: "openai", input_modalities: %w[text image], output_modalities: %w[text] }, { id: "claude-sonnet-4-20250514", name: "Claude Sonnet 4", provider: "anthropic", input_modalities: %w[text image], output_modalities: %w[text] }, { id: "claude-3-5-haiku-20241022", name: "Claude 3.5 Haiku", provider: "anthropic", input_modalities: %w[text], output_modalities: %w[text] } ].freeze
- DEFAULT_IMAGE_MODELS =
[ { id: "dall-e-3", name: "DALL-E 3", provider: "openai", input_modalities: %w[text], output_modalities: %w[image] }, { id: "gpt-image-1", name: "GPT Image 1", provider: "openai", input_modalities: %w[text], output_modalities: %w[image] } ].freeze
- DEFAULT_VISION_MODELS =
[ { id: "gpt-4o", name: "GPT-4o", provider: "openai", input_modalities: %w[text image], output_modalities: %w[text] }, { id: "gpt-4o-mini", name: "GPT-4o Mini", provider: "openai", input_modalities: %w[text image], output_modalities: %w[text] }, { id: "claude-sonnet-4-20250514", name: "Claude Sonnet 4", provider: "anthropic", input_modalities: %w[text image], output_modalities: %w[text] } ].freeze
Class Method Summary collapse
- .all_image_models ⇒ Object
- .all_text_models ⇒ Object
- .all_vision_models ⇒ Object
- .find_by_id(model_id) ⇒ Object
- .image_models ⇒ Object
- .last_synced_at ⇒ Object
- .models_synced? ⇒ Boolean
- .refresh! ⇒ Object
- .text_models ⇒ Object
- .vision_models ⇒ Object
Class Method Details
.all_image_models ⇒ Object
64 65 66 67 68 69 |
# File 'app/services/active_canvas/ai_models.rb', line 64 def all_image_models models = AiModel.active.image_models.order(:provider, :name) return models.map(&:as_json_for_editor) if models.any? DEFAULT_IMAGE_MODELS end |
.all_text_models ⇒ Object
57 58 59 60 61 62 |
# File 'app/services/active_canvas/ai_models.rb', line 57 def all_text_models models = AiModel.active.text_models.order(:provider, :name) return models.map(&:as_json_for_editor) if models.any? DEFAULT_TEXT_MODELS end |
.all_vision_models ⇒ Object
71 72 73 74 75 76 |
# File 'app/services/active_canvas/ai_models.rb', line 71 def all_vision_models models = AiModel.active.vision_models.order(:provider, :name) return models.map(&:as_json_for_editor) if models.any? DEFAULT_VISION_MODELS end |
.find_by_id(model_id) ⇒ Object
78 79 80 |
# File 'app/services/active_canvas/ai_models.rb', line 78 def find_by_id(model_id) AiModel.find_by(model_id: model_id) end |
.image_models ⇒ Object
43 44 45 46 47 48 |
# File 'app/services/active_canvas/ai_models.rb', line 43 def image_models models = fetch_image_models_from_db return models if models.any? filter_by_configured_providers(DEFAULT_IMAGE_MODELS) end |
.last_synced_at ⇒ Object
86 87 88 |
# File 'app/services/active_canvas/ai_models.rb', line 86 def last_synced_at AiModel.maximum(:updated_at) end |
.models_synced? ⇒ Boolean
82 83 84 |
# File 'app/services/active_canvas/ai_models.rb', line 82 def models_synced? AiModel.exists? end |
.refresh! ⇒ Object
32 33 34 |
# File 'app/services/active_canvas/ai_models.rb', line 32 def refresh! AiModel.refresh_from_ruby_llm! end |
.text_models ⇒ Object
36 37 38 39 40 41 |
# File 'app/services/active_canvas/ai_models.rb', line 36 def text_models models = fetch_text_models_from_db return models if models.any? filter_by_configured_providers(DEFAULT_TEXT_MODELS) end |
.vision_models ⇒ Object
50 51 52 53 54 55 |
# File 'app/services/active_canvas/ai_models.rb', line 50 def vision_models models = fetch_vision_models_from_db return models if models.any? filter_by_configured_providers(DEFAULT_VISION_MODELS) end |