ai 7.0.97 → 7.0.99
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 +28 -0
- package/dist/index.d.ts +565 -474
- package/dist/index.js +1380 -1182
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +13 -5
- package/dist/internal/index.js +16 -14
- package/dist/internal/index.js.map +1 -1
- package/docs/02-foundations/02-providers-and-models.mdx +1 -0
- package/docs/03-ai-sdk-core/42-batch.mdx +48 -9
- package/docs/03-ai-sdk-core/60-telemetry.mdx +28 -5
- package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +16 -1
- package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +31 -5
- package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +32 -6
- package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +19 -5
- package/docs/07-reference/01-ai-sdk-core/20-start-batch.mdx +1 -2
- package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +28 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-invalid-argument-error.mdx +6 -1
- package/package.json +12 -12
- package/src/batch/batch-types.ts +64 -5
- package/src/batch/batch.ts +100 -4
- package/src/batch/index.ts +3 -0
- package/src/embed/embed-events.ts +9 -3
- package/src/embed/embed-many.ts +25 -11
- package/src/embed/embed.ts +19 -9
- package/src/embed/restricted-telemetry-dispatcher.ts +44 -0
- package/src/generate-image/generate-image.ts +2 -2
- package/src/generate-text/restricted-telemetry-dispatcher.ts +1 -22
- package/src/rerank/rerank-events.ts +9 -3
- package/src/rerank/rerank.ts +53 -14
- package/src/rerank/restricted-telemetry-dispatcher.ts +44 -0
- package/src/telemetry/filter-included-context.ts +24 -0
- package/src/ui/index.ts +2 -0
- package/src/ui/ui-messages.ts +24 -2
- package/src/ui/validate-ui-messages.ts +13 -4
- package/src/util/data-url.ts +14 -2
- package/src/util/split-array.ts +8 -1
package/dist/index.js
CHANGED
|
@@ -1178,7 +1178,7 @@ import {
|
|
|
1178
1178
|
} from "@ai-sdk/provider-utils";
|
|
1179
1179
|
|
|
1180
1180
|
// src/version.ts
|
|
1181
|
-
var VERSION = true ? "7.0.
|
|
1181
|
+
var VERSION = true ? "7.0.99" : "0.0.0-test";
|
|
1182
1182
|
|
|
1183
1183
|
// src/util/download/download.ts
|
|
1184
1184
|
var download = async ({
|
|
@@ -4387,6 +4387,21 @@ function normalizeToolApprovalStatus(status) {
|
|
|
4387
4387
|
return status === void 0 ? { type: "not-applicable" } : typeof status === "string" ? { type: status } : status;
|
|
4388
4388
|
}
|
|
4389
4389
|
|
|
4390
|
+
// src/telemetry/filter-included-context.ts
|
|
4391
|
+
function filterIncludedContext({
|
|
4392
|
+
context,
|
|
4393
|
+
includeContext
|
|
4394
|
+
}) {
|
|
4395
|
+
if (context == null) {
|
|
4396
|
+
return {};
|
|
4397
|
+
}
|
|
4398
|
+
return Object.fromEntries(
|
|
4399
|
+
Object.entries(context).filter(
|
|
4400
|
+
([key]) => (includeContext == null ? void 0 : includeContext[key]) === true
|
|
4401
|
+
)
|
|
4402
|
+
);
|
|
4403
|
+
}
|
|
4404
|
+
|
|
4390
4405
|
// src/telemetry/create-telemetry-dispatcher.ts
|
|
4391
4406
|
import { asArray as asArray4 } from "@ai-sdk/provider-utils";
|
|
4392
4407
|
|
|
@@ -4759,19 +4774,6 @@ var DefaultStepResult = class {
|
|
|
4759
4774
|
};
|
|
4760
4775
|
|
|
4761
4776
|
// src/generate-text/restricted-telemetry-dispatcher.ts
|
|
4762
|
-
function filterIncludedContext({
|
|
4763
|
-
context,
|
|
4764
|
-
includeContext
|
|
4765
|
-
}) {
|
|
4766
|
-
if (context == null) {
|
|
4767
|
-
return {};
|
|
4768
|
-
}
|
|
4769
|
-
return Object.fromEntries(
|
|
4770
|
-
Object.entries(context).filter(
|
|
4771
|
-
([key]) => (includeContext == null ? void 0 : includeContext[key]) === true
|
|
4772
|
-
)
|
|
4773
|
-
);
|
|
4774
|
-
}
|
|
4775
4777
|
function restrictStepResult({
|
|
4776
4778
|
step,
|
|
4777
4779
|
includeRuntimeContext,
|
|
@@ -6950,6 +6952,9 @@ function isDynamicToolUIPart(part) {
|
|
|
6950
6952
|
function isToolUIPart(part) {
|
|
6951
6953
|
return isStaticToolUIPart(part) || isDynamicToolUIPart(part);
|
|
6952
6954
|
}
|
|
6955
|
+
function isToolOutputErrorUIPart(part) {
|
|
6956
|
+
return isToolUIPart(part) && part.state === "output-error";
|
|
6957
|
+
}
|
|
6953
6958
|
function getStaticToolName(part) {
|
|
6954
6959
|
return part.type.split("-").slice(1).join("-");
|
|
6955
6960
|
}
|
|
@@ -12581,1264 +12586,1394 @@ import {
|
|
|
12581
12586
|
UnsupportedFunctionalityError as UnsupportedFunctionalityError3
|
|
12582
12587
|
} from "@ai-sdk/provider";
|
|
12583
12588
|
import { gateway as gateway2 } from "@ai-sdk/gateway";
|
|
12584
|
-
import {
|
|
12589
|
+
import {
|
|
12590
|
+
detectMediaType as detectMediaType3,
|
|
12591
|
+
withUserAgentSuffix as withUserAgentSuffix5
|
|
12592
|
+
} from "@ai-sdk/provider-utils";
|
|
12585
12593
|
|
|
12586
|
-
// src/
|
|
12587
|
-
|
|
12588
|
-
|
|
12589
|
-
|
|
12590
|
-
|
|
12591
|
-
|
|
12592
|
-
|
|
12593
|
-
|
|
12594
|
-
|
|
12595
|
-
}
|
|
12596
|
-
if (Array.isArray(obj1)) {
|
|
12597
|
-
if (obj1.length !== obj2.length) return false;
|
|
12598
|
-
for (let i = 0; i < obj1.length; i++) {
|
|
12599
|
-
if (!isDeepEqualData(obj1[i], obj2[i])) return false;
|
|
12600
|
-
}
|
|
12601
|
-
return true;
|
|
12602
|
-
}
|
|
12603
|
-
const keys1 = Object.keys(obj1);
|
|
12604
|
-
const keys2 = Object.keys(obj2);
|
|
12605
|
-
if (keys1.length !== keys2.length) return false;
|
|
12606
|
-
for (const key of keys1) {
|
|
12607
|
-
if (!keys2.includes(key)) return false;
|
|
12608
|
-
if (!isDeepEqualData(obj1[key], obj2[key])) return false;
|
|
12609
|
-
}
|
|
12610
|
-
return true;
|
|
12611
|
-
}
|
|
12594
|
+
// src/generate-image/generate-image.ts
|
|
12595
|
+
import {
|
|
12596
|
+
isJSONObject
|
|
12597
|
+
} from "@ai-sdk/provider";
|
|
12598
|
+
import {
|
|
12599
|
+
convertBase64ToUint8Array as convertBase64ToUint8Array4,
|
|
12600
|
+
detectMediaType as detectMediaType2,
|
|
12601
|
+
withUserAgentSuffix as withUserAgentSuffix4
|
|
12602
|
+
} from "@ai-sdk/provider-utils";
|
|
12612
12603
|
|
|
12613
|
-
// src/
|
|
12614
|
-
|
|
12615
|
-
|
|
12616
|
-
|
|
12617
|
-
|
|
12618
|
-
|
|
12619
|
-
|
|
12620
|
-
|
|
12621
|
-
}) {
|
|
12622
|
-
const batchApi = resolveBatchApi(provider);
|
|
12623
|
-
validateBatchReference({ batchApi, batch });
|
|
12624
|
-
if (batchApi.doCancelBatch == null) {
|
|
12625
|
-
throw new UnsupportedFunctionalityError3({
|
|
12626
|
-
functionality: "batch cancellation",
|
|
12627
|
-
message: "The provider does not support batch cancellation."
|
|
12628
|
-
});
|
|
12604
|
+
// src/prompt/data-content.ts
|
|
12605
|
+
import {
|
|
12606
|
+
convertBase64ToUint8Array as convertBase64ToUint8Array3,
|
|
12607
|
+
convertUint8ArrayToBase64 as convertUint8ArrayToBase643
|
|
12608
|
+
} from "@ai-sdk/provider-utils";
|
|
12609
|
+
function convertDataContentToBase64String(content) {
|
|
12610
|
+
if (typeof content === "string") {
|
|
12611
|
+
return content;
|
|
12629
12612
|
}
|
|
12630
|
-
|
|
12631
|
-
|
|
12632
|
-
getTotalTimeoutMs(timeout)
|
|
12633
|
-
);
|
|
12634
|
-
try {
|
|
12635
|
-
return await batchApi.doCancelBatch({
|
|
12636
|
-
batchId: batch.id,
|
|
12637
|
-
providerOptions,
|
|
12638
|
-
abortSignal: operationAbortSignal,
|
|
12639
|
-
headers: withUserAgentSuffix4(headers != null ? headers : {}, `ai/${VERSION}`)
|
|
12640
|
-
});
|
|
12641
|
-
} catch (error) {
|
|
12642
|
-
throw wrapGatewayError(error);
|
|
12613
|
+
if (content instanceof ArrayBuffer) {
|
|
12614
|
+
return convertUint8ArrayToBase643(new Uint8Array(content));
|
|
12643
12615
|
}
|
|
12616
|
+
return convertUint8ArrayToBase643(content);
|
|
12644
12617
|
}
|
|
12645
|
-
|
|
12646
|
-
|
|
12647
|
-
|
|
12648
|
-
limit,
|
|
12649
|
-
cursor,
|
|
12650
|
-
maxRetries,
|
|
12651
|
-
abortSignal,
|
|
12652
|
-
headers,
|
|
12653
|
-
timeout
|
|
12654
|
-
} = {}) {
|
|
12655
|
-
var _a25;
|
|
12656
|
-
const batchApi = resolveBatchApi(provider);
|
|
12657
|
-
const doListBatches = (_a25 = batchApi.doListBatches) == null ? void 0 : _a25.bind(batchApi);
|
|
12658
|
-
if (doListBatches == null) {
|
|
12659
|
-
throw new UnsupportedFunctionalityError3({
|
|
12660
|
-
functionality: "batch listing",
|
|
12661
|
-
message: "The provider does not support listing batches."
|
|
12662
|
-
});
|
|
12618
|
+
function convertDataContentToUint8Array(content) {
|
|
12619
|
+
if (content instanceof Uint8Array) {
|
|
12620
|
+
return content;
|
|
12663
12621
|
}
|
|
12664
|
-
|
|
12665
|
-
|
|
12666
|
-
|
|
12667
|
-
|
|
12668
|
-
|
|
12669
|
-
|
|
12670
|
-
|
|
12671
|
-
|
|
12672
|
-
|
|
12673
|
-
|
|
12674
|
-
|
|
12675
|
-
|
|
12676
|
-
|
|
12677
|
-
headers: withUserAgentSuffix4(headers != null ? headers : {}, `ai/${VERSION}`),
|
|
12678
|
-
...limit != null && { limit },
|
|
12679
|
-
...cursor != null && { cursor }
|
|
12680
|
-
})
|
|
12681
|
-
);
|
|
12682
|
-
return {
|
|
12683
|
-
batches: batches.map(({ batchId, ...status }) => ({
|
|
12684
|
-
version: 2,
|
|
12685
|
-
id: batchId,
|
|
12686
|
-
provider: batchApi.provider,
|
|
12687
|
-
...status
|
|
12688
|
-
})),
|
|
12689
|
-
...nextCursor != null && { nextCursor },
|
|
12690
|
-
...providerMetadata != null && { providerMetadata }
|
|
12691
|
-
};
|
|
12692
|
-
} catch (error) {
|
|
12693
|
-
throw wrapGatewayError(error);
|
|
12622
|
+
if (typeof content === "string") {
|
|
12623
|
+
try {
|
|
12624
|
+
return convertBase64ToUint8Array3(content);
|
|
12625
|
+
} catch (error) {
|
|
12626
|
+
throw new InvalidDataContentError({
|
|
12627
|
+
message: "Invalid data content. Content string is not a base64-encoded media.",
|
|
12628
|
+
content,
|
|
12629
|
+
cause: error
|
|
12630
|
+
});
|
|
12631
|
+
}
|
|
12632
|
+
}
|
|
12633
|
+
if (content instanceof ArrayBuffer) {
|
|
12634
|
+
return new Uint8Array(content);
|
|
12694
12635
|
}
|
|
12636
|
+
throw new InvalidDataContentError({ content });
|
|
12695
12637
|
}
|
|
12696
|
-
|
|
12697
|
-
|
|
12698
|
-
|
|
12638
|
+
|
|
12639
|
+
// src/generate-image/generate-image.ts
|
|
12640
|
+
var gatewayCostMetadataKeys = [
|
|
12641
|
+
"cost",
|
|
12642
|
+
"gatewayCost",
|
|
12643
|
+
"inferenceCost",
|
|
12644
|
+
"inputInferenceCost",
|
|
12645
|
+
"marketCost",
|
|
12646
|
+
"outputInferenceCost",
|
|
12647
|
+
"surchargeCost"
|
|
12648
|
+
];
|
|
12649
|
+
var RetryableNoImageResultError = class extends Error {
|
|
12650
|
+
constructor() {
|
|
12651
|
+
super("No image generated.");
|
|
12652
|
+
this.name = "RetryableNoImageResultError";
|
|
12653
|
+
}
|
|
12654
|
+
};
|
|
12655
|
+
async function generateImage({
|
|
12656
|
+
model: modelArg,
|
|
12657
|
+
prompt: promptArg,
|
|
12658
|
+
n = 1,
|
|
12659
|
+
maxImagesPerCall,
|
|
12660
|
+
size,
|
|
12661
|
+
aspectRatio,
|
|
12662
|
+
seed,
|
|
12699
12663
|
providerOptions,
|
|
12700
|
-
|
|
12664
|
+
maxRetries: maxRetriesArg,
|
|
12701
12665
|
abortSignal,
|
|
12702
|
-
headers
|
|
12703
|
-
timeout
|
|
12666
|
+
headers
|
|
12704
12667
|
}) {
|
|
12705
|
-
|
|
12706
|
-
const
|
|
12707
|
-
const operationAbortSignal = mergeAbortSignals(
|
|
12708
|
-
abortSignal,
|
|
12709
|
-
getTotalTimeoutMs(timeout)
|
|
12710
|
-
);
|
|
12711
|
-
const supportedUrls = await batchApi.supportedUrls;
|
|
12712
|
-
operationAbortSignal == null ? void 0 : operationAbortSignal.throwIfAborted();
|
|
12713
|
-
const normalizedRequests = [];
|
|
12714
|
-
const toolsByName = /* @__PURE__ */ new Map();
|
|
12715
|
-
for (const request of requests) {
|
|
12716
|
-
switch (request.type) {
|
|
12717
|
-
case "text": {
|
|
12718
|
-
const standardizedPrompt = await standardizePrompt(request);
|
|
12719
|
-
const preparedTools = await prepareTools({
|
|
12720
|
-
tools: request.tools,
|
|
12721
|
-
toolOrder: request.toolOrder,
|
|
12722
|
-
toolsContext: request.toolsContext
|
|
12723
|
-
});
|
|
12724
|
-
validateCompatibleTools({
|
|
12725
|
-
requestId: request.id,
|
|
12726
|
-
tools: preparedTools,
|
|
12727
|
-
toolsByName
|
|
12728
|
-
});
|
|
12729
|
-
normalizedRequests.push({
|
|
12730
|
-
id: request.id,
|
|
12731
|
-
type: request.type,
|
|
12732
|
-
modelId: request.model,
|
|
12733
|
-
options: {
|
|
12734
|
-
...prepareLanguageModelCallOptions(request),
|
|
12735
|
-
prompt: await convertToLanguageModelPrompt({
|
|
12736
|
-
prompt: standardizedPrompt,
|
|
12737
|
-
supportedUrls,
|
|
12738
|
-
download: void 0,
|
|
12739
|
-
provider: batchApi.provider.split(".")[0]
|
|
12740
|
-
}),
|
|
12741
|
-
tools: preparedTools,
|
|
12742
|
-
toolChoice: prepareToolChoice({ toolChoice: request.toolChoice }),
|
|
12743
|
-
providerOptions: request.providerOptions
|
|
12744
|
-
}
|
|
12745
|
-
});
|
|
12746
|
-
break;
|
|
12747
|
-
}
|
|
12748
|
-
}
|
|
12749
|
-
operationAbortSignal == null ? void 0 : operationAbortSignal.throwIfAborted();
|
|
12750
|
-
}
|
|
12668
|
+
var _a25, _b25;
|
|
12669
|
+
const model = resolveImageModel(modelArg);
|
|
12751
12670
|
const headersWithUserAgent = withUserAgentSuffix4(
|
|
12752
12671
|
headers != null ? headers : {},
|
|
12753
12672
|
`ai/${VERSION}`
|
|
12754
12673
|
);
|
|
12755
|
-
|
|
12756
|
-
|
|
12757
|
-
|
|
12758
|
-
|
|
12759
|
-
|
|
12760
|
-
|
|
12761
|
-
|
|
12762
|
-
|
|
12763
|
-
|
|
12764
|
-
|
|
12765
|
-
|
|
12674
|
+
const { retry } = prepareRetries({
|
|
12675
|
+
maxRetries: maxRetriesArg,
|
|
12676
|
+
abortSignal,
|
|
12677
|
+
additionalRetryableError: (error) => error instanceof RetryableNoImageResultError
|
|
12678
|
+
});
|
|
12679
|
+
const maxImagesPerCallWithDefault = (_a25 = maxImagesPerCall != null ? maxImagesPerCall : await invokeModelMaxImagesPerCall(model)) != null ? _a25 : 1;
|
|
12680
|
+
const callCount = Math.ceil(n / maxImagesPerCallWithDefault);
|
|
12681
|
+
const callImageCounts = Array.from({ length: callCount }, (_, i) => {
|
|
12682
|
+
if (i < callCount - 1) {
|
|
12683
|
+
return maxImagesPerCallWithDefault;
|
|
12684
|
+
}
|
|
12685
|
+
const remainder = n % maxImagesPerCallWithDefault;
|
|
12686
|
+
return remainder === 0 ? maxImagesPerCallWithDefault : remainder;
|
|
12687
|
+
});
|
|
12688
|
+
const resultGroups = await Promise.all(
|
|
12689
|
+
callImageCounts.map(async (callImageCount) => {
|
|
12690
|
+
const callResults = [];
|
|
12691
|
+
try {
|
|
12692
|
+
await retry(async () => {
|
|
12693
|
+
const { prompt, files, mask } = normalizePrompt(promptArg);
|
|
12694
|
+
const result = await model.doGenerate({
|
|
12695
|
+
prompt,
|
|
12696
|
+
files,
|
|
12697
|
+
mask,
|
|
12698
|
+
n: callImageCount,
|
|
12699
|
+
abortSignal,
|
|
12700
|
+
headers: headersWithUserAgent,
|
|
12701
|
+
size,
|
|
12702
|
+
aspectRatio,
|
|
12703
|
+
seed,
|
|
12704
|
+
providerOptions: providerOptions != null ? providerOptions : {}
|
|
12705
|
+
});
|
|
12706
|
+
callResults.push(result);
|
|
12707
|
+
if (result.images.length === 0 && result.isRetryable !== false) {
|
|
12708
|
+
throw new RetryableNoImageResultError();
|
|
12709
|
+
}
|
|
12710
|
+
return result;
|
|
12711
|
+
});
|
|
12712
|
+
return callResults;
|
|
12713
|
+
} catch (error) {
|
|
12714
|
+
const noImageResultError = error instanceof RetryableNoImageResultError ? error : RetryError.isInstance(error) && error.lastError instanceof RetryableNoImageResultError ? error.lastError : void 0;
|
|
12715
|
+
if (noImageResultError != null) {
|
|
12716
|
+
return callResults;
|
|
12717
|
+
}
|
|
12718
|
+
throw error;
|
|
12719
|
+
}
|
|
12720
|
+
})
|
|
12721
|
+
);
|
|
12722
|
+
const results = resultGroups.flat();
|
|
12723
|
+
const images = [];
|
|
12724
|
+
const calls = [];
|
|
12725
|
+
const warnings = [];
|
|
12726
|
+
const responses = [];
|
|
12727
|
+
const providerMetadata = {};
|
|
12728
|
+
let totalUsage = {
|
|
12729
|
+
inputTokens: void 0,
|
|
12730
|
+
outputTokens: void 0,
|
|
12731
|
+
totalTokens: void 0
|
|
12732
|
+
};
|
|
12733
|
+
for (const result of results) {
|
|
12734
|
+
const callImages = result.images.map(
|
|
12735
|
+
(image, index) => {
|
|
12736
|
+
var _a26;
|
|
12737
|
+
return new DefaultGeneratedFile({
|
|
12738
|
+
data: image,
|
|
12739
|
+
mediaType: (_a26 = detectMediaType2({
|
|
12740
|
+
data: image,
|
|
12741
|
+
topLevelType: "image"
|
|
12742
|
+
})) != null ? _a26 : "image/png",
|
|
12743
|
+
providerMetadata: getImageProviderMetadata(
|
|
12744
|
+
result.providerMetadata,
|
|
12745
|
+
index
|
|
12746
|
+
)
|
|
12747
|
+
});
|
|
12748
|
+
}
|
|
12766
12749
|
);
|
|
12767
|
-
|
|
12768
|
-
|
|
12769
|
-
|
|
12770
|
-
|
|
12771
|
-
|
|
12772
|
-
|
|
12750
|
+
images.push(...callImages);
|
|
12751
|
+
calls.push({
|
|
12752
|
+
images: callImages,
|
|
12753
|
+
providerMetadata: result.providerMetadata,
|
|
12754
|
+
response: result.response,
|
|
12755
|
+
warnings: result.warnings,
|
|
12756
|
+
usage: result.usage
|
|
12757
|
+
});
|
|
12758
|
+
warnings.push(...result.warnings);
|
|
12759
|
+
if (result.usage != null) {
|
|
12760
|
+
totalUsage = addImageModelUsage(totalUsage, result.usage);
|
|
12773
12761
|
}
|
|
12774
|
-
|
|
12775
|
-
|
|
12776
|
-
|
|
12777
|
-
|
|
12778
|
-
|
|
12779
|
-
|
|
12780
|
-
|
|
12781
|
-
|
|
12782
|
-
|
|
12762
|
+
if (result.providerMetadata) {
|
|
12763
|
+
for (const [providerName, metadata] of Object.entries(
|
|
12764
|
+
result.providerMetadata
|
|
12765
|
+
)) {
|
|
12766
|
+
if (providerName === "gateway") {
|
|
12767
|
+
const currentEntry = providerMetadata[providerName];
|
|
12768
|
+
if (currentEntry != null && typeof currentEntry === "object") {
|
|
12769
|
+
const currentGatewayMetadata = currentEntry;
|
|
12770
|
+
const newGatewayMetadata = metadata;
|
|
12771
|
+
providerMetadata[providerName] = {
|
|
12772
|
+
...currentEntry,
|
|
12773
|
+
...metadata,
|
|
12774
|
+
...Object.fromEntries(
|
|
12775
|
+
gatewayCostMetadataKeys.flatMap((key) => {
|
|
12776
|
+
const total = addDecimalStrings(
|
|
12777
|
+
currentGatewayMetadata[key],
|
|
12778
|
+
newGatewayMetadata[key]
|
|
12779
|
+
);
|
|
12780
|
+
return total == null ? [] : [[key, total]];
|
|
12781
|
+
})
|
|
12782
|
+
)
|
|
12783
|
+
};
|
|
12784
|
+
} else {
|
|
12785
|
+
providerMetadata[providerName] = {
|
|
12786
|
+
...metadata
|
|
12787
|
+
};
|
|
12788
|
+
}
|
|
12789
|
+
const imagesValue = providerMetadata[providerName].images;
|
|
12790
|
+
if (Array.isArray(imagesValue) && imagesValue.length === 0) {
|
|
12791
|
+
delete providerMetadata[providerName].images;
|
|
12792
|
+
}
|
|
12793
|
+
} else {
|
|
12794
|
+
(_b25 = providerMetadata[providerName]) != null ? _b25 : providerMetadata[providerName] = { images: [] };
|
|
12795
|
+
providerMetadata[providerName].images.push(...metadata.images);
|
|
12796
|
+
}
|
|
12797
|
+
}
|
|
12798
|
+
}
|
|
12799
|
+
responses.push(result.response);
|
|
12800
|
+
}
|
|
12801
|
+
logWarnings({ warnings, provider: model.provider, model: model.modelId });
|
|
12802
|
+
if (!images.length) {
|
|
12803
|
+
throw new NoImageGeneratedError({ calls, responses });
|
|
12783
12804
|
}
|
|
12805
|
+
return new DefaultGenerateImageResult({
|
|
12806
|
+
images,
|
|
12807
|
+
calls,
|
|
12808
|
+
warnings,
|
|
12809
|
+
responses,
|
|
12810
|
+
providerMetadata,
|
|
12811
|
+
usage: totalUsage
|
|
12812
|
+
});
|
|
12784
12813
|
}
|
|
12785
|
-
|
|
12786
|
-
|
|
12787
|
-
|
|
12788
|
-
|
|
12789
|
-
|
|
12790
|
-
|
|
12791
|
-
|
|
12792
|
-
|
|
12793
|
-
|
|
12794
|
-
|
|
12795
|
-
|
|
12796
|
-
|
|
12797
|
-
|
|
12814
|
+
var DefaultGenerateImageResult = class {
|
|
12815
|
+
constructor(options) {
|
|
12816
|
+
this.images = options.images;
|
|
12817
|
+
this.calls = options.calls;
|
|
12818
|
+
this.warnings = options.warnings;
|
|
12819
|
+
this.responses = options.responses;
|
|
12820
|
+
this.providerMetadata = options.providerMetadata;
|
|
12821
|
+
this.usage = options.usage;
|
|
12822
|
+
}
|
|
12823
|
+
get image() {
|
|
12824
|
+
return this.images[0];
|
|
12825
|
+
}
|
|
12826
|
+
};
|
|
12827
|
+
function getImageProviderMetadata(providerMetadata, imageIndex) {
|
|
12828
|
+
var _a25;
|
|
12829
|
+
if (providerMetadata == null) {
|
|
12830
|
+
return void 0;
|
|
12831
|
+
}
|
|
12832
|
+
let imageMetadata;
|
|
12833
|
+
for (const [providerName, metadata] of Object.entries(providerMetadata)) {
|
|
12834
|
+
const value = (_a25 = metadata.images) == null ? void 0 : _a25[imageIndex];
|
|
12835
|
+
if (isJSONObject(value) && !Array.isArray(value)) {
|
|
12836
|
+
(imageMetadata != null ? imageMetadata : imageMetadata = {})[providerName] = value;
|
|
12798
12837
|
}
|
|
12799
|
-
toolsByName.set(tool2.name, tool2);
|
|
12800
12838
|
}
|
|
12839
|
+
return imageMetadata;
|
|
12801
12840
|
}
|
|
12802
|
-
async function
|
|
12803
|
-
|
|
12804
|
-
|
|
12805
|
-
|
|
12806
|
-
|
|
12807
|
-
|
|
12808
|
-
|
|
12809
|
-
timeout
|
|
12810
|
-
}) {
|
|
12811
|
-
const batchApi = resolveBatchApi(provider);
|
|
12812
|
-
validateBatchReference({ batchApi, batch });
|
|
12813
|
-
const operationAbortSignal = mergeAbortSignals(
|
|
12814
|
-
abortSignal,
|
|
12815
|
-
getTotalTimeoutMs(timeout)
|
|
12816
|
-
);
|
|
12817
|
-
const { retry } = prepareRetries({
|
|
12818
|
-
maxRetries,
|
|
12819
|
-
abortSignal: operationAbortSignal
|
|
12841
|
+
async function invokeModelMaxImagesPerCall(model) {
|
|
12842
|
+
const isFunction = model.maxImagesPerCall instanceof Function;
|
|
12843
|
+
if (!isFunction) {
|
|
12844
|
+
return model.maxImagesPerCall;
|
|
12845
|
+
}
|
|
12846
|
+
return model.maxImagesPerCall({
|
|
12847
|
+
modelId: model.modelId
|
|
12820
12848
|
});
|
|
12821
|
-
|
|
12822
|
-
|
|
12823
|
-
|
|
12824
|
-
|
|
12825
|
-
providerOptions,
|
|
12826
|
-
abortSignal: operationAbortSignal,
|
|
12827
|
-
headers: withUserAgentSuffix4(headers != null ? headers : {}, `ai/${VERSION}`)
|
|
12828
|
-
})
|
|
12829
|
-
);
|
|
12830
|
-
return status;
|
|
12831
|
-
} catch (error) {
|
|
12832
|
-
throw wrapGatewayError(error);
|
|
12849
|
+
}
|
|
12850
|
+
function addDecimalStrings(value1, value2) {
|
|
12851
|
+
if (typeof value1 !== "string" || typeof value2 !== "string" || !/^\d+(?:\.\d+)?$/.test(value1) || !/^\d+(?:\.\d+)?$/.test(value2)) {
|
|
12852
|
+
return void 0;
|
|
12833
12853
|
}
|
|
12854
|
+
const [integer1, fraction1 = ""] = value1.split(".");
|
|
12855
|
+
const [integer2, fraction2 = ""] = value2.split(".");
|
|
12856
|
+
const precision = Math.max(fraction1.length, fraction2.length);
|
|
12857
|
+
const sum = BigInt(integer1 + fraction1.padEnd(precision, "0")) + BigInt(integer2 + fraction2.padEnd(precision, "0"));
|
|
12858
|
+
const sumString = sum.toString().padStart(precision + 1, "0");
|
|
12859
|
+
return precision === 0 ? sumString : `${sumString.slice(0, -precision)}.${sumString.slice(
|
|
12860
|
+
-precision
|
|
12861
|
+
)}`.replace(/\.?0+$/, "");
|
|
12834
12862
|
}
|
|
12835
|
-
function
|
|
12836
|
-
|
|
12837
|
-
|
|
12838
|
-
|
|
12839
|
-
|
|
12840
|
-
|
|
12841
|
-
|
|
12842
|
-
|
|
12843
|
-
timeout
|
|
12844
|
-
}) {
|
|
12845
|
-
const batchApi = resolveBatchApi(provider);
|
|
12846
|
-
validateBatchReference({ batchApi, batch });
|
|
12847
|
-
const streamAbortController = new AbortController();
|
|
12848
|
-
const operationAbortSignal = mergeAbortSignals(
|
|
12849
|
-
abortSignal,
|
|
12850
|
-
getTotalTimeoutMs(timeout),
|
|
12851
|
-
streamAbortController.signal
|
|
12852
|
-
);
|
|
12853
|
-
const { retry } = prepareRetries({
|
|
12854
|
-
maxRetries,
|
|
12855
|
-
abortSignal: operationAbortSignal
|
|
12856
|
-
});
|
|
12857
|
-
const transformer = {
|
|
12858
|
-
async transform(item, controller) {
|
|
12859
|
-
controller.enqueue(await convertBatchItemResult({ item, tools }));
|
|
12860
|
-
},
|
|
12861
|
-
cancel(reason) {
|
|
12862
|
-
streamAbortController.abort(
|
|
12863
|
-
reason != null ? reason : new Error("Batch results stream was cancelled.")
|
|
12864
|
-
);
|
|
12865
|
-
}
|
|
12863
|
+
function normalizePrompt(prompt) {
|
|
12864
|
+
if (typeof prompt === "string") {
|
|
12865
|
+
return { prompt, files: void 0, mask: void 0 };
|
|
12866
|
+
}
|
|
12867
|
+
return {
|
|
12868
|
+
prompt: prompt.text,
|
|
12869
|
+
files: prompt.images.map(toImageModelV4File),
|
|
12870
|
+
mask: prompt.mask ? toImageModelV4File(prompt.mask) : void 0
|
|
12866
12871
|
};
|
|
12867
|
-
const transform = new TransformStream(transformer);
|
|
12868
|
-
void (async () => {
|
|
12869
|
-
try {
|
|
12870
|
-
const stream = await retry(
|
|
12871
|
-
() => batchApi.doGetBatchResults({
|
|
12872
|
-
batchId: batch.id,
|
|
12873
|
-
providerOptions,
|
|
12874
|
-
abortSignal: operationAbortSignal,
|
|
12875
|
-
headers: withUserAgentSuffix4(headers != null ? headers : {}, `ai/${VERSION}`)
|
|
12876
|
-
})
|
|
12877
|
-
);
|
|
12878
|
-
await stream.pipeTo(transform.writable, {
|
|
12879
|
-
signal: operationAbortSignal
|
|
12880
|
-
});
|
|
12881
|
-
} catch (error) {
|
|
12882
|
-
await transform.writable.abort(wrapGatewayError(error)).catch(() => {
|
|
12883
|
-
});
|
|
12884
|
-
}
|
|
12885
|
-
})();
|
|
12886
|
-
return asAsyncIterableStream(transform.readable);
|
|
12887
12872
|
}
|
|
12888
|
-
function
|
|
12889
|
-
|
|
12890
|
-
|
|
12891
|
-
|
|
12892
|
-
|
|
12873
|
+
function toImageModelV4File(dataContent) {
|
|
12874
|
+
if (typeof dataContent === "string" && dataContent.startsWith("http")) {
|
|
12875
|
+
return {
|
|
12876
|
+
type: "url",
|
|
12877
|
+
url: dataContent
|
|
12878
|
+
};
|
|
12893
12879
|
}
|
|
12894
|
-
if (
|
|
12895
|
-
|
|
12896
|
-
|
|
12897
|
-
|
|
12898
|
-
|
|
12880
|
+
if (typeof dataContent === "string" && dataContent.startsWith("data:")) {
|
|
12881
|
+
const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(dataContent);
|
|
12882
|
+
if (base64Content != null) {
|
|
12883
|
+
const uint8Data2 = convertBase64ToUint8Array4(base64Content);
|
|
12884
|
+
return {
|
|
12885
|
+
type: "file",
|
|
12886
|
+
data: uint8Data2,
|
|
12887
|
+
mediaType: dataUrlMediaType || detectMediaType2({
|
|
12888
|
+
data: uint8Data2,
|
|
12889
|
+
topLevelType: "image"
|
|
12890
|
+
}) || "image/png"
|
|
12891
|
+
};
|
|
12892
|
+
}
|
|
12899
12893
|
}
|
|
12900
|
-
|
|
12901
|
-
|
|
12902
|
-
|
|
12903
|
-
|
|
12904
|
-
|
|
12905
|
-
|
|
12906
|
-
|
|
12907
|
-
|
|
12894
|
+
const uint8Data = convertDataContentToUint8Array(dataContent);
|
|
12895
|
+
return {
|
|
12896
|
+
type: "file",
|
|
12897
|
+
data: uint8Data,
|
|
12898
|
+
mediaType: detectMediaType2({
|
|
12899
|
+
data: uint8Data,
|
|
12900
|
+
topLevelType: "image"
|
|
12901
|
+
}) || "image/png"
|
|
12902
|
+
};
|
|
12908
12903
|
}
|
|
12909
|
-
|
|
12910
|
-
|
|
12911
|
-
|
|
12912
|
-
|
|
12913
|
-
|
|
12914
|
-
|
|
12915
|
-
|
|
12904
|
+
|
|
12905
|
+
// src/util/is-deep-equal-data.ts
|
|
12906
|
+
function isDeepEqualData(obj1, obj2) {
|
|
12907
|
+
if (obj1 === obj2) return true;
|
|
12908
|
+
if (obj1 == null || obj2 == null) return false;
|
|
12909
|
+
if (typeof obj1 !== "object" && typeof obj2 !== "object")
|
|
12910
|
+
return obj1 === obj2;
|
|
12911
|
+
if (obj1.constructor !== obj2.constructor) return false;
|
|
12912
|
+
if (obj1 instanceof Date && obj2 instanceof Date) {
|
|
12913
|
+
return obj1.getTime() === obj2.getTime();
|
|
12916
12914
|
}
|
|
12917
|
-
|
|
12918
|
-
|
|
12919
|
-
|
|
12920
|
-
|
|
12921
|
-
parameter: "requests",
|
|
12922
|
-
value: requests,
|
|
12923
|
-
message: "request IDs must not be empty"
|
|
12924
|
-
});
|
|
12925
|
-
}
|
|
12926
|
-
if (ids.has(request.id)) {
|
|
12927
|
-
throw new InvalidArgumentError({
|
|
12928
|
-
parameter: "requests",
|
|
12929
|
-
value: requests,
|
|
12930
|
-
message: `request IDs must be unique; duplicate ID "${request.id}"`
|
|
12931
|
-
});
|
|
12915
|
+
if (Array.isArray(obj1)) {
|
|
12916
|
+
if (obj1.length !== obj2.length) return false;
|
|
12917
|
+
for (let i = 0; i < obj1.length; i++) {
|
|
12918
|
+
if (!isDeepEqualData(obj1[i], obj2[i])) return false;
|
|
12932
12919
|
}
|
|
12933
|
-
|
|
12920
|
+
return true;
|
|
12921
|
+
}
|
|
12922
|
+
const keys1 = Object.keys(obj1);
|
|
12923
|
+
const keys2 = Object.keys(obj2);
|
|
12924
|
+
if (keys1.length !== keys2.length) return false;
|
|
12925
|
+
for (const key of keys1) {
|
|
12926
|
+
if (!keys2.includes(key)) return false;
|
|
12927
|
+
if (!isDeepEqualData(obj1[key], obj2[key])) return false;
|
|
12934
12928
|
}
|
|
12929
|
+
return true;
|
|
12935
12930
|
}
|
|
12936
|
-
|
|
12937
|
-
|
|
12938
|
-
|
|
12931
|
+
|
|
12932
|
+
// src/batch/batch.ts
|
|
12933
|
+
async function cancelBatch({
|
|
12934
|
+
provider,
|
|
12935
|
+
batch,
|
|
12936
|
+
providerOptions,
|
|
12937
|
+
abortSignal,
|
|
12938
|
+
headers,
|
|
12939
|
+
timeout
|
|
12939
12940
|
}) {
|
|
12940
|
-
|
|
12941
|
-
|
|
12942
|
-
|
|
12943
|
-
|
|
12944
|
-
|
|
12941
|
+
const batchApi = resolveBatchApi(provider);
|
|
12942
|
+
validateBatchReference({ batchApi, batch });
|
|
12943
|
+
if (batchApi.doCancelBatch == null) {
|
|
12944
|
+
throw new UnsupportedFunctionalityError3({
|
|
12945
|
+
functionality: "batch cancellation",
|
|
12946
|
+
message: "The provider does not support batch cancellation."
|
|
12945
12947
|
});
|
|
12946
12948
|
}
|
|
12947
|
-
|
|
12948
|
-
|
|
12949
|
-
|
|
12950
|
-
|
|
12951
|
-
|
|
12949
|
+
const operationAbortSignal = mergeAbortSignals(
|
|
12950
|
+
abortSignal,
|
|
12951
|
+
getTotalTimeoutMs(timeout)
|
|
12952
|
+
);
|
|
12953
|
+
try {
|
|
12954
|
+
return await batchApi.doCancelBatch({
|
|
12955
|
+
batchId: batch.id,
|
|
12956
|
+
providerOptions,
|
|
12957
|
+
abortSignal: operationAbortSignal,
|
|
12958
|
+
headers: withUserAgentSuffix5(headers != null ? headers : {}, `ai/${VERSION}`)
|
|
12952
12959
|
});
|
|
12960
|
+
} catch (error) {
|
|
12961
|
+
throw wrapGatewayError(error);
|
|
12953
12962
|
}
|
|
12954
12963
|
}
|
|
12955
|
-
async function
|
|
12956
|
-
|
|
12957
|
-
|
|
12958
|
-
|
|
12959
|
-
|
|
12960
|
-
|
|
12961
|
-
|
|
12962
|
-
|
|
12963
|
-
|
|
12964
|
-
|
|
12965
|
-
status: item.status,
|
|
12966
|
-
...await convertGenerateResult({ result: item.result, tools })
|
|
12967
|
-
};
|
|
12968
|
-
case "failed":
|
|
12969
|
-
return {
|
|
12970
|
-
id: item.id,
|
|
12971
|
-
status: item.status,
|
|
12972
|
-
error: item.error,
|
|
12973
|
-
providerMetadata: item.providerMetadata
|
|
12974
|
-
};
|
|
12975
|
-
case "cancelled":
|
|
12976
|
-
case "expired":
|
|
12977
|
-
return {
|
|
12978
|
-
id: item.id,
|
|
12979
|
-
status: item.status,
|
|
12980
|
-
error: item.error,
|
|
12981
|
-
providerMetadata: item.providerMetadata
|
|
12982
|
-
};
|
|
12983
|
-
}
|
|
12984
|
-
}
|
|
12985
|
-
}
|
|
12986
|
-
async function convertGenerateResult({
|
|
12987
|
-
result,
|
|
12988
|
-
tools
|
|
12989
|
-
}) {
|
|
12964
|
+
async function listBatches({
|
|
12965
|
+
provider,
|
|
12966
|
+
providerOptions,
|
|
12967
|
+
limit,
|
|
12968
|
+
cursor,
|
|
12969
|
+
maxRetries,
|
|
12970
|
+
abortSignal,
|
|
12971
|
+
headers,
|
|
12972
|
+
timeout
|
|
12973
|
+
} = {}) {
|
|
12990
12974
|
var _a25;
|
|
12991
|
-
const
|
|
12992
|
-
|
|
12993
|
-
|
|
12994
|
-
|
|
12995
|
-
|
|
12996
|
-
|
|
12997
|
-
|
|
12998
|
-
|
|
12999
|
-
|
|
13000
|
-
|
|
13001
|
-
|
|
13002
|
-
})
|
|
13003
|
-
)
|
|
12975
|
+
const batchApi = resolveBatchApi(provider);
|
|
12976
|
+
const doListBatches = (_a25 = batchApi.doListBatches) == null ? void 0 : _a25.bind(batchApi);
|
|
12977
|
+
if (doListBatches == null) {
|
|
12978
|
+
throw new UnsupportedFunctionalityError3({
|
|
12979
|
+
functionality: "batch listing",
|
|
12980
|
+
message: "The provider does not support listing batches."
|
|
12981
|
+
});
|
|
12982
|
+
}
|
|
12983
|
+
const operationAbortSignal = mergeAbortSignals(
|
|
12984
|
+
abortSignal,
|
|
12985
|
+
getTotalTimeoutMs(timeout)
|
|
13004
12986
|
);
|
|
13005
|
-
const
|
|
13006
|
-
|
|
13007
|
-
|
|
13008
|
-
toolOutputs: [],
|
|
13009
|
-
toolApprovalRequests: [],
|
|
13010
|
-
toolApprovalResponses: [],
|
|
13011
|
-
tools
|
|
12987
|
+
const { retry } = prepareRetries({
|
|
12988
|
+
maxRetries,
|
|
12989
|
+
abortSignal: operationAbortSignal
|
|
13012
12990
|
});
|
|
13013
|
-
|
|
13014
|
-
|
|
13015
|
-
|
|
13016
|
-
|
|
13017
|
-
|
|
13018
|
-
|
|
13019
|
-
|
|
13020
|
-
|
|
13021
|
-
|
|
13022
|
-
|
|
13023
|
-
|
|
13024
|
-
|
|
13025
|
-
|
|
13026
|
-
|
|
13027
|
-
|
|
13028
|
-
|
|
13029
|
-
|
|
12991
|
+
try {
|
|
12992
|
+
const { batches, nextCursor, providerMetadata } = await retry(
|
|
12993
|
+
() => doListBatches({
|
|
12994
|
+
providerOptions,
|
|
12995
|
+
abortSignal: operationAbortSignal,
|
|
12996
|
+
headers: withUserAgentSuffix5(headers != null ? headers : {}, `ai/${VERSION}`),
|
|
12997
|
+
...limit != null && { limit },
|
|
12998
|
+
...cursor != null && { cursor }
|
|
12999
|
+
})
|
|
13000
|
+
);
|
|
13001
|
+
return {
|
|
13002
|
+
batches: batches.map(({ batchId, ...status }) => ({
|
|
13003
|
+
version: 2,
|
|
13004
|
+
id: batchId,
|
|
13005
|
+
provider: batchApi.provider,
|
|
13006
|
+
...status
|
|
13007
|
+
})),
|
|
13008
|
+
...nextCursor != null && { nextCursor },
|
|
13009
|
+
...providerMetadata != null && { providerMetadata }
|
|
13010
|
+
};
|
|
13011
|
+
} catch (error) {
|
|
13012
|
+
throw wrapGatewayError(error);
|
|
13013
|
+
}
|
|
13030
13014
|
}
|
|
13031
|
-
|
|
13032
|
-
|
|
13033
|
-
|
|
13034
|
-
createIdGenerator as createIdGenerator4,
|
|
13035
|
-
withUserAgentSuffix as withUserAgentSuffix5
|
|
13036
|
-
} from "@ai-sdk/provider-utils";
|
|
13037
|
-
var originalGenerateCallId4 = createIdGenerator4({
|
|
13038
|
-
prefix: "call",
|
|
13039
|
-
size: 24
|
|
13040
|
-
});
|
|
13041
|
-
async function embed({
|
|
13042
|
-
model: modelArg,
|
|
13043
|
-
value,
|
|
13015
|
+
async function startBatch({
|
|
13016
|
+
provider,
|
|
13017
|
+
requests,
|
|
13044
13018
|
providerOptions,
|
|
13045
|
-
|
|
13019
|
+
webhookUrl,
|
|
13046
13020
|
abortSignal,
|
|
13047
13021
|
headers,
|
|
13048
|
-
|
|
13049
|
-
telemetry = experimental_telemetry,
|
|
13050
|
-
onStart,
|
|
13051
|
-
experimental_onStart,
|
|
13052
|
-
onEnd,
|
|
13053
|
-
experimental_onEnd,
|
|
13054
|
-
_internal: { generateCallId = originalGenerateCallId4 } = {}
|
|
13022
|
+
timeout
|
|
13055
13023
|
}) {
|
|
13056
|
-
var _a25;
|
|
13057
|
-
|
|
13058
|
-
const
|
|
13059
|
-
|
|
13060
|
-
abortSignal
|
|
13061
|
-
|
|
13062
|
-
const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
|
|
13063
|
-
const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;
|
|
13064
|
-
const headersWithUserAgent = withUserAgentSuffix5(
|
|
13065
|
-
headers != null ? headers : {},
|
|
13066
|
-
`ai/${VERSION}`
|
|
13024
|
+
var _a25, _b25;
|
|
13025
|
+
validateRequests(requests);
|
|
13026
|
+
const batchApi = resolveBatchApi(provider);
|
|
13027
|
+
const operationAbortSignal = mergeAbortSignals(
|
|
13028
|
+
abortSignal,
|
|
13029
|
+
getTotalTimeoutMs(timeout)
|
|
13067
13030
|
);
|
|
13068
|
-
const
|
|
13069
|
-
|
|
13070
|
-
|
|
13071
|
-
|
|
13072
|
-
const
|
|
13073
|
-
|
|
13074
|
-
|
|
13075
|
-
|
|
13076
|
-
|
|
13077
|
-
|
|
13078
|
-
|
|
13079
|
-
|
|
13080
|
-
|
|
13081
|
-
providerOptions
|
|
13082
|
-
};
|
|
13083
|
-
return await runInTracingChannelSpan({
|
|
13084
|
-
type: "embed",
|
|
13085
|
-
event: startEvent,
|
|
13086
|
-
execute: async () => {
|
|
13087
|
-
var _a26;
|
|
13088
|
-
await notify({
|
|
13089
|
-
event: startEvent,
|
|
13090
|
-
callbacks: [resolvedOnStart, telemetryDispatcher.onStart]
|
|
13091
|
-
});
|
|
13092
|
-
try {
|
|
13093
|
-
const { embedding, usage, warnings, response, providerMetadata } = await retry(async () => {
|
|
13094
|
-
var _a27, _b25;
|
|
13095
|
-
const embedCallId = generateCallId();
|
|
13096
|
-
await notify({
|
|
13097
|
-
event: {
|
|
13098
|
-
callId,
|
|
13099
|
-
embedCallId,
|
|
13100
|
-
operationId: "ai.embed.doEmbed",
|
|
13101
|
-
provider: model.provider,
|
|
13102
|
-
modelId: model.modelId,
|
|
13103
|
-
values: [value]
|
|
13104
|
-
},
|
|
13105
|
-
callbacks: [telemetryDispatcher.onEmbedStart]
|
|
13106
|
-
});
|
|
13107
|
-
const modelResponse = await model.doEmbed({
|
|
13108
|
-
values: [value],
|
|
13109
|
-
abortSignal,
|
|
13110
|
-
headers: headersWithUserAgent,
|
|
13111
|
-
providerOptions
|
|
13112
|
-
});
|
|
13113
|
-
const embedding2 = modelResponse.embeddings[0];
|
|
13114
|
-
const usage2 = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };
|
|
13115
|
-
await notify({
|
|
13116
|
-
event: {
|
|
13117
|
-
callId,
|
|
13118
|
-
embedCallId,
|
|
13119
|
-
operationId: "ai.embed.doEmbed",
|
|
13120
|
-
provider: model.provider,
|
|
13121
|
-
modelId: model.modelId,
|
|
13122
|
-
values: [value],
|
|
13123
|
-
embeddings: modelResponse.embeddings,
|
|
13124
|
-
usage: usage2
|
|
13125
|
-
},
|
|
13126
|
-
callbacks: [telemetryDispatcher.onEmbedEnd]
|
|
13127
|
-
});
|
|
13128
|
-
if (embedding2 == null) {
|
|
13129
|
-
throw new InvalidResponseDataError({
|
|
13130
|
-
data: modelResponse.embeddings,
|
|
13131
|
-
message: "No embedding generated."
|
|
13132
|
-
});
|
|
13133
|
-
}
|
|
13134
|
-
return {
|
|
13135
|
-
embedding: embedding2,
|
|
13136
|
-
usage: usage2,
|
|
13137
|
-
warnings: (_b25 = modelResponse.warnings) != null ? _b25 : [],
|
|
13138
|
-
providerMetadata: modelResponse.providerMetadata,
|
|
13139
|
-
response: modelResponse.response
|
|
13140
|
-
};
|
|
13031
|
+
const supportedUrls = await batchApi.supportedUrls;
|
|
13032
|
+
operationAbortSignal == null ? void 0 : operationAbortSignal.throwIfAborted();
|
|
13033
|
+
const normalizedRequests = [];
|
|
13034
|
+
const toolsByName = /* @__PURE__ */ new Map();
|
|
13035
|
+
for (const request of requests) {
|
|
13036
|
+
const requestType = request.type;
|
|
13037
|
+
switch (requestType) {
|
|
13038
|
+
case "text": {
|
|
13039
|
+
const standardizedPrompt = await standardizePrompt(request);
|
|
13040
|
+
const preparedTools = await prepareTools({
|
|
13041
|
+
tools: request.tools,
|
|
13042
|
+
toolOrder: request.toolOrder,
|
|
13043
|
+
toolsContext: request.toolsContext
|
|
13141
13044
|
});
|
|
13142
|
-
|
|
13143
|
-
|
|
13144
|
-
|
|
13145
|
-
|
|
13045
|
+
validateCompatibleTools({
|
|
13046
|
+
requestId: request.id,
|
|
13047
|
+
tools: preparedTools,
|
|
13048
|
+
toolsByName
|
|
13146
13049
|
});
|
|
13147
|
-
|
|
13148
|
-
|
|
13149
|
-
|
|
13150
|
-
|
|
13151
|
-
|
|
13152
|
-
|
|
13153
|
-
|
|
13154
|
-
|
|
13155
|
-
|
|
13156
|
-
|
|
13157
|
-
|
|
13158
|
-
|
|
13159
|
-
|
|
13160
|
-
|
|
13050
|
+
normalizedRequests.push({
|
|
13051
|
+
id: request.id,
|
|
13052
|
+
type: request.type,
|
|
13053
|
+
modelId: request.model,
|
|
13054
|
+
options: {
|
|
13055
|
+
...prepareLanguageModelCallOptions(request),
|
|
13056
|
+
prompt: await convertToLanguageModelPrompt({
|
|
13057
|
+
prompt: standardizedPrompt,
|
|
13058
|
+
supportedUrls,
|
|
13059
|
+
download: void 0,
|
|
13060
|
+
provider: batchApi.provider.split(".")[0]
|
|
13061
|
+
}),
|
|
13062
|
+
tools: preparedTools,
|
|
13063
|
+
toolChoice: prepareToolChoice({ toolChoice: request.toolChoice }),
|
|
13064
|
+
providerOptions: request.providerOptions
|
|
13065
|
+
}
|
|
13161
13066
|
});
|
|
13162
|
-
|
|
13163
|
-
|
|
13164
|
-
|
|
13165
|
-
|
|
13166
|
-
|
|
13167
|
-
|
|
13168
|
-
|
|
13067
|
+
break;
|
|
13068
|
+
}
|
|
13069
|
+
case "image": {
|
|
13070
|
+
const { prompt, files, mask } = normalizePrompt(request.prompt);
|
|
13071
|
+
normalizedRequests.push({
|
|
13072
|
+
id: request.id,
|
|
13073
|
+
type: request.type,
|
|
13074
|
+
modelId: request.model,
|
|
13075
|
+
options: {
|
|
13076
|
+
prompt,
|
|
13077
|
+
n: (_a25 = request.n) != null ? _a25 : 1,
|
|
13078
|
+
size: request.size,
|
|
13079
|
+
aspectRatio: request.aspectRatio,
|
|
13080
|
+
seed: request.seed,
|
|
13081
|
+
files,
|
|
13082
|
+
mask,
|
|
13083
|
+
providerOptions: (_b25 = request.providerOptions) != null ? _b25 : {}
|
|
13084
|
+
}
|
|
13085
|
+
});
|
|
13086
|
+
break;
|
|
13087
|
+
}
|
|
13088
|
+
default: {
|
|
13089
|
+
const _exhaustiveCheck = requestType;
|
|
13090
|
+
throw new InvalidArgumentError({
|
|
13091
|
+
parameter: "requests",
|
|
13092
|
+
value: _exhaustiveCheck,
|
|
13093
|
+
message: `Unsupported batch request type "${_exhaustiveCheck}".`
|
|
13169
13094
|
});
|
|
13170
|
-
} catch (error) {
|
|
13171
|
-
await ((_a26 = telemetryDispatcher.onError) == null ? void 0 : _a26.call(telemetryDispatcher, { callId, error }));
|
|
13172
|
-
throw error;
|
|
13173
13095
|
}
|
|
13174
13096
|
}
|
|
13175
|
-
|
|
13176
|
-
}
|
|
13177
|
-
var DefaultEmbedResult = class {
|
|
13178
|
-
constructor(options) {
|
|
13179
|
-
this.value = options.value;
|
|
13180
|
-
this.embedding = options.embedding;
|
|
13181
|
-
this.usage = options.usage;
|
|
13182
|
-
this.warnings = options.warnings;
|
|
13183
|
-
this.providerMetadata = options.providerMetadata;
|
|
13184
|
-
this.response = options.response;
|
|
13097
|
+
operationAbortSignal == null ? void 0 : operationAbortSignal.throwIfAborted();
|
|
13185
13098
|
}
|
|
13186
|
-
|
|
13187
|
-
|
|
13188
|
-
|
|
13189
|
-
|
|
13190
|
-
|
|
13191
|
-
|
|
13192
|
-
|
|
13193
|
-
|
|
13194
|
-
|
|
13195
|
-
|
|
13196
|
-
|
|
13197
|
-
|
|
13198
|
-
|
|
13199
|
-
|
|
13200
|
-
|
|
13201
|
-
|
|
13202
|
-
|
|
13203
|
-
|
|
13204
|
-
|
|
13099
|
+
const headersWithUserAgent = withUserAgentSuffix5(
|
|
13100
|
+
headers != null ? headers : {},
|
|
13101
|
+
`ai/${VERSION}`
|
|
13102
|
+
);
|
|
13103
|
+
try {
|
|
13104
|
+
const result = await batchApi.doStartBatch({
|
|
13105
|
+
requests: normalizedRequests,
|
|
13106
|
+
providerOptions,
|
|
13107
|
+
abortSignal: operationAbortSignal,
|
|
13108
|
+
headers: headersWithUserAgent,
|
|
13109
|
+
...webhookUrl != null && { webhookUrl }
|
|
13110
|
+
});
|
|
13111
|
+
const { batchId, warnings, ...status } = result;
|
|
13112
|
+
const modelByRequestId = new Map(
|
|
13113
|
+
normalizedRequests.map((request) => [request.id, request.modelId])
|
|
13114
|
+
);
|
|
13115
|
+
for (const { requestId, warning } of warnings) {
|
|
13116
|
+
logWarnings({
|
|
13117
|
+
warnings: [warning],
|
|
13118
|
+
provider: batchApi.provider,
|
|
13119
|
+
model: requestId == null ? void 0 : modelByRequestId.get(requestId)
|
|
13120
|
+
});
|
|
13121
|
+
}
|
|
13122
|
+
return {
|
|
13123
|
+
version: 2,
|
|
13124
|
+
id: batchId,
|
|
13125
|
+
provider: batchApi.provider,
|
|
13126
|
+
...status,
|
|
13127
|
+
warnings
|
|
13128
|
+
};
|
|
13129
|
+
} catch (error) {
|
|
13130
|
+
throw wrapGatewayError(error);
|
|
13205
13131
|
}
|
|
13206
|
-
|
|
13207
|
-
|
|
13208
|
-
|
|
13132
|
+
}
|
|
13133
|
+
function validateCompatibleTools({
|
|
13134
|
+
requestId,
|
|
13135
|
+
tools,
|
|
13136
|
+
toolsByName
|
|
13137
|
+
}) {
|
|
13138
|
+
for (const tool2 of tools != null ? tools : []) {
|
|
13139
|
+
const previousTool = toolsByName.get(tool2.name);
|
|
13140
|
+
if (previousTool != null && !isDeepEqualData(previousTool, tool2)) {
|
|
13141
|
+
throw new InvalidArgumentError({
|
|
13142
|
+
parameter: "requests",
|
|
13143
|
+
value: requestId,
|
|
13144
|
+
message: `tool "${tool2.name}" must have the same definition in every batch request`
|
|
13145
|
+
});
|
|
13146
|
+
}
|
|
13147
|
+
toolsByName.set(tool2.name, tool2);
|
|
13209
13148
|
}
|
|
13210
|
-
return result;
|
|
13211
13149
|
}
|
|
13212
|
-
|
|
13213
|
-
|
|
13214
|
-
|
|
13215
|
-
|
|
13216
|
-
|
|
13217
|
-
});
|
|
13218
|
-
async function embedMany({
|
|
13219
|
-
model: modelArg,
|
|
13220
|
-
values,
|
|
13221
|
-
maxParallelCalls = Infinity,
|
|
13222
|
-
maxRetries: maxRetriesArg,
|
|
13150
|
+
async function getBatchStatus({
|
|
13151
|
+
provider,
|
|
13152
|
+
batch,
|
|
13153
|
+
providerOptions,
|
|
13154
|
+
maxRetries,
|
|
13223
13155
|
abortSignal,
|
|
13224
13156
|
headers,
|
|
13225
|
-
|
|
13226
|
-
experimental_telemetry,
|
|
13227
|
-
telemetry = experimental_telemetry,
|
|
13228
|
-
onStart,
|
|
13229
|
-
experimental_onStart,
|
|
13230
|
-
onEnd,
|
|
13231
|
-
experimental_onEnd,
|
|
13232
|
-
_internal: { generateCallId = originalGenerateCallId5 } = {}
|
|
13157
|
+
timeout
|
|
13233
13158
|
}) {
|
|
13234
|
-
|
|
13235
|
-
|
|
13236
|
-
const
|
|
13237
|
-
|
|
13238
|
-
|
|
13239
|
-
});
|
|
13240
|
-
const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
|
|
13241
|
-
const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;
|
|
13242
|
-
const headersWithUserAgent = withUserAgentSuffix6(
|
|
13243
|
-
headers != null ? headers : {},
|
|
13244
|
-
`ai/${VERSION}`
|
|
13159
|
+
const batchApi = resolveBatchApi(provider);
|
|
13160
|
+
validateBatchReference({ batchApi, batch });
|
|
13161
|
+
const operationAbortSignal = mergeAbortSignals(
|
|
13162
|
+
abortSignal,
|
|
13163
|
+
getTotalTimeoutMs(timeout)
|
|
13245
13164
|
);
|
|
13246
|
-
const
|
|
13247
|
-
|
|
13248
|
-
|
|
13165
|
+
const { retry } = prepareRetries({
|
|
13166
|
+
maxRetries,
|
|
13167
|
+
abortSignal: operationAbortSignal
|
|
13249
13168
|
});
|
|
13250
|
-
|
|
13251
|
-
|
|
13252
|
-
|
|
13253
|
-
|
|
13254
|
-
|
|
13255
|
-
|
|
13256
|
-
|
|
13169
|
+
try {
|
|
13170
|
+
const status = await retry(
|
|
13171
|
+
() => batchApi.doGetBatchStatus({
|
|
13172
|
+
batchId: batch.id,
|
|
13173
|
+
providerOptions,
|
|
13174
|
+
abortSignal: operationAbortSignal,
|
|
13175
|
+
headers: withUserAgentSuffix5(headers != null ? headers : {}, `ai/${VERSION}`)
|
|
13176
|
+
})
|
|
13177
|
+
);
|
|
13178
|
+
return status;
|
|
13179
|
+
} catch (error) {
|
|
13180
|
+
throw wrapGatewayError(error);
|
|
13181
|
+
}
|
|
13182
|
+
}
|
|
13183
|
+
function getBatchResults({
|
|
13184
|
+
provider,
|
|
13185
|
+
batch,
|
|
13186
|
+
tools,
|
|
13187
|
+
providerOptions,
|
|
13188
|
+
maxRetries,
|
|
13189
|
+
abortSignal,
|
|
13190
|
+
headers,
|
|
13191
|
+
timeout
|
|
13192
|
+
}) {
|
|
13193
|
+
const batchApi = resolveBatchApi(provider);
|
|
13194
|
+
validateBatchReference({ batchApi, batch });
|
|
13195
|
+
const streamAbortController = new AbortController();
|
|
13196
|
+
const operationAbortSignal = mergeAbortSignals(
|
|
13197
|
+
abortSignal,
|
|
13198
|
+
getTotalTimeoutMs(timeout),
|
|
13199
|
+
streamAbortController.signal
|
|
13200
|
+
);
|
|
13201
|
+
const { retry } = prepareRetries({
|
|
13257
13202
|
maxRetries,
|
|
13258
|
-
|
|
13259
|
-
|
|
13203
|
+
abortSignal: operationAbortSignal
|
|
13204
|
+
});
|
|
13205
|
+
const transformer = {
|
|
13206
|
+
async transform(item, controller) {
|
|
13207
|
+
controller.enqueue(await convertBatchItemResult({ item, tools }));
|
|
13208
|
+
},
|
|
13209
|
+
cancel(reason) {
|
|
13210
|
+
streamAbortController.abort(
|
|
13211
|
+
reason != null ? reason : new Error("Batch results stream was cancelled.")
|
|
13212
|
+
);
|
|
13213
|
+
}
|
|
13260
13214
|
};
|
|
13261
|
-
|
|
13262
|
-
|
|
13263
|
-
|
|
13264
|
-
|
|
13265
|
-
|
|
13266
|
-
|
|
13267
|
-
|
|
13268
|
-
|
|
13215
|
+
const transform = new TransformStream(transformer);
|
|
13216
|
+
void (async () => {
|
|
13217
|
+
try {
|
|
13218
|
+
const stream = await retry(
|
|
13219
|
+
() => batchApi.doGetBatchResults({
|
|
13220
|
+
batchId: batch.id,
|
|
13221
|
+
providerOptions,
|
|
13222
|
+
abortSignal: operationAbortSignal,
|
|
13223
|
+
headers: withUserAgentSuffix5(headers != null ? headers : {}, `ai/${VERSION}`)
|
|
13224
|
+
})
|
|
13225
|
+
);
|
|
13226
|
+
await stream.pipeTo(transform.writable, {
|
|
13227
|
+
signal: operationAbortSignal
|
|
13228
|
+
});
|
|
13229
|
+
} catch (error) {
|
|
13230
|
+
await transform.writable.abort(wrapGatewayError(error)).catch(() => {
|
|
13269
13231
|
});
|
|
13270
|
-
try {
|
|
13271
|
-
const [
|
|
13272
|
-
maxEmbeddingsPerCall,
|
|
13273
|
-
maxInputBytesPerCall,
|
|
13274
|
-
supportsParallelCalls
|
|
13275
|
-
] = await Promise.all([
|
|
13276
|
-
model.maxEmbeddingsPerCall,
|
|
13277
|
-
getEmbeddingModelMaxInputBytesPerCall(model),
|
|
13278
|
-
model.supportsParallelCalls
|
|
13279
|
-
]);
|
|
13280
|
-
const hasEmbeddingLimit = maxEmbeddingsPerCall != null && maxEmbeddingsPerCall !== Infinity;
|
|
13281
|
-
const hasInputByteLimit = maxInputBytesPerCall != null && maxInputBytesPerCall !== Infinity;
|
|
13282
|
-
if (!hasEmbeddingLimit && !hasInputByteLimit) {
|
|
13283
|
-
const { embeddings: embeddings2, usage, warnings: warnings2, response, providerMetadata: providerMetadata2 } = await retry(async () => {
|
|
13284
|
-
var _a27, _b26;
|
|
13285
|
-
const embedCallId = generateCallId();
|
|
13286
|
-
await notify({
|
|
13287
|
-
event: {
|
|
13288
|
-
callId,
|
|
13289
|
-
embedCallId,
|
|
13290
|
-
operationId: "ai.embedMany.doEmbed",
|
|
13291
|
-
provider: model.provider,
|
|
13292
|
-
modelId: model.modelId,
|
|
13293
|
-
values
|
|
13294
|
-
},
|
|
13295
|
-
callbacks: [telemetryDispatcher.onEmbedStart]
|
|
13296
|
-
});
|
|
13297
|
-
const modelResponse = await model.doEmbed({
|
|
13298
|
-
values,
|
|
13299
|
-
abortSignal,
|
|
13300
|
-
headers: headersWithUserAgent,
|
|
13301
|
-
providerOptions
|
|
13302
|
-
});
|
|
13303
|
-
const embeddings3 = modelResponse.embeddings;
|
|
13304
|
-
const usage2 = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };
|
|
13305
|
-
await notify({
|
|
13306
|
-
event: {
|
|
13307
|
-
callId,
|
|
13308
|
-
embedCallId,
|
|
13309
|
-
operationId: "ai.embedMany.doEmbed",
|
|
13310
|
-
provider: model.provider,
|
|
13311
|
-
modelId: model.modelId,
|
|
13312
|
-
values,
|
|
13313
|
-
embeddings: embeddings3,
|
|
13314
|
-
usage: usage2
|
|
13315
|
-
},
|
|
13316
|
-
callbacks: [telemetryDispatcher.onEmbedEnd]
|
|
13317
|
-
});
|
|
13318
|
-
return {
|
|
13319
|
-
embeddings: embeddings3,
|
|
13320
|
-
usage: usage2,
|
|
13321
|
-
warnings: (_b26 = modelResponse.warnings) != null ? _b26 : [],
|
|
13322
|
-
providerMetadata: modelResponse.providerMetadata,
|
|
13323
|
-
response: modelResponse.response
|
|
13324
|
-
};
|
|
13325
|
-
});
|
|
13326
|
-
validateEmbeddingCount({ embeddings: embeddings2, values });
|
|
13327
|
-
logWarnings({
|
|
13328
|
-
warnings: warnings2,
|
|
13329
|
-
provider: model.provider,
|
|
13330
|
-
model: model.modelId
|
|
13331
|
-
});
|
|
13332
|
-
await notify({
|
|
13333
|
-
event: {
|
|
13334
|
-
callId,
|
|
13335
|
-
operationId: "ai.embedMany",
|
|
13336
|
-
provider: model.provider,
|
|
13337
|
-
modelId: model.modelId,
|
|
13338
|
-
value: values,
|
|
13339
|
-
embedding: embeddings2,
|
|
13340
|
-
usage,
|
|
13341
|
-
warnings: warnings2,
|
|
13342
|
-
providerMetadata: providerMetadata2,
|
|
13343
|
-
response: [response]
|
|
13344
|
-
},
|
|
13345
|
-
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]
|
|
13346
|
-
});
|
|
13347
|
-
return new DefaultEmbedManyResult({
|
|
13348
|
-
values,
|
|
13349
|
-
embeddings: embeddings2,
|
|
13350
|
-
usage,
|
|
13351
|
-
warnings: warnings2,
|
|
13352
|
-
providerMetadata: providerMetadata2,
|
|
13353
|
-
responses: [response]
|
|
13354
|
-
});
|
|
13355
|
-
}
|
|
13356
|
-
const valueChunks = splitByEmbeddingLimits({
|
|
13357
|
-
values,
|
|
13358
|
-
maxEmbeddingsPerCall: hasEmbeddingLimit ? maxEmbeddingsPerCall : Infinity,
|
|
13359
|
-
maxInputBytesPerCall: hasInputByteLimit ? maxInputBytesPerCall : Infinity
|
|
13360
|
-
});
|
|
13361
|
-
const embeddings = [];
|
|
13362
|
-
const warnings = [];
|
|
13363
|
-
const responses = [];
|
|
13364
|
-
let tokens = 0;
|
|
13365
|
-
let providerMetadata;
|
|
13366
|
-
const parallelChunks = splitArray(
|
|
13367
|
-
valueChunks,
|
|
13368
|
-
supportsParallelCalls ? maxParallelCalls : 1
|
|
13369
|
-
);
|
|
13370
|
-
for (const parallelChunk of parallelChunks) {
|
|
13371
|
-
const results = await Promise.all(
|
|
13372
|
-
parallelChunk.map(async (chunk) => {
|
|
13373
|
-
const result = await retry(async () => {
|
|
13374
|
-
var _a27, _b26;
|
|
13375
|
-
const embedCallId = generateCallId();
|
|
13376
|
-
await notify({
|
|
13377
|
-
event: {
|
|
13378
|
-
callId,
|
|
13379
|
-
embedCallId,
|
|
13380
|
-
operationId: "ai.embedMany.doEmbed",
|
|
13381
|
-
provider: model.provider,
|
|
13382
|
-
modelId: model.modelId,
|
|
13383
|
-
values: chunk
|
|
13384
|
-
},
|
|
13385
|
-
callbacks: [telemetryDispatcher.onEmbedStart]
|
|
13386
|
-
});
|
|
13387
|
-
const modelResponse = await model.doEmbed({
|
|
13388
|
-
values: chunk,
|
|
13389
|
-
abortSignal,
|
|
13390
|
-
headers: headersWithUserAgent,
|
|
13391
|
-
providerOptions
|
|
13392
|
-
});
|
|
13393
|
-
const chunkEmbeddings = modelResponse.embeddings;
|
|
13394
|
-
const usage = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };
|
|
13395
|
-
await notify({
|
|
13396
|
-
event: {
|
|
13397
|
-
callId,
|
|
13398
|
-
embedCallId,
|
|
13399
|
-
operationId: "ai.embedMany.doEmbed",
|
|
13400
|
-
provider: model.provider,
|
|
13401
|
-
modelId: model.modelId,
|
|
13402
|
-
values: chunk,
|
|
13403
|
-
embeddings: chunkEmbeddings,
|
|
13404
|
-
usage
|
|
13405
|
-
},
|
|
13406
|
-
callbacks: [telemetryDispatcher.onEmbedEnd]
|
|
13407
|
-
});
|
|
13408
|
-
return {
|
|
13409
|
-
embeddings: chunkEmbeddings,
|
|
13410
|
-
usage,
|
|
13411
|
-
warnings: (_b26 = modelResponse.warnings) != null ? _b26 : [],
|
|
13412
|
-
providerMetadata: modelResponse.providerMetadata,
|
|
13413
|
-
response: modelResponse.response
|
|
13414
|
-
};
|
|
13415
|
-
});
|
|
13416
|
-
validateEmbeddingCount({
|
|
13417
|
-
embeddings: result.embeddings,
|
|
13418
|
-
values: chunk
|
|
13419
|
-
});
|
|
13420
|
-
return result;
|
|
13421
|
-
})
|
|
13422
|
-
);
|
|
13423
|
-
for (const result of results) {
|
|
13424
|
-
embeddings.push(...result.embeddings);
|
|
13425
|
-
warnings.push(...result.warnings);
|
|
13426
|
-
responses.push(result.response);
|
|
13427
|
-
tokens += result.usage.tokens;
|
|
13428
|
-
if (result.providerMetadata) {
|
|
13429
|
-
if (!providerMetadata) {
|
|
13430
|
-
providerMetadata = { ...result.providerMetadata };
|
|
13431
|
-
} else {
|
|
13432
|
-
for (const [providerName, metadata] of Object.entries(
|
|
13433
|
-
result.providerMetadata
|
|
13434
|
-
)) {
|
|
13435
|
-
providerMetadata[providerName] = {
|
|
13436
|
-
...(_a26 = providerMetadata[providerName]) != null ? _a26 : {},
|
|
13437
|
-
...metadata
|
|
13438
|
-
};
|
|
13439
|
-
}
|
|
13440
|
-
}
|
|
13441
|
-
}
|
|
13442
|
-
}
|
|
13443
|
-
}
|
|
13444
|
-
logWarnings({
|
|
13445
|
-
warnings,
|
|
13446
|
-
provider: model.provider,
|
|
13447
|
-
model: model.modelId
|
|
13448
|
-
});
|
|
13449
|
-
await notify({
|
|
13450
|
-
event: {
|
|
13451
|
-
callId,
|
|
13452
|
-
operationId: "ai.embedMany",
|
|
13453
|
-
provider: model.provider,
|
|
13454
|
-
modelId: model.modelId,
|
|
13455
|
-
value: values,
|
|
13456
|
-
embedding: embeddings,
|
|
13457
|
-
usage: { tokens },
|
|
13458
|
-
warnings,
|
|
13459
|
-
providerMetadata,
|
|
13460
|
-
response: responses
|
|
13461
|
-
},
|
|
13462
|
-
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]
|
|
13463
|
-
});
|
|
13464
|
-
return new DefaultEmbedManyResult({
|
|
13465
|
-
values,
|
|
13466
|
-
embeddings,
|
|
13467
|
-
usage: { tokens },
|
|
13468
|
-
warnings,
|
|
13469
|
-
providerMetadata,
|
|
13470
|
-
responses
|
|
13471
|
-
});
|
|
13472
|
-
} catch (error) {
|
|
13473
|
-
await ((_b25 = telemetryDispatcher.onError) == null ? void 0 : _b25.call(telemetryDispatcher, { callId, error }));
|
|
13474
|
-
throw error;
|
|
13475
|
-
}
|
|
13476
13232
|
}
|
|
13477
|
-
});
|
|
13233
|
+
})();
|
|
13234
|
+
return asAsyncIterableStream(transform.readable);
|
|
13478
13235
|
}
|
|
13479
|
-
function
|
|
13480
|
-
|
|
13481
|
-
|
|
13482
|
-
|
|
13483
|
-
|
|
13484
|
-
|
|
13485
|
-
|
|
13486
|
-
|
|
13236
|
+
function resolveBatchApi(provider) {
|
|
13237
|
+
var _a25;
|
|
13238
|
+
provider != null ? provider : provider = asProviderV4((_a25 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a25 : gateway2);
|
|
13239
|
+
if (isBatchApi(provider)) {
|
|
13240
|
+
return provider;
|
|
13241
|
+
}
|
|
13242
|
+
if (!hasBatchFactory(provider)) {
|
|
13243
|
+
throw new UnsupportedFunctionalityError3({
|
|
13244
|
+
functionality: "batch processing",
|
|
13245
|
+
message: "The provider does not support batch processing. Make sure it exposes an experimental_batch() method."
|
|
13487
13246
|
});
|
|
13488
13247
|
}
|
|
13248
|
+
return provider.experimental_batch();
|
|
13489
13249
|
}
|
|
13490
|
-
|
|
13491
|
-
function
|
|
13492
|
-
values,
|
|
13493
|
-
maxEmbeddingsPerCall,
|
|
13494
|
-
maxInputBytesPerCall
|
|
13495
|
-
}) {
|
|
13496
|
-
if (maxEmbeddingsPerCall <= 0) {
|
|
13497
|
-
throw new Error("maxEmbeddingsPerCall must be greater than 0");
|
|
13498
|
-
}
|
|
13499
|
-
if (maxInputBytesPerCall <= 0) {
|
|
13500
|
-
throw new Error("maxInputBytesPerCall must be greater than 0");
|
|
13501
|
-
}
|
|
13502
|
-
if (values.length === 0) {
|
|
13503
|
-
return [];
|
|
13504
|
-
}
|
|
13505
|
-
const chunks = [];
|
|
13506
|
-
let currentChunk = [];
|
|
13507
|
-
let currentInputBytes = 0;
|
|
13508
|
-
for (const value of values) {
|
|
13509
|
-
const inputBytes = textEncoder.encode(value).length;
|
|
13510
|
-
if (currentChunk.length > 0 && (currentChunk.length >= maxEmbeddingsPerCall || currentInputBytes + inputBytes > maxInputBytesPerCall)) {
|
|
13511
|
-
chunks.push(currentChunk);
|
|
13512
|
-
currentChunk = [];
|
|
13513
|
-
currentInputBytes = 0;
|
|
13514
|
-
}
|
|
13515
|
-
currentChunk.push(value);
|
|
13516
|
-
currentInputBytes += inputBytes;
|
|
13517
|
-
}
|
|
13518
|
-
chunks.push(currentChunk);
|
|
13519
|
-
return chunks;
|
|
13250
|
+
function hasBatchFactory(provider) {
|
|
13251
|
+
return typeof provider.experimental_batch === "function";
|
|
13520
13252
|
}
|
|
13521
|
-
|
|
13522
|
-
|
|
13523
|
-
|
|
13524
|
-
this.embeddings = options.embeddings;
|
|
13525
|
-
this.usage = options.usage;
|
|
13526
|
-
this.warnings = options.warnings;
|
|
13527
|
-
this.providerMetadata = options.providerMetadata;
|
|
13528
|
-
this.responses = options.responses;
|
|
13529
|
-
}
|
|
13530
|
-
};
|
|
13531
|
-
|
|
13532
|
-
// src/generate-image/generate-image.ts
|
|
13533
|
-
import {
|
|
13534
|
-
isJSONObject
|
|
13535
|
-
} from "@ai-sdk/provider";
|
|
13536
|
-
import {
|
|
13537
|
-
convertBase64ToUint8Array as convertBase64ToUint8Array4,
|
|
13538
|
-
detectMediaType as detectMediaType2,
|
|
13539
|
-
withUserAgentSuffix as withUserAgentSuffix7
|
|
13540
|
-
} from "@ai-sdk/provider-utils";
|
|
13541
|
-
|
|
13542
|
-
// src/prompt/data-content.ts
|
|
13543
|
-
import {
|
|
13544
|
-
convertBase64ToUint8Array as convertBase64ToUint8Array3,
|
|
13545
|
-
convertUint8ArrayToBase64 as convertUint8ArrayToBase643
|
|
13546
|
-
} from "@ai-sdk/provider-utils";
|
|
13547
|
-
function convertDataContentToBase64String(content) {
|
|
13548
|
-
if (typeof content === "string") {
|
|
13549
|
-
return content;
|
|
13550
|
-
}
|
|
13551
|
-
if (content instanceof ArrayBuffer) {
|
|
13552
|
-
return convertUint8ArrayToBase643(new Uint8Array(content));
|
|
13553
|
-
}
|
|
13554
|
-
return convertUint8ArrayToBase643(content);
|
|
13253
|
+
function isBatchApi(provider) {
|
|
13254
|
+
const candidate = provider;
|
|
13255
|
+
return typeof candidate.doStartBatch === "function" && typeof candidate.doGetBatchStatus === "function" && typeof candidate.doGetBatchResults === "function";
|
|
13555
13256
|
}
|
|
13556
|
-
function
|
|
13557
|
-
if (
|
|
13558
|
-
|
|
13257
|
+
function validateRequests(requests) {
|
|
13258
|
+
if (requests.length === 0) {
|
|
13259
|
+
throw new InvalidArgumentError({
|
|
13260
|
+
parameter: "requests",
|
|
13261
|
+
value: requests,
|
|
13262
|
+
message: "requests must not be empty"
|
|
13263
|
+
});
|
|
13559
13264
|
}
|
|
13560
|
-
|
|
13561
|
-
|
|
13562
|
-
|
|
13563
|
-
|
|
13564
|
-
|
|
13565
|
-
|
|
13566
|
-
|
|
13567
|
-
cause: error
|
|
13265
|
+
const ids = /* @__PURE__ */ new Set();
|
|
13266
|
+
for (const request of requests) {
|
|
13267
|
+
if (request.id.trim().length === 0) {
|
|
13268
|
+
throw new InvalidArgumentError({
|
|
13269
|
+
parameter: "requests",
|
|
13270
|
+
value: requests,
|
|
13271
|
+
message: "request IDs must not be empty"
|
|
13568
13272
|
});
|
|
13569
13273
|
}
|
|
13274
|
+
if (ids.has(request.id)) {
|
|
13275
|
+
throw new InvalidArgumentError({
|
|
13276
|
+
parameter: "requests",
|
|
13277
|
+
value: requests,
|
|
13278
|
+
message: `request IDs must be unique; duplicate ID "${request.id}"`
|
|
13279
|
+
});
|
|
13280
|
+
}
|
|
13281
|
+
ids.add(request.id);
|
|
13570
13282
|
}
|
|
13571
|
-
if (content instanceof ArrayBuffer) {
|
|
13572
|
-
return new Uint8Array(content);
|
|
13573
|
-
}
|
|
13574
|
-
throw new InvalidDataContentError({ content });
|
|
13575
13283
|
}
|
|
13576
|
-
|
|
13577
|
-
|
|
13578
|
-
|
|
13579
|
-
|
|
13580
|
-
|
|
13581
|
-
|
|
13582
|
-
|
|
13583
|
-
|
|
13584
|
-
|
|
13585
|
-
|
|
13586
|
-
];
|
|
13587
|
-
var RetryableNoImageResultError = class extends Error {
|
|
13588
|
-
constructor() {
|
|
13589
|
-
super("No image generated.");
|
|
13590
|
-
this.name = "RetryableNoImageResultError";
|
|
13284
|
+
function validateBatchReference({
|
|
13285
|
+
batchApi,
|
|
13286
|
+
batch
|
|
13287
|
+
}) {
|
|
13288
|
+
if (batch.version !== 2) {
|
|
13289
|
+
throw new InvalidArgumentError({
|
|
13290
|
+
parameter: "batch",
|
|
13291
|
+
value: batch,
|
|
13292
|
+
message: "batch must be a supported batch reference"
|
|
13293
|
+
});
|
|
13591
13294
|
}
|
|
13592
|
-
|
|
13593
|
-
|
|
13594
|
-
|
|
13595
|
-
|
|
13596
|
-
|
|
13597
|
-
|
|
13598
|
-
|
|
13599
|
-
|
|
13600
|
-
|
|
13601
|
-
|
|
13602
|
-
|
|
13603
|
-
abortSignal,
|
|
13604
|
-
headers
|
|
13295
|
+
if (batch.provider !== batchApi.provider) {
|
|
13296
|
+
throw new InvalidArgumentError({
|
|
13297
|
+
parameter: "provider",
|
|
13298
|
+
value: batchApi,
|
|
13299
|
+
message: `provider ${batchApi.provider} is not compatible with batch provider ${batch.provider}`
|
|
13300
|
+
});
|
|
13301
|
+
}
|
|
13302
|
+
}
|
|
13303
|
+
async function convertBatchItemResult({
|
|
13304
|
+
item,
|
|
13305
|
+
tools
|
|
13605
13306
|
}) {
|
|
13606
|
-
|
|
13607
|
-
|
|
13608
|
-
|
|
13609
|
-
|
|
13610
|
-
|
|
13611
|
-
|
|
13612
|
-
|
|
13613
|
-
|
|
13614
|
-
|
|
13615
|
-
|
|
13616
|
-
|
|
13617
|
-
|
|
13618
|
-
|
|
13619
|
-
|
|
13620
|
-
|
|
13621
|
-
|
|
13622
|
-
|
|
13623
|
-
|
|
13624
|
-
|
|
13625
|
-
|
|
13626
|
-
|
|
13627
|
-
|
|
13628
|
-
|
|
13629
|
-
|
|
13630
|
-
|
|
13631
|
-
|
|
13632
|
-
|
|
13633
|
-
prompt,
|
|
13634
|
-
files,
|
|
13635
|
-
mask,
|
|
13636
|
-
n: callImageCount,
|
|
13637
|
-
abortSignal,
|
|
13638
|
-
headers: headersWithUserAgent,
|
|
13639
|
-
size,
|
|
13640
|
-
aspectRatio,
|
|
13641
|
-
seed,
|
|
13642
|
-
providerOptions: providerOptions != null ? providerOptions : {}
|
|
13643
|
-
});
|
|
13644
|
-
callResults.push(result);
|
|
13645
|
-
if (result.images.length === 0 && result.isRetryable !== false) {
|
|
13646
|
-
throw new RetryableNoImageResultError();
|
|
13647
|
-
}
|
|
13648
|
-
return result;
|
|
13649
|
-
});
|
|
13650
|
-
return callResults;
|
|
13651
|
-
} catch (error) {
|
|
13652
|
-
const noImageResultError = error instanceof RetryableNoImageResultError ? error : RetryError.isInstance(error) && error.lastError instanceof RetryableNoImageResultError ? error.lastError : void 0;
|
|
13653
|
-
if (noImageResultError != null) {
|
|
13654
|
-
return callResults;
|
|
13655
|
-
}
|
|
13656
|
-
throw error;
|
|
13307
|
+
switch (item.type) {
|
|
13308
|
+
case "text":
|
|
13309
|
+
switch (item.status) {
|
|
13310
|
+
case "succeeded":
|
|
13311
|
+
return {
|
|
13312
|
+
type: item.type,
|
|
13313
|
+
id: item.id,
|
|
13314
|
+
status: item.status,
|
|
13315
|
+
...await convertGenerateResult({ result: item.result, tools })
|
|
13316
|
+
};
|
|
13317
|
+
case "failed":
|
|
13318
|
+
return {
|
|
13319
|
+
type: item.type,
|
|
13320
|
+
id: item.id,
|
|
13321
|
+
status: item.status,
|
|
13322
|
+
error: item.error,
|
|
13323
|
+
providerMetadata: item.providerMetadata
|
|
13324
|
+
};
|
|
13325
|
+
case "cancelled":
|
|
13326
|
+
case "expired":
|
|
13327
|
+
return {
|
|
13328
|
+
type: item.type,
|
|
13329
|
+
id: item.id,
|
|
13330
|
+
status: item.status,
|
|
13331
|
+
error: item.error,
|
|
13332
|
+
providerMetadata: item.providerMetadata
|
|
13333
|
+
};
|
|
13657
13334
|
}
|
|
13658
|
-
|
|
13659
|
-
|
|
13660
|
-
|
|
13661
|
-
|
|
13662
|
-
|
|
13663
|
-
|
|
13664
|
-
|
|
13665
|
-
|
|
13666
|
-
|
|
13667
|
-
|
|
13668
|
-
|
|
13669
|
-
|
|
13670
|
-
|
|
13671
|
-
|
|
13672
|
-
|
|
13335
|
+
case "image":
|
|
13336
|
+
switch (item.status) {
|
|
13337
|
+
case "succeeded":
|
|
13338
|
+
return {
|
|
13339
|
+
type: item.type,
|
|
13340
|
+
id: item.id,
|
|
13341
|
+
status: item.status,
|
|
13342
|
+
...convertImageResult(item.result)
|
|
13343
|
+
};
|
|
13344
|
+
case "failed":
|
|
13345
|
+
return {
|
|
13346
|
+
type: item.type,
|
|
13347
|
+
id: item.id,
|
|
13348
|
+
status: item.status,
|
|
13349
|
+
error: item.error,
|
|
13350
|
+
providerMetadata: item.providerMetadata
|
|
13351
|
+
};
|
|
13352
|
+
case "cancelled":
|
|
13353
|
+
case "expired":
|
|
13354
|
+
return {
|
|
13355
|
+
type: item.type,
|
|
13356
|
+
id: item.id,
|
|
13357
|
+
status: item.status,
|
|
13358
|
+
error: item.error,
|
|
13359
|
+
providerMetadata: item.providerMetadata
|
|
13360
|
+
};
|
|
13361
|
+
}
|
|
13362
|
+
}
|
|
13363
|
+
}
|
|
13364
|
+
function convertImageResult(result) {
|
|
13365
|
+
return {
|
|
13366
|
+
images: result.images.map(
|
|
13673
13367
|
(image, index) => {
|
|
13674
|
-
var
|
|
13368
|
+
var _a25;
|
|
13675
13369
|
return new DefaultGeneratedFile({
|
|
13676
13370
|
data: image,
|
|
13677
|
-
mediaType: (
|
|
13678
|
-
data: image,
|
|
13679
|
-
topLevelType: "image"
|
|
13680
|
-
})) != null ? _a26 : "image/png",
|
|
13371
|
+
mediaType: (_a25 = detectMediaType3({ data: image, topLevelType: "image" })) != null ? _a25 : "image/png",
|
|
13681
13372
|
providerMetadata: getImageProviderMetadata(
|
|
13682
13373
|
result.providerMetadata,
|
|
13683
13374
|
index
|
|
13684
13375
|
)
|
|
13685
13376
|
});
|
|
13686
13377
|
}
|
|
13687
|
-
)
|
|
13688
|
-
|
|
13689
|
-
|
|
13690
|
-
|
|
13691
|
-
|
|
13692
|
-
|
|
13693
|
-
|
|
13694
|
-
|
|
13695
|
-
|
|
13696
|
-
|
|
13697
|
-
|
|
13698
|
-
|
|
13378
|
+
),
|
|
13379
|
+
warnings: result.warnings,
|
|
13380
|
+
response: {
|
|
13381
|
+
timestamp: result.response.timestamp,
|
|
13382
|
+
modelId: result.response.modelId,
|
|
13383
|
+
headers: result.response.headers
|
|
13384
|
+
},
|
|
13385
|
+
providerMetadata: result.providerMetadata,
|
|
13386
|
+
usage: result.usage
|
|
13387
|
+
};
|
|
13388
|
+
}
|
|
13389
|
+
async function convertGenerateResult({
|
|
13390
|
+
result,
|
|
13391
|
+
tools
|
|
13392
|
+
}) {
|
|
13393
|
+
var _a25;
|
|
13394
|
+
const toolCalls = await Promise.all(
|
|
13395
|
+
result.content.filter(
|
|
13396
|
+
(part) => part.type === "tool-call"
|
|
13397
|
+
).map(
|
|
13398
|
+
(toolCall) => parseToolCall({
|
|
13399
|
+
toolCall,
|
|
13400
|
+
tools,
|
|
13401
|
+
repairToolCall: void 0,
|
|
13402
|
+
refineToolInput: void 0,
|
|
13403
|
+
instructions: void 0,
|
|
13404
|
+
messages: []
|
|
13405
|
+
})
|
|
13406
|
+
)
|
|
13407
|
+
);
|
|
13408
|
+
const content = convertLanguageModelContent({
|
|
13409
|
+
content: result.content,
|
|
13410
|
+
toolCalls,
|
|
13411
|
+
toolOutputs: [],
|
|
13412
|
+
toolApprovalRequests: [],
|
|
13413
|
+
toolApprovalResponses: [],
|
|
13414
|
+
tools
|
|
13415
|
+
});
|
|
13416
|
+
return {
|
|
13417
|
+
content,
|
|
13418
|
+
text: result.content.filter(
|
|
13419
|
+
(part) => part.type === "text"
|
|
13420
|
+
).map((part) => part.text).join(""),
|
|
13421
|
+
finishReason: result.finishReason.unified,
|
|
13422
|
+
rawFinishReason: result.finishReason.raw,
|
|
13423
|
+
usage: asLanguageModelUsage(result.usage),
|
|
13424
|
+
...result.response != null ? {
|
|
13425
|
+
response: {
|
|
13426
|
+
id: result.response.id,
|
|
13427
|
+
timestamp: (_a25 = result.response.timestamp) == null ? void 0 : _a25.toISOString(),
|
|
13428
|
+
modelId: result.response.modelId
|
|
13429
|
+
}
|
|
13430
|
+
} : {},
|
|
13431
|
+
providerMetadata: result.providerMetadata
|
|
13432
|
+
};
|
|
13433
|
+
}
|
|
13434
|
+
|
|
13435
|
+
// src/embed/embed.ts
|
|
13436
|
+
import {
|
|
13437
|
+
createIdGenerator as createIdGenerator4,
|
|
13438
|
+
withUserAgentSuffix as withUserAgentSuffix6
|
|
13439
|
+
} from "@ai-sdk/provider-utils";
|
|
13440
|
+
|
|
13441
|
+
// src/embed/restricted-telemetry-dispatcher.ts
|
|
13442
|
+
function createRestrictedTelemetryDispatcher2({
|
|
13443
|
+
telemetry
|
|
13444
|
+
}) {
|
|
13445
|
+
const dispatcher = createTelemetryDispatcher({ telemetry });
|
|
13446
|
+
return {
|
|
13447
|
+
...dispatcher,
|
|
13448
|
+
onStart: (event) => {
|
|
13449
|
+
var _a25;
|
|
13450
|
+
return (_a25 = dispatcher.onStart) == null ? void 0 : _a25.call(dispatcher, {
|
|
13451
|
+
...event,
|
|
13452
|
+
runtimeContext: filterIncludedContext({
|
|
13453
|
+
context: event.runtimeContext,
|
|
13454
|
+
includeContext: telemetry == null ? void 0 : telemetry.includeRuntimeContext
|
|
13455
|
+
})
|
|
13456
|
+
});
|
|
13457
|
+
},
|
|
13458
|
+
onEnd: (event) => {
|
|
13459
|
+
var _a25;
|
|
13460
|
+
return (_a25 = dispatcher.onEnd) == null ? void 0 : _a25.call(dispatcher, {
|
|
13461
|
+
...event,
|
|
13462
|
+
runtimeContext: filterIncludedContext({
|
|
13463
|
+
context: event.runtimeContext,
|
|
13464
|
+
includeContext: telemetry == null ? void 0 : telemetry.includeRuntimeContext
|
|
13465
|
+
})
|
|
13466
|
+
});
|
|
13699
13467
|
}
|
|
13700
|
-
|
|
13701
|
-
|
|
13702
|
-
|
|
13703
|
-
|
|
13704
|
-
|
|
13705
|
-
|
|
13706
|
-
|
|
13707
|
-
|
|
13708
|
-
|
|
13709
|
-
|
|
13710
|
-
|
|
13711
|
-
|
|
13712
|
-
|
|
13713
|
-
|
|
13714
|
-
|
|
13715
|
-
|
|
13716
|
-
|
|
13717
|
-
|
|
13718
|
-
|
|
13719
|
-
|
|
13720
|
-
|
|
13721
|
-
|
|
13722
|
-
|
|
13723
|
-
|
|
13724
|
-
|
|
13725
|
-
|
|
13468
|
+
};
|
|
13469
|
+
}
|
|
13470
|
+
|
|
13471
|
+
// src/embed/embed.ts
|
|
13472
|
+
var originalGenerateCallId4 = createIdGenerator4({
|
|
13473
|
+
prefix: "call",
|
|
13474
|
+
size: 24
|
|
13475
|
+
});
|
|
13476
|
+
async function embed({
|
|
13477
|
+
model: modelArg,
|
|
13478
|
+
value,
|
|
13479
|
+
providerOptions,
|
|
13480
|
+
maxRetries: maxRetriesArg,
|
|
13481
|
+
abortSignal,
|
|
13482
|
+
headers,
|
|
13483
|
+
experimental_telemetry,
|
|
13484
|
+
telemetry = experimental_telemetry,
|
|
13485
|
+
runtimeContext = {},
|
|
13486
|
+
onStart,
|
|
13487
|
+
experimental_onStart,
|
|
13488
|
+
onEnd,
|
|
13489
|
+
experimental_onEnd,
|
|
13490
|
+
_internal: { generateCallId = originalGenerateCallId4 } = {}
|
|
13491
|
+
}) {
|
|
13492
|
+
var _a25;
|
|
13493
|
+
const model = resolveEmbeddingModel(modelArg);
|
|
13494
|
+
const { maxRetries, retry } = prepareRetries({
|
|
13495
|
+
maxRetries: maxRetriesArg,
|
|
13496
|
+
abortSignal
|
|
13497
|
+
});
|
|
13498
|
+
const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
|
|
13499
|
+
const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;
|
|
13500
|
+
const headersWithUserAgent = withUserAgentSuffix6(
|
|
13501
|
+
headers != null ? headers : {},
|
|
13502
|
+
`ai/${VERSION}`
|
|
13503
|
+
);
|
|
13504
|
+
const callId = generateCallId();
|
|
13505
|
+
const telemetryDispatcher = createRestrictedTelemetryDispatcher2({
|
|
13506
|
+
telemetry
|
|
13507
|
+
});
|
|
13508
|
+
const runInTracingChannelSpan = (_a25 = telemetryDispatcher.runInTracingChannelSpan) != null ? _a25 : (async ({ execute }) => await execute());
|
|
13509
|
+
const startEvent = {
|
|
13510
|
+
callId,
|
|
13511
|
+
operationId: "ai.embed",
|
|
13512
|
+
runtimeContext,
|
|
13513
|
+
provider: model.provider,
|
|
13514
|
+
modelId: model.modelId,
|
|
13515
|
+
value,
|
|
13516
|
+
maxRetries,
|
|
13517
|
+
headers: headersWithUserAgent,
|
|
13518
|
+
providerOptions
|
|
13519
|
+
};
|
|
13520
|
+
return await runInTracingChannelSpan({
|
|
13521
|
+
type: "embed",
|
|
13522
|
+
event: startEvent,
|
|
13523
|
+
execute: async () => {
|
|
13524
|
+
var _a26;
|
|
13525
|
+
await notify({
|
|
13526
|
+
event: startEvent,
|
|
13527
|
+
callbacks: [resolvedOnStart, telemetryDispatcher.onStart]
|
|
13528
|
+
});
|
|
13529
|
+
try {
|
|
13530
|
+
const { embedding, usage, warnings, response, providerMetadata } = await retry(async () => {
|
|
13531
|
+
var _a27, _b25;
|
|
13532
|
+
const embedCallId = generateCallId();
|
|
13533
|
+
await notify({
|
|
13534
|
+
event: {
|
|
13535
|
+
callId,
|
|
13536
|
+
embedCallId,
|
|
13537
|
+
operationId: "ai.embed.doEmbed",
|
|
13538
|
+
provider: model.provider,
|
|
13539
|
+
modelId: model.modelId,
|
|
13540
|
+
values: [value]
|
|
13541
|
+
},
|
|
13542
|
+
callbacks: [telemetryDispatcher.onEmbedStart]
|
|
13543
|
+
});
|
|
13544
|
+
const modelResponse = await model.doEmbed({
|
|
13545
|
+
values: [value],
|
|
13546
|
+
abortSignal,
|
|
13547
|
+
headers: headersWithUserAgent,
|
|
13548
|
+
providerOptions
|
|
13549
|
+
});
|
|
13550
|
+
const embedding2 = modelResponse.embeddings[0];
|
|
13551
|
+
const usage2 = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };
|
|
13552
|
+
await notify({
|
|
13553
|
+
event: {
|
|
13554
|
+
callId,
|
|
13555
|
+
embedCallId,
|
|
13556
|
+
operationId: "ai.embed.doEmbed",
|
|
13557
|
+
provider: model.provider,
|
|
13558
|
+
modelId: model.modelId,
|
|
13559
|
+
values: [value],
|
|
13560
|
+
embeddings: modelResponse.embeddings,
|
|
13561
|
+
usage: usage2
|
|
13562
|
+
},
|
|
13563
|
+
callbacks: [telemetryDispatcher.onEmbedEnd]
|
|
13564
|
+
});
|
|
13565
|
+
if (embedding2 == null) {
|
|
13566
|
+
throw new InvalidResponseDataError({
|
|
13567
|
+
data: modelResponse.embeddings,
|
|
13568
|
+
message: "No embedding generated."
|
|
13569
|
+
});
|
|
13726
13570
|
}
|
|
13727
|
-
|
|
13728
|
-
|
|
13729
|
-
|
|
13571
|
+
return {
|
|
13572
|
+
embedding: embedding2,
|
|
13573
|
+
usage: usage2,
|
|
13574
|
+
warnings: (_b25 = modelResponse.warnings) != null ? _b25 : [],
|
|
13575
|
+
providerMetadata: modelResponse.providerMetadata,
|
|
13576
|
+
response: modelResponse.response
|
|
13577
|
+
};
|
|
13578
|
+
});
|
|
13579
|
+
logWarnings({
|
|
13580
|
+
warnings,
|
|
13581
|
+
provider: model.provider,
|
|
13582
|
+
model: model.modelId
|
|
13583
|
+
});
|
|
13584
|
+
await notify({
|
|
13585
|
+
event: {
|
|
13586
|
+
callId,
|
|
13587
|
+
operationId: "ai.embed",
|
|
13588
|
+
runtimeContext,
|
|
13589
|
+
provider: model.provider,
|
|
13590
|
+
modelId: model.modelId,
|
|
13591
|
+
value,
|
|
13592
|
+
embedding,
|
|
13593
|
+
usage,
|
|
13594
|
+
warnings,
|
|
13595
|
+
providerMetadata,
|
|
13596
|
+
response
|
|
13597
|
+
},
|
|
13598
|
+
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]
|
|
13599
|
+
});
|
|
13600
|
+
return new DefaultEmbedResult({
|
|
13601
|
+
value,
|
|
13602
|
+
embedding,
|
|
13603
|
+
usage,
|
|
13604
|
+
warnings,
|
|
13605
|
+
providerMetadata,
|
|
13606
|
+
response
|
|
13607
|
+
});
|
|
13608
|
+
} catch (error) {
|
|
13609
|
+
await ((_a26 = telemetryDispatcher.onError) == null ? void 0 : _a26.call(telemetryDispatcher, { callId, error }));
|
|
13610
|
+
throw error;
|
|
13611
|
+
}
|
|
13612
|
+
}
|
|
13613
|
+
});
|
|
13614
|
+
}
|
|
13615
|
+
var DefaultEmbedResult = class {
|
|
13616
|
+
constructor(options) {
|
|
13617
|
+
this.value = options.value;
|
|
13618
|
+
this.embedding = options.embedding;
|
|
13619
|
+
this.usage = options.usage;
|
|
13620
|
+
this.warnings = options.warnings;
|
|
13621
|
+
this.providerMetadata = options.providerMetadata;
|
|
13622
|
+
this.response = options.response;
|
|
13623
|
+
}
|
|
13624
|
+
};
|
|
13625
|
+
|
|
13626
|
+
// src/embed/embed-many.ts
|
|
13627
|
+
import { InvalidResponseDataError as InvalidResponseDataError2 } from "@ai-sdk/provider";
|
|
13628
|
+
import {
|
|
13629
|
+
createIdGenerator as createIdGenerator5,
|
|
13630
|
+
withUserAgentSuffix as withUserAgentSuffix7
|
|
13631
|
+
} from "@ai-sdk/provider-utils";
|
|
13632
|
+
|
|
13633
|
+
// src/model/get-embedding-model-max-input-bytes-per-call.ts
|
|
13634
|
+
import { EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL } from "@ai-sdk/provider-utils";
|
|
13635
|
+
function getEmbeddingModelMaxInputBytesPerCall(model) {
|
|
13636
|
+
return model[EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL];
|
|
13637
|
+
}
|
|
13638
|
+
|
|
13639
|
+
// src/util/split-array.ts
|
|
13640
|
+
function splitArray(array3, chunkSize) {
|
|
13641
|
+
if (chunkSize <= 0) {
|
|
13642
|
+
throw new InvalidArgumentError({
|
|
13643
|
+
parameter: "chunkSize",
|
|
13644
|
+
value: chunkSize,
|
|
13645
|
+
message: "chunkSize must be greater than 0"
|
|
13646
|
+
});
|
|
13647
|
+
}
|
|
13648
|
+
const result = [];
|
|
13649
|
+
for (let i = 0; i < array3.length; i += chunkSize) {
|
|
13650
|
+
result.push(array3.slice(i, i + chunkSize));
|
|
13651
|
+
}
|
|
13652
|
+
return result;
|
|
13653
|
+
}
|
|
13654
|
+
|
|
13655
|
+
// src/embed/embed-many.ts
|
|
13656
|
+
var originalGenerateCallId5 = createIdGenerator5({
|
|
13657
|
+
prefix: "call",
|
|
13658
|
+
size: 24
|
|
13659
|
+
});
|
|
13660
|
+
async function embedMany({
|
|
13661
|
+
model: modelArg,
|
|
13662
|
+
values,
|
|
13663
|
+
maxParallelCalls = Infinity,
|
|
13664
|
+
maxRetries: maxRetriesArg,
|
|
13665
|
+
abortSignal,
|
|
13666
|
+
headers,
|
|
13667
|
+
providerOptions,
|
|
13668
|
+
experimental_telemetry,
|
|
13669
|
+
telemetry = experimental_telemetry,
|
|
13670
|
+
runtimeContext = {},
|
|
13671
|
+
onStart,
|
|
13672
|
+
experimental_onStart,
|
|
13673
|
+
onEnd,
|
|
13674
|
+
experimental_onEnd,
|
|
13675
|
+
_internal: { generateCallId = originalGenerateCallId5 } = {}
|
|
13676
|
+
}) {
|
|
13677
|
+
var _a25;
|
|
13678
|
+
const model = resolveEmbeddingModel(modelArg);
|
|
13679
|
+
const { maxRetries, retry } = prepareRetries({
|
|
13680
|
+
maxRetries: maxRetriesArg,
|
|
13681
|
+
abortSignal
|
|
13682
|
+
});
|
|
13683
|
+
const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
|
|
13684
|
+
const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;
|
|
13685
|
+
const headersWithUserAgent = withUserAgentSuffix7(
|
|
13686
|
+
headers != null ? headers : {},
|
|
13687
|
+
`ai/${VERSION}`
|
|
13688
|
+
);
|
|
13689
|
+
const callId = generateCallId();
|
|
13690
|
+
const telemetryDispatcher = createRestrictedTelemetryDispatcher2({
|
|
13691
|
+
telemetry
|
|
13692
|
+
});
|
|
13693
|
+
const runInTracingChannelSpan = (_a25 = telemetryDispatcher.runInTracingChannelSpan) != null ? _a25 : (async ({ execute }) => await execute());
|
|
13694
|
+
const startEvent = {
|
|
13695
|
+
callId,
|
|
13696
|
+
operationId: "ai.embedMany",
|
|
13697
|
+
runtimeContext,
|
|
13698
|
+
provider: model.provider,
|
|
13699
|
+
modelId: model.modelId,
|
|
13700
|
+
value: values,
|
|
13701
|
+
maxRetries,
|
|
13702
|
+
headers: headersWithUserAgent,
|
|
13703
|
+
providerOptions
|
|
13704
|
+
};
|
|
13705
|
+
return await runInTracingChannelSpan({
|
|
13706
|
+
type: "embedMany",
|
|
13707
|
+
event: startEvent,
|
|
13708
|
+
execute: async () => {
|
|
13709
|
+
var _a26, _b25;
|
|
13710
|
+
await notify({
|
|
13711
|
+
event: startEvent,
|
|
13712
|
+
callbacks: [resolvedOnStart, telemetryDispatcher.onStart]
|
|
13713
|
+
});
|
|
13714
|
+
try {
|
|
13715
|
+
const [
|
|
13716
|
+
maxEmbeddingsPerCall,
|
|
13717
|
+
maxInputBytesPerCall,
|
|
13718
|
+
supportsParallelCalls
|
|
13719
|
+
] = await Promise.all([
|
|
13720
|
+
model.maxEmbeddingsPerCall,
|
|
13721
|
+
getEmbeddingModelMaxInputBytesPerCall(model),
|
|
13722
|
+
model.supportsParallelCalls
|
|
13723
|
+
]);
|
|
13724
|
+
const hasEmbeddingLimit = maxEmbeddingsPerCall != null && maxEmbeddingsPerCall !== Infinity;
|
|
13725
|
+
const hasInputByteLimit = maxInputBytesPerCall != null && maxInputBytesPerCall !== Infinity;
|
|
13726
|
+
if (!hasEmbeddingLimit && !hasInputByteLimit) {
|
|
13727
|
+
const { embeddings: embeddings2, usage, warnings: warnings2, response, providerMetadata: providerMetadata2 } = await retry(async () => {
|
|
13728
|
+
var _a27, _b26;
|
|
13729
|
+
const embedCallId = generateCallId();
|
|
13730
|
+
await notify({
|
|
13731
|
+
event: {
|
|
13732
|
+
callId,
|
|
13733
|
+
embedCallId,
|
|
13734
|
+
operationId: "ai.embedMany.doEmbed",
|
|
13735
|
+
provider: model.provider,
|
|
13736
|
+
modelId: model.modelId,
|
|
13737
|
+
values
|
|
13738
|
+
},
|
|
13739
|
+
callbacks: [telemetryDispatcher.onEmbedStart]
|
|
13740
|
+
});
|
|
13741
|
+
const modelResponse = await model.doEmbed({
|
|
13742
|
+
values,
|
|
13743
|
+
abortSignal,
|
|
13744
|
+
headers: headersWithUserAgent,
|
|
13745
|
+
providerOptions
|
|
13746
|
+
});
|
|
13747
|
+
const embeddings3 = modelResponse.embeddings;
|
|
13748
|
+
const usage2 = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };
|
|
13749
|
+
await notify({
|
|
13750
|
+
event: {
|
|
13751
|
+
callId,
|
|
13752
|
+
embedCallId,
|
|
13753
|
+
operationId: "ai.embedMany.doEmbed",
|
|
13754
|
+
provider: model.provider,
|
|
13755
|
+
modelId: model.modelId,
|
|
13756
|
+
values,
|
|
13757
|
+
embeddings: embeddings3,
|
|
13758
|
+
usage: usage2
|
|
13759
|
+
},
|
|
13760
|
+
callbacks: [telemetryDispatcher.onEmbedEnd]
|
|
13761
|
+
});
|
|
13762
|
+
return {
|
|
13763
|
+
embeddings: embeddings3,
|
|
13764
|
+
usage: usage2,
|
|
13765
|
+
warnings: (_b26 = modelResponse.warnings) != null ? _b26 : [],
|
|
13766
|
+
providerMetadata: modelResponse.providerMetadata,
|
|
13767
|
+
response: modelResponse.response
|
|
13768
|
+
};
|
|
13769
|
+
});
|
|
13770
|
+
validateEmbeddingCount({ embeddings: embeddings2, values });
|
|
13771
|
+
logWarnings({
|
|
13772
|
+
warnings: warnings2,
|
|
13773
|
+
provider: model.provider,
|
|
13774
|
+
model: model.modelId
|
|
13775
|
+
});
|
|
13776
|
+
await notify({
|
|
13777
|
+
event: {
|
|
13778
|
+
callId,
|
|
13779
|
+
operationId: "ai.embedMany",
|
|
13780
|
+
runtimeContext,
|
|
13781
|
+
provider: model.provider,
|
|
13782
|
+
modelId: model.modelId,
|
|
13783
|
+
value: values,
|
|
13784
|
+
embedding: embeddings2,
|
|
13785
|
+
usage,
|
|
13786
|
+
warnings: warnings2,
|
|
13787
|
+
providerMetadata: providerMetadata2,
|
|
13788
|
+
response: [response]
|
|
13789
|
+
},
|
|
13790
|
+
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]
|
|
13791
|
+
});
|
|
13792
|
+
return new DefaultEmbedManyResult({
|
|
13793
|
+
values,
|
|
13794
|
+
embeddings: embeddings2,
|
|
13795
|
+
usage,
|
|
13796
|
+
warnings: warnings2,
|
|
13797
|
+
providerMetadata: providerMetadata2,
|
|
13798
|
+
responses: [response]
|
|
13799
|
+
});
|
|
13800
|
+
}
|
|
13801
|
+
const valueChunks = splitByEmbeddingLimits({
|
|
13802
|
+
values,
|
|
13803
|
+
maxEmbeddingsPerCall: hasEmbeddingLimit ? maxEmbeddingsPerCall : Infinity,
|
|
13804
|
+
maxInputBytesPerCall: hasInputByteLimit ? maxInputBytesPerCall : Infinity
|
|
13805
|
+
});
|
|
13806
|
+
const embeddings = [];
|
|
13807
|
+
const warnings = [];
|
|
13808
|
+
const responses = [];
|
|
13809
|
+
let tokens = 0;
|
|
13810
|
+
let providerMetadata;
|
|
13811
|
+
const parallelChunks = splitArray(
|
|
13812
|
+
valueChunks,
|
|
13813
|
+
supportsParallelCalls ? maxParallelCalls : 1
|
|
13814
|
+
);
|
|
13815
|
+
for (const parallelChunk of parallelChunks) {
|
|
13816
|
+
const results = await Promise.all(
|
|
13817
|
+
parallelChunk.map(async (chunk) => {
|
|
13818
|
+
const result = await retry(async () => {
|
|
13819
|
+
var _a27, _b26;
|
|
13820
|
+
const embedCallId = generateCallId();
|
|
13821
|
+
await notify({
|
|
13822
|
+
event: {
|
|
13823
|
+
callId,
|
|
13824
|
+
embedCallId,
|
|
13825
|
+
operationId: "ai.embedMany.doEmbed",
|
|
13826
|
+
provider: model.provider,
|
|
13827
|
+
modelId: model.modelId,
|
|
13828
|
+
values: chunk
|
|
13829
|
+
},
|
|
13830
|
+
callbacks: [telemetryDispatcher.onEmbedStart]
|
|
13831
|
+
});
|
|
13832
|
+
const modelResponse = await model.doEmbed({
|
|
13833
|
+
values: chunk,
|
|
13834
|
+
abortSignal,
|
|
13835
|
+
headers: headersWithUserAgent,
|
|
13836
|
+
providerOptions
|
|
13837
|
+
});
|
|
13838
|
+
const chunkEmbeddings = modelResponse.embeddings;
|
|
13839
|
+
const usage = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };
|
|
13840
|
+
await notify({
|
|
13841
|
+
event: {
|
|
13842
|
+
callId,
|
|
13843
|
+
embedCallId,
|
|
13844
|
+
operationId: "ai.embedMany.doEmbed",
|
|
13845
|
+
provider: model.provider,
|
|
13846
|
+
modelId: model.modelId,
|
|
13847
|
+
values: chunk,
|
|
13848
|
+
embeddings: chunkEmbeddings,
|
|
13849
|
+
usage
|
|
13850
|
+
},
|
|
13851
|
+
callbacks: [telemetryDispatcher.onEmbedEnd]
|
|
13852
|
+
});
|
|
13853
|
+
return {
|
|
13854
|
+
embeddings: chunkEmbeddings,
|
|
13855
|
+
usage,
|
|
13856
|
+
warnings: (_b26 = modelResponse.warnings) != null ? _b26 : [],
|
|
13857
|
+
providerMetadata: modelResponse.providerMetadata,
|
|
13858
|
+
response: modelResponse.response
|
|
13859
|
+
};
|
|
13860
|
+
});
|
|
13861
|
+
validateEmbeddingCount({
|
|
13862
|
+
embeddings: result.embeddings,
|
|
13863
|
+
values: chunk
|
|
13864
|
+
});
|
|
13865
|
+
return result;
|
|
13866
|
+
})
|
|
13867
|
+
);
|
|
13868
|
+
for (const result of results) {
|
|
13869
|
+
embeddings.push(...result.embeddings);
|
|
13870
|
+
warnings.push(...result.warnings);
|
|
13871
|
+
responses.push(result.response);
|
|
13872
|
+
tokens += result.usage.tokens;
|
|
13873
|
+
if (result.providerMetadata) {
|
|
13874
|
+
if (!providerMetadata) {
|
|
13875
|
+
providerMetadata = { ...result.providerMetadata };
|
|
13876
|
+
} else {
|
|
13877
|
+
for (const [providerName, metadata] of Object.entries(
|
|
13878
|
+
result.providerMetadata
|
|
13879
|
+
)) {
|
|
13880
|
+
providerMetadata[providerName] = {
|
|
13881
|
+
...(_a26 = providerMetadata[providerName]) != null ? _a26 : {},
|
|
13882
|
+
...metadata
|
|
13883
|
+
};
|
|
13884
|
+
}
|
|
13885
|
+
}
|
|
13886
|
+
}
|
|
13730
13887
|
}
|
|
13731
|
-
} else {
|
|
13732
|
-
(_b25 = providerMetadata[providerName]) != null ? _b25 : providerMetadata[providerName] = { images: [] };
|
|
13733
|
-
providerMetadata[providerName].images.push(...metadata.images);
|
|
13734
13888
|
}
|
|
13889
|
+
logWarnings({
|
|
13890
|
+
warnings,
|
|
13891
|
+
provider: model.provider,
|
|
13892
|
+
model: model.modelId
|
|
13893
|
+
});
|
|
13894
|
+
await notify({
|
|
13895
|
+
event: {
|
|
13896
|
+
callId,
|
|
13897
|
+
operationId: "ai.embedMany",
|
|
13898
|
+
runtimeContext,
|
|
13899
|
+
provider: model.provider,
|
|
13900
|
+
modelId: model.modelId,
|
|
13901
|
+
value: values,
|
|
13902
|
+
embedding: embeddings,
|
|
13903
|
+
usage: { tokens },
|
|
13904
|
+
warnings,
|
|
13905
|
+
providerMetadata,
|
|
13906
|
+
response: responses
|
|
13907
|
+
},
|
|
13908
|
+
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]
|
|
13909
|
+
});
|
|
13910
|
+
return new DefaultEmbedManyResult({
|
|
13911
|
+
values,
|
|
13912
|
+
embeddings,
|
|
13913
|
+
usage: { tokens },
|
|
13914
|
+
warnings,
|
|
13915
|
+
providerMetadata,
|
|
13916
|
+
responses
|
|
13917
|
+
});
|
|
13918
|
+
} catch (error) {
|
|
13919
|
+
await ((_b25 = telemetryDispatcher.onError) == null ? void 0 : _b25.call(telemetryDispatcher, { callId, error }));
|
|
13920
|
+
throw error;
|
|
13735
13921
|
}
|
|
13736
13922
|
}
|
|
13737
|
-
responses.push(result.response);
|
|
13738
|
-
}
|
|
13739
|
-
logWarnings({ warnings, provider: model.provider, model: model.modelId });
|
|
13740
|
-
if (!images.length) {
|
|
13741
|
-
throw new NoImageGeneratedError({ calls, responses });
|
|
13742
|
-
}
|
|
13743
|
-
return new DefaultGenerateImageResult({
|
|
13744
|
-
images,
|
|
13745
|
-
calls,
|
|
13746
|
-
warnings,
|
|
13747
|
-
responses,
|
|
13748
|
-
providerMetadata,
|
|
13749
|
-
usage: totalUsage
|
|
13750
13923
|
});
|
|
13751
13924
|
}
|
|
13752
|
-
|
|
13753
|
-
|
|
13754
|
-
|
|
13755
|
-
|
|
13756
|
-
|
|
13757
|
-
|
|
13758
|
-
|
|
13759
|
-
|
|
13760
|
-
|
|
13761
|
-
get image() {
|
|
13762
|
-
return this.images[0];
|
|
13763
|
-
}
|
|
13764
|
-
};
|
|
13765
|
-
function getImageProviderMetadata(providerMetadata, imageIndex) {
|
|
13766
|
-
var _a25;
|
|
13767
|
-
if (providerMetadata == null) {
|
|
13768
|
-
return void 0;
|
|
13769
|
-
}
|
|
13770
|
-
let imageMetadata;
|
|
13771
|
-
for (const [providerName, metadata] of Object.entries(providerMetadata)) {
|
|
13772
|
-
const value = (_a25 = metadata.images) == null ? void 0 : _a25[imageIndex];
|
|
13773
|
-
if (isJSONObject(value) && !Array.isArray(value)) {
|
|
13774
|
-
(imageMetadata != null ? imageMetadata : imageMetadata = {})[providerName] = value;
|
|
13775
|
-
}
|
|
13776
|
-
}
|
|
13777
|
-
return imageMetadata;
|
|
13778
|
-
}
|
|
13779
|
-
async function invokeModelMaxImagesPerCall(model) {
|
|
13780
|
-
const isFunction = model.maxImagesPerCall instanceof Function;
|
|
13781
|
-
if (!isFunction) {
|
|
13782
|
-
return model.maxImagesPerCall;
|
|
13925
|
+
function validateEmbeddingCount({
|
|
13926
|
+
embeddings,
|
|
13927
|
+
values
|
|
13928
|
+
}) {
|
|
13929
|
+
if (embeddings.length !== values.length) {
|
|
13930
|
+
throw new InvalidResponseDataError2({
|
|
13931
|
+
data: embeddings,
|
|
13932
|
+
message: `Expected ${values.length} embeddings, but received ${embeddings.length}.`
|
|
13933
|
+
});
|
|
13783
13934
|
}
|
|
13784
|
-
return model.maxImagesPerCall({
|
|
13785
|
-
modelId: model.modelId
|
|
13786
|
-
});
|
|
13787
13935
|
}
|
|
13788
|
-
|
|
13789
|
-
|
|
13790
|
-
|
|
13936
|
+
var textEncoder = new TextEncoder();
|
|
13937
|
+
function splitByEmbeddingLimits({
|
|
13938
|
+
values,
|
|
13939
|
+
maxEmbeddingsPerCall,
|
|
13940
|
+
maxInputBytesPerCall
|
|
13941
|
+
}) {
|
|
13942
|
+
if (maxEmbeddingsPerCall <= 0) {
|
|
13943
|
+
throw new Error("maxEmbeddingsPerCall must be greater than 0");
|
|
13791
13944
|
}
|
|
13792
|
-
|
|
13793
|
-
|
|
13794
|
-
const precision = Math.max(fraction1.length, fraction2.length);
|
|
13795
|
-
const sum = BigInt(integer1 + fraction1.padEnd(precision, "0")) + BigInt(integer2 + fraction2.padEnd(precision, "0"));
|
|
13796
|
-
const sumString = sum.toString().padStart(precision + 1, "0");
|
|
13797
|
-
return precision === 0 ? sumString : `${sumString.slice(0, -precision)}.${sumString.slice(
|
|
13798
|
-
-precision
|
|
13799
|
-
)}`.replace(/\.?0+$/, "");
|
|
13800
|
-
}
|
|
13801
|
-
function normalizePrompt(prompt) {
|
|
13802
|
-
if (typeof prompt === "string") {
|
|
13803
|
-
return { prompt, files: void 0, mask: void 0 };
|
|
13945
|
+
if (maxInputBytesPerCall <= 0) {
|
|
13946
|
+
throw new Error("maxInputBytesPerCall must be greater than 0");
|
|
13804
13947
|
}
|
|
13805
|
-
|
|
13806
|
-
|
|
13807
|
-
files: prompt.images.map(toImageModelV4File),
|
|
13808
|
-
mask: prompt.mask ? toImageModelV4File(prompt.mask) : void 0
|
|
13809
|
-
};
|
|
13810
|
-
}
|
|
13811
|
-
function toImageModelV4File(dataContent) {
|
|
13812
|
-
if (typeof dataContent === "string" && dataContent.startsWith("http")) {
|
|
13813
|
-
return {
|
|
13814
|
-
type: "url",
|
|
13815
|
-
url: dataContent
|
|
13816
|
-
};
|
|
13948
|
+
if (values.length === 0) {
|
|
13949
|
+
return [];
|
|
13817
13950
|
}
|
|
13818
|
-
|
|
13819
|
-
|
|
13820
|
-
|
|
13821
|
-
|
|
13822
|
-
|
|
13823
|
-
|
|
13824
|
-
|
|
13825
|
-
|
|
13826
|
-
|
|
13827
|
-
topLevelType: "image"
|
|
13828
|
-
}) || "image/png"
|
|
13829
|
-
};
|
|
13951
|
+
const chunks = [];
|
|
13952
|
+
let currentChunk = [];
|
|
13953
|
+
let currentInputBytes = 0;
|
|
13954
|
+
for (const value of values) {
|
|
13955
|
+
const inputBytes = textEncoder.encode(value).length;
|
|
13956
|
+
if (currentChunk.length > 0 && (currentChunk.length >= maxEmbeddingsPerCall || currentInputBytes + inputBytes > maxInputBytesPerCall)) {
|
|
13957
|
+
chunks.push(currentChunk);
|
|
13958
|
+
currentChunk = [];
|
|
13959
|
+
currentInputBytes = 0;
|
|
13830
13960
|
}
|
|
13961
|
+
currentChunk.push(value);
|
|
13962
|
+
currentInputBytes += inputBytes;
|
|
13831
13963
|
}
|
|
13832
|
-
|
|
13833
|
-
return
|
|
13834
|
-
type: "file",
|
|
13835
|
-
data: uint8Data,
|
|
13836
|
-
mediaType: detectMediaType2({
|
|
13837
|
-
data: uint8Data,
|
|
13838
|
-
topLevelType: "image"
|
|
13839
|
-
}) || "image/png"
|
|
13840
|
-
};
|
|
13964
|
+
chunks.push(currentChunk);
|
|
13965
|
+
return chunks;
|
|
13841
13966
|
}
|
|
13967
|
+
var DefaultEmbedManyResult = class {
|
|
13968
|
+
constructor(options) {
|
|
13969
|
+
this.values = options.values;
|
|
13970
|
+
this.embeddings = options.embeddings;
|
|
13971
|
+
this.usage = options.usage;
|
|
13972
|
+
this.warnings = options.warnings;
|
|
13973
|
+
this.providerMetadata = options.providerMetadata;
|
|
13974
|
+
this.responses = options.responses;
|
|
13975
|
+
}
|
|
13976
|
+
};
|
|
13842
13977
|
|
|
13843
13978
|
// src/generate-object/generate-object.ts
|
|
13844
13979
|
import {
|
|
@@ -14606,12 +14741,20 @@ function getTextFromDataUrl(dataUrl) {
|
|
|
14606
14741
|
const [header, base64Content] = dataUrl.split(",");
|
|
14607
14742
|
const mediaType = header.split(";")[0].split(":")[1];
|
|
14608
14743
|
if (mediaType == null || base64Content == null) {
|
|
14609
|
-
throw new
|
|
14744
|
+
throw new InvalidArgumentError({
|
|
14745
|
+
parameter: "dataUrl",
|
|
14746
|
+
value: dataUrl,
|
|
14747
|
+
message: "Invalid data URL format"
|
|
14748
|
+
});
|
|
14610
14749
|
}
|
|
14611
14750
|
try {
|
|
14612
14751
|
return atob2(base64Content);
|
|
14613
14752
|
} catch (e) {
|
|
14614
|
-
throw new
|
|
14753
|
+
throw new InvalidArgumentError({
|
|
14754
|
+
parameter: "dataUrl",
|
|
14755
|
+
value: dataUrl,
|
|
14756
|
+
message: "Error decoding data URL"
|
|
14757
|
+
});
|
|
14615
14758
|
}
|
|
14616
14759
|
}
|
|
14617
14760
|
|
|
@@ -15230,7 +15373,7 @@ var DefaultStreamObjectResult = class {
|
|
|
15230
15373
|
|
|
15231
15374
|
// src/generate-speech/generate-speech.ts
|
|
15232
15375
|
import {
|
|
15233
|
-
detectMediaType as
|
|
15376
|
+
detectMediaType as detectMediaType4,
|
|
15234
15377
|
withUserAgentSuffix as withUserAgentSuffix9
|
|
15235
15378
|
} from "@ai-sdk/provider-utils";
|
|
15236
15379
|
|
|
@@ -15310,7 +15453,7 @@ async function generateSpeech({
|
|
|
15310
15453
|
return new DefaultSpeechResult({
|
|
15311
15454
|
audio: new DefaultGeneratedAudioFile({
|
|
15312
15455
|
data: result.audio,
|
|
15313
|
-
mediaType: (_a25 =
|
|
15456
|
+
mediaType: (_a25 = detectMediaType4({
|
|
15314
15457
|
data: result.audio,
|
|
15315
15458
|
topLevelType: "audio"
|
|
15316
15459
|
})) != null ? _a25 : "audio/mp3"
|
|
@@ -15589,7 +15732,7 @@ import {
|
|
|
15589
15732
|
delay as defaultDelay,
|
|
15590
15733
|
generateId,
|
|
15591
15734
|
withUserAgentSuffix as withUserAgentSuffix10,
|
|
15592
|
-
detectMediaType as
|
|
15735
|
+
detectMediaType as detectMediaType5
|
|
15593
15736
|
} from "@ai-sdk/provider-utils";
|
|
15594
15737
|
var defaultDownload = createDownload();
|
|
15595
15738
|
async function experimental_generateVideo({
|
|
@@ -15697,7 +15840,7 @@ async function experimental_generateVideo({
|
|
|
15697
15840
|
abortSignal
|
|
15698
15841
|
});
|
|
15699
15842
|
const isUsableMediaType = (type) => !!type && type !== "application/octet-stream";
|
|
15700
|
-
const mediaType = isUsableMediaType(videoData.mediaType) && videoData.mediaType || isUsableMediaType(downloadedMediaType) && downloadedMediaType ||
|
|
15843
|
+
const mediaType = isUsableMediaType(videoData.mediaType) && videoData.mediaType || isUsableMediaType(downloadedMediaType) && downloadedMediaType || detectMediaType5({
|
|
15701
15844
|
data,
|
|
15702
15845
|
topLevelType: "video"
|
|
15703
15846
|
}) || "video/mp4";
|
|
@@ -15719,7 +15862,7 @@ async function experimental_generateVideo({
|
|
|
15719
15862
|
break;
|
|
15720
15863
|
}
|
|
15721
15864
|
case "binary": {
|
|
15722
|
-
const mediaType = videoData.mediaType ||
|
|
15865
|
+
const mediaType = videoData.mediaType || detectMediaType5({
|
|
15723
15866
|
data: videoData.data,
|
|
15724
15867
|
topLevelType: "video"
|
|
15725
15868
|
}) || "video/mp4";
|
|
@@ -15957,7 +16100,7 @@ function normalizeVideoCallInputs({
|
|
|
15957
16100
|
};
|
|
15958
16101
|
}
|
|
15959
16102
|
function detectFileMediaType(data, restrictToImages) {
|
|
15960
|
-
const detected = restrictToImages ?
|
|
16103
|
+
const detected = restrictToImages ? detectMediaType5({ data, topLevelType: "image" }) : detectMediaType5({ data });
|
|
15961
16104
|
return detected != null ? detected : "image/png";
|
|
15962
16105
|
}
|
|
15963
16106
|
function normalizeImageData(dataContent, { restrictToImages = true } = {}) {
|
|
@@ -18059,9 +18202,44 @@ var DefaultProviderRegistry = class {
|
|
|
18059
18202
|
};
|
|
18060
18203
|
|
|
18061
18204
|
// src/rerank/rerank.ts
|
|
18205
|
+
import {
|
|
18206
|
+
InvalidResponseDataError as InvalidResponseDataError3
|
|
18207
|
+
} from "@ai-sdk/provider";
|
|
18062
18208
|
import {
|
|
18063
18209
|
createIdGenerator as createIdGenerator8
|
|
18064
18210
|
} from "@ai-sdk/provider-utils";
|
|
18211
|
+
|
|
18212
|
+
// src/rerank/restricted-telemetry-dispatcher.ts
|
|
18213
|
+
function createRestrictedTelemetryDispatcher3({
|
|
18214
|
+
telemetry
|
|
18215
|
+
}) {
|
|
18216
|
+
const dispatcher = createTelemetryDispatcher({ telemetry });
|
|
18217
|
+
return {
|
|
18218
|
+
...dispatcher,
|
|
18219
|
+
onStart: (event) => {
|
|
18220
|
+
var _a25;
|
|
18221
|
+
return (_a25 = dispatcher.onStart) == null ? void 0 : _a25.call(dispatcher, {
|
|
18222
|
+
...event,
|
|
18223
|
+
runtimeContext: filterIncludedContext({
|
|
18224
|
+
context: event.runtimeContext,
|
|
18225
|
+
includeContext: telemetry == null ? void 0 : telemetry.includeRuntimeContext
|
|
18226
|
+
})
|
|
18227
|
+
});
|
|
18228
|
+
},
|
|
18229
|
+
onEnd: (event) => {
|
|
18230
|
+
var _a25;
|
|
18231
|
+
return (_a25 = dispatcher.onEnd) == null ? void 0 : _a25.call(dispatcher, {
|
|
18232
|
+
...event,
|
|
18233
|
+
runtimeContext: filterIncludedContext({
|
|
18234
|
+
context: event.runtimeContext,
|
|
18235
|
+
includeContext: telemetry == null ? void 0 : telemetry.includeRuntimeContext
|
|
18236
|
+
})
|
|
18237
|
+
});
|
|
18238
|
+
}
|
|
18239
|
+
};
|
|
18240
|
+
}
|
|
18241
|
+
|
|
18242
|
+
// src/rerank/rerank.ts
|
|
18065
18243
|
var originalGenerateCallId6 = createIdGenerator8({
|
|
18066
18244
|
prefix: "call",
|
|
18067
18245
|
size: 24
|
|
@@ -18077,6 +18255,7 @@ async function rerank({
|
|
|
18077
18255
|
providerOptions,
|
|
18078
18256
|
experimental_telemetry,
|
|
18079
18257
|
telemetry = experimental_telemetry,
|
|
18258
|
+
runtimeContext = {},
|
|
18080
18259
|
onStart,
|
|
18081
18260
|
experimental_onStart,
|
|
18082
18261
|
onEnd,
|
|
@@ -18088,7 +18267,7 @@ async function rerank({
|
|
|
18088
18267
|
const callId = generateCallId();
|
|
18089
18268
|
const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
|
|
18090
18269
|
const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;
|
|
18091
|
-
const telemetryDispatcher =
|
|
18270
|
+
const telemetryDispatcher = createRestrictedTelemetryDispatcher3({
|
|
18092
18271
|
telemetry
|
|
18093
18272
|
});
|
|
18094
18273
|
const runInTracingChannelSpan = (_a25 = telemetryDispatcher.runInTracingChannelSpan) != null ? _a25 : (async ({ execute }) => await execute());
|
|
@@ -18097,6 +18276,7 @@ async function rerank({
|
|
|
18097
18276
|
event: {
|
|
18098
18277
|
callId,
|
|
18099
18278
|
operationId: "ai.rerank",
|
|
18279
|
+
runtimeContext,
|
|
18100
18280
|
provider: model.provider,
|
|
18101
18281
|
modelId: model.modelId,
|
|
18102
18282
|
documents,
|
|
@@ -18112,6 +18292,7 @@ async function rerank({
|
|
|
18112
18292
|
event: {
|
|
18113
18293
|
callId,
|
|
18114
18294
|
operationId: "ai.rerank",
|
|
18295
|
+
runtimeContext,
|
|
18115
18296
|
provider: model.provider,
|
|
18116
18297
|
modelId: model.modelId,
|
|
18117
18298
|
documents,
|
|
@@ -18144,6 +18325,7 @@ async function rerank({
|
|
|
18144
18325
|
const startEvent = {
|
|
18145
18326
|
callId,
|
|
18146
18327
|
operationId: "ai.rerank",
|
|
18328
|
+
runtimeContext,
|
|
18147
18329
|
provider: model.provider,
|
|
18148
18330
|
modelId: model.modelId,
|
|
18149
18331
|
documents,
|
|
@@ -18206,6 +18388,7 @@ async function rerank({
|
|
|
18206
18388
|
};
|
|
18207
18389
|
}
|
|
18208
18390
|
);
|
|
18391
|
+
validateRankingIndices({ ranking, documents });
|
|
18209
18392
|
logWarnings({
|
|
18210
18393
|
warnings: warnings != null ? warnings : [],
|
|
18211
18394
|
provider: model.provider,
|
|
@@ -18215,14 +18398,15 @@ async function rerank({
|
|
|
18215
18398
|
event: {
|
|
18216
18399
|
callId,
|
|
18217
18400
|
operationId: "ai.rerank",
|
|
18401
|
+
runtimeContext,
|
|
18218
18402
|
provider: model.provider,
|
|
18219
18403
|
modelId: model.modelId,
|
|
18220
18404
|
documents,
|
|
18221
18405
|
query,
|
|
18222
|
-
ranking: ranking.map((
|
|
18223
|
-
originalIndex:
|
|
18224
|
-
score:
|
|
18225
|
-
document: documents[
|
|
18406
|
+
ranking: ranking.map((ranking2) => ({
|
|
18407
|
+
originalIndex: ranking2.index,
|
|
18408
|
+
score: ranking2.relevanceScore,
|
|
18409
|
+
document: documents[ranking2.index]
|
|
18226
18410
|
})),
|
|
18227
18411
|
warnings: warnings != null ? warnings : [],
|
|
18228
18412
|
providerMetadata,
|
|
@@ -18259,6 +18443,19 @@ async function rerank({
|
|
|
18259
18443
|
}
|
|
18260
18444
|
});
|
|
18261
18445
|
}
|
|
18446
|
+
function validateRankingIndices({
|
|
18447
|
+
ranking,
|
|
18448
|
+
documents
|
|
18449
|
+
}) {
|
|
18450
|
+
for (const { index } of ranking) {
|
|
18451
|
+
if (!Number.isInteger(index) || index < 0 || index >= documents.length) {
|
|
18452
|
+
throw new InvalidResponseDataError3({
|
|
18453
|
+
data: ranking,
|
|
18454
|
+
message: `Invalid ranking index ${index}. Expected an integer between 0 and ${documents.length - 1}.`
|
|
18455
|
+
});
|
|
18456
|
+
}
|
|
18457
|
+
}
|
|
18458
|
+
}
|
|
18262
18459
|
var DefaultRerankResult = class {
|
|
18263
18460
|
constructor(options) {
|
|
18264
18461
|
this.originalDocuments = options.originalDocuments;
|
|
@@ -18273,7 +18470,7 @@ var DefaultRerankResult = class {
|
|
|
18273
18470
|
|
|
18274
18471
|
// src/transcribe/transcribe.ts
|
|
18275
18472
|
import {
|
|
18276
|
-
detectMediaType as
|
|
18473
|
+
detectMediaType as detectMediaType6,
|
|
18277
18474
|
withUserAgentSuffix as withUserAgentSuffix13
|
|
18278
18475
|
} from "@ai-sdk/provider-utils";
|
|
18279
18476
|
var defaultDownload2 = createDownload();
|
|
@@ -18307,7 +18504,7 @@ async function transcribe({
|
|
|
18307
18504
|
abortSignal,
|
|
18308
18505
|
headers: headersWithUserAgent,
|
|
18309
18506
|
providerOptions,
|
|
18310
|
-
mediaType: (_a25 =
|
|
18507
|
+
mediaType: (_a25 = detectMediaType6({
|
|
18311
18508
|
data: audioData,
|
|
18312
18509
|
topLevelType: "audio"
|
|
18313
18510
|
})) != null ? _a25 : "audio/wav"
|
|
@@ -19676,7 +19873,7 @@ var TextStreamChatTransport = class extends HttpChatTransport {
|
|
|
19676
19873
|
// src/upload-file/upload-file.ts
|
|
19677
19874
|
import {
|
|
19678
19875
|
convertBase64ToUint8Array as convertBase64ToUint8Array6,
|
|
19679
|
-
detectMediaType as
|
|
19876
|
+
detectMediaType as detectMediaType7
|
|
19680
19877
|
} from "@ai-sdk/provider-utils";
|
|
19681
19878
|
async function uploadFile({
|
|
19682
19879
|
api,
|
|
@@ -19689,7 +19886,7 @@ async function uploadFile({
|
|
|
19689
19886
|
}) {
|
|
19690
19887
|
var _a25;
|
|
19691
19888
|
const data = dataArg instanceof Uint8Array || typeof dataArg === "string" ? { type: "data", data: dataArg } : dataArg;
|
|
19692
|
-
const mediaType = mediaTypeArg != null ? mediaTypeArg : data.type === "text" ? "text/plain" : data.type === "stream" ? "application/octet-stream" : (_a25 =
|
|
19889
|
+
const mediaType = mediaTypeArg != null ? mediaTypeArg : data.type === "text" ? "text/plain" : data.type === "stream" ? "application/octet-stream" : (_a25 = detectMediaType7({ data: data.data })) != null ? _a25 : isLikelyText(data.data) ? "text/plain" : "application/octet-stream";
|
|
19693
19890
|
let result;
|
|
19694
19891
|
try {
|
|
19695
19892
|
const filesApi = "uploadFile" in api ? api : typeof api.files === "function" ? api.files() : (() => {
|
|
@@ -19906,6 +20103,7 @@ export {
|
|
|
19906
20103
|
isStaticToolUIPart,
|
|
19907
20104
|
isStepCount,
|
|
19908
20105
|
isTextUIPart,
|
|
20106
|
+
isToolOutputErrorUIPart,
|
|
19909
20107
|
isToolUIPart,
|
|
19910
20108
|
jsonSchema,
|
|
19911
20109
|
lastAssistantMessageIsCompleteWithApprovalResponses,
|