Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: vercel/ai
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: ai@4.1.63
Choose a base ref
...
head repository: vercel/ai
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: ai@4.1.64
Choose a head ref
  • 7 commits
  • 89 files changed
  • 4 contributors

Commits on Mar 19, 2025

  1. fix (docs): add header setting to expo guide (#5272)

    lgrammel authored Mar 19, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    46c85b5 View commit details
  2. fix(ui/svelte): Allow class instances to be created as deriveds (#5268)

    Co-authored-by: Lars Grammel <lars.grammel@gmail.com>

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    d1ea22e View commit details
  3. Version Packages (#5277)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Mar 19, 2025
    Copy the full SHA
    675d495 View commit details

Commits on Mar 20, 2025

  1. fix (ui/svelte): use instance-specific generateId for user messages (#…

    marwhyte authored Mar 20, 2025
    Copy the full SHA
    62b327e View commit details
  2. Version Packages (#5283)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Mar 20, 2025
    Copy the full SHA
    7e6f900 View commit details
  3. feat (provider/groq): reasoning format support (#5273)

    lgrammel authored Mar 20, 2025
    Copy the full SHA
    d0c4659 View commit details
  4. Version Packages (#5284)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Mar 20, 2025
    Copy the full SHA
    874221a View commit details
Showing with 754 additions and 335 deletions.
  1. +9 −3 content/docs/02-getting-started/07-expo.mdx
  2. +20 −11 content/providers/01-ai-sdk-providers/09-groq.mdx
  3. +22 −22 examples/ai-core/package.json
  4. +26 −0 examples/ai-core/src/generate-text/groq-reasoning.ts
  5. +5 −5 examples/ai-core/src/stream-text/groq-reasoning-fullstream.ts
  6. +2 −2 examples/express/package.json
  7. +2 −2 examples/fastify/package.json
  8. +2 −2 examples/hono/package.json
  9. +2 −2 examples/mcp/package.json
  10. +2 −2 examples/nest/package.json
  11. +3 −3 examples/next-fastapi/package.json
  12. +2 −2 examples/next-google-vertex/package.json
  13. +2 −2 examples/next-langchain/package.json
  14. +3 −3 examples/next-openai-kasada-bot-protection/package.json
  15. +3 −3 examples/next-openai-pages/package.json
  16. +3 −3 examples/next-openai-telemetry-sentry/package.json
  17. +3 −3 examples/next-openai-telemetry/package.json
  18. +3 −3 examples/next-openai-upstash-rate-limits/package.json
  19. +10 −10 examples/next-openai/package.json
  20. +2 −2 examples/node-http-server/package.json
  21. +3 −3 examples/nuxt-openai/package.json
  22. +4 −4 examples/solidstart-openai/package.json
  23. +5 −5 examples/sveltekit-openai/package.json
  24. +9 −0 packages/ai/CHANGELOG.md
  25. +4 −4 packages/ai/package.json
  26. +6 −0 packages/ai/tests/e2e/next-server/CHANGELOG.md
  27. +7 −0 packages/amazon-bedrock/CHANGELOG.md
  28. +2 −2 packages/amazon-bedrock/package.json
  29. +7 −0 packages/anthropic/CHANGELOG.md
  30. +2 −2 packages/anthropic/package.json
  31. +8 −0 packages/azure/CHANGELOG.md
  32. +3 −3 packages/azure/package.json
  33. +8 −0 packages/cerebras/CHANGELOG.md
  34. +3 −3 packages/cerebras/package.json
  35. +7 −0 packages/cohere/CHANGELOG.md
  36. +2 −2 packages/cohere/package.json
  37. +8 −0 packages/deepinfra/CHANGELOG.md
  38. +3 −3 packages/deepinfra/package.json
  39. +8 −0 packages/deepseek/CHANGELOG.md
  40. +3 −3 packages/deepseek/package.json
  41. +7 −0 packages/fal/CHANGELOG.md
  42. +2 −2 packages/fal/package.json
  43. +8 −0 packages/fireworks/CHANGELOG.md
  44. +3 −3 packages/fireworks/package.json
  45. +9 −0 packages/google-vertex/CHANGELOG.md
  46. +4 −4 packages/google-vertex/package.json
  47. +8 −0 packages/google/CHANGELOG.md
  48. +2 −2 packages/google/package.json
  49. +8 −26 packages/google/src/google-generative-ai-language-model.ts
  50. +10 −0 packages/groq/CHANGELOG.md
  51. +2 −2 packages/groq/package.json
  52. +65 −5 packages/groq/src/groq-chat-language-model.test.ts
  53. +24 −3 packages/groq/src/groq-chat-language-model.ts
  54. +7 −3 packages/groq/src/groq-chat-settings.ts
  55. +7 −0 packages/luma/CHANGELOG.md
  56. +2 −2 packages/luma/package.json
  57. +7 −0 packages/mistral/CHANGELOG.md
  58. +2 −2 packages/mistral/package.json
  59. +7 −0 packages/openai-compatible/CHANGELOG.md
  60. +2 −2 packages/openai-compatible/package.json
  61. +7 −0 packages/openai/CHANGELOG.md
  62. +2 −2 packages/openai/package.json
  63. +7 −0 packages/perplexity/CHANGELOG.md
  64. +2 −2 packages/perplexity/package.json
  65. +6 −0 packages/provider-utils/CHANGELOG.md
  66. +1 −1 packages/provider-utils/package.json
  67. +2 −1 packages/provider-utils/src/index.ts
  68. +32 −0 packages/provider-utils/src/parse-provider-options.ts
  69. +8 −0 packages/react/CHANGELOG.md
  70. +3 −3 packages/react/package.json
  71. +7 −0 packages/replicate/CHANGELOG.md
  72. +2 −2 packages/replicate/package.json
  73. +8 −0 packages/solid/CHANGELOG.md
  74. +3 −3 packages/solid/package.json
  75. +20 −0 packages/svelte/CHANGELOG.md
  76. +3 −3 packages/svelte/package.json
  77. +46 −0 packages/svelte/src/chat.svelte.test.ts
  78. +4 −3 packages/svelte/src/chat.svelte.ts
  79. +8 −0 packages/togetherai/CHANGELOG.md
  80. +3 −3 packages/togetherai/package.json
  81. +7 −0 packages/ui-utils/CHANGELOG.md
  82. +2 −2 packages/ui-utils/package.json
  83. +6 −0 packages/valibot/CHANGELOG.md
  84. +2 −2 packages/valibot/package.json
  85. +8 −0 packages/vue/CHANGELOG.md
  86. +3 −3 packages/vue/package.json
  87. +8 −0 packages/xai/CHANGELOG.md
  88. +3 −3 packages/xai/package.json
  89. +127 −127 pnpm-lock.yaml
12 changes: 9 additions & 3 deletions content/docs/02-getting-started/07-expo.mdx
Original file line number Diff line number Diff line change
@@ -94,7 +94,9 @@ export async function POST(req: Request) {
messages,
});

return result.toDataStreamResponse();
return result.toDataStreamResponse({
headers: { 'Content-Type': 'application/octet-stream' },
});
}
```

@@ -283,7 +285,9 @@ export async function POST(req: Request) {
},
});

return result.toDataStreamResponse();
return result.toDataStreamResponse({
headers: { 'Content-Type': 'application/octet-stream' },
});
}
```

@@ -468,7 +472,9 @@ export async function POST(req: Request) {
},
});

return result.toDataStreamResponse();
return result.toDataStreamResponse({
headers: { 'Content-Type': 'application/octet-stream' },
});
}
```

31 changes: 20 additions & 11 deletions content/providers/01-ai-sdk-providers/09-groq.mdx
Original file line number Diff line number Diff line change
@@ -77,20 +77,24 @@ const model = groq('gemma2-9b-it');

### Reasoning Models

Groq exposes the thinking of `deepseek-r1-distill-llama-70b` in the generated text using the `<think>` tag.
You can use the `extractReasoningMiddleware` to extract this reasoning and expose it as a `reasoning` property on the result:
Groq offers several reasoning models such as `qwen-qwq-32b` and `deepseek-r1-distill-llama-70b`.
You can configure how the reasoning is exposed in the generated text by using the `reasoningFormat` option.
It supports the options `parsed`, `hidden`, and `raw`.

```ts
import { groq } from '@ai-sdk/groq';
import { wrapLanguageModel, extractReasoningMiddleware } from 'ai';
import { generateText } from 'ai';

const enhancedModel = wrapLanguageModel({
model: groq('deepseek-r1-distill-llama-70b'),
middleware: extractReasoningMiddleware({ tagName: 'think' }),
const result = await generateText({
model: groq('qwen-qwq-32b'),
providerOptions: {
groq: { reasoningFormat: 'parsed' },
},
prompt: 'How many "r"s are in the word "strawberry"?',
});
```

You can then use that enhanced model in functions like `generateText` and `streamText`.
<Note>Only Groq reasoning models support the `reasoningFormat` option.</Note>

### Example

@@ -110,13 +114,18 @@ const { text } = await generateText({

| Model | Image Input | Object Generation | Tool Usage | Tool Streaming |
| ------------------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
| `deepseek-r1-distill-llama-70b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `gemma2-9b-it` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `llama-3.3-70b-versatile` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `llama-3.1-8b-instant` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `mistral-saba-24b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `qwen-qwq-32b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `llama-guard-3-8b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `llama3-70b-8192` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `llama3-8b-8192` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `mixtral-8x7b-32768` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `gemma2-9b-it` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `qwen-qwq-32b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `mistral-saba-24b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `qwen-2.5-32b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `deepseek-r1-distill-qwen-32b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
| `deepseek-r1-distill-llama-70b` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |

<Note>
The table above lists popular models. Please see the [Groq
44 changes: 22 additions & 22 deletions examples/ai-core/package.json
Original file line number Diff line number Diff line change
@@ -3,33 +3,33 @@
"version": "0.0.0",
"private": true,
"dependencies": {
"@ai-sdk/amazon-bedrock": "2.1.5",
"@ai-sdk/anthropic": "1.1.18",
"@ai-sdk/azure": "1.2.6",
"@ai-sdk/cerebras": "0.1.16",
"@ai-sdk/cohere": "1.1.17",
"@ai-sdk/deepinfra": "0.1.17",
"@ai-sdk/deepseek": "0.1.16",
"@ai-sdk/fal": "0.0.10",
"@ai-sdk/fireworks": "0.1.17",
"@ai-sdk/google": "1.1.26",
"@ai-sdk/google-vertex": "2.1.30",
"@ai-sdk/groq": "1.1.15",
"@ai-sdk/luma": "0.0.12",
"@ai-sdk/mistral": "1.1.18",
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/openai-compatible": "0.1.16",
"@ai-sdk/perplexity": "1.0.8",
"@ai-sdk/amazon-bedrock": "2.1.6",
"@ai-sdk/anthropic": "1.1.19",
"@ai-sdk/azure": "1.2.7",
"@ai-sdk/cerebras": "0.1.17",
"@ai-sdk/cohere": "1.1.18",
"@ai-sdk/deepinfra": "0.1.18",
"@ai-sdk/deepseek": "0.1.17",
"@ai-sdk/fal": "0.0.11",
"@ai-sdk/fireworks": "0.1.18",
"@ai-sdk/google": "1.1.27",
"@ai-sdk/google-vertex": "2.1.31",
"@ai-sdk/groq": "1.1.16",
"@ai-sdk/luma": "0.0.13",
"@ai-sdk/mistral": "1.1.19",
"@ai-sdk/openai": "1.2.7",
"@ai-sdk/openai-compatible": "0.1.17",
"@ai-sdk/perplexity": "1.0.9",
"@ai-sdk/provider": "1.0.12",
"@ai-sdk/replicate": "0.1.15",
"@ai-sdk/togetherai": "0.1.17",
"@ai-sdk/xai": "1.1.16",
"@ai-sdk/valibot": "0.0.30",
"@ai-sdk/replicate": "0.1.16",
"@ai-sdk/togetherai": "0.1.18",
"@ai-sdk/xai": "1.1.17",
"@ai-sdk/valibot": "0.0.31",
"@google/generative-ai": "0.21.0",
"@opentelemetry/auto-instrumentations-node": "0.54.0",
"@opentelemetry/sdk-node": "0.54.2",
"@opentelemetry/sdk-trace-node": "1.28.0",
"ai": "4.1.63",
"ai": "4.1.64",
"dotenv": "16.4.5",
"image-type": "^5.2.0",
"mathjs": "14.0.0",
26 changes: 26 additions & 0 deletions examples/ai-core/src/generate-text/groq-reasoning.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { groq } from '@ai-sdk/groq';
import { generateText } from 'ai';
import 'dotenv/config';

async function main() {
const result = await generateText({
model: groq('qwen-qwq-32b'),
providerOptions: {
groq: { reasoningFormat: 'parsed' },
},
prompt: 'How many "r"s are in the word "strawberry"?',
});

console.log('Reasoning:');
console.log(result.reasoning);
console.log();

console.log('Text:');
console.log(result.text);
console.log();

console.log('Token usage:', result.usage);
console.log('Finish reason:', result.finishReason);
}

main().catch(console.error);
10 changes: 5 additions & 5 deletions examples/ai-core/src/stream-text/groq-reasoning-fullstream.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { groq } from '@ai-sdk/groq';
import { extractReasoningMiddleware, streamText, wrapLanguageModel } from 'ai';
import { streamText } from 'ai';
import 'dotenv/config';

async function main() {
const result = streamText({
model: wrapLanguageModel({
model: groq('deepseek-r1-distill-llama-70b'),
middleware: extractReasoningMiddleware({ tagName: 'think' }),
}),
model: groq('deepseek-r1-distill-llama-70b'),
providerOptions: {
groq: { reasoningFormat: 'parsed' },
},
prompt: 'How many "r"s are in the word "strawberry"?',
});

4 changes: 2 additions & 2 deletions examples/express/package.json
Original file line number Diff line number Diff line change
@@ -7,8 +7,8 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"ai": "4.1.63",
"@ai-sdk/openai": "1.2.7",
"ai": "4.1.64",
"dotenv": "16.4.5",
"express": "5.0.1"
},
4 changes: 2 additions & 2 deletions examples/fastify/package.json
Original file line number Diff line number Diff line change
@@ -3,8 +3,8 @@
"version": "0.0.0",
"private": true,
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"ai": "4.1.63",
"@ai-sdk/openai": "1.2.7",
"ai": "4.1.64",
"dotenv": "16.4.5",
"fastify": "5.1.0"
},
4 changes: 2 additions & 2 deletions examples/hono/package.json
Original file line number Diff line number Diff line change
@@ -3,9 +3,9 @@
"version": "0.0.0",
"private": true,
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/openai": "1.2.7",
"@hono/node-server": "1.13.7",
"ai": "4.1.63",
"ai": "4.1.64",
"dotenv": "16.4.5",
"hono": "4.6.9"
},
4 changes: 2 additions & 2 deletions examples/mcp/package.json
Original file line number Diff line number Diff line change
@@ -12,9 +12,9 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/openai": "1.2.7",
"@modelcontextprotocol/sdk": "^1.7.0",
"ai": "4.1.63",
"ai": "4.1.64",
"dotenv": "16.4.5",
"express": "5.0.1",
"zod": "3.23.8"
4 changes: 2 additions & 2 deletions examples/nest/package.json
Original file line number Diff line number Diff line change
@@ -15,11 +15,11 @@
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
},
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/openai": "1.2.7",
"@nestjs/common": "^10.4.15",
"@nestjs/core": "^10.0.0",
"@nestjs/platform-express": "^10.4.9",
"ai": "4.1.63",
"ai": "4.1.64",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1"
},
6 changes: 3 additions & 3 deletions examples/next-fastapi/package.json
Original file line number Diff line number Diff line change
@@ -11,9 +11,9 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/ui-utils": "1.1.20",
"@ai-sdk/react": "1.1.24",
"ai": "4.1.63",
"@ai-sdk/ui-utils": "1.1.21",
"@ai-sdk/react": "1.1.25",
"ai": "4.1.64",
"geist": "^1.3.1",
"next": "latest",
"react": "^18",
4 changes: 2 additions & 2 deletions examples/next-google-vertex/package.json
Original file line number Diff line number Diff line change
@@ -9,8 +9,8 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/google-vertex": "2.1.30",
"ai": "4.1.63",
"@ai-sdk/google-vertex": "2.1.31",
"ai": "4.1.64",
"geist": "^1.3.1",
"next": "latest",
"react": "^18",
4 changes: 2 additions & 2 deletions examples/next-langchain/package.json
Original file line number Diff line number Diff line change
@@ -9,10 +9,10 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/react": "1.1.24",
"@ai-sdk/react": "1.1.25",
"@langchain/openai": "0.0.28",
"@langchain/core": "0.1.63",
"ai": "4.1.63",
"ai": "4.1.64",
"langchain": "0.1.36",
"next": "latest",
"react": "^18",
6 changes: 3 additions & 3 deletions examples/next-openai-kasada-bot-protection/package.json
Original file line number Diff line number Diff line change
@@ -9,10 +9,10 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/react": "1.1.24",
"@ai-sdk/openai": "1.2.7",
"@ai-sdk/react": "1.1.25",
"@vercel/functions": "latest",
"ai": "4.1.63",
"ai": "4.1.64",
"next": "latest",
"react": "^18",
"react-dom": "^18",
6 changes: 3 additions & 3 deletions examples/next-openai-pages/package.json
Original file line number Diff line number Diff line change
@@ -9,9 +9,9 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/react": "1.1.24",
"ai": "4.1.63",
"@ai-sdk/openai": "1.2.7",
"@ai-sdk/react": "1.1.25",
"ai": "4.1.64",
"next": "latest",
"openai": "4.52.6",
"react": "^18",
6 changes: 3 additions & 3 deletions examples/next-openai-telemetry-sentry/package.json
Original file line number Diff line number Diff line change
@@ -9,15 +9,15 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/react": "1.1.24",
"@ai-sdk/openai": "1.2.7",
"@ai-sdk/react": "1.1.25",
"@opentelemetry/api-logs": "0.55.0",
"@opentelemetry/instrumentation": "0.52.1",
"@opentelemetry/sdk-logs": "0.55.0",
"@sentry/nextjs": "^8.42.0",
"@sentry/opentelemetry": "8.22.0",
"@vercel/otel": "1.10.0",
"ai": "4.1.63",
"ai": "4.1.64",
"next": "latest",
"openai": "4.52.6",
"react": "^18",
6 changes: 3 additions & 3 deletions examples/next-openai-telemetry/package.json
Original file line number Diff line number Diff line change
@@ -9,13 +9,13 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/react": "1.1.24",
"@ai-sdk/openai": "1.2.7",
"@ai-sdk/react": "1.1.25",
"@opentelemetry/api-logs": "0.55.0",
"@opentelemetry/sdk-logs": "0.55.0",
"@opentelemetry/instrumentation": "0.52.1",
"@vercel/otel": "1.10.0",
"ai": "4.1.63",
"ai": "4.1.64",
"next": "latest",
"openai": "4.52.6",
"react": "^18",
6 changes: 3 additions & 3 deletions examples/next-openai-upstash-rate-limits/package.json
Original file line number Diff line number Diff line change
@@ -9,11 +9,11 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/react": "1.1.24",
"@ai-sdk/openai": "1.2.7",
"@ai-sdk/react": "1.1.25",
"@upstash/ratelimit": "^0.4.3",
"@vercel/kv": "^0.2.2",
"ai": "4.1.63",
"ai": "4.1.64",
"next": "latest",
"react": "^18",
"react-dom": "^18",
20 changes: 10 additions & 10 deletions examples/next-openai/package.json
Original file line number Diff line number Diff line change
@@ -9,17 +9,17 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/anthropic": "1.1.18",
"@ai-sdk/deepseek": "0.1.16",
"@ai-sdk/fireworks": "0.1.17",
"@ai-sdk/openai": "1.2.6",
"@ai-sdk/google": "1.1.26",
"@ai-sdk/google-vertex": "2.1.30",
"@ai-sdk/perplexity": "1.0.8",
"@ai-sdk/ui-utils": "1.1.20",
"@ai-sdk/react": "1.1.24",
"@ai-sdk/anthropic": "1.1.19",
"@ai-sdk/deepseek": "0.1.17",
"@ai-sdk/fireworks": "0.1.18",
"@ai-sdk/openai": "1.2.7",
"@ai-sdk/google": "1.1.27",
"@ai-sdk/google-vertex": "2.1.31",
"@ai-sdk/perplexity": "1.0.9",
"@ai-sdk/ui-utils": "1.1.21",
"@ai-sdk/react": "1.1.25",
"@vercel/blob": "^0.26.0",
"ai": "4.1.63",
"ai": "4.1.64",
"next": "latest",
"openai": "4.52.6",
"react": "^18",
Loading