Class: Raif::Llms::OpenRouter

Inherits:
Raif::Llm
  • Object
show all
Includes:
Concerns::Llms::OpenAi::MessageFormatting
Defined in:
app/models/raif/llms/open_router.rb

Instance Method Summary collapse

Instance Method Details

#connectionObject



26
27
28
29
30
31
32
33
34
35
# File 'app/models/raif/llms/open_router.rb', line 26

def connection
  @connection ||= Faraday.new(url: "https://openrouter.ai/api/v1") do |f|
    f.headers["Authorization"] = "Bearer #{Raif.config.open_router_api_key}"
    f.headers["HTTP-Referer"] = Raif.config.open_router_site_url if Raif.config.open_router_site_url.present?
    f.headers["X-Title"] = Raif.config.open_router_app_name if Raif.config.open_router_app_name.present?
    f.request :json
    f.response :json
    f.response :raise_error
  end
end

#perform_model_completion!(model_completion) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'app/models/raif/llms/open_router.rb', line 6

def perform_model_completion!(model_completion)
  model_completion.temperature ||= default_temperature
  parameters = build_request_parameters(model_completion)
  response = connection.post("chat/completions") do |req|
    req.body = parameters
  end

  response_json = response.body

  model_completion.update!(
    response_tool_calls: extract_response_tool_calls(response_json),
    raw_response: response_json.dig("choices", 0, "message", "content"),
    completion_tokens: response_json.dig("usage", "completion_tokens"),
    prompt_tokens: response_json.dig("usage", "prompt_tokens"),
    total_tokens: response_json.dig("usage", "total_tokens")
  )

  model_completion
end