Skip to main content

The official Python client library for Scale AI, the Data Platform for AI

Project description

If you use earlier versions of the SDK, please refer to v1.0.4 documentation.

If you are migrating from earlier versions to v2, please refer to Migration Guide to v2.

Downloads Supported Versions Contributors

Installation

$ pip install --upgrade scaleapi

Usage

import scaleapi
client = scaleapi.ScaleClient('YOUR_API_KEY_HERE')

Tasks

Most of these methods will return a scaleapi.Task object, which will contain information about the json response (task_id, status, params, response, etc.).

Any parameter available in Scale’s API documentation can be passed as an argument option with the corresponding type.

The following endpoints for tasks are available:

Create Task

This method can be used for any Scale supported task type using the following format:

client.create_task(TaskType, ...task parameters...)

Passing in the applicable values into the function definition. The applicable fields and further information for each task type can be found in Scale’s API documentation.

from scaleapi.tasks import TaskType

client.create_task(
    TaskType.ImageAnnotation,
    project = 'test_project',
    callback_url = "http://www.example.com/callback",
    instruction= "Draw a box around each baby cow and big cow.",
    attachment_type = "image",
    attachment = "http://i.imgur.com/v4cBreD.jpg",
    geometries = {
        "box": {
          "objects_to_annotate": ["Baby Cow", "Big Cow"],
          "min_height": 10,
          "min_width": 10
        }
    }
)

Retrieve a task

Retrieve a task given its id. Check out Scale’s API documentation for more information.

task = client.get_task('30553edd0b6a93f8f05f0fee')
print(task.status)  # Task status ('pending', 'completed', 'error', 'canceled')
print(task.response) # If task is complete

List Tasks

Retrieve a list of Task objects, with filters for: project_name, batch_name, type, status, review_status, unique_id, completed_after, completed_before, updated_after, updated_before, created_after, created_before and tags.

get_tasks() is a generator method and yields Task objects.

A generator is another type of function, returns an iterable that you can loop over like a list. However, unlike lists, generators do not store the content in the memory. That helps you to process a large number of objects without increasing memory usage.

If you will iterate through the tasks and process them once, using a generator is the most efficient method. However, if you need to process the list of tasks multiple times, you can wrap the generator in a list(...) statement, which returns a list of Tasks by loading them into the memory.

Check out Scale’s API documentation for more information.

from scaleapi.tasks import TaskReviewStatus, TaskStatus

tasks = client.get_tasks(
    project_name = "My Project",
    created_after = "2020-09-08",
    completed_before = "2021-04-01",
    status = TaskStatus.Completed,
    review_status = TaskReviewStatus.Accepted
)

# Iterating through the generator
for task in tasks:
    # Download task or do something!
    print(task.task_id)

# For retrieving results as a Task list
task_list = list(tasks)
print(f"{len(task_list))} tasks retrieved")

Cancel Task

Cancel a task given its id if work has not started on the task (task status is Queued in the UI). Check out Scale’s API documentation for more information.

task = client.cancel_task('30553edd0b6a93f8f05f0fee')

Batches

Create Batch

Create a new Batch. Check out Scale’s API documentation for more information.

client.create_batch(
    project = 'test_project',
    callback = "http://www.example.com/callback",
    name = 'batch_name_01_07_2021'
)

Finalize Batch

Finalize a Batch. Check out Scale’s API documentation for more information.

client.finalize_batch(batch_name = 'batch_name_01_07_2021')

Check Batch Status

Get the status of a Batch. Check out Scale’s API documentation for more information.

client.batch_status(batch_name = 'batch_name_01_07_2021')

# Alternative via Batch.get_status()
batch = client.get_batch('batch_name_01_07_2021')
batch.get_status() # Refreshes tasks_{status} attributes of Batch
print(batch.tasks_pending, batch.tasks_completed)

Retrieve A Batch

Retrieve a single Batch. Check out Scale’s API documentation for more information.

client.get_batch(batch_name = 'batch_name_01_07_2021')

List Batches

Retrieve a list of Batches. Optional parameters are project_name, batch_status, created_after and created_before.

