chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
---
|
||||
title: "Generate an image using DALL·E 3"
|
||||
sidebarTitle: "DALL·E image generation"
|
||||
description: "This example will show you how to generate an image using DALL·E 3 and text using GPT-4o with Trigger.dev."
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
This example demonstrates how to use Trigger.dev to make reliable calls to AI APIs, specifically OpenAI's GPT-4o and DALL-E 3. It showcases automatic retrying with a maximum of 3 attempts, built-in error handling to avoid timeouts, and the ability to trace and monitor API calls.
|
||||
|
||||
## Task code
|
||||
|
||||
```ts trigger/generateContent.ts
|
||||
import { task } from "@trigger.dev/sdk";
|
||||
import OpenAI from "openai";
|
||||
|
||||
const openai = new OpenAI({
|
||||
apiKey: process.env.OPENAI_API_KEY,
|
||||
});
|
||||
|
||||
type Payload = {
|
||||
theme: string;
|
||||
description: string;
|
||||
};
|
||||
|
||||
export const generateContent = task({
|
||||
id: "generate-content",
|
||||
retry: {
|
||||
maxAttempts: 3, // Retry up to 3 times
|
||||
},
|
||||
run: async ({ theme, description }: Payload) => {
|
||||
// Generate text
|
||||
const textResult = await openai.chat.completions.create({
|
||||
model: "gpt-4o",
|
||||
messages: generateTextPrompt(theme, description),
|
||||
});
|
||||
|
||||
if (!textResult.choices[0]) {
|
||||
throw new Error("No content, retrying…");
|
||||
}
|
||||
|
||||
// Generate image
|
||||
const imageResult = await openai.images.generate({
|
||||
model: "dall-e-3",
|
||||
prompt: generateImagePrompt(theme, description),
|
||||
});
|
||||
|
||||
if (!imageResult.data[0]) {
|
||||
throw new Error("No image, retrying…");
|
||||
}
|
||||
|
||||
return {
|
||||
text: textResult.choices[0],
|
||||
image: imageResult.data[0].url,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
function generateTextPrompt(theme: string, description: string): any {
|
||||
return `Theme: ${theme}\n\nDescription: ${description}`;
|
||||
}
|
||||
|
||||
function generateImagePrompt(theme: string, description: string): any {
|
||||
return `Theme: ${theme}\n\nDescription: ${description}`;
|
||||
}
|
||||
```
|
||||
|
||||
## Testing your task
|
||||
|
||||
To test this task in the dashboard, you can use the following payload:
|
||||
|
||||
```json
|
||||
{
|
||||
"theme": "A beautiful sunset",
|
||||
"description": "A sunset over the ocean with a tiny yacht in the distance."
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user