This is used inside the OpenAI Integration for Tasks like backgroundCreateChatCompletion and backgroundCreateCompletion.

Parameters

keyrequired
string

Should be a stable and unique key inside the run(). See resumability for more information.

urlrequired
string

The url to fetch.

options
object

Options for the request

method
string

The HTTP method to use for the request.

headers
object

Any headers to send with the request. Note that you can use redactString to prevent sensitive information from being stored (e.g. in the logs), like API keys and tokens.

body
string | ArrayBuffer

The body of the request.

retry options
object

An object where the key is a status code pattern and the value is a retrying strategy. Supported patterns are:

  • Specific status codes: 429
  • Ranges: 500-599
  • Wildcards: 2xx, 3xx, 4xx, 5xx
  {
      "500-599": {
        strategy: "backoff",
        limit: 5,
        minTimeoutInMs: 1000,
        maxTimeoutInMs: 30000,
        factor: 1.8,
        randomize: true,
      },
      "429": {
        strategy: "backoff",
        limit: 10,
        minTimeoutInMs: 1000,
        maxTimeoutInMs: 60000,
        factor: 2,
        randomize: true,
      },
    }

An individual retrying strategy can be one of two types:

  • backoff: Retries the request with an exponential backoff.
  • headers: Retries the request using info from the response headers.

Returns

A Promise that resolves after the specified amount of time.

client.defineJob({
  id: "background-fetch-job",
  name: "Background fetch Job",
  version: "0.0.1",
  trigger: eventTrigger({
    name: "example.event",
  }),
  run: async (payload, io, ctx) => {
    const response = io.backgroundFetch<CreateChatCompetionResponseData>(
      "fetch-some-data",
      "https://example.com/api/endpoint",
      {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: redactString`Bearer ${auth.apiKey}`,
        },
        body: JSON.stringify({ foo: "bar" }),
      },
      {
        "429": {
          strategy: "backoff",
          limit: 10,
          minTimeoutInMs: 1000,
          maxTimeoutInMs: 60000,
          factor: 2,
          randomize: true,
        },
      }
    );

    return response;
  },
});