ai 7.0.110 → 7.0.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/index.d.ts +163 -41
  3. package/dist/index.js +262 -73
  4. package/dist/index.js.map +1 -1
  5. package/dist/internal/index.d.ts +141 -2
  6. package/dist/internal/index.js +33 -4
  7. package/dist/internal/index.js.map +1 -1
  8. package/docs/03-ai-sdk-core/40-middleware.mdx +92 -7
  9. package/docs/03-ai-sdk-core/60-telemetry.mdx +56 -3
  10. package/docs/03-ai-sdk-core/65-lifecycle-callbacks.mdx +124 -2
  11. package/docs/06-advanced/02-stopping-streams.mdx +8 -0
  12. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +3 -3
  13. package/docs/07-reference/01-ai-sdk-core/14-evaluate.mdx +16 -9
  14. package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +9 -3
  15. package/package.json +12 -12
  16. package/src/batch/batch.ts +18 -3
  17. package/src/evaluate/evaluate-events.ts +131 -0
  18. package/src/evaluate/evaluate.ts +145 -40
  19. package/src/evaluate/index.ts +6 -0
  20. package/src/evaluate/restricted-telemetry-dispatcher.ts +46 -0
  21. package/src/generate-text/convert-language-model-content.ts +15 -6
  22. package/src/generate-text/generate-text.ts +7 -2
  23. package/src/generate-text/prune-messages.ts +3 -1
  24. package/src/generate-text/resolve-generated-file-data.ts +41 -0
  25. package/src/generate-text/stream-language-model-call.ts +5 -4
  26. package/src/prompt/convert-to-language-model-prompt.ts +12 -2
  27. package/src/prompt/file-part-data.ts +11 -1
  28. package/src/telemetry/create-telemetry-dispatcher.ts +12 -0
  29. package/src/telemetry/telemetry.ts +34 -0
  30. package/src/telemetry/tracing-channel.ts +2 -1
  31. package/src/ui/validate-ui-messages.ts +2 -2
  32. package/src/ui-message-stream/handle-ui-message-stream-finish.ts +5 -3
  33. package/src/ui-message-stream/ui-message-stream-on-end-callback.ts +8 -0
  34. package/src/ui-message-stream/ui-message-stream-outcome.ts +4 -0
@@ -5,6 +5,12 @@ import type {
5
5
  EmbeddingModelCallEndEvent,
6
6
  EmbeddingModelCallStartEvent,
7
7
  } from '../embed/embed-events';
