Class: ActiveHarness::Providers::Images::OpenRouter

Inherits:
Base
  • Object
show all
Defined in:
lib/active_harness/providers/images/openrouter.rb

Constant Summary

Constants inherited from Base

Base::HTTP, Base::STREAMING_HTTP

Instance Method Summary collapse

Instance Method Details

#call(model:, prompt:, size: nil, quality: nil, **_) ⇒ Object

Parameters:

  • model (String)

    e.g. “openai/gpt-5-image-mini”, “google/gemini-2.5-flash-image”

  • prompt (String)

    image description

  • size (String) (defaults to: nil)

    ignored by OpenRouter (passed through for future support)

Raises:



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/active_harness/providers/images/openrouter.rb', line 10

def call(model:, prompt:, size: nil, quality: nil, **_)
  headers = {
    "Content-Type"  => "application/json",
    "Authorization" => "Bearer #{api_key}"
  }
  referer = config.openrouter_http_referer.to_s
  headers["HTTP-Referer"] = referer unless referer.empty?

  messages = [{ role: "user", content: prompt }]
  body = { model: model, messages: messages, modalities: ["image", "text"] }
  body[:size]    = size    if size
  body[:quality] = quality if quality

  raw  = post_json(URI(config.openrouter_api_url), headers: headers, body: body, timeout: 120)
  data = parse!(raw)
  handle_error!(data)

  content = extract_image(data)
  raise Errors::ProviderError, "No image data in response: #{data.dig('choices', 0, 'message')&.keys}" unless content

  { content: content, provider: :openrouter, model: model, usage: extract_usage_openai(data) }
end