get_batches() is a generator method and yields Batch objects.

A generator is another type of function, returns an iterable that you can loop over like a list. However, unlike lists, generators do not store the content in the memory. That helps you to process a large number of objects without increasing memory usage.

When wrapped in a list(...) statement, it returns a list of Batches by loading them into the memory.

Check out Scale’s API documentation for more information.

from scaleapi.batches import BatchStatus

batches = client.get_batches(
    batch_status=BatchStatus.Completed,
    created_after = "2020-09-08"
)

counter = 0
for batch in batches:
    counter += 1
    print(f'Downloading batch {counter} | {batch.name} | {batch.project}')

# Alternative for accessing as a Batch list
batch_list = list(batches)
print(f"{len(batch_list))} batches retrieved")

Projects

Create Project

Create a new Project. Check out Scale’s API documentation for more information.

client.create_project(
    project_name = 'test_project',
    type = 'imageannotation,
    params = {'instruction':'Please label the kittens'}
)

Retrieve Project

Retrieve a single Project. Check out Scale’s API documentation for more information.

client.get_project(project_name = 'test_project')

List Projects

This function does not take any arguments. Retrieve a list of every Project. Check out Scale’s API documentation for more information.

counter = 0
projects = client.projects()
for project in projects:
    counter += 1
    print(f'Downloading project {counter} | {project.name} | {project.type}')

Update Project

Creates a new version of the Project. Check out Scale’s API documentation for more information.

data = client.update_project(
    project_name='test_project',
    patch = false,
    instruction='update: Please label all the stuff',
)

Error handling

If something went wrong while making API calls, then exceptions will be raised automatically as a ScaleException parent type and child exceptions:

  • ScaleInvalidRequest: 400 - Bad Request – The request was unacceptable, often due to missing a required parameter.

  • ScaleUnauthorized: 401 - Unauthorized – No valid API key provided.

  • ScaleNotEnabled: 402 - Not enabled – Please contact sales@scaleapi.com before creating this type of task.

  • ScaleResourceNotFound: 404 - Not Found – The requested resource doesn’t exist.

  • ScaleDuplicateTask: 409 - Conflict – The provided idempotency key or unique_id is already in use for a different request.

  • ScaleTooManyRequests: 429 - Too Many Requests – Too many requests hit the API too quickly.

  • ScaleInternalError: 500 - Internal Server Error – We had a problem with our server. Try again later

  • ScaleTimeoutError: 504 - Server Timeout Error – Try again later.

Check out Scale’s API documentation for more details.

For example:

from scaleapi.exceptions import ScaleException

try:
    client.create_task(TaskType.TextCollection, attachment='Some parameters are missing.')
except ScaleException as err:
    print(err.code)  # 400
    print(err.message)  # Parameter is invalid, reason: "attachments" is required

Troubleshooting

If you notice any problems, please email us at support@scale.com.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scaleapi-2.0.0.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scaleapi-2.0.0-py3-none-any.whl (14.1 kB view details)

Uploaded Python 3

File details

Details for the file scaleapi-2.0.0.tar.gz.

File metadata

  • Download URL: scaleapi-2.0.0.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.6.12

File hashes

Hashes for scaleapi-2.0.0.tar.gz
Algorithm Hash digest
SHA256 ea104d0d8bc17827ac6585a51353d58d47909a4289a9ec65836a35cc04392962
MD5 3d2eabe4a968b937023bdabf22166c8f
BLAKE2b-256 ee48f6a8d9c9362738ddd1d2100cfe0601daa7c90d4176fe0d585eae364ed0b9

See more details on using hashes here.

File details

Details for the file scaleapi-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: scaleapi-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 14.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.6.12

File hashes

Hashes for scaleapi-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8d5f0dc0bdf48a659be6c62a0b65bb032aa4ff1639a197942da11576e7af4608
MD5 d6ad6b526e2a2ab32e5cb2c0c437d288
BLAKE2b-256 a16737bcb5e75a291ca0db6bd51d2b391b397317157618e5cb8684d985f2c8df

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page