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-sdk/openai@1.2.7
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-sdk/openai@1.2.8
Choose a head ref
  • 11 commits
  • 76 files changed
  • 6 contributors

Commits on Mar 20, 2025

  1. fix (ai): expose ai/mcp-stdio (#5288)

    Co-authored-by: Kit Burgess <33626692+KitBurgess@users.noreply.github.com>
    lgrammel and KitBurgess authored Mar 20, 2025
    Copy the full SHA
    16c444f View commit details
  2. Version Packages (#5289)

    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
    82c0c5c View commit details
  3. chore: remove Node 18 testing (#5292)

    lgrammel authored Mar 20, 2025
    1
    Copy the full SHA
    16f5ecc View commit details
  4. chore (dependencies): set @types/node to 20.17.24 (#5291)

    lgrammel authored Mar 20, 2025
    Copy the full SHA
    def2953 View commit details
  5. chore (ai): improve cosine similarity calculation (#5293)

    Co-authored-by: asishupadhyay <akulabs8@gmail.com>
    lgrammel and asishupadhyay authored Mar 20, 2025
    Copy the full SHA
    5d0fc29 View commit details
  6. Version Packages (#5294)

    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
    5bf0510 View commit details
  7. feat (providers/xai): add xai image model support (#5295)

    shaper authored Mar 20, 2025
    Copy the full SHA
    6f0e741 View commit details
  8. Version Packages (#5297)

    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
    7e3c80b View commit details

Commits on Mar 21, 2025

  1. chore: clarify provider-v1 ts-doc (#5299)

    shaper authored Mar 21, 2025
    Copy the full SHA
    0d954f3 View commit details
  2. feat (provider/openai): pdf support for chat language models (#5303)

    Co-authored-by: Salmank81099 <salmanyasinkhan81099@gmail.com>
    lgrammel and SalmanK81099 authored Mar 21, 2025
    Copy the full SHA
    9f4f1bc View commit details
  3. Version Packages (#5304)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Mar 21, 2025
    Copy the full SHA
    e1f970a View commit details
Showing with 1,376 additions and 774 deletions.
  1. +1 −1 .github/workflows/ci.yml
  2. +1 −1 content/docs/02-foundations/03-prompts.mdx
  3. +1 −0 content/docs/03-ai-sdk-core/35-image-generation.mdx
  4. +42 −0 content/providers/01-ai-sdk-providers/01-xai.mdx
  5. +33 −0 content/providers/01-ai-sdk-providers/02-openai.mdx
  6. +6 −6 examples/ai-core/package.json
  7. +16 −0 examples/ai-core/src/generate-image/xai-many.ts
  8. +15 −0 examples/ai-core/src/generate-image/xai.ts
  9. +32 −0 examples/ai-core/src/generate-text/openai-pdf-url.ts
  10. +31 −0 examples/ai-core/src/generate-text/openai-pdf.ts
  11. +3 −3 examples/express/package.json
  12. +3 −3 examples/fastify/package.json
  13. +3 −3 examples/hono/package.json
  14. +3 −3 examples/mcp/package.json
  15. +3 −3 examples/nest/package.json
  16. +2 −2 examples/next-fastapi/package.json
  17. +2 −2 examples/next-google-vertex/package.json
  18. +2 −2 examples/next-langchain/package.json
  19. +3 −3 examples/next-openai-kasada-bot-protection/package.json
  20. +3 −3 examples/next-openai-pages/package.json
  21. +3 −3 examples/next-openai-telemetry-sentry/package.json
  22. +3 −3 examples/next-openai-telemetry/package.json
  23. +3 −3 examples/next-openai-upstash-rate-limits/package.json
  24. +3 −3 examples/next-openai/package.json
  25. +3 −3 examples/node-http-server/package.json
  26. +3 −3 examples/nuxt-openai/package.json
  27. +2 −2 examples/solidstart-openai/package.json
  28. +2 −2 examples/sveltekit-openai/package.json
  29. +12 −0 packages/ai/CHANGELOG.md
  30. +37 −43 packages/ai/core/util/cosine-similarity.ts
  31. +4 −3 packages/ai/package.json
  32. +14 −0 packages/ai/tests/e2e/next-server/CHANGELOG.md
  33. +1 −1 packages/amazon-bedrock/package.json
  34. +1 −1 packages/anthropic/package.json
  35. +7 −0 packages/azure/CHANGELOG.md
  36. +3 −3 packages/azure/package.json
  37. +1 −1 packages/cerebras/package.json
  38. +58 −58 packages/codemod/package.json
  39. +1 −1 packages/cohere/package.json
  40. +1 −1 packages/deepinfra/package.json
  41. +1 −1 packages/deepseek/package.json
  42. +1 −1 packages/fal/package.json
  43. +1 −1 packages/fireworks/package.json
  44. +1 −1 packages/google-vertex/package.json
  45. +1 −1 packages/google/package.json
  46. +1 −1 packages/groq/package.json
  47. +1 −1 packages/luma/package.json
  48. +1 −1 packages/mistral/package.json
  49. +1 −1 packages/openai-compatible/package.json
  50. +6 −0 packages/openai/CHANGELOG.md
  51. +2 −2 packages/openai/package.json
  52. +117 −0 packages/openai/src/convert-to-openai-chat-messages.test.ts
  53. +10 −2 packages/openai/src/convert-to-openai-chat-messages.ts
  54. +7 −1 packages/openai/src/openai-chat-prompt.ts
  55. +1 −1 packages/perplexity/package.json
  56. +1 −1 packages/provider-utils/package.json
  57. +1 −1 packages/provider/package.json
  58. +1 −1 packages/provider/src/provider/v1/provider-v1.ts
  59. +1 −1 packages/react/package.json
  60. +1 −1 packages/replicate/package.json
  61. +1 −1 packages/solid/package.json
  62. +1 −1 packages/togetherai/package.json
  63. +1 −1 packages/ui-utils/package.json
  64. +14 −0 packages/valibot/CHANGELOG.md
  65. +3 −3 packages/valibot/package.json
  66. +1 −1 packages/vue/package.json
  67. +6 −0 packages/xai/CHANGELOG.md
  68. +2 −2 packages/xai/package.json
  69. +2 −5 packages/xai/src/index.ts
  70. +9 −0 packages/xai/src/xai-error.ts
  71. +276 −0 packages/xai/src/xai-image-model.test.ts
  72. +111 −0 packages/xai/src/xai-image-model.ts
  73. +8 −0 packages/xai/src/xai-image-settings.ts
  74. +58 −1 packages/xai/src/xai-provider.test.ts
  75. +36 −11 packages/xai/src/xai-provider.ts
  76. +323 −559 pnpm-lock.yaml
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ jobs:
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
node-version: [20.x, 22.x]
steps:
- name: Checkout
uses: actions/checkout@v3
2 changes: 1 addition & 1 deletion content/docs/02-foundations/03-prompts.mdx
Original file line number Diff line number Diff line change
@@ -202,7 +202,7 @@ const result = await generateText({
Vertex AI](/providers/ai-sdk-providers/google-vertex),
[OpenAI](/providers/ai-sdk-providers/openai) (for `wav` and `mp3` audio with
`gpt-4o-audio-preview`), [Anthropic](/providers/ai-sdk-providers/anthropic),
[OpenAI responses](/providers/ai-sdk-providers/openai) (for `pdf`).
[OpenAI](/providers/ai-sdk-providers/openai) (for `pdf`).
</Note>

User messages can include file parts. A file can be one of the following:
1 change: 1 addition & 0 deletions content/docs/03-ai-sdk-core/35-image-generation.mdx
Original file line number Diff line number Diff line change
@@ -238,6 +238,7 @@ for (const file of result.files) {

| Provider | Model | Support sizes (`width x height`) or aspect ratios (`width : height`) |
| ------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [xAI Grok](/providers/ai-sdk-providers/xai#image-models) | `grok-2-image` | 1024x768 (default) |
| [OpenAI](/providers/ai-sdk-providers/openai#image-models) | `dall-e-3` | 1024x1024, 1792x1024, 1024x1792 |
| [OpenAI](/providers/ai-sdk-providers/openai#image-models) | `dall-e-2` | 256x256, 512x512, 1024x1024 |
| [Amazon Bedrock](/providers/ai-sdk-providers/amazon-bedrock#image-models) | `amazon.nova-canvas-v1:0` | 320-4096 (multiples of 16), 1:4 to 4:1, max 4.2M pixels |
42 changes: 42 additions & 0 deletions content/providers/01-ai-sdk-providers/01-xai.mdx
Original file line number Diff line number Diff line change
@@ -126,3 +126,45 @@ The following optional settings are available for xAI chat models:
table above lists popular models. You can also pass any available provider
model ID as a string if needed.
</Note>

## Image Models

You can create xAI image models using the `.imageModel()` factory method. For more on image generation with the AI SDK see [generateImage()](/docs/reference/ai-sdk-core/generate-image).

```ts
import { xai } from '@ai-sdk/xai';
import { experimental_generateImage as generateImage } from 'ai';

const { image } = await generateImage({
model: xai.image('grok-2-image'),
prompt: 'A futuristic cityscape at sunset',
});
```

<Note>
The xAI image model does not currently support the `aspectRatio` or `size`
parameters. Image size defaults to 1024x768.
</Note>

### Model-specific options

You can customize the image generation behavior with model-specific settings:

```ts
import { xai } from '@ai-sdk/xai';
import { experimental_generateImage as generateImage } from 'ai';

const { image } = await generateImage({
model: xai.image('grok-2-image', {
maxImagesPerCall: 5, // Default is 10
}),
prompt: 'A futuristic cityscape at sunset',
n: 2, // Generate 2 images
});
```

### Model Capabilities

| Model | Sizes | Notes |
| -------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `grok-2-image` | 1024x768 (default) | xAI's text-to-image generation model, designed to create high-quality images from text prompts. It's trained on a diverse dataset and can generate images across various styles, subjects, and settings. |
33 changes: 33 additions & 0 deletions content/providers/01-ai-sdk-providers/02-openai.mdx
Original file line number Diff line number Diff line change
@@ -317,6 +317,39 @@ You need to change Zod `.nullish()` and `.optional()` to `.nullable()`.

</Note>

#### PDF support

The OpenAI Chat API supports reading PDF files.
You can pass PDF files as part of the message content using the `file` type:

```ts
const result = await generateText({
model: openai('gpt-4o'),
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: 'What is an embedding model?',
},
{
type: 'file',
data: fs.readFileSync('./data/ai.pdf'),
mimeType: 'application/pdf',
filename: 'ai.pdf', // optional
},
],
},
],
});
```

The model will have access to the contents of the PDF file and
respond to questions about it.
The PDF file should be passed using the `data` field,
and the `mimeType` should be set to `'application/pdf'`.

#### Predicted Outputs

OpenAI supports [predicted outputs](https://platform.openai.com/docs/guides/latency-optimization#use-predicted-outputs) for `gpt-4o` and `gpt-4o-mini`.
12 changes: 6 additions & 6 deletions examples/ai-core/package.json
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
"dependencies": {
"@ai-sdk/amazon-bedrock": "2.1.6",
"@ai-sdk/anthropic": "1.1.19",
"@ai-sdk/azure": "1.2.7",
"@ai-sdk/azure": "1.2.8",
"@ai-sdk/cerebras": "0.1.17",
"@ai-sdk/cohere": "1.1.18",
"@ai-sdk/deepinfra": "0.1.18",
@@ -17,19 +17,19 @@
"@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": "1.2.8",
"@ai-sdk/openai-compatible": "0.1.17",
"@ai-sdk/perplexity": "1.0.9",
"@ai-sdk/provider": "1.0.12",
"@ai-sdk/replicate": "0.1.16",
"@ai-sdk/togetherai": "0.1.18",
"@ai-sdk/xai": "1.1.17",
"@ai-sdk/valibot": "0.0.31",
"@ai-sdk/xai": "1.1.18",
"@ai-sdk/valibot": "0.0.33",
"@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.64",
"ai": "4.1.66",
"dotenv": "16.4.5",
"image-type": "^5.2.0",
"mathjs": "14.0.0",
@@ -45,7 +45,7 @@
"type-check": "tsc --noEmit"
},
"devDependencies": {
"@types/node": "20.11.20",
"@types/node": "20.17.24",
"tsx": "4.19.2",
"typescript": "5.6.3"
}
16 changes: 16 additions & 0 deletions examples/ai-core/src/generate-image/xai-many.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { xai } from '@ai-sdk/xai';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';

async function main() {
const { images } = await generateImage({
model: xai.image('grok-2-image'),
n: 3,
prompt: 'A chicken flying into the sunset in the style of anime.',
});

await presentImages(images);
}

main().catch(console.error);
15 changes: 15 additions & 0 deletions examples/ai-core/src/generate-image/xai.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { xai } from '@ai-sdk/xai';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';

async function main() {
const { image } = await generateImage({
model: xai.image('grok-2-image'),
prompt: 'A salamander at dusk in a forest pond surrounded by fireflies.',
});

await presentImages([image]);
}

main().catch(console.error);
32 changes: 32 additions & 0 deletions examples/ai-core/src/generate-text/openai-pdf-url.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';
import 'dotenv/config';

async function main() {
const result = await generateText({
model: openai('gpt-4o'),
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: 'What is an embedding model according to this document?',
},
{
type: 'file',
data: new URL(
'https://github.com/vercel/ai/blob/main/examples/ai-core/data/ai.pdf?raw=true',
),
mimeType: 'application/pdf',
filename: 'ai.pdf',
},
],
},
],
});

console.log(result.text);
}

main().catch(console.error);
31 changes: 31 additions & 0 deletions examples/ai-core/src/generate-text/openai-pdf.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';
import 'dotenv/config';
import fs from 'node:fs';

async function main() {
const result = await generateText({
model: openai('gpt-4o'),
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: 'What is an embedding model according to this document?',
},
{
type: 'file',
data: fs.readFileSync('./data/ai.pdf'),
mimeType: 'application/pdf',
// filename: 'ai.pdf',
},
],
},
],
});

console.log(result.text);
}

main().catch(console.error);
6 changes: 3 additions & 3 deletions examples/express/package.json
Original file line number Diff line number Diff line change
@@ -7,14 +7,14 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
"@ai-sdk/openai": "1.2.7",
"ai": "4.1.64",
"@ai-sdk/openai": "1.2.8",
"ai": "4.1.66",
"dotenv": "16.4.5",
"express": "5.0.1"
},
"devDependencies": {
"@types/express": "5.0.0",
"@types/node": "20.11.20",
"@types/node": "20.17.24",
"tsx": "4.19.2",
"typescript": "5.6.3"
}
6 changes: 3 additions & 3 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.7",
"ai": "4.1.64",
"@ai-sdk/openai": "1.2.8",
"ai": "4.1.66",
"dotenv": "16.4.5",
"fastify": "5.1.0"
},
@@ -13,7 +13,7 @@
"type-check": "tsc --noEmit"
},
"devDependencies": {
"@types/node": "20.11.20",
"@types/node": "20.17.24",
"tsx": "4.19.2",
"typescript": "5.6.3"
}
6 changes: 3 additions & 3 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.7",
"@ai-sdk/openai": "1.2.8",
"@hono/node-server": "1.13.7",
"ai": "4.1.64",
"ai": "4.1.66",
"dotenv": "16.4.5",
"hono": "4.6.9"
},
@@ -15,7 +15,7 @@
"type-check": "tsc --noEmit"
},
"devDependencies": {
"@types/node": "20.11.20",
"@types/node": "20.17.24",
"tsx": "4.19.2",
"typescript": "5.6.3"
}
6 changes: 3 additions & 3 deletions examples/mcp/package.json
Original file line number Diff line number Diff line change
@@ -12,16 +12,16 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
"@ai-sdk/openai": "1.2.7",
"@ai-sdk/openai": "1.2.8",
"@modelcontextprotocol/sdk": "^1.7.0",
"ai": "4.1.64",
"ai": "4.1.66",
"dotenv": "16.4.5",
"express": "5.0.1",
"zod": "3.23.8"
},
"devDependencies": {
"@types/express": "5.0.0",
"@types/node": "20.11.20",
"@types/node": "20.17.24",
"tsx": "4.19.2",
"typescript": "5.6.3"
}
6 changes: 3 additions & 3 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.7",
"@ai-sdk/openai": "1.2.8",
"@nestjs/common": "^10.4.15",
"@nestjs/core": "^10.0.0",
"@nestjs/platform-express": "^10.4.9",
"ai": "4.1.64",
"ai": "4.1.66",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1"
},
@@ -29,7 +29,7 @@
"@nestjs/testing": "^10.4.12",
"@types/express": "^5.0.0",
"@types/jest": "^29.5.14",
"@types/node": "^20.3.1",
"@types/node": "20.17.24",
"@types/supertest": "^6.0.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
4 changes: 2 additions & 2 deletions examples/next-fastapi/package.json
Original file line number Diff line number Diff line change
@@ -13,15 +13,15 @@
"dependencies": {
"@ai-sdk/ui-utils": "1.1.21",
"@ai-sdk/react": "1.1.25",
"ai": "4.1.64",
"ai": "4.1.66",
"geist": "^1.3.1",
"next": "latest",
"react": "^18",
"react-dom": "^18"
},
"devDependencies": {
"concurrently": "^9.1.0",
"@types/node": "^17.0.12",
"@types/node": "20.17.24",
"@types/react": "^18",
"@types/react-dom": "^18",
"autoprefixer": "^10.4.14",
4 changes: 2 additions & 2 deletions examples/next-google-vertex/package.json
Original file line number Diff line number Diff line change
@@ -10,14 +10,14 @@
},
"dependencies": {
"@ai-sdk/google-vertex": "2.1.31",
"ai": "4.1.64",
"ai": "4.1.66",
"geist": "^1.3.1",
"next": "latest",
"react": "^18",
"react-dom": "^18"
},
"devDependencies": {
"@types/node": "^17.0.12",
"@types/node": "20.17.24",
"@types/react": "^18",
"@types/react-dom": "^18",
"eslint-config-vercel-ai": "workspace:*",
Loading