Skip to content

What you will actually do

Trainers teach AI models to code by showing them, task by task, what good code and good explanations look like. These are the kinds of tasks you will work on.

Task type 01

Review a response for correctness

A developer asked the model for help and it answered. You decide whether the code does what was asked, in every case, and flag each problem with the line and the input that breaks it.

  • Run the code, do not just read it
  • Check boundaries: empty input, one item, very large input
  • Rate the response against the project rubric
review.py · model response
“Return the second largest distinct number in a list.”
def second_largest(nums):
    ordered = sorted(nums, reverse=True)
    return ordered[1]
# Reviewer: fails the "distinct" requirement.
# second_largest([5, 5, 3]) returns 5, not 3.
# Also raises IndexError on a one-item list.
compare.task · JavaScript
“Debounce a search box so it only calls the API after the user stops typing.”
RESPONSE A
function debounce(fn, ms) {
  let t;
  return (...args) => {
    clearTimeout(t);
    t = setTimeout(() => fn(...args), ms);
  };
}
RESPONSE B
function debounce(fn, ms) {
  return (...args) => setTimeout(() => fn(...args), ms);
}
Task type 02

Compare and rank responses

The model gives two or more answers to the same request. You rank them and explain the ranking precisely enough that the model can learn from it.

Here, Response B never cancels the earlier timer, so every keystroke still fires an API call, just later. It looks like a debounce and behaves like a delay. A good rationale says exactly that.

Task type 03

Write the ideal response

When no response is good enough, you write the one the model should have produced: correct, idiomatic code and an explanation pitched at the person who asked.

  • Follow the project's style and length guidelines
  • Explain the reasoning, not only the code
  • Include the tests you used to check it
ideal_response.sql
“Find customers who ordered in January but not in February.”
SELECT DISTINCT o.customer_id
FROM orders o
WHERE o.ordered_at >= '2026-01-01'
  AND o.ordered_at <  '2026-02-01'
  AND NOT EXISTS (
    SELECT 1 FROM orders f
    WHERE f.customer_id = o.customer_id
      AND f.ordered_at >= '2026-02-01'
      AND f.ordered_at <  '2026-03-01'
  );
-- Half-open ranges avoid missing orders late on the 31st.
security_review.py
“Save an uploaded file to the uploads folder using its original name.”
def save_upload(file):
    path = "uploads/" + file.filename
    file.save(path)
# Reviewer: the filename is user-controlled.
# Sanitise it (e.g. secure_filename) and confirm
# the final path stays inside uploads/.
Task type 04

Catch security and safety issues

Models write code that works on the happy path and is unsafe everywhere else. Trainers spot injection, unsafe file handling, leaked secrets and weak defaults, and explain the fix.

Projects also ask you to judge when a model should decline a request, and whether its answer stays helpful while doing so.

Day to day

How the work is organised

Projects

You are assigned to projects that match your languages and experience. Each has its own guidelines, examples of good work and an hourly rate of at least $45.

Hours

Work whenever tasks are available and it suits you. Your approved hours appear in your earnings with the project, date and rate.

Quality

Work is spot-checked against the project guidelines. Consistent, careful work leads to more projects and higher-rate projects.

Setup

A laptop or desktop, a modern browser, a reliable connection and a local environment for the languages you work in.

Confidentiality

Project material and model outputs are confidential. You agree not to share them outside the platform.

Support

Questions about a task or your account go to our support team through messages in your dashboard, and the whole conversation stays in one place.

Sound like work you would be good at?

The assessment uses the same kinds of tasks. Apply now and try them for yourself.