Light Logo
JavaScript SDK (v0.54.0)Guides

Predictions

A guide on how to work with predictions using the WriftAI JavaScript client

This section demonstrates common prediction operations you can perform with the WriftAI JavaScript client. These examples are not exhaustive — check the client reference for all options.

Get a Prediction by ID

const prediction = await wriftai.predictions.get('your-prediction-id');

Cancel a Prediction by ID

await wriftai.predictions.cancel('your-prediction-id');

Create a Prediction

With the latest version of a model

const prediction = await wriftai.predictions.create({
  model: 'deepseek-ai/deepseek-r1',
  input: {
    prompt: 'Summarize quantum computing.',
  },
});

With a specific version of a model

const prediction = await wriftai.predictions.create({
  model: 'deepseek-ai/deepseek-r1:2',
  input: {
    prompt: 'Summarize quantum computing.',
  },
});

With a webhook for prediction updates

const prediction = await wriftai.predictions.create({
  model: 'deepseek-ai/deepseek-r1',
  input: {
    prompt: 'Summarize quantum computing.',
  },
  webhook: {
    url: 'https://example.com/webhooks/wriftai',
    secret: 'top-secret', // This is optional
  },
});

With file inputs

File inputs are automatically uploaded when you create a prediction. Wrap a Uint8Array, Blob, or File in FileData, and no need to call wriftai.files.upload() separately.

Files can be nested anywhere in input, including inside arrays, objects, or combinations of both, and you can include as many as you need. They'll all be uploaded concurrently.

From a browser file input (<input type="file">):

import { FileData } from 'wriftai';

const prediction = await wriftai.predictions.create({
  model: 'pyannote/speaker-diarization-community-1',
  input: { audio: new FileData(input.files[0]) },
});

From constructed data:

import { FileData } from 'wriftai';

const blob = new Blob(recordedChunks, { type: 'audio/wav' });
const prediction = await wriftai.predictions.create({
  model: 'pyannote/speaker-diarization-community-1',
  input: { audio: new FileData(blob) },
});

From a fetch response:

import { FileData } from 'wriftai';

const res = await fetch('https://example.com/audio.wav');
const prediction = await wriftai.predictions.create({
  model: 'pyannote/speaker-diarization-community-1',
  input: { audio: new FileData(await res.blob(), 'audio/wav') },
});

From a file path (requires node:fs):

import { readFile } from 'node:fs/promises';
import { FileData } from 'wriftai';

const prediction = await wriftai.predictions.create({
  model: 'pyannote/speaker-diarization-community-1',
  input: { audio: new FileData(await readFile('./audio.wav'), 'audio/wav') },
});

For large files, use openAsBlob to stream from disk without loading the entire file into memory (requires node:fs):

import { openAsBlob } from 'node:fs';
import { FileData } from 'wriftai';

const prediction = await wriftai.predictions.create({
  model: 'pyannote/speaker-diarization-community-1',
  input: {
    audio: new FileData(await openAsBlob('./long-recording.wav'), 'audio/wav'),
  },
});

For more details on working with files, see the Files guide.

With input validation enabled

Enable early input validation against the model’s input schema before a prediction is created. This catches invalid inputs upfront and prevents unnecessary model execution and cost.

const prediction = await wriftai.predictions.create({
  model: 'deepseek-ai/deepseek-r1',
  input: {
    prompt: 'Summarize quantum computing.',
  },
  validate_input: true,
});

Create and wait for completion

const prediction = await wriftai.predictions.create(
  {
    model: 'deepseek-ai/deepseek-r1',
    input: {
      prompt: 'Summarize quantum computing.',
    },
  },
  true,
);

Create and wait with custom options

const prediction = await wriftai.predictions.create(
  {
    model: 'deepseek-ai/deepseek-r1',
    input: {
      prompt: 'Summarize quantum computing.',
    },
  },
  true,
  {
    pollInterval: 500,
    onPoll: async (prediction) => {
      // your custom logic
    },
  },
);

Wait for an existing prediction to complete

const prediction = await wriftai.predictions.wait('your-prediction-id');

List Predictions

const predictions = await wriftai.predictions.list();

Filter by status

import { Status } from 'wriftai';

const predictions = await wriftai.predictions.list({
  statuses: [Status.failed, Status.cancelled],
});