Class: OmnivideoSdk::Client
- Inherits:
-
Object
- Object
- OmnivideoSdk::Client
- Defined in:
- lib/omnivideo_sdk.rb
Instance Attribute Summary collapse
-
#api_key ⇒ Object
readonly
Returns the value of attribute api_key.
-
#base_url ⇒ Object
readonly
Returns the value of attribute base_url.
-
#http_factory ⇒ Object
Inject a custom HTTP factory (lambda yielding an object responding to #request) — used in tests.
-
#timeout ⇒ Object
readonly
Returns the value of attribute timeout.
Instance Method Summary collapse
- #create_task(model_id:, prompt:, image_urls: nil, aspect_ratio: nil, **extra) ⇒ Object
- #get_task(task_id) ⇒ Object
-
#initialize(api_key: nil, base_url: DEFAULT_BASE_URL, timeout: 60) ⇒ Client
constructor
A new instance of Client.
- #run(model_id:, prompt:, image_urls: nil, aspect_ratio: nil, poll_interval: 3.0, max_wait: 600.0, **extra) ⇒ Object
Constructor Details
#initialize(api_key: nil, base_url: DEFAULT_BASE_URL, timeout: 60) ⇒ Client
Returns a new instance of Client.
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_key ⇒ Object (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_url ⇒ Object (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_factory ⇒ Object
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 |
#timeout ⇒ Object (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
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 |