feat: update providers (#881)

This commit is contained in:
Jeremy 2025-03-20 14:10:45 -07:00 committed by GitHub
parent 9058240e10
commit 7811c0f7fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 122 additions and 108 deletions

View file

@ -1,11 +1,11 @@
# Get your xAI API Key here for chat models: https://console.x.ai/ # Get your xAI API Key here for chat models: https://console.x.ai/
XAI_API_KEY=**** XAI_API_KEY=****
# Get your OpenAI API Key here for chat models: https://platform.openai.com/account/api-keys # Get your Groq API Key here for reasoning models: https://console.groq.com/keys
OPENAI_API_KEY=**** GROQ_API_KEY=****
# Get your Fireworks AI API Key here for reasoning models: https://fireworks.ai/account/api-keys # Get your Fal AI API Key here for image models: https://docs.fal.ai/authentication/key-based
FIREWORKS_API_KEY=**** FAL_API_KEY=****
# Generate a random secret: https://generate-secret.vercel.app/32 or `openssl rand -base64 32` # Generate a random secret: https://generate-secret.vercel.app/32 or `openssl rand -base64 32`
AUTH_SECRET=**** AUTH_SECRET=****

View file

@ -15,4 +15,3 @@
{ "pattern": "packages/*" } { "pattern": "packages/*" }
] ]
} }

View file

@ -41,7 +41,7 @@ This template ships with [xAI](https://x.ai) `grok-2-1212` as the default chat m
You can deploy your own version of the Next.js AI Chatbot to Vercel with one click: You can deploy your own version of the Next.js AI Chatbot to Vercel with one click:
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fai-chatbot&env=AUTH_SECRET,OPENAI_API_KEY,XAI_API_KEY,FIREWORKS_API_KEY&envDescription=Learn%20more%20about%20how%20to%20get%20the%20API%20Keys%20for%20the%20application&envLink=https%3A%2F%2Fgithub.com%2Fvercel%2Fai-chatbot%2Fblob%2Fmain%2F.env.example&demo-title=AI%20Chatbot&demo-description=An%20Open-Source%20AI%20Chatbot%20Template%20Built%20With%20Next.js%20and%20the%20AI%20SDK%20by%20Vercel.&demo-url=https%3A%2F%2Fchat.vercel.ai&stores=[{%22type%22:%22postgres%22},{%22type%22:%22blob%22}]) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fai-chatbot&env=AUTH_SECRET&envDescription=Learn%20more%20about%20how%20to%20get%20the%20API%20Keys%20for%20the%20application&envLink=https%3A%2F%2Fgithub.com%2Fvercel%2Fai-chatbot%2Fblob%2Fmain%2F.env.example&demo-title=AI%20Chatbot&demo-description=An%20Open-Source%20AI%20Chatbot%20Template%20Built%20With%20Next.js%20and%20the%20AI%20SDK%20by%20Vercel.&demo-url=https%3A%2F%2Fchat.vercel.ai&stores=[{%22type%22:%22postgres%22},{%22type%22:%22blob%22}]&integration-ids=oac_g1tOx3546WuLOQ4QeyAX1n1P,oac_G6x10PjgSxUUTu6Pi25ZAtbp,oac_GzhR3rwEIUyQEpKEsmAiEjfi)
## Running locally ## Running locally

View file

@ -137,7 +137,7 @@ export async function POST(request: Request) {
}, },
], ],
}); });
} catch (error) { } catch (_) {
console.error('Failed to save chat'); console.error('Failed to save chat');
} }
} }

View file

