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.60
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.61
Choose a head ref
  • 2 commits
  • 89 files changed
  • 2 contributors

Commits on Mar 13, 2025

  1. feat (provider/openai): pdf input support (#5194)

    lgrammel authored Mar 13, 2025

    Verified

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

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Mar 13, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    2cb40fc View commit details
Showing with 847 additions and 317 deletions.
  1. +3 −2 content/docs/02-foundations/03-prompts.mdx
  2. +23 −23 examples/ai-core/package.json
  3. +32 −0 examples/ai-core/src/generate-text/openai-responses-pdf-url.ts
  4. +31 −0 examples/ai-core/src/generate-text/openai-responses-pdf.ts
  5. +2 −2 examples/express/package.json
  6. +2 −2 examples/fastify/package.json
  7. +2 −2 examples/hono/package.json
  8. +2 −2 examples/mcp/package.json
  9. +2 −2 examples/nest/package.json
  10. +3 −3 examples/next-fastapi/package.json
  11. +2 −2 examples/next-google-vertex/package.json
  12. +2 −2 examples/next-langchain/package.json
  13. +3 −3 examples/next-openai-kasada-bot-protection/package.json
  14. +3 −3 examples/next-openai-pages/package.json
  15. +3 −3 examples/next-openai-telemetry-sentry/package.json
  16. +3 −3 examples/next-openai-telemetry/package.json
  17. +3 −3 examples/next-openai-upstash-rate-limits/package.json
  18. +9 −9 examples/next-openai/package.json
  19. +2 −2 examples/node-http-server/package.json
  20. +3 −3 examples/nuxt-openai/package.json
  21. +4 −4 examples/solidstart-openai/package.json
  22. +3 −3 examples/sveltekit-openai/package.json
  23. +11 −0 packages/ai/CHANGELOG.md
  24. +6 −0 packages/ai/core/prompt/content-part.ts
  25. +81 −0 packages/ai/core/prompt/convert-to-language-model-prompt.test.ts
  26. +1 −0 packages/ai/core/prompt/convert-to-language-model-prompt.ts
  27. +5 −5 packages/ai/package.json
  28. +7 −0 packages/ai/tests/e2e/next-server/CHANGELOG.md
  29. +8 −0 packages/amazon-bedrock/CHANGELOG.md
  30. +3 −3 packages/amazon-bedrock/package.json
  31. +8 −0 packages/anthropic/CHANGELOG.md
  32. +3 −3 packages/anthropic/package.json
  33. +9 −0 packages/azure/CHANGELOG.md
  34. +4 −4 packages/azure/package.json
  35. +9 −0 packages/cerebras/CHANGELOG.md
  36. +4 −4 packages/cerebras/package.json
  37. +8 −0 packages/cohere/CHANGELOG.md
  38. +3 −3 packages/cohere/package.json
  39. +9 −0 packages/deepinfra/CHANGELOG.md
  40. +4 −4 packages/deepinfra/package.json
  41. +9 −0 packages/deepseek/CHANGELOG.md
  42. +4 −4 packages/deepseek/package.json
  43. +8 −0 packages/fal/CHANGELOG.md
  44. +3 −3 packages/fal/package.json
  45. +9 −0 packages/fireworks/CHANGELOG.md
  46. +4 −4 packages/fireworks/package.json
  47. +10 −0 packages/google-vertex/CHANGELOG.md
  48. +5 −5 packages/google-vertex/package.json
  49. +8 −0 packages/google/CHANGELOG.md
  50. +3 −3 packages/google/package.json
  51. +8 −0 packages/groq/CHANGELOG.md
  52. +3 −3 packages/groq/package.json
  53. +8 −0 packages/luma/CHANGELOG.md
  54. +3 −3 packages/luma/package.json
  55. +8 −0 packages/mistral/CHANGELOG.md
  56. +3 −3 packages/mistral/package.json
  57. +8 −0 packages/openai-compatible/CHANGELOG.md
  58. +3 −3 packages/openai-compatible/package.json
  59. +9 −0 packages/openai/CHANGELOG.md
  60. +3 −3 packages/openai/package.json
  61. +109 −0 packages/openai/src/responses/convert-to-openai-responses-messages.test.ts
  62. +23 −4 packages/openai/src/responses/convert-to-openai-responses-messages.ts
  63. +1 −0 packages/openai/src/responses/openai-responses-api-types.ts
  64. +8 −0 packages/perplexity/CHANGELOG.md
  65. +3 −3 packages/perplexity/package.json
  66. +7 −0 packages/provider-utils/CHANGELOG.md
  67. +2 −2 packages/provider-utils/package.json
  68. +6 −0 packages/provider/CHANGELOG.md
  69. +1 −1 packages/provider/package.json
  70. +5 −0 packages/provider/src/language-model/v1/language-model-v1-prompt.ts
  71. +7 −0 packages/react/CHANGELOG.md
  72. +3 −3 packages/react/package.json
  73. +8 −0 packages/replicate/CHANGELOG.md
  74. +3 −3 packages/replicate/package.json
  75. +7 −0 packages/solid/CHANGELOG.md
  76. +3 −3 packages/solid/package.json
  77. +7 −0 packages/svelte/CHANGELOG.md
  78. +3 −3 packages/svelte/package.json
  79. +9 −0 packages/togetherai/CHANGELOG.md
  80. +4 −4 packages/togetherai/package.json
  81. +8 −0 packages/ui-utils/CHANGELOG.md
  82. +3 −3 packages/ui-utils/package.json
  83. +7 −0 packages/valibot/CHANGELOG.md
  84. +2 −2 packages/valibot/package.json
  85. +7 −0 packages/vue/CHANGELOG.md
  86. +3 −3 packages/vue/package.json
  87. +9 −0 packages/xai/CHANGELOG.md
  88. +4 −4 packages/xai/package.json
  89. +141 −141 pnpm-lock.yaml
5 changes: 3 additions & 2 deletions content/docs/02-foundations/03-prompts.mdx
Original file line number Diff line number Diff line change
@@ -201,8 +201,8 @@ const result = await generateText({
Generative AI](/providers/ai-sdk-providers/google-generative-ai), [Google
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)
(for `pdf`).
`gpt-4o-audio-preview`), [Anthropic](/providers/ai-sdk-providers/anthropic),
[OpenAI responses](/providers/ai-sdk-providers/openai) (for `pdf`).
</Note>

User messages can include file parts. A file can be one of the following:
@@ -237,6 +237,7 @@ const result = await generateText({
type: 'file',
mimeType: 'application/pdf',
data: fs.readFileSync('./data/example.pdf'),
filename: 'example.pdf', // optional, not used by all providers
},
],
},
46 changes: 23 additions & 23 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.2",
"@ai-sdk/anthropic": "1.1.16",
"@ai-sdk/azure": "1.2.4",
"@ai-sdk/cerebras": "0.1.14",
"@ai-sdk/cohere": "1.1.14",
"@ai-sdk/deepinfra": "0.1.15",
"@ai-sdk/deepseek": "0.1.14",
"@ai-sdk/fal": "0.0.8",
"@ai-sdk/fireworks": "0.1.15",
"@ai-sdk/google": "1.1.24",
"@ai-sdk/google-vertex": "2.1.28",
"@ai-sdk/groq": "1.1.13",
"@ai-sdk/luma": "0.0.10",
"@ai-sdk/mistral": "1.1.16",
"@ai-sdk/openai": "1.2.4",
"@ai-sdk/openai-compatible": "0.1.14",
"@ai-sdk/perplexity": "1.0.5",
"@ai-sdk/provider": "1.0.10",
"@ai-sdk/replicate": "0.1.13",
"@ai-sdk/togetherai": "0.1.15",
"@ai-sdk/xai": "1.1.14",
"@ai-sdk/valibot": "0.0.27",
"@ai-sdk/amazon-bedrock": "2.1.3",
"@ai-sdk/anthropic": "1.1.17",
"@ai-sdk/azure": "1.2.5",
"@ai-sdk/cerebras": "0.1.15",
"@ai-sdk/cohere": "1.1.15",
"@ai-sdk/deepinfra": "0.1.16",
"@ai-sdk/deepseek": "0.1.15",
"@ai-sdk/fal": "0.0.9",
"@ai-sdk/fireworks": "0.1.16",
"@ai-sdk/google": "1.1.25",
"@ai-sdk/google-vertex": "2.1.29",
"@ai-sdk/groq": "1.1.14",
"@ai-sdk/luma": "0.0.11",
"@ai-sdk/mistral": "1.1.17",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/openai-compatible": "0.1.15",
"@ai-sdk/perplexity": "1.0.6",
"@ai-sdk/provider": "1.0.11",
"@ai-sdk/replicate": "0.1.14",
"@ai-sdk/togetherai": "0.1.16",
"@ai-sdk/xai": "1.1.15",
"@ai-sdk/valibot": "0.0.28",
"@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.60",
"ai": "4.1.61",
"dotenv": "16.4.5",
"image-type": "^5.2.0",
"mathjs": "14.0.0",
32 changes: 32 additions & 0 deletions examples/ai-core/src/generate-text/openai-responses-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.responses('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-responses-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.responses('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);
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.4",
"ai": "4.1.60",
"@ai-sdk/openai": "1.2.5",
"ai": "4.1.61",
"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.4",
"ai": "4.1.60",
"@ai-sdk/openai": "1.2.5",
"ai": "4.1.61",
"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.4",
"@ai-sdk/openai": "1.2.5",
"@hono/node-server": "1.13.7",
"ai": "4.1.60",
"ai": "4.1.61",
"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
@@ -10,9 +10,9 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
"@ai-sdk/openai": "1.2.4",
"@ai-sdk/openai": "1.2.5",
"@modelcontextprotocol/sdk": "^1.7.0",
"ai": "4.1.60",
"ai": "4.1.61",
"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.4",
"@ai-sdk/openai": "1.2.5",
"@nestjs/common": "^10.4.15",
"@nestjs/core": "^10.0.0",
"@nestjs/platform-express": "^10.4.9",
"ai": "4.1.60",
"ai": "4.1.61",
"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.18",
"@ai-sdk/react": "1.1.22",
"ai": "4.1.60",
"@ai-sdk/ui-utils": "1.1.19",
"@ai-sdk/react": "1.1.23",
"ai": "4.1.61",
"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.28",
"ai": "4.1.60",
"@ai-sdk/google-vertex": "2.1.29",
"ai": "4.1.61",
"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.22",
"@ai-sdk/react": "1.1.23",
"@langchain/openai": "0.0.28",
"@langchain/core": "0.1.63",
"ai": "4.1.60",
"ai": "4.1.61",
"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.4",
"@ai-sdk/react": "1.1.22",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/react": "1.1.23",
"@vercel/functions": "latest",
"ai": "4.1.60",
"ai": "4.1.61",
"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.4",
"@ai-sdk/react": "1.1.22",
"ai": "4.1.60",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/react": "1.1.23",
"ai": "4.1.61",
"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.4",
"@ai-sdk/react": "1.1.22",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/react": "1.1.23",
"@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.60",
"ai": "4.1.61",
"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.4",
"@ai-sdk/react": "1.1.22",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/react": "1.1.23",
"@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.60",
"ai": "4.1.61",
"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.4",
"@ai-sdk/react": "1.1.22",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/react": "1.1.23",
"@upstash/ratelimit": "^0.4.3",
"@vercel/kv": "^0.2.2",
"ai": "4.1.60",
"ai": "4.1.61",
"next": "latest",
"react": "^18",
"react-dom": "^18",
18 changes: 9 additions & 9 deletions examples/next-openai/package.json
Original file line number Diff line number Diff line change
@@ -9,16 +9,16 @@
"lint": "next lint"
},
"dependencies": {
"@ai-sdk/anthropic": "1.1.16",
"@ai-sdk/deepseek": "0.1.14",
"@ai-sdk/fireworks": "0.1.15",
"@ai-sdk/openai": "1.2.4",
"@ai-sdk/google-vertex": "2.1.28",
"@ai-sdk/perplexity": "1.0.5",
"@ai-sdk/ui-utils": "1.1.18",
"@ai-sdk/react": "1.1.22",
"@ai-sdk/anthropic": "1.1.17",
"@ai-sdk/deepseek": "0.1.15",
"@ai-sdk/fireworks": "0.1.16",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/google-vertex": "2.1.29",
"@ai-sdk/perplexity": "1.0.6",
"@ai-sdk/ui-utils": "1.1.19",
"@ai-sdk/react": "1.1.23",
"@vercel/blob": "^0.26.0",
"ai": "4.1.60",
"ai": "4.1.61",
"next": "latest",
"openai": "4.52.6",
"react": "^18",
4 changes: 2 additions & 2 deletions examples/node-http-server/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.4",
"ai": "4.1.60",
"@ai-sdk/openai": "1.2.5",
"ai": "4.1.61",
"dotenv": "16.4.5",
"zod": "3.23.8",
"zod-to-json-schema": "3.23.5"
6 changes: 3 additions & 3 deletions examples/nuxt-openai/package.json
Original file line number Diff line number Diff line change
@@ -9,9 +9,9 @@
"postinstall": "nuxt prepare"
},
"dependencies": {
"@ai-sdk/vue": "1.1.21",
"@ai-sdk/openai": "1.2.4",
"ai": "4.1.60",
"@ai-sdk/vue": "1.1.22",
"@ai-sdk/openai": "1.2.5",
"ai": "4.1.61",
"zod": "3.23.8"
},
"devDependencies": {
8 changes: 4 additions & 4 deletions examples/solidstart-openai/package.json
Original file line number Diff line number Diff line change
@@ -14,13 +14,13 @@
"vinxi": "^0.4.3"
},
"dependencies": {
"@ai-sdk/openai": "1.2.4",
"@ai-sdk/solid": "1.1.22",
"@ai-sdk/ui-utils": "1.1.18",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/solid": "1.1.23",
"@ai-sdk/ui-utils": "1.1.19",
"@solidjs/meta": "0.29.4",
"@solidjs/router": "^0.15.1",
"@solidjs/start": "^1.0.10",
"ai": "4.1.60",
"ai": "4.1.61",
"solid-js": "^1.9.3",
"zod": "^3.23.8"
},
6 changes: 3 additions & 3 deletions examples/sveltekit-openai/package.json
Original file line number Diff line number Diff line change
@@ -10,9 +10,9 @@
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
},
"dependencies": {
"@ai-sdk/openai": "1.2.4",
"@ai-sdk/svelte": "1.1.23",
"ai": "4.1.60",
"@ai-sdk/openai": "1.2.5",
"@ai-sdk/svelte": "1.1.24",
"ai": "4.1.61",
"openai": "4.52.6",
"zod": "^3.23.8"
},
Loading