Class: OmnivideoSdk::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/omnivideo_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:



42
43
44
45
46
47
48
49
# File 'lib/omnivideo_sdk.rb', line 42

def initialize(api_key: nil, base_url: DEFAULT_BASE_URL, timeout: 60)
  @api_key = api_key || ENV["OMNIVIDEO_API_KEY"]
  raise Error, "Missing API key. Pass api_key: or set OMNIVIDEO_API_KEY. Get one at https://omnivideo.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.



40
41
42
# File 'lib/omnivideo_sdk.rb', line 40

def api_key
  @api_key
end

#base_urlObject (readonly)

Returns the value of attribute base_url.



40
41
42
# File 'lib/omnivideo_sdk.rb', line 40

def base_url
  @base_url
end

#http_factoryObject

Inject a custom HTTP factory (lambda yielding an object responding to #request) — used in tests.



52
53
54
# File 'lib/omnivideo_sdk.rb', line 52

def http_factory
  @http_factory
end

#timeoutObject (readonly)

Returns the value of attribute timeout.



40
41
42
# File 'lib/omnivideo_sdk.rb', line 40

def timeout
  @timeout
end

Instance Method Details

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



54
55
56
57
58
59
60
61
# File 'lib/omnivideo_sdk.rb', line 54

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)
  to_task(data)
end

#get_task(task_id) ⇒ Object



63
64
65
66
# File 'lib/omnivideo_sdk.rb', line 63

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

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

Raises:



68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/omnivideo_sdk.rb', line 68

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