59 lines
1.5 KiB
Markdown
59 lines
1.5 KiB
Markdown
# Creating a Second Step
|
|
|
|
Now let's create a second step that enhances the validated content with metadata.
|
|
|
|
## The Enhancement Step
|
|
|
|
Add this step to your workflow file:
|
|
|
|
```typescript
|
|
const enhanceContentStep = createStep({
|
|
id: "enhance-content",
|
|
description: "Adds metadata to validated content",
|
|
inputSchema: z.object({
|
|
content: z.string(),
|
|
type: z.string(),
|
|
wordCount: z.number(),
|
|
isValid: z.boolean(),
|
|
}),
|
|
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(),
|
|
}),
|
|
}),
|
|
execute: async ({ inputData }) => {
|
|
const { content, type, wordCount } = inputData;
|
|
|
|
// Calculate reading time (200 words per minute)
|
|
const readingTime = Math.ceil(wordCount / 200);
|
|
|
|
// Determine difficulty based on word count
|
|
let difficulty: "easy" | "medium" | "hard" = "easy";
|
|
if (wordCount > 100) difficulty = "medium";
|
|
if (wordCount > 300) difficulty = "hard";
|
|
|
|
return {
|
|
content,
|
|
type,
|
|
wordCount,
|
|
metadata: {
|
|
readingTime,
|
|
difficulty,
|
|
processedAt: new Date().toISOString(),
|
|
},
|
|
};
|
|
},
|
|
});
|
|
```
|
|
|
|
## Notice the Input Schema
|
|
|
|
The input schema of this step matches the output schema of the previous step. This is important for chaining steps together!
|
|
|
|
Your second step is ready! Next, you'll learn how to chain these steps together into a complete workflow.
|