@ -1,6 +1,6 @@
'use client'; 'use client';
import type { Attachment, Message } from 'ai'; import type { Attachment, Message, UIMessage } from 'ai';
import cx from 'classnames'; import cx from 'classnames';
import type React from 'react'; import type React from 'react';
import { import {
@ -22,7 +22,7 @@ import { Button } from './ui/button';
import { Textarea } from './ui/textarea'; import { Textarea } from './ui/textarea';
import { SuggestedActions } from './suggested-actions'; import { SuggestedActions } from './suggested-actions';
import equal from 'fast-deep-equal'; import equal from 'fast-deep-equal';
import { UseChatHelpers, UseChatOptions } from '@ai-sdk/react'; import { UseChatHelpers } from '@ai-sdk/react';
function PureMultimodalInput({ function PureMultimodalInput({
chatId, chatId,
@ -45,8 +45,8 @@ function PureMultimodalInput({
stop: () => void; stop: () => void;
attachments: Array<Attachment>; attachments: Array<Attachment>;
setAttachments: Dispatch<SetStateAction<Array<Attachment>>>; setAttachments: Dispatch<SetStateAction<Array<Attachment>>>;
messages: Array<Message>; messages: Array<UIMessage>;
setMessages: Dispatch<SetStateAction<Array<Message>>>; setMessages: UseChatHelpers['setMessages'];
append: UseChatHelpers['append']; append: UseChatHelpers['append'];
handleSubmit: UseChatHelpers['handleSubmit']; handleSubmit: UseChatHelpers['handleSubmit'];
className?: string; className?: string;
@ -308,7 +308,7 @@ function PureStopButton({
setMessages, setMessages,
}: { }: {
stop: () => void; stop: () => void;
setMessages: Dispatch<SetStateAction<Array<Message>>>; setMessages: UseChatHelpers['setMessages'];
}) { }) {
return ( return (
<Button <Button

View file

@ -2,15 +2,12 @@
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import { Button } from './ui/button'; import { Button } from './ui/button';
import { ChatRequestOptions, CreateMessage, Message } from 'ai';
import { memo } from 'react'; import { memo } from 'react';
import { UseChatHelpers } from '@ai-sdk/react';
interface SuggestedActionsProps { interface SuggestedActionsProps {
chatId: string; chatId: string;
append: ( append: UseChatHelpers['append'];
message: Message | CreateMessage,
chatRequestOptions?: ChatRequestOptions,
) => Promise<string | null | undefined>;
} }
function PureSuggestedActions({ chatId, append }: SuggestedActionsProps) { function PureSuggestedActions({ chatId, append }: SuggestedActionsProps) {

View file

@ -1,6 +1,6 @@
'use client'; 'use client';
import type { ChatRequestOptions, CreateMessage, Message } from 'ai'; import type { Message } from 'ai';
import cx from 'classnames'; import cx from 'classnames';
import { import {
AnimatePresence, AnimatePresence,
@ -39,10 +39,7 @@ type ToolProps = {
isToolbarVisible?: boolean; isToolbarVisible?: boolean;
setIsToolbarVisible?: Dispatch<SetStateAction<boolean>>; setIsToolbarVisible?: Dispatch<SetStateAction<boolean>>;
isAnimating: boolean; isAnimating: boolean;
append: ( append: UseChatHelpers['append'];
message: Message | CreateMessage,
chatRequestOptions?: ChatRequestOptions,
) => Promise<string | null | undefined>;
onClick: ({ onClick: ({
appendMessage, appendMessage,
}: { }: {
@ -143,10 +140,7 @@ const ReadingLevelSelector = ({
}: { }: {
setSelectedTool: Dispatch<SetStateAction<string | null>>; setSelectedTool: Dispatch<SetStateAction<string | null>>;
isAnimating: boolean; isAnimating: boolean;
append: ( append: UseChatHelpers['append'];
message: Message | CreateMessage,
chatRequestOptions?: ChatRequestOptions,
) => Promise<string | null | undefined>;
}) => { }) => {
const LEVELS = [ const LEVELS = [
'Elementary', 'Elementary',
@ -257,10 +251,7 @@ export const Tools = ({
isToolbarVisible: boolean; isToolbarVisible: boolean;
selectedTool: string | null; selectedTool: string | null;
setSelectedTool: Dispatch<SetStateAction<string | null>>; setSelectedTool: Dispatch<SetStateAction<string | null>>;
append: ( append: UseChatHelpers['append'];
message: Message | CreateMessage,
chatRequestOptions?: ChatRequestOptions,
) => Promise<string | null | undefined>;
isAnimating: boolean; isAnimating: boolean;
setIsToolbarVisible: Dispatch<SetStateAction<boolean>>; setIsToolbarVisible: Dispatch<SetStateAction<boolean>>;
tools: Array<ArtifactToolbarItem>; tools: Array<ArtifactToolbarItem>;
@ -319,7 +310,7 @@ const PureToolbar = ({
status: UseChatHelpers['status']; status: UseChatHelpers['status'];
append: UseChatHelpers['append']; append: UseChatHelpers['append'];
stop: UseChatHelpers['stop']; stop: UseChatHelpers['stop'];
setMessages: Dispatch<SetStateAction<Message[]>>; setMessages: UseChatHelpers['setMessages'];
artifactKind: ArtifactKind; artifactKind: ArtifactKind;
}) => { }) => {
const toolbarRef = useRef<HTMLDivElement>(null); const toolbarRef = useRef<HTMLDivElement>(null);

View file

@ -7,20 +7,21 @@ To update the models, you will need to update the custom provider called `myProv
```ts ```ts
import { customProvider } from "ai"; import { customProvider } from "ai";
import { xai } from "@ai-sdk/xai"; import { xai } from "@ai-sdk/xai";
import { groq } from "@ai-sdk/groq";
import { fal } from "@ai-sdk/fal";
export const myProvider = customProvider({ export const myProvider = customProvider({
languageModels: { languageModels: {
"chat-model": xai("grok-2-1212"), "chat-model": xai("grok-2-1212"),
"chat-model-reasoning": wrapLanguageModel({ "chat-model-reasoning": wrapLanguageModel({
model: fireworks("accounts/fireworks/models/deepseek-r1"), model: groq("deepseek-r1-distill-llama-70b"),
middleware: extractReasoningMiddleware({ tagName: "think" }), middleware: extractReasoningMiddleware({ tagName: "think" }),
}), }),
"title-model": xai("grok-2-1212"), "title-model": xai("grok-2-1212"),
"artifact-model": xai("grok-2-1212"), "artifact-model": xai("grok-2-1212"),
}, },
imageModels: { imageModels: {
"small-model": openai.image("dall-e-2"), "small-model": fal.image("fal-ai/fast-sdxl"),
"large-model": openai.image("dall-e-3"),
}, },
}); });
``` ```
@ -31,20 +32,22 @@ For example, if you want to use Anthropic's `claude-3-5-sonnet` model for `chat-
```ts ```ts
import { customProvider } from "ai"; import { customProvider } from "ai";
import { fal } from "@ai-sdk/fal";
import { groq } from "@ai-sdk/groq";
import { anthropic } from "@ai-sdk/anthropic"; import { anthropic } from "@ai-sdk/anthropic";
export const myProvider = customProvider({ export const myProvider = customProvider({
languageModels: { languageModels: {
"chat-model": anthropic("claude-3-5-sonnet"), // Replace xai with anthropic "chat-model": anthropic("claude-3-5-sonnet"), // Replace xai with anthropic
"chat-model-reasoning": wrapLanguageModel({ "chat-model-reasoning": wrapLanguageModel({
model: fireworks("accounts/fireworks/models/deepseek-r1"), model: groq("deepseek-r1-distill-llama-70b"),
middleware: extractReasoningMiddleware({ tagName: "think" }), middleware: extractReasoningMiddleware({ tagName: "think" }),
}), }),
"title-model": openai("gpt-4-turbo"), "title-model": anthropic("claude-3-5-haiku"),
"artifact-model": openai("gpt-4o-mini"), "artifact-model": anthropic("claude-3-5-haiku"),
}, },
imageModels: { imageModels: {
"small-model": openai.image("dall-e-3"), "small-model": fal.image("fal-ai/fast-sdxl"),
}, },
}); });
``` ```

View file

@ -3,9 +3,9 @@ import {
extractReasoningMiddleware, extractReasoningMiddleware,
wrapLanguageModel, wrapLanguageModel,
} from 'ai'; } from 'ai';
import { openai } from '@ai-sdk/openai'; import { groq } from '@ai-sdk/groq';
import { fireworks } from '@ai-sdk/fireworks';
import { xai } from '@ai-sdk/xai'; import { xai } from '@ai-sdk/xai';
import { fal } from '@ai-sdk/fal';
import { isTestEnvironment } from '../constants'; import { isTestEnvironment } from '../constants';
import { import {
artifactModel, artifactModel,
@ -27,14 +27,13 @@ export const myProvider = isTestEnvironment
languageModels: { languageModels: {
'chat-model': xai('grok-2-1212'), 'chat-model': xai('grok-2-1212'),
'chat-model-reasoning': wrapLanguageModel({ 'chat-model-reasoning': wrapLanguageModel({
model: fireworks('accounts/fireworks/models/deepseek-r1'), model: groq('deepseek-r1-distill-llama-70b'),
middleware: extractReasoningMiddleware({ tagName: 'think' }), middleware: extractReasoningMiddleware({ tagName: 'think' }),
}), }),
'title-model': xai('grok-2-1212'), 'title-model': xai('grok-2-1212'),
'artifact-model': xai('grok-2-1212'), 'artifact-model': xai('grok-2-1212'),
}, },
imageModels: { imageModels: {
'small-model': openai.image('dall-e-2'), 'small-model': fal.image('fal-ai/fast-sdxl'),
'large-model': openai.image('dall-e-3'),
}, },
}); });

View file

@ -19,9 +19,9 @@
"test": "export PLAYWRIGHT=True && pnpm exec playwright test --workers=4" "test": "export PLAYWRIGHT=True && pnpm exec playwright test --workers=4"
}, },
"dependencies": { "dependencies": {
"@ai-sdk/fireworks": "^0.1.16", "@ai-sdk/fal": "^0.0.11",
"@ai-sdk/openai": "^1.2.5", "@ai-sdk/groq": "^1.1.16",
"@ai-sdk/react": "^1.1.23", "@ai-sdk/react": "^1.1.25",
"@ai-sdk/xai": "^1.1.15", "@ai-sdk/xai": "^1.1.15",
"@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-javascript": "^6.2.2",
"@codemirror/lang-python": "^6.1.6", "@codemirror/lang-python": "^6.1.6",
@ -41,7 +41,7 @@
"@vercel/analytics": "^1.3.1", "@vercel/analytics": "^1.3.1",
"@vercel/blob": "^0.24.1", "@vercel/blob": "^0.24.1",
"@vercel/postgres": "^0.10.0", "@vercel/postgres": "^0.10.0",
"ai": "4.1.61", "ai": "4.1.66",
"bcrypt-ts": "^5.0.2", "bcrypt-ts": "^5.0.2",
"class-variance-authority": "^0.7.0", "class-variance-authority": "^0.7.0",
"classnames": "^2.5.1", "classnames": "^2.5.1",

115
pnpm-lock.yaml generated
View file

@ -8,15 +8,15 @@ importers:
.: .:
dependencies: dependencies:
'@ai-sdk/fireworks': '@ai-sdk/fal':
specifier: ^0.1.16 specifier: ^0.0.11
version: 0.1.16(zod@3.24.2) version: 0.0.11(zod@3.24.2)
'@ai-sdk/openai': '@ai-sdk/groq':
specifier: ^1.2.5 specifier: ^1.1.16
version: 1.2.5(zod@3.24.2) version: 1.1.16(zod@3.24.2)
'@ai-sdk/react': '@ai-sdk/react':
specifier: ^1.1.23 specifier: ^1.1.25
version: 1.1.23(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2) version: 1.1.25(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2)
'@ai-sdk/xai': '@ai-sdk/xai':
specifier: ^1.1.15 specifier: ^1.1.15
version: 1.1.15(zod@3.24.2) version: 1.1.15(zod@3.24.2)
@ -75,8 +75,8 @@ importers:
specifier: ^0.10.0 specifier: ^0.10.0
version: 0.10.0 version: 0.10.0
ai: ai:
specifier: 4.1.61 specifier: 4.1.66
version: 4.1.61(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2) version: 4.1.66(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2)
bcrypt-ts: bcrypt-ts:
specifier: ^5.0.2 specifier: ^5.0.2
version: 5.0.3 version: 5.0.3
@ -261,8 +261,14 @@ importers:
packages: packages:
'@ai-sdk/fireworks@0.1.16': '@ai-sdk/fal@0.0.11':
resolution: {integrity: sha512-CQ0A/bVYUQ2VBLxH6RHOW+m+1LlJ9QNf/7hjYFWAmBR6nkwHbrKarNOX9d3Ba08HTotdqxIChORuU2km0LIxFw==} resolution: {integrity: sha512-lVjG5HTxNZ3l40yI1uJYe2cHmDdk1cuiQff0KQz/A5c6BpwSlyKUVWvb8HxBJETzWRBNDWK1dbWcXVTm+WK5aw==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
'@ai-sdk/groq@1.1.16':
resolution: {integrity: sha512-25MacYnuswATGvvBSwj5uRLdkvJU0SlNweib6BmYd6+0F2mHRZWiYIiVIyuUIeRBmt6ybSNTaRKYz2Hh7whRcg==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.0.0 zod: ^3.0.0
@ -273,12 +279,6 @@ packages:
peerDependencies: peerDependencies:
zod: ^3.0.0 zod: ^3.0.0
'@ai-sdk/openai@1.2.5':
resolution: {integrity: sha512-COK7LzspgQQh5Yq070xfDdVMvp8WX592rXRaMaYNNqu1xpzahxDcM24aF9xgKYWuYH0UMoOw4UmWGwGxr6ygIg==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
'@ai-sdk/provider-utils@2.1.13': '@ai-sdk/provider-utils@2.1.13':
resolution: {integrity: sha512-kLjqsfOdONr6DGcGEntFYM1niXz1H05vyZNf9OAzK+KKKc64izyP4/q/9HX7W4+6g8hm6BnmKxu8vkr6FSOqDg==} resolution: {integrity: sha512-kLjqsfOdONr6DGcGEntFYM1niXz1H05vyZNf9OAzK+KKKc64izyP4/q/9HX7W4+6g8hm6BnmKxu8vkr6FSOqDg==}
engines: {node: '>=18'} engines: {node: '>=18'}
@ -288,12 +288,25 @@ packages:
zod: zod:
optional: true optional: true
'@ai-sdk/provider-utils@2.1.15':
resolution: {integrity: sha512-ndMVtDm2xS86t45CJZSfyl7UblZFewRB8gZkXQHeNi7BhjCYkhE+XQMwfDl6UOAO7kaV60IC1R4JLDWxWiiHug==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
peerDependenciesMeta:
zod:
optional: true
'@ai-sdk/provider@1.0.11': '@ai-sdk/provider@1.0.11':
resolution: {integrity: sha512-CPyImHGiT3svyfmvPvAFTianZzWFtm0qK82XjwlQIA1C3IQ2iku/PMQXi7aFyrX0TyMh3VTkJPB03tjU2VXVrw==} resolution: {integrity: sha512-CPyImHGiT3svyfmvPvAFTianZzWFtm0qK82XjwlQIA1C3IQ2iku/PMQXi7aFyrX0TyMh3VTkJPB03tjU2VXVrw==}
engines: {node: '>=18'} engines: {node: '>=18'}
'@ai-sdk/react@1.1.23': '@ai-sdk/provider@1.0.12':
resolution: {integrity: sha512-R+PG9ya0GLs6orzt+1MxmjrWFuZM0gVs+l8ihBr1u+42wwkVeojY4CAtQjW4nrfGTVbdJYkl5y+r/VKfjr42aQ==} resolution: {integrity: sha512-88Uu1zJIE1UUOVJWfE2ybJXgiH8JJ97QY9fbmplErEbfa/k/1kF+tWMVAAJolF2aOGmazQGyQLhv4I9CCuVACw==}
engines: {node: '>=18'}
'@ai-sdk/react@1.1.25':
resolution: {integrity: sha512-uKrnxvJmiixAhndquDtac/q/wOnG9EFBkAsL6mpDRDflHQv34+xtkOKswDxyEzt1FaQFoqig0J44Lx0F3vGSkg==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc react: ^18 || ^19 || ^19.0.0-rc
@ -304,8 +317,8 @@ packages:
zod: zod:
optional: true optional: true
'@ai-sdk/ui-utils@1.1.19': '@ai-sdk/ui-utils@1.1.21':
resolution: {integrity: sha512-rDHy2uxlPMt3jjS9L6mBrsfhEInZ5BVoWevmD13fsAt2s/XWy2OwwKmgmUQkdLlY4mn/eyeYAfDGK8+5CbOAgg==} resolution: {integrity: sha512-z88UBEioQvJM6JsBoLmG6MOholc5pDkq1BBeb53NZ7JmMeWX4btCbrGmM4qs+gYLDnZokV/HB8C6zpS1jaJbAw==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.0.0 zod: ^3.0.0
@ -1669,8 +1682,8 @@ packages:
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
ai@4.1.61: ai@4.1.66:
resolution: {integrity: sha512-Y9SAyGJEeW23F6C7PSHZXYNEvbH2cqJm0rVW2AoeFaXFT13ttx8rAqs8wz2w466C1UB329yl5PXayFcHqofSEA==} resolution: {integrity: sha512-2Ny3reUTpZJhRLMvhJK5pxJ8E15uQSXEyemgsmgX6C6rI81JPPhorPTj6J8xQqZ+BFWLgrKYn9CKpUWZiAVqHw==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc react: ^18 || ^19 || ^19.0.0-rc
@ -3885,11 +3898,16 @@ packages:
snapshots: snapshots:
'@ai-sdk/fireworks@0.1.16(zod@3.24.2)': '@ai-sdk/fal@0.0.11(zod@3.24.2)':
dependencies: dependencies:
'@ai-sdk/openai-compatible': 0.1.15(zod@3.24.2) '@ai-sdk/provider': 1.0.12
'@ai-sdk/provider': 1.0.11 '@ai-sdk/provider-utils': 2.1.15(zod@3.24.2)
'@ai-sdk/provider-utils': 2.1.13(zod@3.24.2) zod: 3.24.2
'@ai-sdk/groq@1.1.16(zod@3.24.2)':
dependencies:
'@ai-sdk/provider': 1.0.12
'@ai-sdk/provider-utils': 2.1.15(zod@3.24.2)
zod: 3.24.2 zod: 3.24.2
'@ai-sdk/openai-compatible@0.1.15(zod@3.24.2)': '@ai-sdk/openai-compatible@0.1.15(zod@3.24.2)':
@ -3898,12 +3916,6 @@ snapshots:
'@ai-sdk/provider-utils': 2.1.13(zod@3.24.2) '@ai-sdk/provider-utils': 2.1.13(zod@3.24.2)
zod: 3.24.2 zod: 3.24.2
'@ai-sdk/openai@1.2.5(zod@3.24.2)':
dependencies:
'@ai-sdk/provider': 1.0.11
'@ai-sdk/provider-utils': 2.1.13(zod@3.24.2)
zod: 3.24.2
'@ai-sdk/provider-utils@2.1.13(zod@3.24.2)': '@ai-sdk/provider-utils@2.1.13(zod@3.24.2)':
dependencies: dependencies:
'@ai-sdk/provider': 1.0.11 '@ai-sdk/provider': 1.0.11
@ -3913,24 +3925,37 @@ snapshots:
optionalDependencies: optionalDependencies:
zod: 3.24.2 zod: 3.24.2
'@ai-sdk/provider-utils@2.1.15(zod@3.24.2)':
dependencies:
'@ai-sdk/provider': 1.0.12
eventsource-parser: 3.0.0
nanoid: 3.3.9
secure-json-parse: 2.7.0
optionalDependencies:
zod: 3.24.2
'@ai-sdk/provider@1.0.11': '@ai-sdk/provider@1.0.11':
dependencies: dependencies:
json-schema: 0.4.0 json-schema: 0.4.0
'@ai-sdk/react@1.1.23(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2)': '@ai-sdk/provider@1.0.12':
dependencies: dependencies:
'@ai-sdk/provider-utils': 2.1.13(zod@3.24.2) json-schema: 0.4.0
'@ai-sdk/ui-utils': 1.1.19(zod@3.24.2)
'@ai-sdk/react@1.1.25(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2)':
dependencies:
'@ai-sdk/provider-utils': 2.1.15(zod@3.24.2)
'@ai-sdk/ui-utils': 1.1.21(zod@3.24.2)
swr: 2.3.3(react@19.0.0-rc-45804af1-20241021) swr: 2.3.3(react@19.0.0-rc-45804af1-20241021)
throttleit: 2.1.0 throttleit: 2.1.0
optionalDependencies: optionalDependencies:
react: 19.0.0-rc-45804af1-20241021 react: 19.0.0-rc-45804af1-20241021
zod: 3.24.2 zod: 3.24.2
'@ai-sdk/ui-utils@1.1.19(zod@3.24.2)': '@ai-sdk/ui-utils@1.1.21(zod@3.24.2)':
dependencies: dependencies:
'@ai-sdk/provider': 1.0.11 '@ai-sdk/provider': 1.0.12
'@ai-sdk/provider-utils': 2.1.13(zod@3.24.2) '@ai-sdk/provider-utils': 2.1.15(zod@3.24.2)
zod-to-json-schema: 3.24.3(zod@3.24.2) zod-to-json-schema: 3.24.3(zod@3.24.2)
optionalDependencies: optionalDependencies:
zod: 3.24.2 zod: 3.24.2
@ -5038,12 +5063,12 @@ snapshots:
acorn@8.14.1: {} acorn@8.14.1: {}
ai@4.1.61(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2): ai@4.1.66(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2):
dependencies: dependencies:
'@ai-sdk/provider': 1.0.11 '@ai-sdk/provider': 1.0.12
'@ai-sdk/provider-utils': 2.1.13(zod@3.24.2) '@ai-sdk/provider-utils': 2.1.15(zod@3.24.2)
'@ai-sdk/react': 1.1.23(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2) '@ai-sdk/react': 1.1.25(react@19.0.0-rc-45804af1-20241021)(zod@3.24.2)
'@ai-sdk/ui-utils': 1.1.19(zod@3.24.2) '@ai-sdk/ui-utils': 1.1.21(zod@3.24.2)
'@opentelemetry/api': 1.9.0 '@opentelemetry/api': 1.9.0
eventsource-parser: 3.0.0 eventsource-parser: 3.0.0
jsondiffpatch: 0.6.0 jsondiffpatch: 0.6.0