Class: ReductoAI::Resources::Jobs

Inherits:
Object
  • Object
show all
Defined in:
lib/reducto_ai/resources/jobs.rb

Overview

Jobs resource for job management and file upload operations.

Provides methods to list, retrieve, cancel jobs, upload files, and configure webhooks for async job notifications.

Examples:

Poll for job completion

client = ReductoAI::Client.new
job = client.parse.async(input: "https://example.com/doc.pdf")

loop do
  status = client.jobs.retrieve(job_id: job["job_id"])
  break if status["status"] == "succeeded"
  sleep 2
end
result = status["result"]

Upload a local file

upload_result = client.jobs.upload(file: "/path/to/document.pdf")
document_url = upload_result["url"]
client.parse.sync(input: document_url)

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Jobs

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Jobs.

Parameters:

  • client (Client)

    the Reducto API client



28
29
30
# File 'lib/reducto_ai/resources/jobs.rb', line 28

def initialize(client)
  @client = client
end

Instance Method Details

#cancel(job_id:) ⇒ Hash

Cancels a running async job.

Examples:

client.jobs.cancel(job_id: "job_abc123")

Parameters:

  • job_id (String)

    Job identifier to cancel

Returns:

  • (Hash)

    Cancellation result

Raises:

  • (ArgumentError)

    if job_id is nil or empty

  • (ClientError)

    if job doesn't exist or is not cancellable

See Also:



78
79
80
81
82
# File 'lib/reducto_ai/resources/jobs.rb', line 78

def cancel(job_id:)
  raise ArgumentError, "job_id is required" if job_id.nil? || job_id.to_s.strip.empty?

  @client.request(:post, "/cancel/#{job_id}")
end

#configure_webhookHash

Configures webhook notifications for async jobs.

Examples:

client.jobs.configure_webhook

Returns:

  • (Hash)

    Webhook configuration result

See Also:



158
159
160
# File 'lib/reducto_ai/resources/jobs.rb', line 158

def configure_webhook
  @client.request(:post, "/configure_webhook")
end

#list(**options) ⇒ Hash

Lists jobs with optional filtering.

Examples:

List recent jobs

jobs = client.jobs.list(limit: 10)
jobs["jobs"].each { |job| puts job["job_id"] }

Filter by status

failed_jobs = client.jobs.list(status: "failed")

Parameters:

  • options (Hash)

    Query parameters for filtering

Options Hash (**options):

  • :status (String)

    Filter by job status ("processing", "succeeded", "failed")

  • :limit (Integer)

    Maximum number of jobs to return

  • :offset (Integer)

    Pagination offset

Returns:

  • (Hash)

    Job list with pagination metadata

See Also:



60
61
62
63
# File 'lib/reducto_ai/resources/jobs.rb', line 60

def list(**options)
  params = options.compact
  @client.request(:get, "/jobs", params: params)
end

#retrieve(job_id:) ⇒ Hash

Retrieves job status and results.

Used to poll async jobs until completion. Completed jobs include full results in the response.

Examples:

Poll until complete

loop do
  status = client.jobs.retrieve(job_id: job_id)
  break if %w[succeeded failed].include?(status["status"])
  sleep 2
end

Parameters:

  • job_id (String)

    Job identifier to retrieve

Returns:

  • (Hash)

    Job status with keys:

    • "job_id" [String] - Job identifier
    • "status" [String] - Current status ("processing", "succeeded", "failed")
    • "result" [Hash] - Results (only present when status is "succeeded")
    • "error" [String] - Error message (only present when status is "failed")

Raises:

  • (ArgumentError)

    if job_id is nil or empty

  • (ClientError)

    if job doesn't exist

See Also:



108
109
110
111
112
# File 'lib/reducto_ai/resources/jobs.rb', line 108

def retrieve(job_id:)
  raise ArgumentError, "job_id is required" if job_id.nil? || job_id.to_s.strip.empty?

  @client.request(:get, "/job/#{job_id}")
end

#upload(file:, extension: nil) ⇒ Hash

Uploads a local file to Reducto's storage.

Returns a URL that can be used as input for other API operations. Useful when processing local files instead of publicly accessible URLs.

Examples:

Upload local PDF

upload = client.jobs.upload(file: "/path/to/invoice.pdf")
result = client.parse.sync(input: upload["url"])

Upload with File object

File.open("/path/to/doc.pdf", "rb") do |f|
  upload = client.jobs.upload(file: f, extension: "pdf")
end

Parameters:

  • file (String, File, IO)

    File path or file-like object to upload

  • extension (String, nil) (defaults to: nil)

    File extension override (e.g., "pdf", "png")

Returns:

  • (Hash)

    Upload result with keys:

    • "url" [String] - Uploaded file URL for use in API calls
    • "job_id" [String] - Upload job identifier

Raises:

  • (ArgumentError)

    if file is nil or path doesn't exist

  • (ServerError)

    if upload fails

See Also:



139
140
141
142
143
144
145
146
147
148
# File 'lib/reducto_ai/resources/jobs.rb', line 139

def upload(file:, extension: nil)
  raise ArgumentError, "file is required" if file.nil?

  upload_io = build_upload_io(file)
  body = { file: upload_io }
  params = {}
  params[:extension] = extension unless extension.nil?

  @client.request(:post, "/upload", body: body, params: params)
end

#versionHash

Returns API version information.

Examples:

version_info = client.jobs.version
puts version_info["version"]

Returns:

  • (Hash)

    Version details



39
40
41
# File 'lib/reducto_ai/resources/jobs.rb', line 39

def version
  @client.request(:get, "/version")
end