ai 6.0.31 → 6.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/internal/index.js +1 -1
- package/dist/internal/index.mjs +1 -1
- package/docs/00-introduction/index.mdx +76 -0
- package/docs/02-foundations/01-overview.mdx +43 -0
- package/docs/02-foundations/02-providers-and-models.mdx +163 -0
- package/docs/02-foundations/03-prompts.mdx +620 -0
- package/docs/02-foundations/04-tools.mdx +160 -0
- package/docs/02-foundations/05-streaming.mdx +62 -0
- package/docs/02-foundations/index.mdx +43 -0
- package/docs/02-getting-started/00-choosing-a-provider.mdx +110 -0
- package/docs/02-getting-started/01-navigating-the-library.mdx +85 -0
- package/docs/02-getting-started/02-nextjs-app-router.mdx +556 -0
- package/docs/02-getting-started/03-nextjs-pages-router.mdx +542 -0
- package/docs/02-getting-started/04-svelte.mdx +627 -0
- package/docs/02-getting-started/05-nuxt.mdx +566 -0
- package/docs/02-getting-started/06-nodejs.mdx +512 -0
- package/docs/02-getting-started/07-expo.mdx +766 -0
- package/docs/02-getting-started/08-tanstack-start.mdx +583 -0
- package/docs/02-getting-started/index.mdx +44 -0
- package/docs/03-agents/01-overview.mdx +96 -0
- package/docs/03-agents/02-building-agents.mdx +367 -0
- package/docs/03-agents/03-workflows.mdx +370 -0
- package/docs/03-agents/04-loop-control.mdx +350 -0
- package/docs/03-agents/05-configuring-call-options.mdx +286 -0
- package/docs/03-agents/index.mdx +40 -0
- package/docs/03-ai-sdk-core/01-overview.mdx +33 -0
- package/docs/03-ai-sdk-core/05-generating-text.mdx +600 -0
- package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +662 -0
- package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +1102 -0
- package/docs/03-ai-sdk-core/16-mcp-tools.mdx +375 -0
- package/docs/03-ai-sdk-core/20-prompt-engineering.mdx +144 -0
- package/docs/03-ai-sdk-core/25-settings.mdx +198 -0
- package/docs/03-ai-sdk-core/30-embeddings.mdx +247 -0
- package/docs/03-ai-sdk-core/31-reranking.mdx +218 -0
- package/docs/03-ai-sdk-core/35-image-generation.mdx +341 -0
- package/docs/03-ai-sdk-core/36-transcription.mdx +173 -0
- package/docs/03-ai-sdk-core/37-speech.mdx +167 -0
- package/docs/03-ai-sdk-core/40-middleware.mdx +480 -0
- package/docs/03-ai-sdk-core/45-provider-management.mdx +349 -0
- package/docs/03-ai-sdk-core/50-error-handling.mdx +149 -0
- package/docs/03-ai-sdk-core/55-testing.mdx +218 -0
- package/docs/03-ai-sdk-core/60-telemetry.mdx +313 -0
- package/docs/03-ai-sdk-core/65-devtools.mdx +107 -0
- package/docs/03-ai-sdk-core/index.mdx +88 -0
- package/docs/04-ai-sdk-ui/01-overview.mdx +44 -0
- package/docs/04-ai-sdk-ui/02-chatbot.mdx +1313 -0
- package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +535 -0
- package/docs/04-ai-sdk-ui/03-chatbot-resume-streams.mdx +263 -0
- package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +682 -0
- package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +389 -0
- package/docs/04-ai-sdk-ui/05-completion.mdx +186 -0
- package/docs/04-ai-sdk-ui/08-object-generation.mdx +344 -0
- package/docs/04-ai-sdk-ui/20-streaming-data.mdx +397 -0
- package/docs/04-ai-sdk-ui/21-error-handling.mdx +190 -0
- package/docs/04-ai-sdk-ui/21-transport.mdx +174 -0
- package/docs/04-ai-sdk-ui/24-reading-ui-message-streams.mdx +104 -0
- package/docs/04-ai-sdk-ui/25-message-metadata.mdx +152 -0
- package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +477 -0
- package/docs/04-ai-sdk-ui/index.mdx +64 -0
- package/docs/05-ai-sdk-rsc/01-overview.mdx +45 -0
- package/docs/05-ai-sdk-rsc/02-streaming-react-components.mdx +209 -0
- package/docs/05-ai-sdk-rsc/03-generative-ui-state.mdx +279 -0
- package/docs/05-ai-sdk-rsc/03-saving-and-restoring-states.mdx +105 -0
- package/docs/05-ai-sdk-rsc/04-multistep-interfaces.mdx +282 -0
- package/docs/05-ai-sdk-rsc/05-streaming-values.mdx +158 -0
- package/docs/05-ai-sdk-rsc/06-loading-state.mdx +273 -0
- package/docs/05-ai-sdk-rsc/08-error-handling.mdx +96 -0
- package/docs/05-ai-sdk-rsc/09-authentication.mdx +42 -0
- package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +722 -0
- package/docs/05-ai-sdk-rsc/index.mdx +58 -0
- package/docs/06-advanced/01-prompt-engineering.mdx +96 -0
- package/docs/06-advanced/02-stopping-streams.mdx +184 -0
- package/docs/06-advanced/03-backpressure.mdx +173 -0
- package/docs/06-advanced/04-caching.mdx +169 -0
- package/docs/06-advanced/05-multiple-streamables.mdx +68 -0
- package/docs/06-advanced/06-rate-limiting.mdx +60 -0
- package/docs/06-advanced/07-rendering-ui-with-language-models.mdx +213 -0
- package/docs/06-advanced/08-model-as-router.mdx +120 -0
- package/docs/06-advanced/09-multistep-interfaces.mdx +115 -0
- package/docs/06-advanced/09-sequential-generations.mdx +55 -0
- package/docs/06-advanced/10-vercel-deployment-guide.mdx +117 -0
- package/docs/06-advanced/index.mdx +11 -0
- package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2142 -0
- package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3215 -0
- package/docs/07-reference/01-ai-sdk-core/03-generate-object.mdx +780 -0
- package/docs/07-reference/01-ai-sdk-core/04-stream-object.mdx +1140 -0
- package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +190 -0
- package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +171 -0
- package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +309 -0
- package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +227 -0
- package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +138 -0
- package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +214 -0
- package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +203 -0
- package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +449 -0
- package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +148 -0
- package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +168 -0
- package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +144 -0
- package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +196 -0
- package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +175 -0
- package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +410 -0
- package/docs/07-reference/01-ai-sdk-core/24-mcp-stdio-transport.mdx +68 -0
- package/docs/07-reference/01-ai-sdk-core/25-json-schema.mdx +94 -0
- package/docs/07-reference/01-ai-sdk-core/26-zod-schema.mdx +109 -0
- package/docs/07-reference/01-ai-sdk-core/27-valibot-schema.mdx +55 -0
- package/docs/07-reference/01-ai-sdk-core/28-output.mdx +342 -0
- package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +415 -0
- package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +246 -0
- package/docs/07-reference/01-ai-sdk-core/32-validate-ui-messages.mdx +101 -0
- package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +113 -0
- package/docs/07-reference/01-ai-sdk-core/40-provider-registry.mdx +182 -0
- package/docs/07-reference/01-ai-sdk-core/42-custom-provider.mdx +121 -0
- package/docs/07-reference/01-ai-sdk-core/50-cosine-similarity.mdx +52 -0
- package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +59 -0
- package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +64 -0
- package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +46 -0
- package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +68 -0
- package/docs/07-reference/01-ai-sdk-core/67-simulate-streaming-middleware.mdx +71 -0
- package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +80 -0
- package/docs/07-reference/01-ai-sdk-core/69-add-tool-input-examples-middleware.mdx +155 -0
- package/docs/07-reference/01-ai-sdk-core/70-extract-json-middleware.mdx +147 -0
- package/docs/07-reference/01-ai-sdk-core/70-step-count-is.mdx +84 -0
- package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +120 -0
- package/docs/07-reference/01-ai-sdk-core/75-simulate-readable-stream.mdx +94 -0
- package/docs/07-reference/01-ai-sdk-core/80-smooth-stream.mdx +145 -0
- package/docs/07-reference/01-ai-sdk-core/90-generate-id.mdx +43 -0
- package/docs/07-reference/01-ai-sdk-core/91-create-id-generator.mdx +89 -0
- package/docs/07-reference/01-ai-sdk-core/index.mdx +159 -0
- package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +446 -0
- package/docs/07-reference/02-ai-sdk-ui/02-use-completion.mdx +179 -0
- package/docs/07-reference/02-ai-sdk-ui/03-use-object.mdx +178 -0
- package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +230 -0
- package/docs/07-reference/02-ai-sdk-ui/32-prune-messages.mdx +108 -0
- package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +151 -0
- package/docs/07-reference/02-ai-sdk-ui/41-create-ui-message-stream-response.mdx +113 -0
- package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +73 -0
- package/docs/07-reference/02-ai-sdk-ui/43-read-ui-message-stream.mdx +57 -0
- package/docs/07-reference/02-ai-sdk-ui/46-infer-ui-tools.mdx +99 -0
- package/docs/07-reference/02-ai-sdk-ui/47-infer-ui-tool.mdx +75 -0
- package/docs/07-reference/02-ai-sdk-ui/50-direct-chat-transport.mdx +333 -0
- package/docs/07-reference/02-ai-sdk-ui/index.mdx +89 -0
- package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +767 -0
- package/docs/07-reference/03-ai-sdk-rsc/02-create-ai.mdx +90 -0
- package/docs/07-reference/03-ai-sdk-rsc/03-create-streamable-ui.mdx +91 -0
- package/docs/07-reference/03-ai-sdk-rsc/04-create-streamable-value.mdx +48 -0
- package/docs/07-reference/03-ai-sdk-rsc/05-read-streamable-value.mdx +78 -0
- package/docs/07-reference/03-ai-sdk-rsc/06-get-ai-state.mdx +50 -0
- package/docs/07-reference/03-ai-sdk-rsc/07-get-mutable-ai-state.mdx +70 -0
- package/docs/07-reference/03-ai-sdk-rsc/08-use-ai-state.mdx +26 -0
- package/docs/07-reference/03-ai-sdk-rsc/09-use-actions.mdx +42 -0
- package/docs/07-reference/03-ai-sdk-rsc/10-use-ui-state.mdx +35 -0
- package/docs/07-reference/03-ai-sdk-rsc/11-use-streamable-value.mdx +46 -0
- package/docs/07-reference/03-ai-sdk-rsc/20-render.mdx +262 -0
- package/docs/07-reference/03-ai-sdk-rsc/index.mdx +67 -0
- package/docs/07-reference/04-stream-helpers/01-ai-stream.mdx +89 -0
- package/docs/07-reference/04-stream-helpers/02-streaming-text-response.mdx +79 -0
- package/docs/07-reference/04-stream-helpers/05-stream-to-response.mdx +108 -0
- package/docs/07-reference/04-stream-helpers/07-openai-stream.mdx +77 -0
- package/docs/07-reference/04-stream-helpers/08-anthropic-stream.mdx +79 -0
- package/docs/07-reference/04-stream-helpers/09-aws-bedrock-stream.mdx +91 -0
- package/docs/07-reference/04-stream-helpers/10-aws-bedrock-anthropic-stream.mdx +96 -0
- package/docs/07-reference/04-stream-helpers/10-aws-bedrock-messages-stream.mdx +96 -0
- package/docs/07-reference/04-stream-helpers/11-aws-bedrock-cohere-stream.mdx +93 -0
- package/docs/07-reference/04-stream-helpers/12-aws-bedrock-llama-2-stream.mdx +93 -0
- package/docs/07-reference/04-stream-helpers/13-cohere-stream.mdx +78 -0
- package/docs/07-reference/04-stream-helpers/14-google-generative-ai-stream.mdx +85 -0
- package/docs/07-reference/04-stream-helpers/15-hugging-face-stream.mdx +84 -0
- package/docs/07-reference/04-stream-helpers/16-langchain-adapter.mdx +98 -0
- package/docs/07-reference/04-stream-helpers/16-llamaindex-adapter.mdx +70 -0
- package/docs/07-reference/04-stream-helpers/17-mistral-stream.mdx +81 -0
- package/docs/07-reference/04-stream-helpers/18-replicate-stream.mdx +83 -0
- package/docs/07-reference/04-stream-helpers/19-inkeep-stream.mdx +80 -0
- package/docs/07-reference/04-stream-helpers/index.mdx +103 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-api-call-error.mdx +30 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-download-error.mdx +27 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-empty-response-body-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-data-content.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-message-role-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-prompt-error.mdx +47 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-response-data-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-input-error.mdx +27 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-json-parse-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-load-api-key-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-load-setting-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-message-conversion-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-content-generated-error.mdx +24 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-image-generated-error.mdx +36 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-object-generated-error.mdx +43 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-speech-generated-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-such-model-error.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-error.mdx +28 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-such-tool-error.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-transcript-generated-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-retry-error.mdx +27 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-too-many-embedding-values-for-call-error.mdx +27 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-not-found-for-approval-error.mdx +26 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-tool-call-repair-error.mdx +28 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-type-validation-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-unsupported-functionality-error.mdx +25 -0
- package/docs/07-reference/05-ai-sdk-errors/index.mdx +38 -0
- package/docs/07-reference/index.mdx +34 -0
- package/docs/08-migration-guides/00-versioning.mdx +46 -0
- package/docs/08-migration-guides/24-migration-guide-6-0.mdx +823 -0
- package/docs/08-migration-guides/25-migration-guide-5-0-data.mdx +882 -0
- package/docs/08-migration-guides/26-migration-guide-5-0.mdx +3427 -0
- package/docs/08-migration-guides/27-migration-guide-4-2.mdx +99 -0
- package/docs/08-migration-guides/28-migration-guide-4-1.mdx +14 -0
- package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1157 -0
- package/docs/08-migration-guides/36-migration-guide-3-4.mdx +14 -0
- package/docs/08-migration-guides/37-migration-guide-3-3.mdx +64 -0
- package/docs/08-migration-guides/38-migration-guide-3-2.mdx +46 -0
- package/docs/08-migration-guides/39-migration-guide-3-1.mdx +168 -0
- package/docs/08-migration-guides/index.mdx +22 -0
- package/docs/09-troubleshooting/01-azure-stream-slow.mdx +33 -0
- package/docs/09-troubleshooting/02-client-side-function-calls-not-invoked.mdx +22 -0
- package/docs/09-troubleshooting/03-server-actions-in-client-components.mdx +40 -0
- package/docs/09-troubleshooting/04-strange-stream-output.mdx +36 -0
- package/docs/09-troubleshooting/05-streamable-ui-errors.mdx +16 -0
- package/docs/09-troubleshooting/05-tool-invocation-missing-result.mdx +106 -0
- package/docs/09-troubleshooting/06-streaming-not-working-when-deployed.mdx +31 -0
- package/docs/09-troubleshooting/06-streaming-not-working-when-proxied.mdx +31 -0
- package/docs/09-troubleshooting/06-timeout-on-vercel.mdx +60 -0
- package/docs/09-troubleshooting/07-unclosed-streams.mdx +34 -0
- package/docs/09-troubleshooting/08-use-chat-failed-to-parse-stream.mdx +26 -0
- package/docs/09-troubleshooting/09-client-stream-error.mdx +25 -0
- package/docs/09-troubleshooting/10-use-chat-tools-no-response.mdx +32 -0
- package/docs/09-troubleshooting/11-use-chat-custom-request-options.mdx +149 -0
- package/docs/09-troubleshooting/12-typescript-performance-zod.mdx +46 -0
- package/docs/09-troubleshooting/12-use-chat-an-error-occurred.mdx +59 -0
- package/docs/09-troubleshooting/13-repeated-assistant-messages.mdx +73 -0
- package/docs/09-troubleshooting/14-stream-abort-handling.mdx +73 -0
- package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +48 -0
- package/docs/09-troubleshooting/15-abort-breaks-resumable-streams.mdx +55 -0
- package/docs/09-troubleshooting/15-stream-text-not-working.mdx +33 -0
- package/docs/09-troubleshooting/16-streaming-status-delay.mdx +63 -0
- package/docs/09-troubleshooting/17-use-chat-stale-body-data.mdx +141 -0
- package/docs/09-troubleshooting/18-ontoolcall-type-narrowing.mdx +66 -0
- package/docs/09-troubleshooting/19-unsupported-model-version.mdx +50 -0
- package/docs/09-troubleshooting/20-no-object-generated-content-filter.mdx +72 -0
- package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +21 -0
- package/docs/09-troubleshooting/40-typescript-cannot-find-namespace-jsx.mdx +24 -0
- package/docs/09-troubleshooting/50-react-maximum-update-depth-exceeded.mdx +39 -0
- package/docs/09-troubleshooting/60-jest-cannot-find-module-ai-rsc.mdx +22 -0
- package/docs/09-troubleshooting/index.mdx +11 -0
- package/package.json +8 -4
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: validateUIMessages
|
|
3
|
+
description: API Reference for validateUIMessages
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `validateUIMessages`
|
|
7
|
+
|
|
8
|
+
`validateUIMessages` is an async function that validates UI messages against schemas for metadata, data parts, and tools. It ensures type safety and data integrity for your message arrays before processing or rendering.
|
|
9
|
+
|
|
10
|
+
## Basic Usage
|
|
11
|
+
|
|
12
|
+
Simple validation without custom schemas:
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { validateUIMessages } from 'ai';
|
|
16
|
+
|
|
17
|
+
const messages = [
|
|
18
|
+
{
|
|
19
|
+
id: '1',
|
|
20
|
+
role: 'user',
|
|
21
|
+
parts: [{ type: 'text', text: 'Hello!' }],
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const validatedMessages = await validateUIMessages({
|
|
26
|
+
messages,
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Advanced Usage
|
|
31
|
+
|
|
32
|
+
Comprehensive validation with custom metadata, data parts, and tools:
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { validateUIMessages, tool } from 'ai';
|
|
36
|
+
import { z } from 'zod';
|
|
37
|
+
|
|
38
|
+
// Define schemas
|
|
39
|
+
const metadataSchema = z.object({
|
|
40
|
+
timestamp: z.string().datetime(),
|
|
41
|
+
userId: z.string(),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const dataSchemas = {
|
|
45
|
+
chart: z.object({
|
|
46
|
+
data: z.array(z.number()),
|
|
47
|
+
labels: z.array(z.string()),
|
|
48
|
+
}),
|
|
49
|
+
image: z.object({
|
|
50
|
+
url: z.string().url(),
|
|
51
|
+
caption: z.string(),
|
|
52
|
+
}),
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const tools = {
|
|
56
|
+
weather: tool({
|
|
57
|
+
description: 'Get weather info',
|
|
58
|
+
parameters: z.object({
|
|
59
|
+
location: z.string(),
|
|
60
|
+
}),
|
|
61
|
+
execute: async ({ location }) => `Weather in ${location}: sunny`,
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// Messages with custom parts
|
|
66
|
+
const messages = [
|
|
67
|
+
{
|
|
68
|
+
id: '1',
|
|
69
|
+
role: 'user',
|
|
70
|
+
metadata: { timestamp: '2024-01-01T00:00:00Z', userId: 'user123' },
|
|
71
|
+
parts: [
|
|
72
|
+
{ type: 'text', text: 'Show me a chart' },
|
|
73
|
+
{
|
|
74
|
+
type: 'data-chart',
|
|
75
|
+
data: { data: [1, 2, 3], labels: ['A', 'B', 'C'] },
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: '2',
|
|
81
|
+
role: 'assistant',
|
|
82
|
+
parts: [
|
|
83
|
+
{
|
|
84
|
+
type: 'tool-weather',
|
|
85
|
+
toolCallId: 'call_123',
|
|
86
|
+
state: 'output-available',
|
|
87
|
+
input: { location: 'San Francisco' },
|
|
88
|
+
output: 'Weather in San Francisco: sunny',
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
// Validate with all schemas
|
|
95
|
+
const validatedMessages = await validateUIMessages({
|
|
96
|
+
messages,
|
|
97
|
+
metadataSchema,
|
|
98
|
+
dataSchemas,
|
|
99
|
+
tools,
|
|
100
|
+
});
|
|
101
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: safeValidateUIMessages
|
|
3
|
+
description: API Reference for safeValidateUIMessages
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `safeValidateUIMessages`
|
|
7
|
+
|
|
8
|
+
`safeValidateUIMessages` is an async function that validates UI messages like [`validateUIMessages`](https://ai-sdk.dev/docs/reference/ai-sdk-core/validate-ui-messages), but instead of throwing it returns an object with a `success` key and either `data` or `error`.
|
|
9
|
+
|
|
10
|
+
## Basic Usage
|
|
11
|
+
|
|
12
|
+
Simple validation without custom schemas:
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { safeValidateUIMessages } from 'ai';
|
|
16
|
+
|
|
17
|
+
const messages = [
|
|
18
|
+
{
|
|
19
|
+
id: '1',
|
|
20
|
+
role: 'user',
|
|
21
|
+
parts: [{ type: 'text', text: 'Hello!' }],
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const result = await safeValidateUIMessages({
|
|
26
|
+
messages,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
if (!result.success) {
|
|
30
|
+
console.error(result.error.message);
|
|
31
|
+
} else {
|
|
32
|
+
const validatedMessages = result.data;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Advanced Usage
|
|
37
|
+
|
|
38
|
+
Comprehensive validation with custom metadata, data parts, and tools:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import { safeValidateUIMessages, tool } from 'ai';
|
|
42
|
+
import { z } from 'zod';
|
|
43
|
+
|
|
44
|
+
// Define schemas
|
|
45
|
+
const metadataSchema = z.object({
|
|
46
|
+
timestamp: z.string().datetime(),
|
|
47
|
+
userId: z.string(),
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const dataSchemas = {
|
|
51
|
+
chart: z.object({
|
|
52
|
+
data: z.array(z.number()),
|
|
53
|
+
labels: z.array(z.string()),
|
|
54
|
+
}),
|
|
55
|
+
image: z.object({
|
|
56
|
+
url: z.string().url(),
|
|
57
|
+
caption: z.string(),
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const tools = {
|
|
62
|
+
weather: tool({
|
|
63
|
+
description: 'Get weather info',
|
|
64
|
+
parameters: z.object({
|
|
65
|
+
location: z.string(),
|
|
66
|
+
}),
|
|
67
|
+
execute: async ({ location }) => `Weather in ${location}: sunny`,
|
|
68
|
+
}),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Messages with custom parts
|
|
72
|
+
const messages = [
|
|
73
|
+
{
|
|
74
|
+
id: '1',
|
|
75
|
+
role: 'user',
|
|
76
|
+
metadata: { timestamp: '2024-01-01T00:00:00Z', userId: 'user123' },
|
|
77
|
+
parts: [
|
|
78
|
+
{ type: 'text', text: 'Show me a chart' },
|
|
79
|
+
{
|
|
80
|
+
type: 'data-chart',
|
|
81
|
+
data: { data: [1, 2, 3], labels: ['A', 'B', 'C'] },
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: '2',
|
|
87
|
+
role: 'assistant',
|
|
88
|
+
parts: [
|
|
89
|
+
{
|
|
90
|
+
type: 'tool-weather',
|
|
91
|
+
toolCallId: 'call_123',
|
|
92
|
+
state: 'output-available',
|
|
93
|
+
input: { location: 'San Francisco' },
|
|
94
|
+
output: 'Weather in San Francisco: sunny',
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
|
|
100
|
+
// Validate with all schemas
|
|
101
|
+
const result = await safeValidateUIMessages({
|
|
102
|
+
messages,
|
|
103
|
+
metadataSchema,
|
|
104
|
+
dataSchemas,
|
|
105
|
+
tools,
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
if (!result.success) {
|
|
109
|
+
console.error(result.error.message);
|
|
110
|
+
} else {
|
|
111
|
+
const validatedMessages = result.data;
|
|
112
|
+
}
|
|
113
|
+
```
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: createProviderRegistry
|
|
3
|
+
description: Registry for managing multiple providers and models (API Reference)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `createProviderRegistry()`
|
|
7
|
+
|
|
8
|
+
When you work with multiple providers and models, it is often desirable to manage them
|
|
9
|
+
in a central place and access the models through simple string ids.
|
|
10
|
+
|
|
11
|
+
`createProviderRegistry` lets you create a registry with multiple providers that you
|
|
12
|
+
can access by their ids in the format `providerId:modelId`.
|
|
13
|
+
|
|
14
|
+
### Setup
|
|
15
|
+
|
|
16
|
+
You can create a registry with multiple providers and models using `createProviderRegistry`.
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import { anthropic } from '@ai-sdk/anthropic';
|
|
20
|
+
import { createOpenAI } from '@ai-sdk/openai';
|
|
21
|
+
import { createProviderRegistry } from 'ai';
|
|
22
|
+
|
|
23
|
+
export const registry = createProviderRegistry({
|
|
24
|
+
// register provider with prefix and default setup:
|
|
25
|
+
anthropic,
|
|
26
|
+
|
|
27
|
+
// register provider with prefix and custom setup:
|
|
28
|
+
openai: createOpenAI({
|
|
29
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Custom Separator
|
|
35
|
+
|
|
36
|
+
By default, the registry uses `:` as the separator between provider and model IDs. You can customize this separator by passing a `separator` option:
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
const registry = createProviderRegistry(
|
|
40
|
+
{
|
|
41
|
+
anthropic,
|
|
42
|
+
openai,
|
|
43
|
+
},
|
|
44
|
+
{ separator: ' > ' },
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
// Now you can use the custom separator
|
|
48
|
+
const model = registry.languageModel('anthropic > claude-3-opus-20240229');
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Language models
|
|
52
|
+
|
|
53
|
+
You can access language models by using the `languageModel` method on the registry.
|
|
54
|
+
The provider id will become the prefix of the model id: `providerId:modelId`.
|
|
55
|
+
|
|
56
|
+
```ts highlight={"5"}
|
|
57
|
+
import { generateText } from 'ai';
|
|
58
|
+
import { registry } from './registry';
|
|
59
|
+
|
|
60
|
+
const { text } = await generateText({
|
|
61
|
+
model: registry.languageModel('openai:gpt-4.1'),
|
|
62
|
+
prompt: 'Invent a new holiday and describe its traditions.',
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Text embedding models
|
|
67
|
+
|
|
68
|
+
You can access text embedding models by using the `.embeddingModel` method on the registry.
|
|
69
|
+
The provider id will become the prefix of the model id: `providerId:modelId`.
|
|
70
|
+
|
|
71
|
+
```ts highlight={"5"}
|
|
72
|
+
import { embed } from 'ai';
|
|
73
|
+
import { registry } from './registry';
|
|
74
|
+
|
|
75
|
+
const { embedding } = await embed({
|
|
76
|
+
model: registry.embeddingModel('openai:text-embedding-3-small'),
|
|
77
|
+
value: 'sunny day at the beach',
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Image models
|
|
82
|
+
|
|
83
|
+
You can access image models by using the `imageModel` method on the registry.
|
|
84
|
+
The provider id will become the prefix of the model id: `providerId:modelId`.
|
|
85
|
+
|
|
86
|
+
```ts highlight={"5"}
|
|
87
|
+
import { generateImage } from 'ai';
|
|
88
|
+
import { registry } from './registry';
|
|
89
|
+
|
|
90
|
+
const { image } = await generateImage({
|
|
91
|
+
model: registry.imageModel('openai:dall-e-3'),
|
|
92
|
+
prompt: 'A beautiful sunset over a calm ocean',
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Import
|
|
97
|
+
|
|
98
|
+
<Snippet text={`import { createProviderRegistry } from "ai"`} prompt={false} />
|
|
99
|
+
|
|
100
|
+
## API Signature
|
|
101
|
+
|
|
102
|
+
### Parameters
|
|
103
|
+
|
|
104
|
+
<PropertiesTable
|
|
105
|
+
content={[
|
|
106
|
+
{
|
|
107
|
+
name: 'providers',
|
|
108
|
+
type: 'Record<string, Provider>',
|
|
109
|
+
description:
|
|
110
|
+
'The unique identifier for the provider. It should be unique within the registry.',
|
|
111
|
+
properties: [
|
|
112
|
+
{
|
|
113
|
+
type: 'Provider',
|
|
114
|
+
parameters: [
|
|
115
|
+
{
|
|
116
|
+
name: 'languageModel',
|
|
117
|
+
type: '(id: string) => LanguageModel',
|
|
118
|
+
description:
|
|
119
|
+
'A function that returns a language model by its id.',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'embeddingModel',
|
|
123
|
+
type: '(id: string) => EmbeddingModel<string>',
|
|
124
|
+
description:
|
|
125
|
+
'A function that returns a text embedding model by its id.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'imageModel',
|
|
129
|
+
type: '(id: string) => ImageModel',
|
|
130
|
+
description: 'A function that returns an image model by its id.',
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'options',
|
|
138
|
+
type: 'object',
|
|
139
|
+
description: 'Optional configuration for the registry.',
|
|
140
|
+
properties: [
|
|
141
|
+
{
|
|
142
|
+
type: 'Options',
|
|
143
|
+
parameters: [
|
|
144
|
+
{
|
|
145
|
+
name: 'separator',
|
|
146
|
+
type: 'string',
|
|
147
|
+
description:
|
|
148
|
+
'Custom separator between provider and model IDs. Defaults to ":".',
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
]}
|
|
155
|
+
/>
|
|
156
|
+
|
|
157
|
+
### Returns
|
|
158
|
+
|
|
159
|
+
The `createProviderRegistry` function returns a `Provider` instance. It has the following methods:
|
|
160
|
+
|
|
161
|
+
<PropertiesTable
|
|
162
|
+
content={[
|
|
163
|
+
{
|
|
164
|
+
name: 'languageModel',
|
|
165
|
+
type: '(id: string) => LanguageModel',
|
|
166
|
+
description:
|
|
167
|
+
'A function that returns a language model by its id (format: providerId:modelId)',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'embeddingModel',
|
|
171
|
+
type: '(id: string) => EmbeddingModel<string>',
|
|
172
|
+
description:
|
|
173
|
+
'A function that returns a text embedding model by its id (format: providerId:modelId)',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'imageModel',
|
|
177
|
+
type: '(id: string) => ImageModel',
|
|
178
|
+
description:
|
|
179
|
+
'A function that returns an image model by its id (format: providerId:modelId)',
|
|
180
|
+
},
|
|
181
|
+
]}
|
|
182
|
+
/>
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: customProvider
|
|
3
|
+
description: Custom provider that uses models from a different provider (API Reference)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `customProvider()`
|
|
7
|
+
|
|
8
|
+
With a custom provider, you can map ids to any model.
|
|
9
|
+
This allows you to set up custom model configurations, alias names, and more.
|
|
10
|
+
The custom provider also supports a fallback provider, which is useful for
|
|
11
|
+
wrapping existing providers and adding additional functionality.
|
|
12
|
+
|
|
13
|
+
### Example: custom model settings
|
|
14
|
+
|
|
15
|
+
You can create a custom provider using `customProvider`.
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { openai } from '@ai-sdk/openai';
|
|
19
|
+
import { customProvider } from 'ai';
|
|
20
|
+
|
|
21
|
+
// custom provider with different model settings:
|
|
22
|
+
export const myOpenAI = customProvider({
|
|
23
|
+
languageModels: {
|
|
24
|
+
// replacement model with custom settings:
|
|
25
|
+
'gpt-4': wrapLanguageModel({
|
|
26
|
+
model: openai('gpt-4'),
|
|
27
|
+
middleware: defaultSettingsMiddleware({
|
|
28
|
+
settings: {
|
|
29
|
+
providerOptions: {
|
|
30
|
+
openai: {
|
|
31
|
+
reasoningEffort: 'high',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
}),
|
|
36
|
+
}),
|
|
37
|
+
// alias model with custom settings:
|
|
38
|
+
'gpt-4o-reasoning-high': wrapLanguageModel({
|
|
39
|
+
model: openai('gpt-4o'),
|
|
40
|
+
middleware: defaultSettingsMiddleware({
|
|
41
|
+
settings: {
|
|
42
|
+
providerOptions: {
|
|
43
|
+
openai: {
|
|
44
|
+
reasoningEffort: 'high',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
51
|
+
fallbackProvider: openai,
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Import
|
|
56
|
+
|
|
57
|
+
<Snippet text={`import { customProvider } from "ai"`} prompt={false} />
|
|
58
|
+
|
|
59
|
+
## API Signature
|
|
60
|
+
|
|
61
|
+
### Parameters
|
|
62
|
+
|
|
63
|
+
<PropertiesTable
|
|
64
|
+
content={[
|
|
65
|
+
{
|
|
66
|
+
name: 'languageModels',
|
|
67
|
+
type: 'Record<string, LanguageModel>',
|
|
68
|
+
isOptional: true,
|
|
69
|
+
description:
|
|
70
|
+
'A record of language models, where keys are model IDs and values are LanguageModel instances.',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: '.embeddingModels',
|
|
74
|
+
type: 'Record<string, EmbeddingModel<string>>',
|
|
75
|
+
isOptional: true,
|
|
76
|
+
description:
|
|
77
|
+
'A record of text embedding models, where keys are model IDs and values are EmbeddingModel<string> instances.',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'imageModels',
|
|
81
|
+
type: 'Record<string, ImageModel>',
|
|
82
|
+
isOptional: true,
|
|
83
|
+
description:
|
|
84
|
+
'A record of image models, where keys are model IDs and values are image model instances.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'fallbackProvider',
|
|
88
|
+
type: 'Provider',
|
|
89
|
+
isOptional: true,
|
|
90
|
+
description:
|
|
91
|
+
'An optional fallback provider to use when a requested model is not found in the custom provider.',
|
|
92
|
+
},
|
|
93
|
+
]}
|
|
94
|
+
/>
|
|
95
|
+
|
|
96
|
+
### Returns
|
|
97
|
+
|
|
98
|
+
The `customProvider` function returns a `Provider` instance. It has the following methods:
|
|
99
|
+
|
|
100
|
+
<PropertiesTable
|
|
101
|
+
content={[
|
|
102
|
+
{
|
|
103
|
+
name: 'languageModel',
|
|
104
|
+
type: '(id: string) => LanguageModel',
|
|
105
|
+
description:
|
|
106
|
+
'A function that returns a language model by its id (format: providerId:modelId)',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'embeddingModel',
|
|
110
|
+
type: '(id: string) => EmbeddingModel<string>',
|
|
111
|
+
description:
|
|
112
|
+
'A function that returns a text embedding model by its id (format: providerId:modelId)',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'imageModel',
|
|
116
|
+
type: '(id: string) => ImageModel',
|
|
117
|
+
description:
|
|
118
|
+
'A function that returns an image model by its id (format: providerId:modelId)',
|
|
119
|
+
},
|
|
120
|
+
]}
|
|
121
|
+
/>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: cosineSimilarity
|
|
3
|
+
description: Calculate the cosine similarity between two vectors (API Reference)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `cosineSimilarity()`
|
|
7
|
+
|
|
8
|
+
When you want to compare the similarity of embeddings, standard vector similarity metrics
|
|
9
|
+
like cosine similarity are often used.
|
|
10
|
+
|
|
11
|
+
`cosineSimilarity` calculates the cosine similarity between two vectors.
|
|
12
|
+
A high value (close to 1) indicates that the vectors are very similar, while a low value (close to -1) indicates that they are different.
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
import { cosineSimilarity, embedMany } from 'ai';
|
|
16
|
+
|
|
17
|
+
const { embeddings } = await embedMany({
|
|
18
|
+
model: 'openai/text-embedding-3-small',
|
|
19
|
+
values: ['sunny day at the beach', 'rainy afternoon in the city'],
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
console.log(
|
|
23
|
+
`cosine similarity: ${cosineSimilarity(embeddings[0], embeddings[1])}`,
|
|
24
|
+
);
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Import
|
|
28
|
+
|
|
29
|
+
<Snippet text={`import { cosineSimilarity } from "ai"`} prompt={false} />
|
|
30
|
+
|
|
31
|
+
## API Signature
|
|
32
|
+
|
|
33
|
+
### Parameters
|
|
34
|
+
|
|
35
|
+
<PropertiesTable
|
|
36
|
+
content={[
|
|
37
|
+
{
|
|
38
|
+
name: 'vector1',
|
|
39
|
+
type: 'number[]',
|
|
40
|
+
description: 'The first vector to compare',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'vector2',
|
|
44
|
+
type: 'number[]',
|
|
45
|
+
description: 'The second vector to compare',
|
|
46
|
+
},
|
|
47
|
+
]}
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
### Returns
|
|
51
|
+
|
|
52
|
+
A number between -1 and 1 representing the cosine similarity between the two vectors.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: wrapLanguageModel
|
|
3
|
+
description: Function for wrapping a language model with middleware (API Reference)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `wrapLanguageModel()`
|
|
7
|
+
|
|
8
|
+
The `wrapLanguageModel` function provides a way to enhance the behavior of language models
|
|
9
|
+
by wrapping them with middleware.
|
|
10
|
+
See [Language Model Middleware](/docs/ai-sdk-core/middleware) for more information on middleware.
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { wrapLanguageModel, gateway } from 'ai';
|
|
14
|
+
|
|
15
|
+
const wrappedLanguageModel = wrapLanguageModel({
|
|
16
|
+
model: gateway('openai/gpt-4.1'),
|
|
17
|
+
middleware: yourLanguageModelMiddleware,
|
|
18
|
+
});
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Import
|
|
22
|
+
|
|
23
|
+
<Snippet text={`import { wrapLanguageModel } from "ai"`} prompt={false} />
|
|
24
|
+
|
|
25
|
+
## API Signature
|
|
26
|
+
|
|
27
|
+
### Parameters
|
|
28
|
+
|
|
29
|
+
<PropertiesTable
|
|
30
|
+
content={[
|
|
31
|
+
{
|
|
32
|
+
name: 'model',
|
|
33
|
+
type: 'LanguageModelV3',
|
|
34
|
+
description: 'The original LanguageModelV3 instance to be wrapped.',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'middleware',
|
|
38
|
+
type: 'LanguageModelV3Middleware | LanguageModelV3Middleware[]',
|
|
39
|
+
description:
|
|
40
|
+
'The middleware to be applied to the language model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'modelId',
|
|
44
|
+
type: 'string',
|
|
45
|
+
description:
|
|
46
|
+
"Optional custom model ID to override the original model's ID.",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'providerId',
|
|
50
|
+
type: 'string',
|
|
51
|
+
description:
|
|
52
|
+
"Optional custom provider ID to override the original model's provider.",
|
|
53
|
+
},
|
|
54
|
+
]}
|
|
55
|
+
/>
|
|
56
|
+
|
|
57
|
+
### Returns
|
|
58
|
+
|
|
59
|
+
A new `LanguageModelV3` instance with middleware applied.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: wrapImageModel
|
|
3
|
+
description: Function for wrapping an image model with middleware (API Reference)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# `wrapImageModel()`
|
|
7
|
+
|
|
8
|
+
The `wrapImageModel` function provides a way to enhance the behavior of image models
|
|
9
|
+
by wrapping them with middleware.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { generateImage, wrapImageModel } from 'ai';
|
|
13
|
+
import { openai } from '@ai-sdk/openai';
|
|
14
|
+
|
|
15
|
+
const model = wrapImageModel({
|
|
16
|
+
model: openai.image('gpt-image-1'),
|
|
17
|
+
middleware: yourImageModelMiddleware,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const { image } = await generateImage({
|
|
21
|
+
model,
|
|
22
|
+
prompt: 'Santa Claus driving a Cadillac',
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Import
|
|
27
|
+
|
|
28
|
+
<Snippet text={`import { wrapImageModel } from "ai"`} prompt={false} />
|
|
29
|
+
|
|
30
|
+
## API Signature
|
|
31
|
+
|
|
32
|
+
### Parameters
|
|
33
|
+
|
|
34
|
+
<PropertiesTable
|
|
35
|
+
content={[
|
|
36
|
+
{
|
|
37
|
+
name: 'model',
|
|
38
|
+
type: 'ImageModelV3',
|
|
39
|
+
description: 'The original ImageModelV3 instance to be wrapped.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'middleware',
|
|
43
|
+
type: 'ImageModelV3Middleware | ImageModelV3Middleware[]',
|
|
44
|
+
description:
|
|
45
|
+
'The middleware to be applied to the image model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'modelId',
|
|
49
|
+
type: 'string',
|
|
50
|
+
description:
|
|
51
|
+
"Optional custom model ID to override the original model's ID.",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'providerId',
|
|
55
|
+
type: 'string',
|
|
56
|
+
description:
|
|
57
|
+
"Optional custom provider ID to override the original model's provider.",
|
|
58
|
+
},
|
|
59
|
+
]}
|
|
60
|
+
/>
|
|
61
|
+
|
|
62
|
+
### Returns
|
|
63
|
+
|
|
64
|
+
A new `ImageModelV3` instance with middleware applied.
|