Module: RailsAiGateway::ModelHelper

Defined in:
lib/rails_ai_gateway/model_helper.rb

Overview

Query helpers backing models, model, and route_for. Prefer those top-level methods in application code.

Class Method Summary collapse

Class Method Details

.model(name) ⇒ Object



25
26
27
# File 'lib/rails_ai_gateway/model_helper.rb', line 25

def model(name)
  models.find { |entry| entry[:id] == name.to_s }
end

.models(capabilities: nil, provider: nil) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/rails_ai_gateway/model_helper.rb', line 7

def models(capabilities: nil, provider: nil)
  routes = ModelRoute.available.includes(:provider).order(:name, :priority)
  routes = routes.where(provider_id: provider.id) if provider.is_a?(Provider)
  routes = routes.where(rails_ai_gateway_providers: { name: provider.to_s }) if provider.present? && !provider.is_a?(Provider)
  required = Array(capabilities).map(&:to_s)

  routes.group_by(&:name).filter_map do |name, model_routes|
    model_capabilities = model_routes.flat_map(&:capabilities).uniq.sort
    next unless (required - model_capabilities).empty?

    {
      id: name,
      capabilities: model_capabilities,
      routes: model_routes.map { |route| (route) }
    }
  end
end

.route_for(model:, query:, capabilities: []) ⇒ Object



29
30
31
32
# File 'lib/rails_ai_gateway/model_helper.rb', line 29

def route_for(model:, query:, capabilities: [])
  route = ModelRoute.ranked_for_query(name: model, query: query, capabilities: capabilities).first
  (route) if route
end