71 lines
1.8 KiB
Markdown
71 lines
1.8 KiB
Markdown
# Adding a Third Step
|
|
|
|
Let's extend your workflow by adding a third step that generates a summary of the content.
|
|
|
|
## Creating the Summary Step
|
|
|
|
Add this new step to your workflow file:
|
|
|
|
```typescript
|
|
const generateSummaryStep = createStep({
|
|
id: "generate-summary",
|
|
description: "Creates a summary of the content",
|
|
inputSchema: z.object({
|
|
content: z.string(),
|
|
type: z.string(),
|
|
wordCount: z.number(),
|
|
metadata: z.object({
|
|
readingTime: z.number(),
|
|
difficulty: z.enum(["easy", "medium", "hard"]),
|
|
processedAt: z.string(),
|
|
}),
|
|
}),
|
|
outputSchema: z.object({
|
|
content: z.string(),
|
|
type: z.string(),
|
|
wordCount: z.number(),
|
|
metadata: z.object({
|
|
readingTime: z.number(),
|
|
difficulty: z.enum(["easy", "medium", "hard"]),
|
|
processedAt: z.string(),
|
|
}),
|
|
summary: z.string(),
|
|
}),
|
|
execute: async ({ inputData }) => {
|
|
const { content, type, wordCount, metadata } = inputData;
|
|
|
|
// Create a simple summary from first sentence
|
|
const sentences = content
|
|
.split(/[.!?]+/)
|
|
.filter((s) => s.trim().length > 0);
|
|
const firstSentence = sentences[0]?.trim() + ".";
|
|
|
|
// Generate summary based on content length
|
|
let summary = firstSentence;
|
|
if (wordCount > 50) {
|
|
summary += ` This ${type} contains ${wordCount} words and takes approximately ${metadata.readingTime} minute(s) to read.`;
|
|
}
|
|
|
|
console.log(`📝 Generated summary: ${summary.length} characters`);
|
|
|
|
return {
|
|
content,
|
|
type,
|
|
wordCount,
|
|
metadata,
|
|
summary,
|
|
};
|
|
},
|
|
});
|
|
```
|
|
|
|
## Understanding the Pattern
|
|
|
|
Notice how this step:
|
|
|
|
- Takes the output from the previous step as input
|
|
- Adds new data (`summary`) while preserving existing data
|
|
- Follows the same structure as other steps
|
|
|
|
Your third step is ready! Next, you'll update the workflow to include all three steps.
|