From d3454835213dad6900e7fbc6cc9443a8b3f48989 Mon Sep 17 00:00:00 2001 From: Ian Saultz <52051793+atierian@users.noreply.github.com> Date: Sat, 16 Nov 2024 14:57:45 -0500 Subject: [PATCH 1/6] add generation > data-extraction wip extract data --- src/directory/directory.mjs | 7 +- .../ai/generation/data-extraction/index.mdx | 117 ++++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 src/pages/[platform]/ai/generation/data-extraction/index.mdx diff --git a/src/directory/directory.mjs b/src/directory/directory.mjs index d6337968899..12a1af8698d 100644 --- a/src/directory/directory.mjs +++ b/src/directory/directory.mjs @@ -771,7 +771,12 @@ export const directory = { ] }, { - path: 'src/pages/[platform]/ai/generation/index.mdx' + path: 'src/pages/[platform]/ai/generation/index.mdx', + children: [ + { + path: 'src/pages/[platform]/ai/generation/data-extraction/index.mdx' + } + ] } ] }, diff --git a/src/pages/[platform]/ai/generation/data-extraction/index.mdx b/src/pages/[platform]/ai/generation/data-extraction/index.mdx new file mode 100644 index 00000000000..9c6b5295218 --- /dev/null +++ b/src/pages/[platform]/ai/generation/data-extraction/index.mdx @@ -0,0 +1,117 @@ +import { getCustomStaticPath } from "@/utils/getCustomStaticPath"; + +export const meta = { + title: "Data Extraction", + description: + "How to extract data from unstructured text.", + platforms: [ + "javascript", + "react-native", + "angular", + "nextjs", + "react", + "vue", + ], +}; + +export const getStaticPaths = async () => { + return getCustomStaticPath(meta.platforms); +}; + +export function getStaticProps(context) { + return { + props: { + platform: context.params.platform, + meta, + showBreadcrumbs: false, + }, + }; +} + +Data extraction allows you to parse unstructured text and extract structured data using AI. This is useful for converting free-form text into typed objects that can be used in your application. + +The following example shows how to extract product details from an unstructured product description. The AI model will analyze the text and return a structured object containing the product name, summary, price, and category. + +```typescript title="Schema Definition" +const schema = a.schema({ + ProductDetails: a.customType({ + name: a.string().required(), + summary: a.string().required(), + price: a.float().required(), + category: a.string().required(), + }), + + extractProductDetails: a.generation({ + aiModel: a.ai.model('Claude 3 Haiku'), + systemPrompt: 'Extract the property details from the text provided', + }) + .arguments({ + productDescription: a.string() + }) + .returns(a.ref('ProductDetails')) + .authorization((allow) => allow.authenticated()), +}); +``` + + +```ts title="Data Client Request" +import { generateClient } from "aws-amplify/api"; +import { Schema } from "../amplify/data/resource"; + +export const client = generateClient(); + +const productDescription = `The NBA Official Game Basketball is a premium +regulation-size basketball crafted with genuine leather and featuring +official NBA specifications. This professional-grade ball offers superior grip +and durability, with deep channels and a moisture-wicking surface that ensures +consistent performance during intense game play. Priced at $159.99, this high-end +basketball belongs in our Professional Sports Equipment category and is the same model +used in NBA games.` + +const { data, errors } = await client.generations + .extractProductDetails({ productDescription }) + +/** +Example response: +{ + "name": "NBA Official Game Basketball", + "summary": "Premium regulation-size NBA basketball made with genuine leather. Features official NBA specifications, superior grip, deep channels, and moisture-wicking surface for consistent game play performance.", + "price": 159.99, + "category": "Professional Sports Equipment" +} +*/ +``` + + + + + +```ts title="React Hook" +import { generateClient } from "aws-amplify/api"; +import { createAIHooks } from "@aws-amplify/ui-react-ai"; +import { Schema } from "../amplify/data/resource"; + +const client = generateClient({ authMode: "userPool" }); +const { useAIGeneration } = createAIHooks(client); + +export default function Example() { + const productDescription = `The NBA Official Game Basketball is a premium + regulation-size basketball crafted with genuine leather and featuring + official NBA specifications. This professional-grade ball offers superior grip + and durability, with deep channels and a moisture-wicking surface that ensures + consistent performance during intense game play. Priced at $159.99, this high-end + basketball belongs in our Professional Sports Equipment category and is the same model + used in NBA games.` + + // data is React state and will be populated when the generation is returned + const [{ data, isLoading }, extractProductDetails] = + useAIGeneration("extractProductDetails"); + + const productDetails = async () => { + extractProductDetails({ + productDescription + }); + }; +} +``` + From 444b1b248ec77d92eec206c399337eeffcaa3d9f Mon Sep 17 00:00:00 2001 From: Ian Saultz <52051793+atierian@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:44:29 -0500 Subject: [PATCH 2/6] Update src/pages/[platform]/ai/generation/data-extraction/index.mdx Co-authored-by: josef --- src/pages/[platform]/ai/generation/data-extraction/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/[platform]/ai/generation/data-extraction/index.mdx b/src/pages/[platform]/ai/generation/data-extraction/index.mdx index 9c6b5295218..12df35f13df 100644 --- a/src/pages/[platform]/ai/generation/data-extraction/index.mdx +++ b/src/pages/[platform]/ai/generation/data-extraction/index.mdx @@ -87,9 +87,9 @@ Example response: ```ts title="React Hook" +import type { Schema } from "../amplify/data/resource"; import { generateClient } from "aws-amplify/api"; import { createAIHooks } from "@aws-amplify/ui-react-ai"; -import { Schema } from "../amplify/data/resource"; const client = generateClient({ authMode: "userPool" }); const { useAIGeneration } = createAIHooks(client); From 54d6ddd174113d525f8c759159bb384300b3a367 Mon Sep 17 00:00:00 2001 From: Ian Saultz <52051793+atierian@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:44:35 -0500 Subject: [PATCH 3/6] Update src/pages/[platform]/ai/generation/data-extraction/index.mdx Co-authored-by: josef --- src/pages/[platform]/ai/generation/data-extraction/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/[platform]/ai/generation/data-extraction/index.mdx b/src/pages/[platform]/ai/generation/data-extraction/index.mdx index 12df35f13df..5afc8a15951 100644 --- a/src/pages/[platform]/ai/generation/data-extraction/index.mdx +++ b/src/pages/[platform]/ai/generation/data-extraction/index.mdx @@ -32,7 +32,7 @@ Data extraction allows you to parse unstructured text and extract structured dat The following example shows how to extract product details from an unstructured product description. The AI model will analyze the text and return a structured object containing the product name, summary, price, and category. -```typescript title="Schema Definition" +```typescript title="amplify/data/resource.ts" const schema = a.schema({ ProductDetails: a.customType({ name: a.string().required(), From 0d81f5bacd4fef0da9be6048c2ab7337a7a16495 Mon Sep 17 00:00:00 2001 From: Ian Saultz <52051793+atierian@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:44:41 -0500 Subject: [PATCH 4/6] Update src/pages/[platform]/ai/generation/data-extraction/index.mdx Co-authored-by: josef --- src/pages/[platform]/ai/generation/data-extraction/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/[platform]/ai/generation/data-extraction/index.mdx b/src/pages/[platform]/ai/generation/data-extraction/index.mdx index 5afc8a15951..07b647e789d 100644 --- a/src/pages/[platform]/ai/generation/data-extraction/index.mdx +++ b/src/pages/[platform]/ai/generation/data-extraction/index.mdx @@ -55,8 +55,8 @@ const schema = a.schema({ ```ts title="Data Client Request" +import type { Schema } from "../amplify/data/resource"; import { generateClient } from "aws-amplify/api"; -import { Schema } from "../amplify/data/resource"; export const client = generateClient(); From 1cc16e1500c0aee6fa01f1b5ceefbfcd5191d4ce Mon Sep 17 00:00:00 2001 From: Ian Saultz <52051793+atierian@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:44:48 -0500 Subject: [PATCH 5/6] Update src/pages/[platform]/ai/generation/data-extraction/index.mdx Co-authored-by: josef --- src/pages/[platform]/ai/generation/data-extraction/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/[platform]/ai/generation/data-extraction/index.mdx b/src/pages/[platform]/ai/generation/data-extraction/index.mdx index 07b647e789d..c8fc77e7dcc 100644 --- a/src/pages/[platform]/ai/generation/data-extraction/index.mdx +++ b/src/pages/[platform]/ai/generation/data-extraction/index.mdx @@ -86,7 +86,7 @@ Example response: -```ts title="React Hook" +```ts title="src/components/Example.tsx" import type { Schema } from "../amplify/data/resource"; import { generateClient } from "aws-amplify/api"; import { createAIHooks } from "@aws-amplify/ui-react-ai"; From fe616e9fec760cd833baf8d07f6aaabff1ff97b9 Mon Sep 17 00:00:00 2001 From: Ian Saultz <52051793+atierian@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:44:57 -0500 Subject: [PATCH 6/6] Update src/pages/[platform]/ai/generation/data-extraction/index.mdx Co-authored-by: josef --- src/pages/[platform]/ai/generation/data-extraction/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/[platform]/ai/generation/data-extraction/index.mdx b/src/pages/[platform]/ai/generation/data-extraction/index.mdx index c8fc77e7dcc..fe3863fbf56 100644 --- a/src/pages/[platform]/ai/generation/data-extraction/index.mdx +++ b/src/pages/[platform]/ai/generation/data-extraction/index.mdx @@ -84,7 +84,7 @@ Example response: - + ```ts title="src/components/Example.tsx" import type { Schema } from "../amplify/data/resource";