replicate-fern
v0.3.0
Published
TypeScript SDK for Replicate
Downloads
9
Readme
Replicate TypeScript Library
The Replicate TypeScript library provides convenient access to the Replicate API from TypeScript or JavaScript.
Documentation
API reference documentation is available here.
Installation
npm install replicate-fernUsage
The library needs to be configured with your account's API token, which is available in the Replicate Dashboard.
import { ReplicateClient } from "replicate";
const client = new ReplicateClient({
token: "YOUR_TOKEN",
});
const prediction = await client.predictions
.create({
version: "da77bc59ee60423279fd632efb4795ab731d9e3ca9705ef3341091fb989b7eaf",
input: {
prompt: "A photo of an astronaut riding a horse",
},
})
.wait();
console.log(prediction);Polling Predictions
When creating predictions, you can use the .wait() method to automatically poll until the prediction is complete. You can customize the polling behavior:
const prediction = await client.predictions
.create({
version: "da77bc59ee60423279fd632efb4795ab731d9e3ca9705ef3341091fb989b7eaf",
input: {
prompt: "A photo of an astronaut riding a horse",
},
})
.wait({
polling: {
intervalMs: 1_000, // Poll every second (default: 3000ms)
timeoutMs: 30_0000, // Timeout after 5 minutes (default: no timeout)
},
// other common request options
});Request And Response Types
The SDK exports all request and response types as TypeScript interfaces. Simply import them with the following namespace:
import { Replicate } from "replicate";
const request: Replicate.GetCollectionsRequest = {
...
};Error Handling
When the API returns a non-success status code (4xx or 5xx response), a subclass of ReplicateError will be thrown:
import { ReplicateError } from "replicate";
try {
await client.deployments.create({
// ...deployment options
});
} catch (err) {
if (err instanceof ReplicateError) {
console.log(err.statusCode);
console.log(err.message);
console.log(err.body);
console.log(err.rawResponse);
}
}Advanced Usage
Additional Headers
You can send additional headers with your requests:
const response = await client.deployments.create(
{
// ...deployment options
},
{
headers: {
"X-Custom-Header": "custom value",
},
},
);Retries
The SDK is instrumented with automatic retries with exponential backoff. A request will be retried as long as the request is deemed retryable and the number of retry attempts has not grown larger than the configured retry limit (default: 2).
A request is deemed retryable when any of the following HTTP status codes is returned:
Use the maxRetries request option to configure this behavior.
const response = await client.deployments.create(..., {
maxRetries: 0 // override maxRetries at the request level
});Timeouts
The SDK defaults to a 60 second timeout. Use the timeoutInSeconds option to configure this behavior.
const response = await client.deployments.create(..., {
timeoutInSeconds: 30 // override timeout to 30s
});Aborting Requests
The SDK allows users to abort requests at any point by passing in an abort signal.
const controller = new AbortController();
const response = await client.deployments.create(..., {
abortSignal: controller.signal
});
controller.abort(); // aborts the requestAccess Raw Response Data
The SDK provides access to raw response data, including headers, through the .withRawResponse() method.
The .withRawResponse() method returns a promise that results to an object with a data and a rawResponse property.
const { data, rawResponse } = await client.deployments.create(...).withRawResponse();
console.log(data);
console.log(rawResponse.headers['X-My-Header']);Runtime Compatibility
The SDK is compatible with the following runtimes:
- Node.js 18+
- Vercel
- Cloudflare Workers
- Deno v1.25+
- Bun 1.0+
- React Native
Customizing the Fetch Client
The SDK provides flexibility in customizing the underlying HTTP client. You can provide your own implementation:
import { ReplicateClient } from "replicate";
const client = new ReplicateClient({
token: "YOUR_TOKEN",
fetcher: // provide your implementation here
});Custom Fetch Requests
The SDK provides a low-level fetch method for making custom HTTP requests to the Replicate API:
const response = await client.fetch(
"/v1/models/meta/llama-2-70b-chat",
{
method: "GET",
cache: "no-cache",
credentials: "same-origin",
},
{
timeoutInSeconds: 30, // Timeout after 30 seconds
maxRetries: 3, // Retry up to 3 times
headers: {
// Add custom headers
"Custom-Header": "value",
},
abortSignal: signal, // Optional abort signal
},
);
const data = await response.json();The fetch method mimics native fetch but also automatically handles:
- Authentication
- Base URL resolution
- Retries with exponential backoff
- Request timeouts
- Custom headers
Contributing
While we value open-source contributions to this SDK, this library is generated programmatically. Additions made directly to this library would have to be moved over to our generation code, otherwise they would be overwritten upon the next generated release. Feel free to open a PR as a proof of concept, but know that we will not be able to merge it as-is. We suggest opening an issue first to discuss with us!
On the other hand, contributions to the README are always very welcome!
