From 849af1c6ff59a605c63b6108a2eec5597c2ed529 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 15 Jul 2025 03:09:10 -0400 Subject: [PATCH 1/2] feat(ai/v4): Record tool call errors on tool call spans in `generateText` and `streamText` (#7290) This is a backport of https://github.com/vercel/ai/pull/7033 Signed-off-by: Abhijeet Prasad --- .changeset/serious-ravens-stare.md | 5 ++ .../core/generate-text/generate-text.test.ts | 57 ++++++++++++++++ .../ai/core/generate-text/generate-text.ts | 3 +- .../generate-text/run-tools-transformation.ts | 3 +- .../ai/core/generate-text/stream-text.test.ts | 67 +++++++++++++++++++ packages/ai/core/telemetry/record-span.ts | 37 ++++++---- packages/ai/core/test/mock-tracer.ts | 29 ++++++-- 7 files changed, 182 insertions(+), 19 deletions(-) create mode 100644 .changeset/serious-ravens-stare.md diff --git a/.changeset/serious-ravens-stare.md b/.changeset/serious-ravens-stare.md new file mode 100644 index 000000000000..3dfd8b66f474 --- /dev/null +++ b/.changeset/serious-ravens-stare.md @@ -0,0 +1,5 @@ +--- +'ai': patch +--- + +feat(ai): Record tool call errors on tool call spans recorded in `generateText` and `streamText`. diff --git a/packages/ai/core/generate-text/generate-text.test.ts b/packages/ai/core/generate-text/generate-text.test.ts index 4343fec38c4c..7b97c7973cd7 100644 --- a/packages/ai/core/generate-text/generate-text.test.ts +++ b/packages/ai/core/generate-text/generate-text.test.ts @@ -1373,6 +1373,63 @@ describe('telemetry', () => { expect(tracer.jsonSpans).toMatchSnapshot(); }); + it('should record error on tool call', async () => { + await expect(async () => { + await generateText({ + model: new MockLanguageModelV1({ + doGenerate: async ({}) => ({ + ...dummyResponseValues, + toolCalls: [ + { + toolCallType: 'function', + toolCallId: 'call-1', + toolName: 'tool1', + args: `{ "value": "value" }`, + }, + ], + }), + }), + tools: { + tool1: { + parameters: z.object({ value: z.string() }), + execute: async () => { + throw new Error('test error'); + }, + }, + }, + prompt: 'test-input', + experimental_telemetry: { + isEnabled: true, + tracer, + }, + _internal: { + generateId: () => 'test-id', + currentDate: () => new Date(0), + }, + }); + }).rejects.toThrow(ToolExecutionError); + + expect(tracer.jsonSpans).toHaveLength(3); + + const toolCallSpan = tracer.jsonSpans[2]; + expect(toolCallSpan.events).toHaveLength(2); + expect(toolCallSpan.status).toEqual({ + code: 2, + message: 'Error executing tool tool1: test error', + }); + + // Find the exception event + const exceptionEvent = toolCallSpan.events.find( + event => event.name === 'exception', + ); + expect(exceptionEvent).toBeDefined(); + expect(exceptionEvent!.attributes).toMatchObject({ + 'exception.message': 'test error', + 'exception.name': 'Error', + 'exception.stack': expect.any(String), + }); + }); + it('should not record telemetry inputs / outputs when disabled', async () => { await generateText({ model: new MockLanguageModelV1({ diff --git a/packages/ai/core/generate-text/generate-text.ts b/packages/ai/core/generate-text/generate-text.ts index 8b662a849643..9c8bf6ced92e 100644 --- a/packages/ai/core/generate-text/generate-text.ts +++ b/packages/ai/core/generate-text/generate-text.ts @@ -16,7 +16,7 @@ import { stringifyForTelemetry } from '../prompt/stringify-for-telemetry'; import { assembleOperationName } from '../telemetry/assemble-operation-name'; import { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes'; import { getTracer } from '../telemetry/get-tracer'; -import { recordSpan } from '../telemetry/record-span'; +import { recordErrorOnSpan, recordSpan } from '../telemetry/record-span'; import { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes'; import { TelemetrySettings } from '../telemetry/telemetry-settings'; import { LanguageModel, ToolChoice } from '../types'; @@ -733,6 +733,7 @@ async function executeTools({ return result; } catch (error) { + recordErrorOnSpan(span, error); throw new ToolExecutionError({ toolCallId, toolName, diff --git a/packages/ai/core/generate-text/run-tools-transformation.ts b/packages/ai/core/generate-text/run-tools-transformation.ts index 61fb9472d2cc..7e0c482761e7 100644 --- a/packages/ai/core/generate-text/run-tools-transformation.ts +++ b/packages/ai/core/generate-text/run-tools-transformation.ts @@ -4,7 +4,7 @@ import { Tracer } from '@opentelemetry/api'; import { ToolExecutionError } from '../../errors'; import { CoreMessage } from '../prompt/message'; import { assembleOperationName } from '../telemetry/assemble-operation-name'; -import { recordSpan } from '../telemetry/record-span'; +import { recordErrorOnSpan, recordSpan } from '../telemetry/record-span'; import { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes'; import { TelemetrySettings } from '../telemetry/telemetry-settings'; import { @@ -274,6 +274,7 @@ export function runToolsTransformation({ } }, (error: any) => { + recordErrorOnSpan(span, error); toolResultsStreamController!.enqueue({ type: 'error', error: new ToolExecutionError({ diff --git a/packages/ai/core/generate-text/stream-text.test.ts b/packages/ai/core/generate-text/stream-text.test.ts index 14942890f4bb..fa9a99c52905 100644 --- a/packages/ai/core/generate-text/stream-text.test.ts +++ b/packages/ai/core/generate-text/stream-text.test.ts @@ -3127,6 +3127,73 @@ describe('streamText', () => { expect(tracer.jsonSpans).toMatchSnapshot(); }); + it('should record error on tool call', async () => { + const result = streamText({ + model: createTestModel({ + stream: convertArrayToReadableStream([ + { + type: 'response-metadata', + id: 'id-0', + modelId: 'mock-model-id', + timestamp: new Date(0), + }, + { + type: 'tool-call', + toolCallType: 'function', + toolCallId: 'call-1', + toolName: 'tool1', + args: `{ "value": "value" }`, + }, + { + type: 'finish', + finishReason: 'stop', + usage: { completionTokens: 10, promptTokens: 3 }, + }, + ]), + }), + tools: { + tool1: { + parameters: z.object({ value: z.string() }), + execute: async () => { + throw new Error('Tool execution failed'); + }, + }, + }, + prompt: 'test-input', + experimental_telemetry: { isEnabled: true, tracer }, + _internal: { now: mockValues(0, 100, 500) }, + }); + + await result.consumeStream(); + + expect(tracer.jsonSpans).toHaveLength(3); + + // Check that we have the expected spans + expect(tracer.jsonSpans[0].name).toBe('ai.streamText'); + expect(tracer.jsonSpans[1].name).toBe('ai.streamText.doStream'); + expect(tracer.jsonSpans[2].name).toBe('ai.toolCall'); + + // Check that the tool call span has error status + const toolCallSpan = tracer.jsonSpans[2]; + expect(toolCallSpan.status).toEqual({ + code: 2, + message: 'Tool execution failed', + }); + + // Check that the tool call span has exception event + expect(toolCallSpan.events).toHaveLength(1); + const exceptionEvent = toolCallSpan.events[0]; + expect(exceptionEvent.name).toBe('exception'); + expect(exceptionEvent.attributes).toMatchObject({ + 'exception.message': 'Tool execution failed', + 'exception.name': 'Error', + }); + expect(exceptionEvent.attributes?.['exception.stack']).toContain( + 'Tool execution failed', + ); + expect(exceptionEvent.time).toEqual([0, 0]); + }); + it('should not record telemetry inputs / outputs when disabled', async () => { const result = streamText({ model: createTestModel({ diff --git a/packages/ai/core/telemetry/record-span.ts b/packages/ai/core/telemetry/record-span.ts index 94f38192fe01..ba2efef9a6c9 100644 --- a/packages/ai/core/telemetry/record-span.ts +++ b/packages/ai/core/telemetry/record-span.ts @@ -24,19 +24,7 @@ export function recordSpan({ return result; } catch (error) { try { - if (error instanceof Error) { - span.recordException({ - name: error.name, - message: error.message, - stack: error.stack, - }); - span.setStatus({ - code: SpanStatusCode.ERROR, - message: error.message, - }); - } else { - span.setStatus({ code: SpanStatusCode.ERROR }); - } + recordErrorOnSpan(span, error); } finally { // always stop the span when there is an error: span.end(); @@ -46,3 +34,26 @@ export function recordSpan({ } }); } + +/** + * Record an error on a span. If the error is an instance of Error, an exception event will be recorded on the span, otherwise + * the span will be set to an error status. + * + * @param span - The span to record the error on. + * @param error - The error to record on the span. + */ +export function recordErrorOnSpan(span: Span, error: unknown) { + if (error instanceof Error) { + span.recordException({ + name: error.name, + message: error.message, + stack: error.stack, + }); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error.message, + }); + } else { + span.setStatus({ code: SpanStatusCode.ERROR }); + } +} diff --git a/packages/ai/core/test/mock-tracer.ts b/packages/ai/core/test/mock-tracer.ts index 6b6d76b94f01..931dcb39b7e5 100644 --- a/packages/ai/core/test/mock-tracer.ts +++ b/packages/ai/core/test/mock-tracer.ts @@ -2,9 +2,12 @@ import { AttributeValue, Attributes, Context, + Exception, Span, SpanContext, SpanOptions, + SpanStatus, + TimeInput, Tracer, } from '@opentelemetry/api'; @@ -16,6 +19,7 @@ export class MockTracer implements Tracer { name: span.name, attributes: span.attributes, events: span.events, + ...(span.status && { status: span.status }), })); } @@ -67,7 +71,12 @@ class MockSpan implements Span { context?: Context; options?: SpanOptions; attributes: Attributes; - events: Array<{ name: string; attributes: Attributes | undefined }> = []; + events: Array<{ + name: string; + attributes: Attributes | undefined; + time?: [number, number]; + }> = []; + status?: SpanStatus; readonly _spanContext: SpanContext = new MockSpanContext(); @@ -111,7 +120,8 @@ class MockSpan implements Span { addLinks() { return this; } - setStatus() { + setStatus(status: SpanStatus) { + this.status = status; return this; } updateName() { @@ -123,8 +133,19 @@ class MockSpan implements Span { isRecording() { return false; } - recordException() { - return this; + recordException(exception: Exception, time?: TimeInput) { + const error = + typeof exception === 'string' ? new Error(exception) : exception; + this.events.push({ + name: 'exception', + attributes: { + 'exception.type': error.constructor?.name || 'Error', + 'exception.name': error.name || 'Error', + 'exception.message': error.message || '', + 'exception.stack': error.stack || '', + }, + time: Array.isArray(time) ? time : [0, 0], + }); } } From d383c37072a91dfd0cebac13893dea044d9f88fa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 09:23:46 +0200 Subject: [PATCH 2/2] Version Packages (#7299) # Releases ## ai@4.3.19 ### Patch Changes - 849af1c: feat(ai): Record tool call errors on tool call spans recorded in `generateText` and `streamText`. ## @ai-sdk/valibot@0.1.31 ### Patch Changes - Updated dependencies [849af1c] - ai@4.3.19 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/serious-ravens-stare.md | 5 -- examples/ai-core/package.json | 4 +- examples/express/package.json | 2 +- examples/fastify/package.json | 2 +- examples/hono/package.json | 2 +- examples/mcp/package.json | 2 +- examples/nest/package.json | 2 +- examples/next-fastapi/package.json | 2 +- examples/next-google-vertex/package.json | 2 +- examples/next-langchain/package.json | 2 +- .../package.json | 2 +- examples/next-openai-pages/package.json | 2 +- .../next-openai-telemetry-sentry/package.json | 2 +- examples/next-openai-telemetry/package.json | 2 +- .../package.json | 2 +- examples/next-openai/package.json | 2 +- examples/node-http-server/package.json | 2 +- examples/nuxt-openai/package.json | 2 +- examples/solidstart-openai/package.json | 2 +- examples/sveltekit-openai/package.json | 2 +- packages/ai/CHANGELOG.md | 6 +++ packages/ai/package.json | 2 +- .../ai/tests/e2e/next-server/CHANGELOG.md | 7 +++ packages/valibot/CHANGELOG.md | 7 +++ packages/valibot/package.json | 4 +- pnpm-lock.yaml | 50 +++++++++---------- 26 files changed, 68 insertions(+), 53 deletions(-) delete mode 100644 .changeset/serious-ravens-stare.md diff --git a/.changeset/serious-ravens-stare.md b/.changeset/serious-ravens-stare.md deleted file mode 100644 index 3dfd8b66f474..000000000000 --- a/.changeset/serious-ravens-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'ai': patch ---- - -feat(ai): Record tool call errors on tool call spans recorded in `generateText` and `streamText`. diff --git a/examples/ai-core/package.json b/examples/ai-core/package.json index 2701dccfbf6d..848474c79298 100644 --- a/examples/ai-core/package.json +++ b/examples/ai-core/package.json @@ -30,14 +30,14 @@ "@ai-sdk/replicate": "0.2.8", "@ai-sdk/revai": "0.0.2", "@ai-sdk/togetherai": "0.2.15", - "@ai-sdk/valibot": "0.1.30", + "@ai-sdk/valibot": "0.1.31", "@ai-sdk/vercel": "0.0.2", "@ai-sdk/xai": "1.2.17", "@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.3.18", + "ai": "4.3.19", "dotenv": "16.4.5", "image-type": "^5.2.0", "mathjs": "14.0.0", diff --git a/examples/express/package.json b/examples/express/package.json index 7f7401c450f9..1a7cad9225f6 100644 --- a/examples/express/package.json +++ b/examples/express/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "@ai-sdk/openai": "1.3.23", - "ai": "4.3.18", + "ai": "4.3.19", "dotenv": "16.4.5", "express": "5.0.1" }, diff --git a/examples/fastify/package.json b/examples/fastify/package.json index 0a62980867a3..f7117370c56d 100644 --- a/examples/fastify/package.json +++ b/examples/fastify/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@ai-sdk/openai": "1.3.23", - "ai": "4.3.18", + "ai": "4.3.19", "dotenv": "16.4.5", "fastify": "5.1.0" }, diff --git a/examples/hono/package.json b/examples/hono/package.json index 2d1e511d2203..57953bfeff77 100644 --- a/examples/hono/package.json +++ b/examples/hono/package.json @@ -5,7 +5,7 @@ "dependencies": { "@ai-sdk/openai": "1.3.23", "@hono/node-server": "1.13.7", - "ai": "4.3.18", + "ai": "4.3.19", "dotenv": "16.4.5", "hono": "4.6.9" }, diff --git a/examples/mcp/package.json b/examples/mcp/package.json index 56c681f1c5c3..344b1be2357c 100644 --- a/examples/mcp/package.json +++ b/examples/mcp/package.json @@ -16,7 +16,7 @@ "dependencies": { "@modelcontextprotocol/sdk": "1.10.2", "@ai-sdk/openai": "1.3.23", - "ai": "4.3.18", + "ai": "4.3.19", "dotenv": "16.4.5", "express": "5.0.1", "zod": "3.23.8" diff --git a/examples/nest/package.json b/examples/nest/package.json index 5179e606612c..d8748983775a 100644 --- a/examples/nest/package.json +++ b/examples/nest/package.json @@ -19,7 +19,7 @@ "@nestjs/common": "^10.4.15", "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.4.9", - "ai": "4.3.18", + "ai": "4.3.19", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1" }, diff --git a/examples/next-fastapi/package.json b/examples/next-fastapi/package.json index 274c7aac9497..0c2bde80cf15 100644 --- a/examples/next-fastapi/package.json +++ b/examples/next-fastapi/package.json @@ -13,7 +13,7 @@ "dependencies": { "@ai-sdk/ui-utils": "1.2.11", "@ai-sdk/react": "1.2.12", - "ai": "4.3.18", + "ai": "4.3.19", "geist": "^1.3.1", "next": "latest", "react": "^18", diff --git a/examples/next-google-vertex/package.json b/examples/next-google-vertex/package.json index 9eafd9ff1632..b2259ee42b79 100644 --- a/examples/next-google-vertex/package.json +++ b/examples/next-google-vertex/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@ai-sdk/google-vertex": "2.2.27", - "ai": "4.3.18", + "ai": "4.3.19", "geist": "^1.3.1", "next": "latest", "react": "^18", diff --git a/examples/next-langchain/package.json b/examples/next-langchain/package.json index beeca15a8368..37e9b524bc9a 100644 --- a/examples/next-langchain/package.json +++ b/examples/next-langchain/package.json @@ -12,7 +12,7 @@ "@ai-sdk/react": "1.2.12", "@langchain/openai": "0.0.28", "@langchain/core": "0.1.63", - "ai": "4.3.18", + "ai": "4.3.19", "langchain": "0.1.36", "next": "latest", "react": "^18", diff --git a/examples/next-openai-kasada-bot-protection/package.json b/examples/next-openai-kasada-bot-protection/package.json index ac0940821670..b0d8a7fd35e3 100644 --- a/examples/next-openai-kasada-bot-protection/package.json +++ b/examples/next-openai-kasada-bot-protection/package.json @@ -12,7 +12,7 @@ "@ai-sdk/openai": "1.3.23", "@ai-sdk/react": "1.2.12", "@vercel/functions": "latest", - "ai": "4.3.18", + "ai": "4.3.19", "next": "latest", "react": "^18", "react-dom": "^18", diff --git a/examples/next-openai-pages/package.json b/examples/next-openai-pages/package.json index a644f0b3d498..cac84c76fa9c 100644 --- a/examples/next-openai-pages/package.json +++ b/examples/next-openai-pages/package.json @@ -11,7 +11,7 @@ "dependencies": { "@ai-sdk/openai": "1.3.23", "@ai-sdk/react": "1.2.12", - "ai": "4.3.18", + "ai": "4.3.19", "next": "latest", "openai": "4.52.6", "react": "^18", diff --git a/examples/next-openai-telemetry-sentry/package.json b/examples/next-openai-telemetry-sentry/package.json index 47b985495d0a..334abaf0ca23 100644 --- a/examples/next-openai-telemetry-sentry/package.json +++ b/examples/next-openai-telemetry-sentry/package.json @@ -17,7 +17,7 @@ "@sentry/nextjs": "^8.42.0", "@sentry/opentelemetry": "8.22.0", "@vercel/otel": "1.10.0", - "ai": "4.3.18", + "ai": "4.3.19", "next": "latest", "openai": "4.52.6", "react": "^18", diff --git a/examples/next-openai-telemetry/package.json b/examples/next-openai-telemetry/package.json index 6e5e7523e074..35131fc63328 100644 --- a/examples/next-openai-telemetry/package.json +++ b/examples/next-openai-telemetry/package.json @@ -15,7 +15,7 @@ "@opentelemetry/sdk-logs": "0.55.0", "@opentelemetry/instrumentation": "0.52.1", "@vercel/otel": "1.10.0", - "ai": "4.3.18", + "ai": "4.3.19", "next": "latest", "openai": "4.52.6", "react": "^18", diff --git a/examples/next-openai-upstash-rate-limits/package.json b/examples/next-openai-upstash-rate-limits/package.json index 7e9fc9581f03..61bbede14e0e 100644 --- a/examples/next-openai-upstash-rate-limits/package.json +++ b/examples/next-openai-upstash-rate-limits/package.json @@ -13,7 +13,7 @@ "@ai-sdk/react": "1.2.12", "@upstash/ratelimit": "^0.4.3", "@vercel/kv": "^0.2.2", - "ai": "4.3.18", + "ai": "4.3.19", "next": "latest", "react": "^18", "react-dom": "^18", diff --git a/examples/next-openai/package.json b/examples/next-openai/package.json index b009e63aced1..842adc750e27 100644 --- a/examples/next-openai/package.json +++ b/examples/next-openai/package.json @@ -20,7 +20,7 @@ "@ai-sdk/ui-utils": "1.2.11", "@ai-sdk/react": "1.2.12", "@vercel/blob": "^0.26.0", - "ai": "4.3.18", + "ai": "4.3.19", "next": "latest", "openai": "4.52.6", "react": "^18", diff --git a/examples/node-http-server/package.json b/examples/node-http-server/package.json index dfbe0d4a8e5f..95bfe89a1ccf 100644 --- a/examples/node-http-server/package.json +++ b/examples/node-http-server/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@ai-sdk/openai": "1.3.23", - "ai": "4.3.18", + "ai": "4.3.19", "dotenv": "16.4.5", "zod": "3.23.8", "zod-to-json-schema": "3.23.5" diff --git a/examples/nuxt-openai/package.json b/examples/nuxt-openai/package.json index 6a730dc70bd7..31ffbb36de17 100644 --- a/examples/nuxt-openai/package.json +++ b/examples/nuxt-openai/package.json @@ -11,7 +11,7 @@ "dependencies": { "@ai-sdk/vue": "1.2.12", "@ai-sdk/openai": "1.3.23", - "ai": "4.3.18", + "ai": "4.3.19", "zod": "3.23.8" }, "devDependencies": { diff --git a/examples/solidstart-openai/package.json b/examples/solidstart-openai/package.json index 2b939f3b8347..c2a0cf633594 100644 --- a/examples/solidstart-openai/package.json +++ b/examples/solidstart-openai/package.json @@ -20,7 +20,7 @@ "@solidjs/meta": "0.29.4", "@solidjs/router": "^0.15.1", "@solidjs/start": "^1.0.10", - "ai": "4.3.18", + "ai": "4.3.19", "solid-js": "^1.9.3", "zod": "^3.23.8" }, diff --git a/examples/sveltekit-openai/package.json b/examples/sveltekit-openai/package.json index 00750ce157f1..c49b108fd00c 100644 --- a/examples/sveltekit-openai/package.json +++ b/examples/sveltekit-openai/package.json @@ -25,7 +25,7 @@ "@sveltejs/adapter-vercel": "^5.5.2", "@sveltejs/kit": "^2.16.0", "@sveltejs/vite-plugin-svelte": "^5.0.0", - "ai": "4.3.18", + "ai": "4.3.19", "autoprefixer": "^10.4.20", "bits-ui": "^1.3.9", "clsx": "^2.1.1", diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index e0ce761be5f0..dfb20814d6f8 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -1,5 +1,11 @@ # ai +## 4.3.19 + +### Patch Changes + +- 849af1c: feat(ai): Record tool call errors on tool call spans recorded in `generateText` and `streamText`. + ## 4.3.18 ### Patch Changes diff --git a/packages/ai/package.json b/packages/ai/package.json index 67ddeef72953..9501d429de4f 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "ai", - "version": "4.3.18", + "version": "4.3.19", "description": "AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript", "license": "Apache-2.0", "sideEffects": false, diff --git a/packages/ai/tests/e2e/next-server/CHANGELOG.md b/packages/ai/tests/e2e/next-server/CHANGELOG.md index 28a44f5235d1..8e02dea62586 100644 --- a/packages/ai/tests/e2e/next-server/CHANGELOG.md +++ b/packages/ai/tests/e2e/next-server/CHANGELOG.md @@ -4,6 +4,13 @@ ### Patch Changes +- Updated dependencies [849af1c] + - ai@4.3.19 + +## 0.0.1 + +### Patch Changes + - Updated dependencies [37d93f4] - ai@4.3.18 diff --git a/packages/valibot/CHANGELOG.md b/packages/valibot/CHANGELOG.md index 9d20dbc12028..32da2ddc56f3 100644 --- a/packages/valibot/CHANGELOG.md +++ b/packages/valibot/CHANGELOG.md @@ -1,5 +1,12 @@ # @ai-sdk/valibot +## 0.1.31 + +### Patch Changes + +- Updated dependencies [849af1c] + - ai@4.3.19 + ## 0.1.30 ### Patch Changes diff --git a/packages/valibot/package.json b/packages/valibot/package.json index 6a54b1c800c5..f7062fbfa064 100644 --- a/packages/valibot/package.json +++ b/packages/valibot/package.json @@ -1,6 +1,6 @@ { "name": "@ai-sdk/valibot", - "version": "0.1.30", + "version": "0.1.31", "license": "Apache-2.0", "sideEffects": false, "main": "./dist/index.js", @@ -27,7 +27,7 @@ } }, "dependencies": { - "ai": "4.3.18" + "ai": "4.3.19" }, "devDependencies": { "@types/node": "20.17.24", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 623573551412..1fa852a636a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -141,7 +141,7 @@ importers: specifier: 0.2.15 version: link:../../packages/togetherai '@ai-sdk/valibot': - specifier: 0.1.30 + specifier: 0.1.31 version: link:../../packages/valibot '@ai-sdk/vercel': specifier: 0.0.2 @@ -162,7 +162,7 @@ importers: specifier: 1.28.0 version: 1.28.0(@opentelemetry/api@1.9.0) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai dotenv: specifier: 16.4.5 @@ -205,7 +205,7 @@ importers: specifier: 1.3.23 version: link:../../packages/openai ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai dotenv: specifier: 16.4.5 @@ -233,7 +233,7 @@ importers: specifier: 1.3.23 version: link:../../packages/openai ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai dotenv: specifier: 16.4.5 @@ -261,7 +261,7 @@ importers: specifier: 1.13.7 version: 1.13.7(hono@4.6.9) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai dotenv: specifier: 16.4.5 @@ -289,7 +289,7 @@ importers: specifier: 1.10.2 version: 1.10.2 ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai dotenv: specifier: 16.4.5 @@ -329,7 +329,7 @@ importers: specifier: ^10.4.9 version: 10.4.9(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.2) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai reflect-metadata: specifier: ^0.2.0 @@ -411,7 +411,7 @@ importers: specifier: 1.2.11 version: link:../../packages/ui-utils ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai geist: specifier: ^1.3.1 @@ -463,7 +463,7 @@ importers: specifier: 2.2.27 version: link:../../packages/google-vertex ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai geist: specifier: ^1.3.1 @@ -512,7 +512,7 @@ importers: specifier: 0.0.28 version: 0.0.28 ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai langchain: specifier: 0.1.36 @@ -591,7 +591,7 @@ importers: specifier: ^0.26.0 version: 0.26.0 ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai next: specifier: latest @@ -658,7 +658,7 @@ importers: specifier: latest version: 2.0.0(@aws-sdk/credential-provider-web-identity@3.662.0(@aws-sdk/client-sts@3.662.0)) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai next: specifier: latest @@ -710,7 +710,7 @@ importers: specifier: 1.2.12 version: link:../../packages/react ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai next: specifier: latest @@ -777,7 +777,7 @@ importers: specifier: 1.10.0 version: 1.10.0(@opentelemetry/api-logs@0.55.0)(@opentelemetry/api@1.9.0)(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-logs@0.55.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0)) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai next: specifier: latest @@ -850,7 +850,7 @@ importers: specifier: 1.10.0 version: 1.10.0(@opentelemetry/api-logs@0.55.0)(@opentelemetry/api@1.9.0)(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-logs@0.55.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0)) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai next: specifier: latest @@ -911,7 +911,7 @@ importers: specifier: ^0.2.2 version: 0.2.4 ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai next: specifier: latest @@ -960,7 +960,7 @@ importers: specifier: 1.3.23 version: link:../../packages/openai ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai dotenv: specifier: 16.4.5 @@ -991,7 +991,7 @@ importers: specifier: 1.2.12 version: link:../../packages/vue ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai zod: specifier: 3.23.8 @@ -1058,7 +1058,7 @@ importers: specifier: ^1.0.10 version: 1.0.10(@testing-library/jest-dom@6.6.3)(solid-js@1.9.3)(vinxi@0.4.3(@types/node@22.7.4)(@upstash/redis@1.34.3)(ioredis@5.4.1)(terser@5.31.3)(typescript@5.6.3))(vite@6.0.3(@types/node@22.7.4)(jiti@2.4.0)(terser@5.31.3)(tsx@4.19.2)(yaml@2.7.0)) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai solid-js: specifier: ^1.9.3 @@ -1110,7 +1110,7 @@ importers: specifier: ^5.0.0 version: 5.0.3(svelte@5.22.4)(vite@6.0.3(@types/node@22.7.4)(jiti@2.4.0)(terser@5.31.3)(tsx@4.19.2)(yaml@2.7.0)) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../../packages/ai autoprefixer: specifier: ^10.4.20 @@ -2260,7 +2260,7 @@ importers: specifier: ^1.0.0-rc.0 || ^1.0.0 version: 1.0.0-rc.0(valibot@1.0.0-rc.0(typescript@5.6.3)) ai: - specifier: 4.3.18 + specifier: 4.3.19 version: link:../ai devDependencies: '@types/node': @@ -24192,7 +24192,7 @@ snapshots: debug: 4.4.0(supports-color@9.4.0) enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.7.2 @@ -24232,7 +24232,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.8.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: @@ -24265,7 +24265,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: @@ -24324,7 +24324,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3