diff --git a/content/cookbook/01-next/30-generate-object.mdx b/content/cookbook/01-next/30-generate-object.mdx index 47c74c958594..0edab747b703 100644 --- a/content/cookbook/01-next/30-generate-object.mdx +++ b/content/cookbook/01-next/30-generate-object.mdx @@ -62,111 +62,7 @@ export default function Page() { }), }).then(response => { response.json().then(json => { - setGeneration(json.object); - setIsLoading(false); - }); - }); - }} - > - Generate - - - {isLoading ? 'Loading...' :
{JSON.stringify(generation)}
} - - ); -} -``` - -## Server - -Let's create a route handler for `/api/completion` that will generate an object based on the input prompt. The route will call the `generateObject` function from the `ai` module, which will then generate an object based on the input prompt and return it. - -```typescript filename='app/api/completion/route.ts' -import { generateObject } from 'ai'; -import { openai } from '@ai-sdk/openai'; -import { z } from 'zod'; - -export async function POST(req: Request) { - const { prompt }: { prompt: string } = await req.json(); - - const result = await generateObject({ - model: openai('gpt-4'), - system: 'You generate three notifications for a messages app.', - prompt, - schema: z.object({ - notifications: z.array( - z.object({ - name: z.string().describe('Name of a fictional person.'), - message: z.string().describe('Do not use emojis or links.'), - minutesAgo: z.number(), - }), - ), - }), - }); - - return result.toJsonResponse(); -} -``` - ---- - - - -Earlier functions like `generateText` and `streamText` gave us the ability to generate unstructured text. However, if you want to generate structured data like JSON, you can provide a schema that describes the structure of your desired object to the `generateObject` function. - -The function requires you to provide a schema using [zod](https://zod.dev), a library for defining schemas for JavaScript objects. By using zod, you can also use it to validate the generated object and ensure that it conforms to the specified structure. - - - - - -## Client - -Let's create a simple React component that will make a POST request to the `/api/completion` endpoint when a button is clicked. The endpoint will return the generated object based on the input prompt and we'll display it. - -```tsx filename='pages/index.tsx' -import { useState } from 'react'; - -export default function Page() { - const [generation, setGeneration] = useState(); - const [isLoading, setIsLoading] = useState(false); - - return ( -
-
{ - setIsLoading(true); - - await fetch('/api/completion', { - method: 'POST', - body: JSON.stringify({ - prompt: 'Messages during finals week.', - }), - }).then(response => { - response.json().then(json => { - setGeneration(json.object); + setGeneration(json.notifications); setIsLoading(false); }); });