8
+ import type {
9
+ EvaluateEndEvent,
10
+ EvaluateStartEvent,
11
+ EvaluationModelCallEndEvent,
12
+ EvaluationModelCallStartEvent,
13
+ } from '../evaluate/evaluate-events';
8
14
  import type {
9
15
  GenerateObjectEndEvent,
10
16
  GenerateObjectStartEvent,
@@ -92,6 +98,10 @@ export interface TelemetryDispatcher {
92
98
  onEmbedEnd?: Callback<EmbeddingModelCallEndEvent>;
93
99
  onRerankStart?: Callback<RerankingModelCallStartEvent>;
94
100
  onRerankEnd?: Callback<RerankingModelCallEndEvent>;
101
+ experimental_onEvaluateStart?: Callback<EvaluateStartEvent>;
102
+ experimental_onEvaluationModelCallStart?: Callback<EvaluationModelCallStartEvent>;
103
+ experimental_onEvaluationModelCallEnd?: Callback<EvaluationModelCallEndEvent>;
104
+ experimental_onEvaluateEnd?: Callback<EvaluateEndEvent>;
95
105
  onEnd?: Callback<OperationEndEvent>;
96
106
  onAbort?: Callback<GenerateTextAbortEvent<ToolSet>>;
97
107
  onError?: Callback<unknown>;
@@ -214,6 +224,30 @@ export interface Telemetry {
214
224
  */
215
225
  onRerankEnd?: Callback<InferTelemetryEvent<RerankingModelCallEndEvent>>;
216
226
 
227
+ /** Called when an experimental evaluation operation begins. */
228
+ experimental_onEvaluateStart?: Callback<
229
+ InferTelemetryEvent<EvaluateStartEvent>
230
+ >;
231
+
232
+ /**
233
+ * Called immediately before an experimental evaluation model call begins.
234
+ * The logical model call includes any provider retries.
235
+ */
236
+ experimental_onEvaluationModelCallStart?: Callback<
237
+ InferTelemetryEvent<EvaluationModelCallStartEvent>
238
+ >;
239
+
240
+ /**
241
+ * Called after an experimental evaluation model response has been validated.
242
+ * The logical model call includes any provider retries.
243
+ */
244
+ experimental_onEvaluationModelCallEnd?: Callback<
245
+ InferTelemetryEvent<EvaluationModelCallEndEvent>
246
+ >;
247
+
248
+ /** Called when an experimental evaluation operation completes. */
249
+ experimental_onEvaluateEnd?: Callback<InferTelemetryEvent<EvaluateEndEvent>>;
250
+
217
251
  /**
218
252
  * Called when an operation completes. Fired for text generation
219
253
  * (generateText/streamText), object generation (generateObject/streamObject),
@@ -8,7 +8,8 @@ export type TelemetryTracingEventType =
8
8
  | 'executeTool'
9
9
  | 'embed'
10
10
  | 'embedMany'
11
- | 'rerank';
11
+ | 'rerank'
12
+ | 'experimental_evaluate';
12
13
 
13
14
  export type TelemetryTracingChannelMessage<EVENT = unknown> = {
14
15
  readonly type: TelemetryTracingEventType;
@@ -489,7 +489,7 @@ async function safeValidateUIMessagesInternal<UI_MESSAGE extends UIMessage>(
489
489
 
490
490
  if (metadataSchema) {
491
491
  for (const [msgIdx, message] of validatedMessages.entries()) {
492
- await validateTypes({
492
+ message.metadata = await validateTypes({
493
493
  value: message.metadata,
494
494
  schema: metadataSchema,
495
495
  context: {
@@ -527,7 +527,7 @@ async function safeValidateUIMessagesInternal<UI_MESSAGE extends UIMessage>(
527
527
  };
528
528
  }
529
529
 
530
- await validateTypes({
530
+ dataPart.data = await validateTypes({
531
531
  value: dataPart.data,
532
532
  schema: dataSchema,
533
533
  context: {
@@ -147,7 +147,7 @@ export function handleUIMessageStreamFinish<UI_MESSAGE extends UIMessage>({
147
147
 
148
148
  let finishCalled = false;
149
149
 
150
- const callOnEnd = async () => {
150
+ const callOnEnd = async ({ isCancelled }: { isCancelled: boolean }) => {
151
151
  if (finishCalled || !resolvedOnEnd) {
152
152
  return;
153
153
  }
@@ -160,9 +160,11 @@ export function handleUIMessageStreamFinish<UI_MESSAGE extends UIMessage>({
160
160
  : declaredOutcome.status === 'unknown' && isAborted
161
161
  ? { status: 'aborted' }
162
162
  : declaredOutcome;
163
+ const isConsumerCancellation = isCancelled && outcome.status === 'unknown';
163
164
 
164
165
  await resolvedOnEnd({
165
166
  isAborted: isAborted || outcome.status === 'aborted',
167
+ ...(isConsumerCancellation ? { isCancelled: true as const } : {}),
166
168
  isContinuation,
167
169
  outcome,
168
170
  responseMessage: state.message as UI_MESSAGE,
@@ -215,11 +217,11 @@ export function handleUIMessageStreamFinish<UI_MESSAGE extends UIMessage>({
215
217
  },
216
218
  // @ts-expect-error cancel is still new and missing from types https://developer.mozilla.org/en-US/docs/Web/API/TransformStream#browser_compatibility
217
219
  async cancel() {
218
- await callOnEnd();
220
+ await callOnEnd({ isCancelled: true });
219
221
  },
220
222
 
221
223
  async flush() {
222
- await callOnEnd();
224
+ await callOnEnd({ isCancelled: false });
223
225
  },
224
226
  }),
225
227
  );
@@ -20,6 +20,14 @@ export type UIMessageStreamOnEndCallback<UI_MESSAGE extends UIMessage> =
20
20
  */
21
21
  isAborted: boolean;
22
22
 
23
+ /**
24
+ * Indicates that the consumer cancelled the stream before an outcome was
25
+ * declared, for example because the client disconnected.
26
+ *
27
+ * This property is only present when it is `true`.
28
+ */
29
+ isCancelled?: true;
30
+
23
31
  /**
24
32
  * The operation-level outcome of the stream. Fatal stream-processing
25
33
  * failures override outcomes declared by the stream owner.
@@ -4,6 +4,10 @@
4
4
  * This is separate from model finish reasons and individual stream chunks.
5
5
  * Fatal stream-processing failures override outcomes declared by the stream
6
6
  * owner.
7
+ *
8
+ * Consumer cancellation before an outcome is declared keeps the `unknown`
9
+ * status and is reported separately through the end callback's `isCancelled`
10
+ * property.
7
11
  */
8
12
  export type UIMessageStreamOutcome =
9
13
  | { status: 'completed' }