ai 7.0.148 → 7.0.150
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.
- package/CHANGELOG.md +35 -0
- package/dist/index.d.ts +168 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +325 -35
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +2 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +4 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/test/index.d.ts +17 -2
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +12 -1
- package/dist/test/index.js.map +1 -1
- package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +7 -0
- package/docs/03-ai-sdk-core/18-code-mode.mdx +3 -1
- package/docs/03-ai-sdk-core/36-transcription.mdx +40 -39
- package/docs/03-ai-sdk-core/37-speech.mdx +66 -0
- package/docs/03-ai-sdk-core/60-telemetry.mdx +25 -2
- package/docs/03-ai-sdk-harnesses/05-harness-adapters.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +4 -4
- package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +7 -7
- package/docs/07-reference/01-ai-sdk-core/12-stream-speech.mdx +195 -0
- package/docs/07-reference/01-ai-sdk-core/index.mdx +5 -0
- package/docs/07-reference/02-ai-sdk-ui/01-use-chat.mdx +1 -1
- package/docs/07-reference/02-ai-sdk-ui/40-create-ui-message-stream.mdx +1 -1
- package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +1 -1
- package/docs/07-reference/05-ai-sdk-errors/ai-tool-choice-violation-error.mdx +12 -7
- package/package.json +12 -12
- package/src/error/no-speech-generated-error.ts +5 -1
- package/src/error/tool-choice-violation-error.ts +6 -4
- package/src/generate-speech/index.ts +7 -0
- package/src/generate-speech/is-streaming-speech-model.ts +17 -0
- package/src/generate-speech/stream-speech-result.ts +95 -0
- package/src/generate-speech/stream-speech.ts +569 -0
- package/src/generate-text/collect-tool-approvals.ts +10 -0
- package/src/generate-text/generate-text.ts +24 -12
- package/src/generate-text/stream-language-model-call.ts +37 -12
- package/src/generate-text/stream-text.ts +4 -1
- package/src/test/mock-streaming-speech-model-v4.ts +28 -0
- package/src/types/language-model.ts +2 -0
- package/src/ui/chat.ts +40 -12
- package/src/ui-message-stream/ui-message-chunks.ts +1 -0
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
|
|
2
2
|
import { GatewayAuthenticationError, GatewayError, createGateway, gateway, gateway as gateway$1 } from "@ai-sdk/gateway";
|
|
3
|
-
import { DEFAULT_MAX_DOWNLOAD_SIZE, DelayedPromise, DownloadError, DownloadError as DownloadError$1, EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL, EXPERIMENTAL_EMBEDDING_MODEL_PROVIDER_OPTIONS_TRANSFORMER, asArray, asSchema, asSchema as asSchema$1, cancelResponseBody, convertBase64ToUint8Array, convertUint8ArrayToBase64, createIdGenerator, createIdGenerator as createIdGenerator$1, delay, detectMediaType, dynamicTool, executeTool, experimental_getToolCaller, experimental_toolCaller, fetchUntrustedUrl, filterNullable, generateId, generateId as generateId$1, getErrorMessage, getRuntimeEnvironmentUserAgent, getWebSocketConstructor, isAbortError, isBuffer, isExecutableTool, isFullMediaType, isNonNullable, isProviderReference, isProviderStreamError, isUrlSupported, jsonSchema, jsonSchema as jsonSchema$1, lazySchema, normalizeHeaders, parseJsonEventStream, parseJsonEventStream as parseJsonEventStream$1, readResponseWithSizeLimit, readWebSocketMessageText, resolve, retryWithExponentialBackoff, safeParseJSON, safeValidateTypes, toWebSocketUrl, tool, tool as tool$1, validateTypes, waitForWebSocketBufferDrain, withUserAgentSuffix, zodSchema, zodSchema as zodSchema$1 } from "@ai-sdk/provider-utils";
|
|
3
|
+
import { DEFAULT_MAX_DOWNLOAD_SIZE, DelayedPromise, DownloadError, DownloadError as DownloadError$1, EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL, EXPERIMENTAL_EMBEDDING_MODEL_PROVIDER_OPTIONS_TRANSFORMER, asArray, asSchema, asSchema as asSchema$1, cancelResponseBody, convertAsyncIteratorToReadableStream, convertBase64ToUint8Array, convertUint8ArrayToBase64, createIdGenerator, createIdGenerator as createIdGenerator$1, delay, detectMediaType, dynamicTool, executeTool, experimental_getToolCaller, experimental_toolCaller, fetchUntrustedUrl, filterNullable, generateId, generateId as generateId$1, getErrorMessage, getRuntimeEnvironmentUserAgent, getWebSocketConstructor, isAbortError, isBuffer, isExecutableTool, isFullMediaType, isNonNullable, isProviderReference, isProviderStreamError, isUrlSupported, jsonSchema, jsonSchema as jsonSchema$1, lazySchema, normalizeHeaders, parseJsonEventStream, parseJsonEventStream as parseJsonEventStream$1, readResponseWithSizeLimit, readWebSocketMessageText, resolve, retryWithExponentialBackoff, safeParseJSON, safeValidateTypes, toWebSocketUrl, tool, tool as tool$1, validateTypes, waitForWebSocketBufferDrain, withUserAgentSuffix, zodSchema, zodSchema as zodSchema$1 } from "@ai-sdk/provider-utils";
|
|
4
4
|
import { AISDKError, AISDKError as AISDKError$1, APICallError, APICallError as APICallError$1, EmptyResponseBodyError, EmptyResponseBodyError as EmptyResponseBodyError$1, Experimental_DecisionRefusalError, Experimental_DecisionRefusalError as Experimental_DecisionRefusalError$1, Experimental_DecisionUnsupportedQuestionTypeError, Experimental_DecisionUnsupportedQuestionTypeError as Experimental_DecisionUnsupportedQuestionTypeError$1, InvalidArgumentError as InvalidArgumentError$1, InvalidPromptError, InvalidPromptError as InvalidPromptError$1, InvalidResponseDataError, InvalidResponseDataError as InvalidResponseDataError$1, JSONParseError, JSONParseError as JSONParseError$1, LoadAPIKeyError, LoadSettingError, NoContentGeneratedError, NoSuchModelError, NoSuchModelError as NoSuchModelError$1, NoSuchProviderReferenceError, TooManyEmbeddingValuesForCallError, TypeValidationError, TypeValidationError as TypeValidationError$1, UnsupportedFunctionalityError, UnsupportedFunctionalityError as UnsupportedFunctionalityError$1, getErrorMessage as getErrorMessage$1, isJSONArray, isJSONObject } from "@ai-sdk/provider";
|
|
5
5
|
import { array, boolean, custom, discriminatedUnion, enum as enum$1, instanceof as instanceof$1, lazy, literal, looseObject, never, null as null$1, number, object, record, string, union, unknown } from "zod/v4";
|
|
6
6
|
//#region src/error/invalid-argument-error.ts
|
|
@@ -225,7 +225,8 @@ var NoSpeechGeneratedError = class extends AISDKError$1 {
|
|
|
225
225
|
constructor(options) {
|
|
226
226
|
super({
|
|
227
227
|
name: name$13,
|
|
228
|
-
message: "No speech audio generated."
|
|
228
|
+
message: "No speech audio generated.",
|
|
229
|
+
...options.cause !== void 0 && { cause: options.cause }
|
|
229
230
|
});
|
|
230
231
|
this[symbol$13] = true;
|
|
231
232
|
this.responses = options.responses;
|
|
@@ -389,7 +390,7 @@ const symbol$6 = Symbol.for(marker$6);
|
|
|
389
390
|
* Thrown when a model response does not satisfy an enforced tool choice.
|
|
390
391
|
*/
|
|
391
392
|
var ToolChoiceViolationError = class extends AISDKError$1 {
|
|
392
|
-
constructor({ toolChoice, finishReason, provider, modelId, content, message = toolChoice.type === "required" ? "Model response did not contain a tool call even though tool choice was required." : `Model response did not contain a call to the required tool '${toolChoice.toolName}'.` }) {
|
|
393
|
+
constructor({ toolChoice, finishReason, provider, modelId, content, message = toolChoice.type === "none" ? "Model response contained a tool call even though tool choice was none." : toolChoice.type === "required" ? "Model response did not contain a tool call even though tool choice was required." : `Model response did not contain a call to the required tool '${toolChoice.toolName}'.` }) {
|
|
393
394
|
super({
|
|
394
395
|
name: name$6,
|
|
395
396
|
message
|
|
@@ -1174,7 +1175,7 @@ function cloneValue(value) {
|
|
|
1174
1175
|
}
|
|
1175
1176
|
//#endregion
|
|
1176
1177
|
//#region src/version.ts
|
|
1177
|
-
const VERSION = "7.0.
|
|
1178
|
+
const VERSION = "7.0.150";
|
|
1178
1179
|
//#endregion
|
|
1179
1180
|
//#region src/util/download/download.ts
|
|
1180
1181
|
/**
|
|
@@ -2740,6 +2741,7 @@ function collectToolApprovals({ messages }) {
|
|
|
2740
2741
|
for (const part of lastMessage.content) if (part.type === "tool-result") toolResults[part.toolCallId] = part;
|
|
2741
2742
|
const approvedToolApprovals = [];
|
|
2742
2743
|
const deniedToolApprovals = [];
|
|
2744
|
+
const collectedToolCallIds = /* @__PURE__ */ new Set();
|
|
2743
2745
|
const approvalResponses = lastMessage.content.filter((part) => part.type === "tool-approval-response");
|
|
2744
2746
|
for (const approvalResponse of approvalResponses) {
|
|
2745
2747
|
const approvalRequest = toolApprovalRequestsByApprovalId[approvalResponse.approvalId];
|
|
@@ -2751,6 +2753,8 @@ function collectToolApprovals({ messages }) {
|
|
|
2751
2753
|
toolCallId: approvalRequest.toolCallId,
|
|
2752
2754
|
approvalId: approvalRequest.approvalId
|
|
2753
2755
|
});
|
|
2756
|
+
if (collectedToolCallIds.has(toolCall.toolCallId)) continue;
|
|
2757
|
+
collectedToolCallIds.add(toolCall.toolCallId);
|
|
2754
2758
|
const approval = {
|
|
2755
2759
|
approvalRequest,
|
|
2756
2760
|
approvalResponse,
|
|
@@ -5569,7 +5573,7 @@ async function generateText({ model: modelArg, tools, toolChoice, instructions,
|
|
|
5569
5573
|
tools,
|
|
5570
5574
|
activeTools: prepareStepResult?.activeTools ?? activeTools
|
|
5571
5575
|
});
|
|
5572
|
-
const { executionTools
|
|
5576
|
+
const { executionTools, modelTools: stepModelTools, toolCallerMessages } = prepareToolsForToolCallers({
|
|
5573
5577
|
tools: prepareToolSearch(stepActiveTools, {
|
|
5574
5578
|
toolsContext,
|
|
5575
5579
|
experimental_sandbox: stepSandbox
|
|
@@ -5584,6 +5588,7 @@ async function generateText({ model: modelArg, tools, toolChoice, instructions,
|
|
|
5584
5588
|
experimental_sandbox: stepSandbox
|
|
5585
5589
|
});
|
|
5586
5590
|
const stepToolChoice = prepareToolChoice({ toolChoice: prepareStepResult?.toolChoice ?? toolChoice });
|
|
5591
|
+
const stepExecutionTools = stepToolChoice.type === "none" ? void 0 : executionTools;
|
|
5587
5592
|
const stepMessages = appendToolCallerMessages({
|
|
5588
5593
|
messages: prepareStepResult?.messages ?? stepInputMessages,
|
|
5589
5594
|
toolCallerMessages
|
|
@@ -5675,8 +5680,8 @@ async function generateText({ model: modelArg, tools, toolChoice, instructions,
|
|
|
5675
5680
|
const stepToolCalls = await Promise.all(currentModelResponse.content.filter((part) => part.type === "tool-call").map((toolCall) => parseToolCall({
|
|
5676
5681
|
toolCall,
|
|
5677
5682
|
tools: stepModelTools,
|
|
5678
|
-
repairToolCall,
|
|
5679
|
-
refineToolInput,
|
|
5683
|
+
repairToolCall: stepToolChoice.type === "none" ? void 0 : repairToolCall,
|
|
5684
|
+
refineToolInput: stepToolChoice.type === "none" ? void 0 : refineToolInput,
|
|
5680
5685
|
instructions: stepInstructions,
|
|
5681
5686
|
messages: stepMessages,
|
|
5682
5687
|
abortSignal: mergedAbortSignal
|
|
@@ -5722,8 +5727,8 @@ async function generateText({ model: modelArg, tools, toolChoice, instructions,
|
|
|
5722
5727
|
},
|
|
5723
5728
|
callbacks: [resolvedOnLanguageModelCallEnd, telemetryDispatcher.onLanguageModelCallEnd]
|
|
5724
5729
|
});
|
|
5725
|
-
const enforcedToolChoice = stepToolChoice.type === "
|
|
5726
|
-
if (enforcedToolChoice != null && !stepToolCalls.some((toolCall) => enforcedToolChoice.type === "required" || toolCall.toolName === enforcedToolChoice.toolName)) throw new ToolChoiceViolationError({
|
|
5730
|
+
const enforcedToolChoice = stepToolChoice.type === "auto" ? void 0 : stepToolChoice;
|
|
5731
|
+
if (enforcedToolChoice != null && (enforcedToolChoice.type === "none" ? stepToolCalls.length > 0 : currentModelResponse.finishReason.unified !== "interrupted" && !stepToolCalls.some((toolCall) => enforcedToolChoice.type === "required" || toolCall.toolName === enforcedToolChoice.toolName))) throw new ToolChoiceViolationError({
|
|
5727
5732
|
toolChoice: enforcedToolChoice,
|
|
5728
5733
|
finishReason: currentModelResponse.finishReason.unified,
|
|
5729
5734
|
provider: stepModel.provider,
|
|
@@ -5943,7 +5948,7 @@ async function generateText({ model: modelArg, tools, toolChoice, instructions,
|
|
|
5943
5948
|
} finally {
|
|
5944
5949
|
if (stepTimeoutId != null) clearTimeout(stepTimeoutId);
|
|
5945
5950
|
}
|
|
5946
|
-
} while (clientToolOutputs.length + deniedToolApprovalResponses.length === clientToolCalls.length && (clientToolCalls.length > 0 || pendingDeferredToolCalls.size > 0) && !await isStopConditionMet({
|
|
5951
|
+
} while (steps[steps.length - 1].finishReason !== "interrupted" && clientToolOutputs.length + deniedToolApprovalResponses.length === clientToolCalls.length && (clientToolCalls.length > 0 || pendingDeferredToolCalls.size > 0) && !await isStopConditionMet({
|
|
5947
5952
|
stopConditions,
|
|
5948
5953
|
steps
|
|
5949
5954
|
}));
|
|
@@ -6520,6 +6525,7 @@ const uiMessageChunkSchema = lazySchema(() => zodSchema$1(z.union([
|
|
|
6520
6525
|
"content-filter",
|
|
6521
6526
|
"tool-calls",
|
|
6522
6527
|
"error",
|
|
6528
|
+
"interrupted",
|
|
6523
6529
|
"other"
|
|
6524
6530
|
]).optional(),
|
|
6525
6531
|
messageMetadata: z.unknown().optional()
|
|
@@ -8394,6 +8400,7 @@ function createLanguageModelV4StreamPartToLanguageModelStreamPartTransform({ too
|
|
|
8394
8400
|
let timeToFirstOutputMs;
|
|
8395
8401
|
let previousOutputChunkTimestampMs;
|
|
8396
8402
|
const timeBetweenOutputChunksMs = [];
|
|
8403
|
+
const withholdToolParts = toolChoice.type === "none";
|
|
8397
8404
|
return new TransformStream({ async transform(chunk, controller) {
|
|
8398
8405
|
if (isOutputChunk(chunk)) {
|
|
8399
8406
|
const outputChunkTimestampMs = now();
|
|
@@ -8401,6 +8408,7 @@ function createLanguageModelV4StreamPartToLanguageModelStreamPartTransform({ too
|
|
|
8401
8408
|
else if (previousOutputChunkTimestampMs != null) timeBetweenOutputChunksMs.push(outputChunkTimestampMs - previousOutputChunkTimestampMs);
|
|
8402
8409
|
previousOutputChunkTimestampMs = outputChunkTimestampMs;
|
|
8403
8410
|
}
|
|
8411
|
+
if (withholdToolParts && (chunk.type === "tool-input-start" || chunk.type === "tool-input-delta" || chunk.type === "tool-input-end")) return;
|
|
8404
8412
|
switch (chunk.type) {
|
|
8405
8413
|
case "error":
|
|
8406
8414
|
controller.enqueue({
|
|
@@ -8562,8 +8570,8 @@ function createLanguageModelV4StreamPartToLanguageModelStreamPartTransform({ too
|
|
|
8562
8570
|
},
|
|
8563
8571
|
callbacks: onLanguageModelCallEnd
|
|
8564
8572
|
});
|
|
8565
|
-
const enforcedToolChoice = toolChoice.type === "
|
|
8566
|
-
const toolChoiceViolationError = enforcedToolChoice != null && ![...toolCallsByToolCallId.values()].some((toolCall) => enforcedToolChoice.type === "required" || toolCall.toolName === enforcedToolChoice.toolName) ? new ToolChoiceViolationError({
|
|
8573
|
+
const enforcedToolChoice = toolChoice.type === "auto" ? void 0 : toolChoice;
|
|
8574
|
+
const toolChoiceViolationError = enforcedToolChoice != null && (enforcedToolChoice.type === "none" ? toolCallsByToolCallId.size > 0 : chunk.finishReason.unified !== "interrupted" && ![...toolCallsByToolCallId.values()].some((toolCall) => enforcedToolChoice.type === "required" || toolCall.toolName === enforcedToolChoice.toolName)) ? new ToolChoiceViolationError({
|
|
8567
8575
|
toolChoice: enforcedToolChoice,
|
|
8568
8576
|
finishReason: chunk.finishReason.unified,
|
|
8569
8577
|
provider,
|
|
@@ -8593,15 +8601,16 @@ function createLanguageModelV4StreamPartToLanguageModelStreamPartTransform({ too
|
|
|
8593
8601
|
const toolCall = await parseToolCall({
|
|
8594
8602
|
toolCall: chunk,
|
|
8595
8603
|
tools,
|
|
8596
|
-
repairToolCall,
|
|
8597
|
-
refineToolInput,
|
|
8604
|
+
repairToolCall: withholdToolParts ? void 0 : repairToolCall,
|
|
8605
|
+
refineToolInput: withholdToolParts ? void 0 : refineToolInput,
|
|
8598
8606
|
instructions,
|
|
8599
8607
|
messages,
|
|
8600
8608
|
abortSignal
|
|
8601
8609
|
});
|
|
8602
8610
|
toolCallsByToolCallId.set(toolCall.toolCallId, toolCall);
|
|
8603
|
-
controller.enqueue(toolCall);
|
|
8604
8611
|
if (collectContent) modelCallContent.push(toolCall);
|
|
8612
|
+
if (withholdToolParts) break;
|
|
8613
|
+
controller.enqueue(toolCall);
|
|
8605
8614
|
if (toolCall.invalid) {
|
|
8606
8615
|
if (!toolCall.providerExecuted) controller.enqueue({
|
|
8607
8616
|
type: "tool-error",
|
|
@@ -8624,6 +8633,7 @@ function createLanguageModelV4StreamPartToLanguageModelStreamPartTransform({ too
|
|
|
8624
8633
|
break;
|
|
8625
8634
|
case "tool-approval-request": {
|
|
8626
8635
|
if (collectContent) rawModelCallContent.push(chunk);
|
|
8636
|
+
if (withholdToolParts) break;
|
|
8627
8637
|
const toolCall = toolCallsByToolCallId.get(chunk.toolCallId);
|
|
8628
8638
|
if (toolCall == null) {
|
|
8629
8639
|
controller.enqueue({
|
|
@@ -8669,7 +8679,7 @@ function createLanguageModelV4StreamPartToLanguageModelStreamPartTransform({ too
|
|
|
8669
8679
|
...chunk.providerMetadata != null ? { providerMetadata: chunk.providerMetadata } : {},
|
|
8670
8680
|
...toolCall?.toolMetadata != null ? { toolMetadata: toolCall.toolMetadata } : {}
|
|
8671
8681
|
};
|
|
8672
|
-
controller.enqueue(toolResultPart);
|
|
8682
|
+
if (!withholdToolParts) controller.enqueue(toolResultPart);
|
|
8673
8683
|
if (collectContent) modelCallContent.push(toolResultPart);
|
|
8674
8684
|
break;
|
|
8675
8685
|
}
|
|
@@ -9783,7 +9793,7 @@ var DefaultStreamTextResult = class {
|
|
|
9783
9793
|
tools,
|
|
9784
9794
|
activeTools: prepareStepResult?.activeTools ?? activeTools
|
|
9785
9795
|
});
|
|
9786
|
-
const { executionTools
|
|
9796
|
+
const { executionTools, modelTools: stepModelTools, toolCallerMessages } = prepareToolsForToolCallers({
|
|
9787
9797
|
tools: prepareToolSearch(stepActiveTools, {
|
|
9788
9798
|
toolsContext,
|
|
9789
9799
|
experimental_sandbox: stepSandbox
|
|
@@ -9798,6 +9808,7 @@ var DefaultStreamTextResult = class {
|
|
|
9798
9808
|
experimental_sandbox: stepSandbox
|
|
9799
9809
|
});
|
|
9800
9810
|
const stepToolChoice = prepareToolChoice({ toolChoice: prepareStepResult?.toolChoice ?? toolChoice });
|
|
9811
|
+
const stepExecutionTools = stepToolChoice.type === "none" ? void 0 : executionTools;
|
|
9801
9812
|
const stepMessages = appendToolCallerMessages({
|
|
9802
9813
|
messages: prepareStepResult?.messages ?? stepInputMessages,
|
|
9803
9814
|
toolCallerMessages
|
|
@@ -10244,7 +10255,7 @@ var DefaultStreamTextResult = class {
|
|
|
10244
10255
|
}
|
|
10245
10256
|
for (const output of stepToolOutputs) if (output.type === "tool-result" || output.type === "tool-error") pendingDeferredToolCalls.delete(output.toolCallId);
|
|
10246
10257
|
cleanupStepTimeouts();
|
|
10247
|
-
if (clientToolCalls.length === clientToolOutputs.length + deniedToolApprovalResponses.length && (clientToolCalls.length > 0 || pendingDeferredToolCalls.size > 0) && !await isStopConditionMet({
|
|
10258
|
+
if (stepFinishReason !== "interrupted" && clientToolCalls.length === clientToolOutputs.length + deniedToolApprovalResponses.length && (clientToolCalls.length > 0 || pendingDeferredToolCalls.size > 0) && !await isStopConditionMet({
|
|
10248
10259
|
stopConditions,
|
|
10249
10260
|
steps: recordedSteps
|
|
10250
10261
|
})) try {
|
|
@@ -14830,6 +14841,280 @@ var DefaultSpeechResult = class {
|
|
|
14830
14841
|
}
|
|
14831
14842
|
};
|
|
14832
14843
|
//#endregion
|
|
14844
|
+
//#region src/generate-speech/is-streaming-speech-model.ts
|
|
14845
|
+
/**
|
|
14846
|
+
* Whether a resolved speech model implements the experimental streaming
|
|
14847
|
+
* speech extension (`Experimental_StreamingSpeechModelV4`).
|
|
14848
|
+
*/
|
|
14849
|
+
function isStreamingSpeechModel(model) {
|
|
14850
|
+
return typeof model.doStream === "function";
|
|
14851
|
+
}
|
|
14852
|
+
//#endregion
|
|
14853
|
+
//#region src/generate-speech/stream-speech.ts
|
|
14854
|
+
/**
|
|
14855
|
+
* Streams speech audio using a speech model.
|
|
14856
|
+
*
|
|
14857
|
+
* @param model - The speech model to use. It must support streaming speech.
|
|
14858
|
+
* @param text - The text to convert to speech: a complete string, or a stream of text deltas
|
|
14859
|
+
* (e.g. the text stream of `streamText`) or text parts that is synthesized as it arrives.
|
|
14860
|
+
* A text part can set its own `voice` on providers that support several voices per stream.
|
|
14861
|
+
* @param voice - The voice to use for speech generation.
|
|
14862
|
+
* @param outputFormat - The format of the output audio chunks, e.g. `{ type: 'audio/pcm', rate: 24000 }`.
|
|
14863
|
+
* @param instructions - Instructions for the speech generation e.g. "Speak in a slow and steady tone".
|
|
14864
|
+
* @param speed - The speed of the speech generation.
|
|
14865
|
+
* @param language - The language for speech generation (ISO 639-1 code e.g. "en", "es", "fr") or "auto" for automatic detection.
|
|
14866
|
+
* @param providerOptions - Additional provider-specific options.
|
|
14867
|
+
* @param abortSignal - An optional abort signal that can be used to cancel the call.
|
|
14868
|
+
* @param headers - Additional HTTP/WebSocket headers to send when supported by the provider.
|
|
14869
|
+
* @param includeRawChunks - When true, raw provider chunks are included in `fullStream`.
|
|
14870
|
+
* @param onError - Called for each provider error part; defaults to `console.error`.
|
|
14871
|
+
*
|
|
14872
|
+
* @returns A result object with the audio stream and the final usage and metadata.
|
|
14873
|
+
*/
|
|
14874
|
+
function streamSpeech({ model, text, voice, outputFormat, instructions, speed, language, providerOptions = {}, abortSignal, headers, includeRawChunks, onError = ({ error }) => {
|
|
14875
|
+
console.error(error);
|
|
14876
|
+
}, _internal: { currentDate = () => /* @__PURE__ */ new Date() } = {} }) {
|
|
14877
|
+
const resolvedModel = resolveSpeechModel(model);
|
|
14878
|
+
if (!resolvedModel) throw new Error("Model could not be resolved");
|
|
14879
|
+
if (!isStreamingSpeechModel(resolvedModel)) throw new UnsupportedFunctionalityError$1({
|
|
14880
|
+
functionality: "streaming speech",
|
|
14881
|
+
message: `The ${resolvedModel.provider} model "${resolvedModel.modelId}" does not support streaming speech.` + (typeof model === "string" ? " String model IDs resolve through the global provider (AI Gateway by default). If that provider does not support streaming speech, pass a provider model instance instead (e.g. elevenLabs.speech('eleven_flash_v2_5')) or upgrade @ai-sdk/gateway to a version with streaming speech support." : "")
|
|
14882
|
+
});
|
|
14883
|
+
const textStream = toTextStream$1(text);
|
|
14884
|
+
const headersWithUserAgent = withUserAgentSuffix(headers ?? {}, `ai/${VERSION}`);
|
|
14885
|
+
const usagePromise = new DelayedPromise();
|
|
14886
|
+
const warningsPromise = new DelayedPromise();
|
|
14887
|
+
const responsesPromise = new DelayedPromise();
|
|
14888
|
+
const providerMetadataPromise = new DelayedPromise();
|
|
14889
|
+
const rejectPendingPromises = (error) => {
|
|
14890
|
+
for (const promise of [
|
|
14891
|
+
usagePromise,
|
|
14892
|
+
warningsPromise,
|
|
14893
|
+
responsesPromise,
|
|
14894
|
+
providerMetadataPromise
|
|
14895
|
+
]) if (promise.isPending()) promise.reject(error);
|
|
14896
|
+
};
|
|
14897
|
+
const startedAt = currentDate();
|
|
14898
|
+
let response;
|
|
14899
|
+
const currentResponseMetadata = () => response ?? {
|
|
14900
|
+
timestamp: startedAt,
|
|
14901
|
+
modelId: resolvedModel.modelId
|
|
14902
|
+
};
|
|
14903
|
+
const resolveWarnings = (warnings) => {
|
|
14904
|
+
warningsPromise.resolve(warnings);
|
|
14905
|
+
logWarnings({
|
|
14906
|
+
warnings,
|
|
14907
|
+
provider: resolvedModel.provider,
|
|
14908
|
+
model: resolvedModel.modelId
|
|
14909
|
+
});
|
|
14910
|
+
};
|
|
14911
|
+
const pipeAbortController = new AbortController();
|
|
14912
|
+
let hasAudio = false;
|
|
14913
|
+
let finished = false;
|
|
14914
|
+
let lastError;
|
|
14915
|
+
const incompleteStreamError = () => hasAudio ? lastError ?? new StreamProviderError({ message: "The speech stream ended before it finished." }) : new NoSpeechGeneratedError({
|
|
14916
|
+
responses: [currentResponseMetadata()],
|
|
14917
|
+
cause: lastError
|
|
14918
|
+
});
|
|
14919
|
+
const transform = new TransformStream({
|
|
14920
|
+
transform(value, controller) {
|
|
14921
|
+
switch (value.type) {
|
|
14922
|
+
case "stream-start":
|
|
14923
|
+
resolveWarnings(value.warnings);
|
|
14924
|
+
break;
|
|
14925
|
+
case "response-metadata":
|
|
14926
|
+
response = {
|
|
14927
|
+
timestamp: value.timestamp ?? currentResponseMetadata().timestamp,
|
|
14928
|
+
modelId: value.modelId ?? currentResponseMetadata().modelId,
|
|
14929
|
+
headers: value.headers ?? response?.headers,
|
|
14930
|
+
body: value.body ?? response?.body
|
|
14931
|
+
};
|
|
14932
|
+
break;
|
|
14933
|
+
case "audio": {
|
|
14934
|
+
const audio = typeof value.audio === "string" ? convertBase64ToUint8Array(value.audio) : value.audio;
|
|
14935
|
+
if (audio.length === 0 && value.providerMetadata == null) break;
|
|
14936
|
+
hasAudio ||= audio.length > 0;
|
|
14937
|
+
controller.enqueue({
|
|
14938
|
+
type: "audio",
|
|
14939
|
+
...value.id != null && { id: value.id },
|
|
14940
|
+
audio,
|
|
14941
|
+
audioFormat: value.audioFormat,
|
|
14942
|
+
...value.providerMetadata != null && { providerMetadata: value.providerMetadata }
|
|
14943
|
+
});
|
|
14944
|
+
break;
|
|
14945
|
+
}
|
|
14946
|
+
case "raw":
|
|
14947
|
+
controller.enqueue(value);
|
|
14948
|
+
break;
|
|
14949
|
+
case "error":
|
|
14950
|
+
lastError = value.error;
|
|
14951
|
+
Promise.resolve().then(() => onError({ error: value.error })).catch(() => {});
|
|
14952
|
+
controller.enqueue(value);
|
|
14953
|
+
break;
|
|
14954
|
+
case "finish":
|
|
14955
|
+
if (!warningsPromise.isResolved()) resolveWarnings([]);
|
|
14956
|
+
if (!hasAudio) throw new NoSpeechGeneratedError({
|
|
14957
|
+
responses: [currentResponseMetadata()],
|
|
14958
|
+
cause: lastError
|
|
14959
|
+
});
|
|
14960
|
+
finished = true;
|
|
14961
|
+
usagePromise.resolve(value.usage ?? {});
|
|
14962
|
+
responsesPromise.resolve([currentResponseMetadata()]);
|
|
14963
|
+
providerMetadataPromise.resolve(value.providerMetadata ?? {});
|
|
14964
|
+
}
|
|
14965
|
+
},
|
|
14966
|
+
flush() {
|
|
14967
|
+
if (!finished) throw incompleteStreamError();
|
|
14968
|
+
},
|
|
14969
|
+
cancel(reason) {
|
|
14970
|
+
const cancelReason = reason ?? /* @__PURE__ */ new Error("Speech stream was cancelled.");
|
|
14971
|
+
rejectPendingPromises(cancelReason);
|
|
14972
|
+
pipeAbortController.abort(cancelReason);
|
|
14973
|
+
}
|
|
14974
|
+
});
|
|
14975
|
+
if (abortSignal != null) {
|
|
14976
|
+
const onAbort = () => {
|
|
14977
|
+
const reason = abortSignal.reason;
|
|
14978
|
+
rejectPendingPromises(reason);
|
|
14979
|
+
pipeAbortController.abort(reason);
|
|
14980
|
+
transform.writable.abort(reason).catch(() => {});
|
|
14981
|
+
};
|
|
14982
|
+
if (abortSignal.aborted) onAbort();
|
|
14983
|
+
else abortSignal.addEventListener("abort", onAbort, { once: true });
|
|
14984
|
+
}
|
|
14985
|
+
(async () => {
|
|
14986
|
+
const result = await resolvedModel.doStream({
|
|
14987
|
+
text: textStream,
|
|
14988
|
+
voice,
|
|
14989
|
+
outputFormat,
|
|
14990
|
+
instructions,
|
|
14991
|
+
speed,
|
|
14992
|
+
language,
|
|
14993
|
+
providerOptions,
|
|
14994
|
+
abortSignal: mergeAbortSignals(abortSignal, pipeAbortController.signal),
|
|
14995
|
+
headers: headersWithUserAgent,
|
|
14996
|
+
includeRawChunks
|
|
14997
|
+
});
|
|
14998
|
+
response = {
|
|
14999
|
+
timestamp: result.response?.timestamp ?? startedAt,
|
|
15000
|
+
modelId: result.response?.modelId ?? resolvedModel.modelId,
|
|
15001
|
+
headers: result.response?.headers,
|
|
15002
|
+
body: result.response?.body
|
|
15003
|
+
};
|
|
15004
|
+
await result.stream.pipeTo(transform.writable, { signal: pipeAbortController.signal });
|
|
15005
|
+
})().catch((error) => {
|
|
15006
|
+
const reason = error ?? /* @__PURE__ */ new Error("Speech stream was cancelled or errored.");
|
|
15007
|
+
rejectPendingPromises(reason);
|
|
15008
|
+
textStream.cancel(reason).catch(() => {});
|
|
15009
|
+
transform.writable.abort(reason).catch(() => {});
|
|
15010
|
+
});
|
|
15011
|
+
let streamOwner = "unclaimed";
|
|
15012
|
+
function consumeStream() {
|
|
15013
|
+
if (streamOwner !== "unclaimed") return;
|
|
15014
|
+
streamOwner = "result-promises";
|
|
15015
|
+
const reader = transform.readable.getReader();
|
|
15016
|
+
(async () => {
|
|
15017
|
+
while (!(await reader.read()).done);
|
|
15018
|
+
})().catch(() => {});
|
|
15019
|
+
}
|
|
15020
|
+
function claimStream(owner) {
|
|
15021
|
+
if (streamOwner !== "unclaimed") throw new Error(streamOwner === "result-promises" ? `${owner === "full-stream" ? "fullStream" : "audioStream"} cannot be accessed after a result promise.` : "Only one of audioStream or fullStream can be accessed, and only once.");
|
|
15022
|
+
streamOwner = owner;
|
|
15023
|
+
return transform.readable;
|
|
15024
|
+
}
|
|
15025
|
+
return {
|
|
15026
|
+
get usage() {
|
|
15027
|
+
consumeStream();
|
|
15028
|
+
return usagePromise.promise;
|
|
15029
|
+
},
|
|
15030
|
+
get warnings() {
|
|
15031
|
+
consumeStream();
|
|
15032
|
+
return warningsPromise.promise;
|
|
15033
|
+
},
|
|
15034
|
+
get responses() {
|
|
15035
|
+
consumeStream();
|
|
15036
|
+
return responsesPromise.promise;
|
|
15037
|
+
},
|
|
15038
|
+
get providerMetadata() {
|
|
15039
|
+
consumeStream();
|
|
15040
|
+
return providerMetadataPromise.promise;
|
|
15041
|
+
},
|
|
15042
|
+
get fullStream() {
|
|
15043
|
+
return asAsyncIterableStream(claimStream("full-stream"));
|
|
15044
|
+
},
|
|
15045
|
+
get audioStream() {
|
|
15046
|
+
return asAsyncIterableStream(createAudioByteStream(claimStream("audio-stream")));
|
|
15047
|
+
}
|
|
15048
|
+
};
|
|
15049
|
+
}
|
|
15050
|
+
/**
|
|
15051
|
+
* Projects speech parts to audio bytes with a pull-based stream rather than a
|
|
15052
|
+
* second `pipeThrough`, so an early consumer cancel cancels the part stream
|
|
15053
|
+
* directly instead of surfacing an unhandled rejection from a chained pipe.
|
|
15054
|
+
*/
|
|
15055
|
+
function createAudioByteStream(parts) {
|
|
15056
|
+
let reader;
|
|
15057
|
+
return new ReadableStream({
|
|
15058
|
+
async pull(controller) {
|
|
15059
|
+
reader ??= parts.getReader();
|
|
15060
|
+
for (;;) {
|
|
15061
|
+
const { done, value } = await reader.read();
|
|
15062
|
+
if (done) {
|
|
15063
|
+
controller.close();
|
|
15064
|
+
return;
|
|
15065
|
+
}
|
|
15066
|
+
if (value.type === "audio" && value.audio.length > 0) {
|
|
15067
|
+
controller.enqueue(value.audio);
|
|
15068
|
+
return;
|
|
15069
|
+
}
|
|
15070
|
+
}
|
|
15071
|
+
},
|
|
15072
|
+
async cancel(reason) {
|
|
15073
|
+
if (reader != null) await reader.cancel(reason).catch(() => {});
|
|
15074
|
+
else await parts.cancel(reason).catch(() => {});
|
|
15075
|
+
}
|
|
15076
|
+
});
|
|
15077
|
+
}
|
|
15078
|
+
function toTextStream$1(text) {
|
|
15079
|
+
if (typeof text === "string") return new ReadableStream({ start(controller) {
|
|
15080
|
+
controller.enqueue({
|
|
15081
|
+
type: "text",
|
|
15082
|
+
text
|
|
15083
|
+
});
|
|
15084
|
+
controller.close();
|
|
15085
|
+
} });
|
|
15086
|
+
return toSourceStream(text).pipeThrough(new TransformStream({ transform(value, controller) {
|
|
15087
|
+
controller.enqueue(toTextPart(value));
|
|
15088
|
+
} }));
|
|
15089
|
+
}
|
|
15090
|
+
function toSourceStream(text) {
|
|
15091
|
+
if (text instanceof ReadableStream) return text;
|
|
15092
|
+
if (typeof text?.[Symbol.asyncIterator] === "function") return convertAsyncIteratorToReadableStream(text[Symbol.asyncIterator]());
|
|
15093
|
+
if (typeof text?.[Symbol.iterator] === "function") {
|
|
15094
|
+
const iterable = text;
|
|
15095
|
+
return convertAsyncIteratorToReadableStream((async function* () {
|
|
15096
|
+
yield* iterable;
|
|
15097
|
+
})());
|
|
15098
|
+
}
|
|
15099
|
+
throw new InvalidArgumentError({
|
|
15100
|
+
parameter: "text",
|
|
15101
|
+
value: text,
|
|
15102
|
+
message: "Expected a string, an iterable or async iterable, or a ReadableStream of strings or text parts."
|
|
15103
|
+
});
|
|
15104
|
+
}
|
|
15105
|
+
function toTextPart(value) {
|
|
15106
|
+
if (typeof value === "string") return {
|
|
15107
|
+
type: "text",
|
|
15108
|
+
text: value
|
|
15109
|
+
};
|
|
15110
|
+
return {
|
|
15111
|
+
type: "text",
|
|
15112
|
+
text: value.text,
|
|
15113
|
+
...value.voice != null && { voice: value.voice },
|
|
15114
|
+
...value.providerOptions != null && { providerOptions: value.providerOptions }
|
|
15115
|
+
};
|
|
15116
|
+
}
|
|
15117
|
+
//#endregion
|
|
14833
15118
|
//#region src/generate-speech/index.ts
|
|
14834
15119
|
/**
|
|
14835
15120
|
* @deprecated Use `generateSpeech` instead.
|
|
@@ -20035,6 +20320,7 @@ var AbstractChat = class {
|
|
|
20035
20320
|
}
|
|
20036
20321
|
constructor({ generateId = generateId$1, id, transport = new DefaultChatTransport(), messageMetadataSchema, dataPartSchemas, state, onError, onToolCall, onFinish, onData, sendAutomaticallyWhen }) {
|
|
20037
20322
|
this.pendingMessagePreparations = /* @__PURE__ */ new Set();
|
|
20323
|
+
this.interruptedMessageIds = /* @__PURE__ */ new Set();
|
|
20038
20324
|
this.activeResponse = void 0;
|
|
20039
20325
|
this.activeResumeRequest = void 0;
|
|
20040
20326
|
this.resumableStreamState = void 0;
|
|
@@ -20166,7 +20452,7 @@ var AbstractChat = class {
|
|
|
20166
20452
|
}
|
|
20167
20453
|
if (this.activeResponse) this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(updatePart);
|
|
20168
20454
|
if (messageIndex !== -1 && this.status !== "streaming" && this.status !== "submitted" && this.sendAutomaticallyWhen) {
|
|
20169
|
-
const shouldSend = await this.shouldSendAutomatically();
|
|
20455
|
+
const shouldSend = await this.shouldSendAutomatically(messages[messageIndex].id);
|
|
20170
20456
|
if (shouldSend) this.runAutomaticRequest(() => {
|
|
20171
20457
|
const messageId = messageIndex === -1 ? this.lastMessage?.id : messages[messageIndex].id;
|
|
20172
20458
|
return this.makeRequestForToolApproval({
|
|
@@ -20212,7 +20498,7 @@ var AbstractChat = class {
|
|
|
20212
20498
|
}
|
|
20213
20499
|
if (this.activeResponse) this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(updatePart);
|
|
20214
20500
|
if (messageIndex !== -1 && this.status !== "streaming" && this.status !== "submitted" && this.sendAutomaticallyWhen) {
|
|
20215
|
-
const shouldSend = await this.shouldSendAutomatically();
|
|
20501
|
+
const shouldSend = await this.shouldSendAutomatically(messages[messageIndex].id);
|
|
20216
20502
|
if (shouldSend) this.runAutomaticRequest(() => this.makeRequest({
|
|
20217
20503
|
trigger: "submit-message",
|
|
20218
20504
|
messageId: messages[messageIndex].id,
|
|
@@ -20283,11 +20569,10 @@ var AbstractChat = class {
|
|
|
20283
20569
|
set messages(messages) {
|
|
20284
20570
|
this.state.messages = messages;
|
|
20285
20571
|
}
|
|
20286
|
-
async shouldSendAutomatically() {
|
|
20287
|
-
|
|
20288
|
-
|
|
20289
|
-
|
|
20290
|
-
return result;
|
|
20572
|
+
async shouldSendAutomatically(messageId = this.lastMessage?.id) {
|
|
20573
|
+
const isInterrupted = (id) => id != null && this.interruptedMessageIds.has(id);
|
|
20574
|
+
if (!this.sendAutomaticallyWhen || isInterrupted(messageId) || isInterrupted(this.lastMessage?.id)) return false;
|
|
20575
|
+
return await this.sendAutomaticallyWhen({ messages: this.state.messages }) && !isInterrupted(messageId) && !isInterrupted(this.lastMessage?.id);
|
|
20291
20576
|
}
|
|
20292
20577
|
async runAutomaticRequest(request, shouldSend) {
|
|
20293
20578
|
const stopGeneration = this.stopGeneration;
|
|
@@ -20486,20 +20771,25 @@ var AbstractChat = class {
|
|
|
20486
20771
|
});
|
|
20487
20772
|
} finally {
|
|
20488
20773
|
try {
|
|
20489
|
-
if (activeResponse)
|
|
20490
|
-
message
|
|
20491
|
-
|
|
20492
|
-
isAbort
|
|
20493
|
-
|
|
20494
|
-
|
|
20495
|
-
|
|
20496
|
-
|
|
20774
|
+
if (activeResponse) {
|
|
20775
|
+
const { message, finishReason } = activeResponse.state;
|
|
20776
|
+
if (finishReason === "interrupted") this.interruptedMessageIds.add(message.id);
|
|
20777
|
+
else if (!isAbort && !isError) this.interruptedMessageIds.delete(message.id);
|
|
20778
|
+
this.onFinish?.({
|
|
20779
|
+
message: activeResponse.state.message,
|
|
20780
|
+
messages: this.state.messages,
|
|
20781
|
+
isAbort,
|
|
20782
|
+
isDisconnect,
|
|
20783
|
+
isError,
|
|
20784
|
+
finishReason: activeResponse.state.finishReason
|
|
20785
|
+
});
|
|
20786
|
+
}
|
|
20497
20787
|
} finally {
|
|
20498
20788
|
if (this.activeResponse === activeResponse) this.activeResponse = void 0;
|
|
20499
20789
|
clearActiveResumeRequest();
|
|
20500
20790
|
}
|
|
20501
20791
|
}
|
|
20502
|
-
if (!isAbort && !isError) await this.runAutomaticRequest(() => this.makeRequest({
|
|
20792
|
+
if (!isAbort && !isError && activeResponse?.state.finishReason !== "interrupted") await this.runAutomaticRequest(() => this.makeRequest({
|
|
20503
20793
|
trigger: "submit-message",
|
|
20504
20794
|
messageId: this.lastMessage?.id,
|
|
20505
20795
|
metadata,
|
|
@@ -21194,6 +21484,6 @@ async function uploadSkill({ api, files, displayTitle, providerOptions }) {
|
|
|
21194
21484
|
});
|
|
21195
21485
|
}
|
|
21196
21486
|
//#endregion
|
|
21197
|
-
export { AISDKError, AI_SDK_TELEMETRY_TRACING_CHANNEL, APICallError, AbstractChat, DefaultChatTransport, DefaultGeneratedFile, DirectChatTransport, DownloadError, EmptyResponseBodyError, AbstractRealtimeSession as Experimental_AbstractRealtimeSession, ToolLoopAgent as Experimental_Agent, ToolLoopAgent, Experimental_DecisionRefusalError, Experimental_DecisionUnsupportedQuestionTypeError, Experimental_EvaluationUnsupportedQuestionTypeError, HttpChatTransport, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidPromptError, InvalidResponseDataError, InvalidStreamPartError, InvalidToolApprovalError, InvalidToolApprovalSignatureError, InvalidToolInputError, JSONParseError, JsonToSseTransformStream, LoadAPIKeyError, LoadSettingError, MessageConversionError, MissingToolResultsError, NoContentGeneratedError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoSpeechGeneratedError, NoSuchModelError, NoSuchProviderError, NoSuchProviderReferenceError, NoSuchToolError, NoTranscriptGeneratedError, NoTranslationGeneratedError, NoVideoGeneratedError, output_exports as Output, RetryError, SerialJobExecutor, StreamProviderError, TextStreamChatTransport, TooManyEmbeddingValuesForCallError, ToolCallNotFoundForApprovalError, ToolCallRepairError, ToolChoiceViolationError, TypeValidationError, UIMessageStreamError, UI_MESSAGE_STREAM_HEADERS, UnsupportedFunctionalityError, UnsupportedModelVersionError, WebSocketChatTransport, addToolInputExamplesMiddleware, asSchema, assistantModelMessageSchema, callCompletionApi, consumeStream, convertDataContentToBase64String, convertFileListToFileUIParts, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createDownload, createGateway, createIdGenerator, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultEmbeddingSettingsMiddleware, defaultInstructionsMiddleware, defaultSettingsMiddleware, detectToolDrift, dynamicTool, embed, embedMany, cancelBatch as experimental_cancelBatch, experimental_createProviderRegistry, decide as experimental_decide, decodeRealtimeAudio as experimental_decodeRealtimeAudio, encodeRealtimeAudio as experimental_encodeRealtimeAudio, experimental_evaluate, filterActiveTools as experimental_filterActiveTools, experimental_generateSpeech, experimental_generateVideo, getBatchResults as experimental_getBatchResults, getBatchStatus as experimental_getBatchStatus, getRealtimeToolDefinitions as experimental_getRealtimeToolDefinitions, experimental_getVideoStatus, listBatches as experimental_listBatches, resampleAudio as experimental_resampleAudio, startBatch as experimental_startBatch, experimental_startVideo, streamLanguageModelCall as experimental_streamLanguageModelCall, streamTextLowMemory as experimental_streamTextLowMemory, streamTranscribe as experimental_streamTranscribe, streamTranslate as experimental_streamTranslate, experimental_toolCaller, experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, fingerprintTools, gateway, generateId, generateImage, generateObject, generateSpeech, generateText, getChunkTimeoutMs, getFirstChunkTimeoutMs, getStaticToolName, getStepTimeoutMs, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, getToolTimeoutMs, getTotalTimeoutMs, hasToolCall, isCustomContentUIPart, isDataUIPart, isDeepEqualData, isDynamicToolUIPart, isFileUIPart, isLoopFinished, isReasoningFileUIPart, isReasoningUIPart, isStaticToolUIPart, isStepCount, isStepCount as stepCountIs, isTextUIPart, isToolOutputErrorUIPart, isToolUIPart, jsonSchema, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parseJsonEventStream, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, registerTelemetry, rerank, safeValidateUIMessages, safeValidateWebSocketChatTransportRequest, simulateReadableStream, simulateStreamingMiddleware, smoothStream, streamObject, streamText, systemModelMessageSchema, toTextStream, toUIMessageChunk, toUIMessageStream, tool, toolModelMessageSchema, toolSearch, transcribe, uiMessageChunkSchema, uploadFile, uploadSkill, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider, zodSchema };
|
|
21487
|
+
export { AISDKError, AI_SDK_TELEMETRY_TRACING_CHANNEL, APICallError, AbstractChat, DefaultChatTransport, DefaultGeneratedFile, DirectChatTransport, DownloadError, EmptyResponseBodyError, AbstractRealtimeSession as Experimental_AbstractRealtimeSession, ToolLoopAgent as Experimental_Agent, ToolLoopAgent, Experimental_DecisionRefusalError, Experimental_DecisionUnsupportedQuestionTypeError, Experimental_EvaluationUnsupportedQuestionTypeError, HttpChatTransport, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidPromptError, InvalidResponseDataError, InvalidStreamPartError, InvalidToolApprovalError, InvalidToolApprovalSignatureError, InvalidToolInputError, JSONParseError, JsonToSseTransformStream, LoadAPIKeyError, LoadSettingError, MessageConversionError, MissingToolResultsError, NoContentGeneratedError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoSpeechGeneratedError, NoSuchModelError, NoSuchProviderError, NoSuchProviderReferenceError, NoSuchToolError, NoTranscriptGeneratedError, NoTranslationGeneratedError, NoVideoGeneratedError, output_exports as Output, RetryError, SerialJobExecutor, StreamProviderError, TextStreamChatTransport, TooManyEmbeddingValuesForCallError, ToolCallNotFoundForApprovalError, ToolCallRepairError, ToolChoiceViolationError, TypeValidationError, UIMessageStreamError, UI_MESSAGE_STREAM_HEADERS, UnsupportedFunctionalityError, UnsupportedModelVersionError, WebSocketChatTransport, addToolInputExamplesMiddleware, asSchema, assistantModelMessageSchema, callCompletionApi, consumeStream, convertDataContentToBase64String, convertFileListToFileUIParts, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createDownload, createGateway, createIdGenerator, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultEmbeddingSettingsMiddleware, defaultInstructionsMiddleware, defaultSettingsMiddleware, detectToolDrift, dynamicTool, embed, embedMany, cancelBatch as experimental_cancelBatch, experimental_createProviderRegistry, decide as experimental_decide, decodeRealtimeAudio as experimental_decodeRealtimeAudio, encodeRealtimeAudio as experimental_encodeRealtimeAudio, experimental_evaluate, filterActiveTools as experimental_filterActiveTools, experimental_generateSpeech, experimental_generateVideo, getBatchResults as experimental_getBatchResults, getBatchStatus as experimental_getBatchStatus, getRealtimeToolDefinitions as experimental_getRealtimeToolDefinitions, experimental_getVideoStatus, listBatches as experimental_listBatches, resampleAudio as experimental_resampleAudio, startBatch as experimental_startBatch, experimental_startVideo, streamLanguageModelCall as experimental_streamLanguageModelCall, streamSpeech as experimental_streamSpeech, streamTextLowMemory as experimental_streamTextLowMemory, streamTranscribe as experimental_streamTranscribe, streamTranslate as experimental_streamTranslate, experimental_toolCaller, experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, fingerprintTools, gateway, generateId, generateImage, generateObject, generateSpeech, generateText, getChunkTimeoutMs, getFirstChunkTimeoutMs, getStaticToolName, getStepTimeoutMs, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, getToolTimeoutMs, getTotalTimeoutMs, hasToolCall, isCustomContentUIPart, isDataUIPart, isDeepEqualData, isDynamicToolUIPart, isFileUIPart, isLoopFinished, isReasoningFileUIPart, isReasoningUIPart, isStaticToolUIPart, isStepCount, isStepCount as stepCountIs, isTextUIPart, isToolOutputErrorUIPart, isToolUIPart, jsonSchema, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parseJsonEventStream, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, registerTelemetry, rerank, safeValidateUIMessages, safeValidateWebSocketChatTransportRequest, simulateReadableStream, simulateStreamingMiddleware, smoothStream, streamObject, streamText, systemModelMessageSchema, toTextStream, toUIMessageChunk, toUIMessageStream, tool, toolModelMessageSchema, toolSearch, transcribe, uiMessageChunkSchema, uploadFile, uploadSkill, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider, zodSchema };
|
|
21198
21488
|
|
|
21199
21489
|
//# sourceMappingURL=index.js.map
|