Predictions management
Project → Settings → Predictions.
The Predictions tab lets you manage model-produced pre-annotations on your tasks — separately from the ML backend connection settings.
Visible to Owner, Admin, Manager.
What's a prediction
A prediction is a model-produced annotation, stored on
task.predictions[] alongside the human annotations[]. They share
the same JSON shape (see Task format)
plus a model_version string identifying which model produced them,
and an optional score.
Predictions surface in the labeller as pre-filled regions the annotator can accept / edit / discard. They don't count toward the task's annotation count.
What the tab shows
One card per model version that has predictions in this project:
- the
model_versionstring (undefinedmeans predictions were imported without one) - the number of predictions from that version
- when the last prediction from that version was created
There is no source column and no side-by-side compare view.
What you can do
Delete a model version's predictions
Card menu → Delete → confirm. Removes every prediction tagged with
that model_version across the project's tasks (the API call is
DELETE /api/projects/<id>/model-versions with {"model_version": "..."}). Tasks stay; only their predictions[] entries go. If the
deleted version was the project's active one, the project's
model_version is cleared.
Use cases:
- You retrained a model and want to clear old predictions before re-running
- Predictions came from a misconfigured run and need to go
- You're prepping a project for human-only labelling and don't want models biasing annotators
Re-run predictions on selected tasks
For projects with a connected ML backend:
- Open the Data Manager
- Filter / select the tasks you want re-predicted
- Selection footer → Retrieve Predictions
The backend's /predict is called for the selected tasks and the
responses are stored as new predictions.
Turn predictions into annotations
Data Manager → select tasks → Create Annotations From Predictions (pick the model version). Useful to accept a trusted model's output wholesale, or to seed a review pass.
Importing predictions via API
Beyond ML-backend-driven generation, predictions can be imported directly with the tasks:
{
"data": { "text": "..." },
"predictions": [
{
"model_version": "whisper-tiny-2026-05",
"score": 0.87,
"result": [
{
"from_name": "transcript",
"to_name": "audio",
"type": "textarea",
"value": { "text": ["Sannu da zuwa"] }
}
]
}
]
}
POST this to /api/projects/<id>/import with the standard task
import. Useful when you're running models outside AfriAnnotate
and just want to surface predictions to annotators.
Predictions in the labeller
When Annotation → Use predictions to prelabel tasks is on, the
selected model version's prediction is loaded as the starting point for
a new annotation. The annotator can accept it as-is, edit, or clear it
and label from scratch. On submit, the annotation is the human's
version; the prediction stays in task.predictions[].
Predictions and agreement metrics
Predictions play no role in agreement. The agreement scorer
compares human annotations only — it loads each task's
non-cancelled, non-ground-truth annotations and needs at least two
of them; predictions[] is never read. There is no setting to
change this.
To measure "human vs model" agreement, import the model output as an
annotation from a dedicated account (same JSON result shape,
posted via the annotations API) instead of a prediction — it then
participates in agreement scoring like any other annotator's work.
Predictions in exports
Exports carry predictions[] alongside annotations in the JSON
formats; flat formats (CSV, CoNLL, …) are annotation-only. See
Data export.
What's next
- ML backend → — connect a model that produces predictions
- Task format → — the JSON shape of predictions
- Agreement metrics → — how agreement is scored (human annotations only)
- Active learning patterns → — uncertainty sampling