Class: LlmProviders::Providers::Openrouter

Inherits:
Openai
  • Object
show all
Defined in:
lib/llm_providers/providers/openrouter.rb

Constant Summary collapse

API_URL =
"https://openrouter.ai/api/v1/chat/completions"
MODELS_URL =
"https://openrouter.ai/api/v1/models"

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Openai

#chat

Methods inherited from Base

#chat

Constructor Details

#initialize(app_name: nil, app_url: nil, provider: nil, **options) ⇒ Openrouter

Returns a new instance of Openrouter.



38
39
40
41
42
43
# File 'lib/llm_providers/providers/openrouter.rb', line 38

def initialize(app_name: nil, app_url: nil, provider: nil, **options)
  super(**options)
  @app_name = app_name || ENV["OPENROUTER_APP_NAME"]
  @app_url = app_url || ENV["OPENROUTER_APP_URL"]
  @provider_preferences = provider
end

Class Method Details

.models ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/llm_providers/providers/openrouter.rb', line 9

def self.models
  api_key = ENV.fetch("OPENROUTER_API_KEY")
  conn = Faraday.new do |f|
    f.response :json
    f.adapter Faraday.default_adapter
  end

  response = conn.get(MODELS_URL) do |req|
    req.headers["Authorization"] = "Bearer #{api_key}"
  end

  unless response.success?
    error_msg = response.body.dig("error", "message") || "Failed to fetch models"
    raise ProviderError.new(error_msg, code: "openrouter_error")
  end

  (response.body["data"] || []).map do |model|
    {
      id: model["id"],
      name: model["name"],
      context_length: model["context_length"],
      pricing: {
        prompt: model.dig("pricing", "prompt"),
        completion: model.dig("pricing", "completion")
      }
    }
  end
end