Class: OmniflashSdk::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/omniflash_sdk.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil, base_url: DEFAULT_BASE_URL, timeout: 60) ⇒ Client

Returns a new instance of Client.

Raises:



48
49
50
51
52
53
54
55
# File 'lib/omniflash_sdk.rb', line 48

def initialize(api_key: nil, base_url: DEFAULT_BASE_URL, timeout: 60)
  @api_key = api_key || ENV["OMNIFLASH_API_KEY"]
  raise Error, "Missing API key. Pass api_key: or set OMNIFLASH_API_KEY. Get one at https://omniflash.net/" if @api_key.nil? || @api_key.empty?

  @base_url = base_url.sub(%r{/+\z}, "")
  @timeout = timeout
  @http_factory = nil
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



45
46
47
# File 'lib/omniflash_sdk.rb', line 45

def api_key
  @api_key
end

#base_urlObject (readonly)

Returns the value of attribute base_url.



45
46
47
# File 'lib/omniflash_sdk.rb', line 45

def base_url
  @base_url
end

#http_factoryObject

Returns the value of attribute http_factory.



46
47
48
# File 'lib/omniflash_sdk.rb', line 46

def http_factory
  @http_factory
end

#timeoutObject (readonly)

Returns the value of attribute timeout.



45
46
47
# File 'lib/omniflash_sdk.rb', line 45

def timeout
  @timeout
end

Instance Method Details

#create_task(model_id:, prompt:, image_urls: nil, aspect_ratio: nil, **extra) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/omniflash_sdk.rb', line 57

def create_task(model_id:, prompt:, image_urls: nil, aspect_ratio: nil, **extra)
  body = { model_id: model_id, prompt: prompt }
  body[:image_urls] = image_urls unless image_urls.nil?
  body[:aspect_ratio] = aspect_ratio unless aspect_ratio.nil?
  body.merge!(extra)
  data = request(:post, "/tasks/create", body: body)
  Task.new(
    task_id: (data["task_id"] || "").to_s,
    task_status: TaskStatus::QUEUED,
    request_id: data["request_id"],
    credits: data["credits"],
    raw: data
  )
end

#get_task(task_id) ⇒ Object



72
73
74
75
# File 'lib/omniflash_sdk.rb', line 72

def get_task(task_id)
  data = request(:get, "/tasks/#{task_id}")
  task_from_data(data)
end

#run(model_id:, prompt:, image_urls: nil, aspect_ratio: nil, poll_interval: 3.0, max_wait: 600.0, **extra) ⇒ Object

Raises:



77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/omniflash_sdk.rb', line 77

def run(model_id:, prompt:, image_urls: nil, aspect_ratio: nil, poll_interval: 3.0, max_wait: 600.0, **extra)
  task = create_task(model_id: model_id, prompt: prompt, image_urls: image_urls, aspect_ratio: aspect_ratio, **extra)
  deadline = monotonic + max_wait
  until task.done?
    raise Error.new("Task #{task.task_id} did not finish within #{max_wait}s", code: task.task_status) if monotonic > deadline

    sleep_for(poll_interval)
    task = get_task(task.task_id)
  end
  raise Error.new("Task #{task.task_id} failed", code: TaskStatus::FAILED) if task.task_status == TaskStatus::FAILED

  task
end