Module: RubyLLM::Providers::OpenRouter::Videos
- Included in:
- ChatCompletions
- Defined in:
- lib/ruby_llm/providers/openrouter/videos.rb
Overview
OpenRouter's asynchronous video generation API. Reference images become frame_images entries, and finished videos are downloaded from the job's authenticated content endpoint.
Constant Summary collapse
- FRAME_TYPES =
%w[first_frame last_frame].freeze
Instance Method Summary collapse
- #download_video(job) ⇒ Object
- #parse_video_job(response, model:) ⇒ Object
-
#parse_video_job_status(response, job:) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument.
- #render_video_payload(prompt, model:, with: [], provider_options: {}) ⇒ Object
- #video_job_url(job) ⇒ Object
- #video_url ⇒ Object
Instance Method Details
#download_video(job) ⇒ Object
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/ruby_llm/providers/openrouter/videos.rb', line 42 def download_video(job) response = @connection.get "videos/#{job.id}/content?index=0" Video.new( data: response.body, mime_type: response.headers['content-type'] || 'video/mp4', model: job.model, raw: job.raw ) end |
#parse_video_job(response, model:) ⇒ Object
23 24 25 26 27 28 |
# File 'lib/ruby_llm/providers/openrouter/videos.rb', line 23 def parse_video_job(response, model:) id = response.body['id'] raise Error.new('OpenRouter did not return a video job', response:) unless id VideoJob.new(id: id, protocol: self, model: model, status: job_status(response.body), raw: response.body) end |
#parse_video_job_status(response, job:) ⇒ Object
rubocop:disable Lint/UnusedMethodArgument
34 35 36 37 38 39 40 |
# File 'lib/ruby_llm/providers/openrouter/videos.rb', line 34 def parse_video_job_status(response, job:) # rubocop:disable Lint/UnusedMethodArgument body = response.body status = job_status(body) state = { status: status, raw: body } state[:error] = body['error'] || body['status'] if status == :failed state end |
#render_video_payload(prompt, model:, with: [], provider_options: {}) ⇒ Object
16 17 18 19 20 21 |
# File 'lib/ruby_llm/providers/openrouter/videos.rb', line 16 def render_video_payload(prompt, model:, with: [], provider_options: {}) payload = { model: model, prompt: prompt } payload[:frame_images] = frame_images(with) if with.any? payload.merge() end |
#video_job_url(job) ⇒ Object
30 31 32 |
# File 'lib/ruby_llm/providers/openrouter/videos.rb', line 30 def video_job_url(job) "videos/#{job.id}" end |
#video_url ⇒ Object
12 13 14 |
# File 'lib/ruby_llm/providers/openrouter/videos.rb', line 12 def video_url 'videos' end |