ai 7.0.97 → 7.0.98
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 +20 -0
- package/dist/index.d.ts +558 -472
- package/dist/index.js +1368 -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/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 +31 -5
- 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/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 +20 -9
- 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/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.98" : "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,1390 @@ 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
|
-
|
|
13699
|
-
|
|
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
|
-
|
|
13726
|
-
|
|
13727
|
-
|
|
13728
|
-
|
|
13729
|
-
|
|
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
|
+
});
|
|
13467
|
+
}
|
|
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
|
+
});
|
|
13570
|
+
}
|
|
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 Error("chunkSize must be greater than 0");
|
|
13643
|
+
}
|
|
13644
|
+
const result = [];
|
|
13645
|
+
for (let i = 0; i < array3.length; i += chunkSize) {
|
|
13646
|
+
result.push(array3.slice(i, i + chunkSize));
|
|
13647
|
+
}
|
|
13648
|
+
return result;
|
|
13649
|
+
}
|
|
13650
|
+
|
|
13651
|
+
// src/embed/embed-many.ts
|
|
13652
|
+
var originalGenerateCallId5 = createIdGenerator5({
|
|
13653
|
+
prefix: "call",
|
|
13654
|
+
size: 24
|
|
13655
|
+
});
|
|
13656
|
+
async function embedMany({
|
|
13657
|
+
model: modelArg,
|
|
13658
|
+
values,
|
|
13659
|
+
maxParallelCalls = Infinity,
|
|
13660
|
+
maxRetries: maxRetriesArg,
|
|
13661
|
+
abortSignal,
|
|
13662
|
+
headers,
|
|
13663
|
+
providerOptions,
|
|
13664
|
+
experimental_telemetry,
|
|
13665
|
+
telemetry = experimental_telemetry,
|
|
13666
|
+
runtimeContext = {},
|
|
13667
|
+
onStart,
|
|
13668
|
+
experimental_onStart,
|
|
13669
|
+
onEnd,
|
|
13670
|
+
experimental_onEnd,
|
|
13671
|
+
_internal: { generateCallId = originalGenerateCallId5 } = {}
|
|
13672
|
+
}) {
|
|
13673
|
+
var _a25;
|
|
13674
|
+
const model = resolveEmbeddingModel(modelArg);
|
|
13675
|
+
const { maxRetries, retry } = prepareRetries({
|
|
13676
|
+
maxRetries: maxRetriesArg,
|
|
13677
|
+
abortSignal
|
|
13678
|
+
});
|
|
13679
|
+
const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
|
|
13680
|
+
const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;
|
|
13681
|
+
const headersWithUserAgent = withUserAgentSuffix7(
|
|
13682
|
+
headers != null ? headers : {},
|
|
13683
|
+
`ai/${VERSION}`
|
|
13684
|
+
);
|
|
13685
|
+
const callId = generateCallId();
|
|
13686
|
+
const telemetryDispatcher = createRestrictedTelemetryDispatcher2({
|
|
13687
|
+
telemetry
|
|
13688
|
+
});
|
|
13689
|
+
const runInTracingChannelSpan = (_a25 = telemetryDispatcher.runInTracingChannelSpan) != null ? _a25 : (async ({ execute }) => await execute());
|
|
13690
|
+
const startEvent = {
|
|
13691
|
+
callId,
|
|
13692
|
+
operationId: "ai.embedMany",
|
|
13693
|
+
runtimeContext,
|
|
13694
|
+
provider: model.provider,
|
|
13695
|
+
modelId: model.modelId,
|
|
13696
|
+
value: values,
|
|
13697
|
+
maxRetries,
|
|
13698
|
+
headers: headersWithUserAgent,
|
|
13699
|
+
providerOptions
|
|
13700
|
+
};
|
|
13701
|
+
return await runInTracingChannelSpan({
|
|
13702
|
+
type: "embedMany",
|
|
13703
|
+
event: startEvent,
|
|
13704
|
+
execute: async () => {
|
|
13705
|
+
var _a26, _b25;
|
|
13706
|
+
await notify({
|
|
13707
|
+
event: startEvent,
|
|
13708
|
+
callbacks: [resolvedOnStart, telemetryDispatcher.onStart]
|
|
13709
|
+
});
|
|
13710
|
+
try {
|
|
13711
|
+
const [
|
|
13712
|
+
maxEmbeddingsPerCall,
|
|
13713
|
+
maxInputBytesPerCall,
|
|
13714
|
+
supportsParallelCalls
|
|
13715
|
+
] = await Promise.all([
|
|
13716
|
+
model.maxEmbeddingsPerCall,
|
|
13717
|
+
getEmbeddingModelMaxInputBytesPerCall(model),
|
|
13718
|
+
model.supportsParallelCalls
|
|
13719
|
+
]);
|
|
13720
|
+
const hasEmbeddingLimit = maxEmbeddingsPerCall != null && maxEmbeddingsPerCall !== Infinity;
|
|
13721
|
+
const hasInputByteLimit = maxInputBytesPerCall != null && maxInputBytesPerCall !== Infinity;
|
|
13722
|
+
if (!hasEmbeddingLimit && !hasInputByteLimit) {
|
|
13723
|
+
const { embeddings: embeddings2, usage, warnings: warnings2, response, providerMetadata: providerMetadata2 } = await retry(async () => {
|
|
13724
|
+
var _a27, _b26;
|
|
13725
|
+
const embedCallId = generateCallId();
|
|
13726
|
+
await notify({
|
|
13727
|
+
event: {
|
|
13728
|
+
callId,
|
|
13729
|
+
embedCallId,
|
|
13730
|
+
operationId: "ai.embedMany.doEmbed",
|
|
13731
|
+
provider: model.provider,
|
|
13732
|
+
modelId: model.modelId,
|
|
13733
|
+
values
|
|
13734
|
+
},
|
|
13735
|
+
callbacks: [telemetryDispatcher.onEmbedStart]
|
|
13736
|
+
});
|
|
13737
|
+
const modelResponse = await model.doEmbed({
|
|
13738
|
+
values,
|
|
13739
|
+
abortSignal,
|
|
13740
|
+
headers: headersWithUserAgent,
|
|
13741
|
+
providerOptions
|
|
13742
|
+
});
|
|
13743
|
+
const embeddings3 = modelResponse.embeddings;
|
|
13744
|
+
const usage2 = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };
|
|
13745
|
+
await notify({
|
|
13746
|
+
event: {
|
|
13747
|
+
callId,
|
|
13748
|
+
embedCallId,
|
|
13749
|
+
operationId: "ai.embedMany.doEmbed",
|
|
13750
|
+
provider: model.provider,
|
|
13751
|
+
modelId: model.modelId,
|
|
13752
|
+
values,
|
|
13753
|
+
embeddings: embeddings3,
|
|
13754
|
+
usage: usage2
|
|
13755
|
+
},
|
|
13756
|
+
callbacks: [telemetryDispatcher.onEmbedEnd]
|
|
13757
|
+
});
|
|
13758
|
+
return {
|
|
13759
|
+
embeddings: embeddings3,
|
|
13760
|
+
usage: usage2,
|
|
13761
|
+
warnings: (_b26 = modelResponse.warnings) != null ? _b26 : [],
|
|
13762
|
+
providerMetadata: modelResponse.providerMetadata,
|
|
13763
|
+
response: modelResponse.response
|
|
13764
|
+
};
|
|
13765
|
+
});
|
|
13766
|
+
validateEmbeddingCount({ embeddings: embeddings2, values });
|
|
13767
|
+
logWarnings({
|
|
13768
|
+
warnings: warnings2,
|
|
13769
|
+
provider: model.provider,
|
|
13770
|
+
model: model.modelId
|
|
13771
|
+
});
|
|
13772
|
+
await notify({
|
|
13773
|
+
event: {
|
|
13774
|
+
callId,
|
|
13775
|
+
operationId: "ai.embedMany",
|
|
13776
|
+
runtimeContext,
|
|
13777
|
+
provider: model.provider,
|
|
13778
|
+
modelId: model.modelId,
|
|
13779
|
+
value: values,
|
|
13780
|
+
embedding: embeddings2,
|
|
13781
|
+
usage,
|
|
13782
|
+
warnings: warnings2,
|
|
13783
|
+
providerMetadata: providerMetadata2,
|
|
13784
|
+
response: [response]
|
|
13785
|
+
},
|
|
13786
|
+
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]
|
|
13787
|
+
});
|
|
13788
|
+
return new DefaultEmbedManyResult({
|
|
13789
|
+
values,
|
|
13790
|
+
embeddings: embeddings2,
|
|
13791
|
+
usage,
|
|
13792
|
+
warnings: warnings2,
|
|
13793
|
+
providerMetadata: providerMetadata2,
|
|
13794
|
+
responses: [response]
|
|
13795
|
+
});
|
|
13796
|
+
}
|
|
13797
|
+
const valueChunks = splitByEmbeddingLimits({
|
|
13798
|
+
values,
|
|
13799
|
+
maxEmbeddingsPerCall: hasEmbeddingLimit ? maxEmbeddingsPerCall : Infinity,
|
|
13800
|
+
maxInputBytesPerCall: hasInputByteLimit ? maxInputBytesPerCall : Infinity
|
|
13801
|
+
});
|
|
13802
|
+
const embeddings = [];
|
|
13803
|
+
const warnings = [];
|
|
13804
|
+
const responses = [];
|
|
13805
|
+
let tokens = 0;
|
|
13806
|
+
let providerMetadata;
|
|
13807
|
+
const parallelChunks = splitArray(
|
|
13808
|
+
valueChunks,
|
|
13809
|
+
supportsParallelCalls ? maxParallelCalls : 1
|
|
13810
|
+
);
|
|
13811
|
+
for (const parallelChunk of parallelChunks) {
|
|
13812
|
+
const results = await Promise.all(
|
|
13813
|
+
parallelChunk.map(async (chunk) => {
|
|
13814
|
+
const result = await retry(async () => {
|
|
13815
|
+
var _a27, _b26;
|
|
13816
|
+
const embedCallId = generateCallId();
|
|
13817
|
+
await notify({
|
|
13818
|
+
event: {
|
|
13819
|
+
callId,
|
|
13820
|
+
embedCallId,
|
|
13821
|
+
operationId: "ai.embedMany.doEmbed",
|
|
13822
|
+
provider: model.provider,
|
|
13823
|
+
modelId: model.modelId,
|
|
13824
|
+
values: chunk
|
|
13825
|
+
},
|
|
13826
|
+
callbacks: [telemetryDispatcher.onEmbedStart]
|
|
13827
|
+
});
|
|
13828
|
+
const modelResponse = await model.doEmbed({
|
|
13829
|
+
values: chunk,
|
|
13830
|
+
abortSignal,
|
|
13831
|
+
headers: headersWithUserAgent,
|
|
13832
|
+
providerOptions
|
|
13833
|
+
});
|
|
13834
|
+
const chunkEmbeddings = modelResponse.embeddings;
|
|
13835
|
+
const usage = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };
|
|
13836
|
+
await notify({
|
|
13837
|
+
event: {
|
|
13838
|
+
callId,
|
|
13839
|
+
embedCallId,
|
|
13840
|
+
operationId: "ai.embedMany.doEmbed",
|
|
13841
|
+
provider: model.provider,
|
|
13842
|
+
modelId: model.modelId,
|
|
13843
|
+
values: chunk,
|
|
13844
|
+
embeddings: chunkEmbeddings,
|
|
13845
|
+
usage
|
|
13846
|
+
},
|
|
13847
|
+
callbacks: [telemetryDispatcher.onEmbedEnd]
|
|
13848
|
+
});
|
|
13849
|
+
return {
|
|
13850
|
+
embeddings: chunkEmbeddings,
|
|
13851
|
+
usage,
|
|
13852
|
+
warnings: (_b26 = modelResponse.warnings) != null ? _b26 : [],
|
|
13853
|
+
providerMetadata: modelResponse.providerMetadata,
|
|
13854
|
+
response: modelResponse.response
|
|
13855
|
+
};
|
|
13856
|
+
});
|
|
13857
|
+
validateEmbeddingCount({
|
|
13858
|
+
embeddings: result.embeddings,
|
|
13859
|
+
values: chunk
|
|
13860
|
+
});
|
|
13861
|
+
return result;
|
|
13862
|
+
})
|
|
13863
|
+
);
|
|
13864
|
+
for (const result of results) {
|
|
13865
|
+
embeddings.push(...result.embeddings);
|
|
13866
|
+
warnings.push(...result.warnings);
|
|
13867
|
+
responses.push(result.response);
|
|
13868
|
+
tokens += result.usage.tokens;
|
|
13869
|
+
if (result.providerMetadata) {
|
|
13870
|
+
if (!providerMetadata) {
|
|
13871
|
+
providerMetadata = { ...result.providerMetadata };
|
|
13872
|
+
} else {
|
|
13873
|
+
for (const [providerName, metadata] of Object.entries(
|
|
13874
|
+
result.providerMetadata
|
|
13875
|
+
)) {
|
|
13876
|
+
providerMetadata[providerName] = {
|
|
13877
|
+
...(_a26 = providerMetadata[providerName]) != null ? _a26 : {},
|
|
13878
|
+
...metadata
|
|
13879
|
+
};
|
|
13880
|
+
}
|
|
13881
|
+
}
|
|
13882
|
+
}
|
|
13730
13883
|
}
|
|
13731
|
-
} else {
|
|
13732
|
-
(_b25 = providerMetadata[providerName]) != null ? _b25 : providerMetadata[providerName] = { images: [] };
|
|
13733
|
-
providerMetadata[providerName].images.push(...metadata.images);
|
|
13734
13884
|
}
|
|
13885
|
+
logWarnings({
|
|
13886
|
+
warnings,
|
|
13887
|
+
provider: model.provider,
|
|
13888
|
+
model: model.modelId
|
|
13889
|
+
});
|
|
13890
|
+
await notify({
|
|
13891
|
+
event: {
|
|
13892
|
+
callId,
|
|
13893
|
+
operationId: "ai.embedMany",
|
|
13894
|
+
runtimeContext,
|
|
13895
|
+
provider: model.provider,
|
|
13896
|
+
modelId: model.modelId,
|
|
13897
|
+
value: values,
|
|
13898
|
+
embedding: embeddings,
|
|
13899
|
+
usage: { tokens },
|
|
13900
|
+
warnings,
|
|
13901
|
+
providerMetadata,
|
|
13902
|
+
response: responses
|
|
13903
|
+
},
|
|
13904
|
+
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]
|
|
13905
|
+
});
|
|
13906
|
+
return new DefaultEmbedManyResult({
|
|
13907
|
+
values,
|
|
13908
|
+
embeddings,
|
|
13909
|
+
usage: { tokens },
|
|
13910
|
+
warnings,
|
|
13911
|
+
providerMetadata,
|
|
13912
|
+
responses
|
|
13913
|
+
});
|
|
13914
|
+
} catch (error) {
|
|
13915
|
+
await ((_b25 = telemetryDispatcher.onError) == null ? void 0 : _b25.call(telemetryDispatcher, { callId, error }));
|
|
13916
|
+
throw error;
|
|
13735
13917
|
}
|
|
13736
13918
|
}
|
|
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
13919
|
});
|
|
13751
13920
|
}
|
|
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;
|
|
13921
|
+
function validateEmbeddingCount({
|
|
13922
|
+
embeddings,
|
|
13923
|
+
values
|
|
13924
|
+
}) {
|
|
13925
|
+
if (embeddings.length !== values.length) {
|
|
13926
|
+
throw new InvalidResponseDataError2({
|
|
13927
|
+
data: embeddings,
|
|
13928
|
+
message: `Expected ${values.length} embeddings, but received ${embeddings.length}.`
|
|
13929
|
+
});
|
|
13783
13930
|
}
|
|
13784
|
-
return model.maxImagesPerCall({
|
|
13785
|
-
modelId: model.modelId
|
|
13786
|
-
});
|
|
13787
13931
|
}
|
|
13788
|
-
|
|
13789
|
-
|
|
13790
|
-
|
|
13932
|
+
var textEncoder = new TextEncoder();
|
|
13933
|
+
function splitByEmbeddingLimits({
|
|
13934
|
+
values,
|
|
13935
|
+
maxEmbeddingsPerCall,
|
|
13936
|
+
maxInputBytesPerCall
|
|
13937
|
+
}) {
|
|
13938
|
+
if (maxEmbeddingsPerCall <= 0) {
|
|
13939
|
+
throw new Error("maxEmbeddingsPerCall must be greater than 0");
|
|
13791
13940
|
}
|
|
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 };
|
|
13941
|
+
if (maxInputBytesPerCall <= 0) {
|
|
13942
|
+
throw new Error("maxInputBytesPerCall must be greater than 0");
|
|
13804
13943
|
}
|
|
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
|
-
};
|
|
13944
|
+
if (values.length === 0) {
|
|
13945
|
+
return [];
|
|
13817
13946
|
}
|
|
13818
|
-
|
|
13819
|
-
|
|
13820
|
-
|
|
13821
|
-
|
|
13822
|
-
|
|
13823
|
-
|
|
13824
|
-
|
|
13825
|
-
|
|
13826
|
-
|
|
13827
|
-
topLevelType: "image"
|
|
13828
|
-
}) || "image/png"
|
|
13829
|
-
};
|
|
13947
|
+
const chunks = [];
|
|
13948
|
+
let currentChunk = [];
|
|
13949
|
+
let currentInputBytes = 0;
|
|
13950
|
+
for (const value of values) {
|
|
13951
|
+
const inputBytes = textEncoder.encode(value).length;
|
|
13952
|
+
if (currentChunk.length > 0 && (currentChunk.length >= maxEmbeddingsPerCall || currentInputBytes + inputBytes > maxInputBytesPerCall)) {
|
|
13953
|
+
chunks.push(currentChunk);
|
|
13954
|
+
currentChunk = [];
|
|
13955
|
+
currentInputBytes = 0;
|
|
13830
13956
|
}
|
|
13957
|
+
currentChunk.push(value);
|
|
13958
|
+
currentInputBytes += inputBytes;
|
|
13831
13959
|
}
|
|
13832
|
-
|
|
13833
|
-
return
|
|
13834
|
-
type: "file",
|
|
13835
|
-
data: uint8Data,
|
|
13836
|
-
mediaType: detectMediaType2({
|
|
13837
|
-
data: uint8Data,
|
|
13838
|
-
topLevelType: "image"
|
|
13839
|
-
}) || "image/png"
|
|
13840
|
-
};
|
|
13960
|
+
chunks.push(currentChunk);
|
|
13961
|
+
return chunks;
|
|
13841
13962
|
}
|
|
13963
|
+
var DefaultEmbedManyResult = class {
|
|
13964
|
+
constructor(options) {
|
|
13965
|
+
this.values = options.values;
|
|
13966
|
+
this.embeddings = options.embeddings;
|
|
13967
|
+
this.usage = options.usage;
|
|
13968
|
+
this.warnings = options.warnings;
|
|
13969
|
+
this.providerMetadata = options.providerMetadata;
|
|
13970
|
+
this.responses = options.responses;
|
|
13971
|
+
}
|
|
13972
|
+
};
|
|
13842
13973
|
|
|
13843
13974
|
// src/generate-object/generate-object.ts
|
|
13844
13975
|
import {
|
|
@@ -15230,7 +15361,7 @@ var DefaultStreamObjectResult = class {
|
|
|
15230
15361
|
|
|
15231
15362
|
// src/generate-speech/generate-speech.ts
|
|
15232
15363
|
import {
|
|
15233
|
-
detectMediaType as
|
|
15364
|
+
detectMediaType as detectMediaType4,
|
|
15234
15365
|
withUserAgentSuffix as withUserAgentSuffix9
|
|
15235
15366
|
} from "@ai-sdk/provider-utils";
|
|
15236
15367
|
|
|
@@ -15310,7 +15441,7 @@ async function generateSpeech({
|
|
|
15310
15441
|
return new DefaultSpeechResult({
|
|
15311
15442
|
audio: new DefaultGeneratedAudioFile({
|
|
15312
15443
|
data: result.audio,
|
|
15313
|
-
mediaType: (_a25 =
|
|
15444
|
+
mediaType: (_a25 = detectMediaType4({
|
|
15314
15445
|
data: result.audio,
|
|
15315
15446
|
topLevelType: "audio"
|
|
15316
15447
|
})) != null ? _a25 : "audio/mp3"
|
|
@@ -15589,7 +15720,7 @@ import {
|
|
|
15589
15720
|
delay as defaultDelay,
|
|
15590
15721
|
generateId,
|
|
15591
15722
|
withUserAgentSuffix as withUserAgentSuffix10,
|
|
15592
|
-
detectMediaType as
|
|
15723
|
+
detectMediaType as detectMediaType5
|
|
15593
15724
|
} from "@ai-sdk/provider-utils";
|
|
15594
15725
|
var defaultDownload = createDownload();
|
|
15595
15726
|
async function experimental_generateVideo({
|
|
@@ -15697,7 +15828,7 @@ async function experimental_generateVideo({
|
|
|
15697
15828
|
abortSignal
|
|
15698
15829
|
});
|
|
15699
15830
|
const isUsableMediaType = (type) => !!type && type !== "application/octet-stream";
|
|
15700
|
-
const mediaType = isUsableMediaType(videoData.mediaType) && videoData.mediaType || isUsableMediaType(downloadedMediaType) && downloadedMediaType ||
|
|
15831
|
+
const mediaType = isUsableMediaType(videoData.mediaType) && videoData.mediaType || isUsableMediaType(downloadedMediaType) && downloadedMediaType || detectMediaType5({
|
|
15701
15832
|
data,
|
|
15702
15833
|
topLevelType: "video"
|
|
15703
15834
|
}) || "video/mp4";
|
|
@@ -15719,7 +15850,7 @@ async function experimental_generateVideo({
|
|
|
15719
15850
|
break;
|
|
15720
15851
|
}
|
|
15721
15852
|
case "binary": {
|
|
15722
|
-
const mediaType = videoData.mediaType ||
|
|
15853
|
+
const mediaType = videoData.mediaType || detectMediaType5({
|
|
15723
15854
|
data: videoData.data,
|
|
15724
15855
|
topLevelType: "video"
|
|
15725
15856
|
}) || "video/mp4";
|
|
@@ -15957,7 +16088,7 @@ function normalizeVideoCallInputs({
|
|
|
15957
16088
|
};
|
|
15958
16089
|
}
|
|
15959
16090
|
function detectFileMediaType(data, restrictToImages) {
|
|
15960
|
-
const detected = restrictToImages ?
|
|
16091
|
+
const detected = restrictToImages ? detectMediaType5({ data, topLevelType: "image" }) : detectMediaType5({ data });
|
|
15961
16092
|
return detected != null ? detected : "image/png";
|
|
15962
16093
|
}
|
|
15963
16094
|
function normalizeImageData(dataContent, { restrictToImages = true } = {}) {
|
|
@@ -18059,9 +18190,44 @@ var DefaultProviderRegistry = class {
|
|
|
18059
18190
|
};
|
|
18060
18191
|
|
|
18061
18192
|
// src/rerank/rerank.ts
|
|
18193
|
+
import {
|
|
18194
|
+
InvalidResponseDataError as InvalidResponseDataError3
|
|
18195
|
+
} from "@ai-sdk/provider";
|
|
18062
18196
|
import {
|
|
18063
18197
|
createIdGenerator as createIdGenerator8
|
|
18064
18198
|
} from "@ai-sdk/provider-utils";
|
|
18199
|
+
|
|
18200
|
+
// src/rerank/restricted-telemetry-dispatcher.ts
|
|
18201
|
+
function createRestrictedTelemetryDispatcher3({
|
|
18202
|
+
telemetry
|
|
18203
|
+
}) {
|
|
18204
|
+
const dispatcher = createTelemetryDispatcher({ telemetry });
|
|
18205
|
+
return {
|
|
18206
|
+
...dispatcher,
|
|
18207
|
+
onStart: (event) => {
|
|
18208
|
+
var _a25;
|
|
18209
|
+
return (_a25 = dispatcher.onStart) == null ? void 0 : _a25.call(dispatcher, {
|
|
18210
|
+
...event,
|
|
18211
|
+
runtimeContext: filterIncludedContext({
|
|
18212
|
+
context: event.runtimeContext,
|
|
18213
|
+
includeContext: telemetry == null ? void 0 : telemetry.includeRuntimeContext
|
|
18214
|
+
})
|
|
18215
|
+
});
|
|
18216
|
+
},
|
|
18217
|
+
onEnd: (event) => {
|
|
18218
|
+
var _a25;
|
|
18219
|
+
return (_a25 = dispatcher.onEnd) == null ? void 0 : _a25.call(dispatcher, {
|
|
18220
|
+
...event,
|
|
18221
|
+
runtimeContext: filterIncludedContext({
|
|
18222
|
+
context: event.runtimeContext,
|
|
18223
|
+
includeContext: telemetry == null ? void 0 : telemetry.includeRuntimeContext
|
|
18224
|
+
})
|
|
18225
|
+
});
|
|
18226
|
+
}
|
|
18227
|
+
};
|
|
18228
|
+
}
|
|
18229
|
+
|
|
18230
|
+
// src/rerank/rerank.ts
|
|
18065
18231
|
var originalGenerateCallId6 = createIdGenerator8({
|
|
18066
18232
|
prefix: "call",
|
|
18067
18233
|
size: 24
|
|
@@ -18077,6 +18243,7 @@ async function rerank({
|
|
|
18077
18243
|
providerOptions,
|
|
18078
18244
|
experimental_telemetry,
|
|
18079
18245
|
telemetry = experimental_telemetry,
|
|
18246
|
+
runtimeContext = {},
|
|
18080
18247
|
onStart,
|
|
18081
18248
|
experimental_onStart,
|
|
18082
18249
|
onEnd,
|
|
@@ -18088,7 +18255,7 @@ async function rerank({
|
|
|
18088
18255
|
const callId = generateCallId();
|
|
18089
18256
|
const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
|
|
18090
18257
|
const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;
|
|
18091
|
-
const telemetryDispatcher =
|
|
18258
|
+
const telemetryDispatcher = createRestrictedTelemetryDispatcher3({
|
|
18092
18259
|
telemetry
|
|
18093
18260
|
});
|
|
18094
18261
|
const runInTracingChannelSpan = (_a25 = telemetryDispatcher.runInTracingChannelSpan) != null ? _a25 : (async ({ execute }) => await execute());
|
|
@@ -18097,6 +18264,7 @@ async function rerank({
|
|
|
18097
18264
|
event: {
|
|
18098
18265
|
callId,
|
|
18099
18266
|
operationId: "ai.rerank",
|
|
18267
|
+
runtimeContext,
|
|
18100
18268
|
provider: model.provider,
|
|
18101
18269
|
modelId: model.modelId,
|
|
18102
18270
|
documents,
|
|
@@ -18112,6 +18280,7 @@ async function rerank({
|
|
|
18112
18280
|
event: {
|
|
18113
18281
|
callId,
|
|
18114
18282
|
operationId: "ai.rerank",
|
|
18283
|
+
runtimeContext,
|
|
18115
18284
|
provider: model.provider,
|
|
18116
18285
|
modelId: model.modelId,
|
|
18117
18286
|
documents,
|
|
@@ -18144,6 +18313,7 @@ async function rerank({
|
|
|
18144
18313
|
const startEvent = {
|
|
18145
18314
|
callId,
|
|
18146
18315
|
operationId: "ai.rerank",
|
|
18316
|
+
runtimeContext,
|
|
18147
18317
|
provider: model.provider,
|
|
18148
18318
|
modelId: model.modelId,
|
|
18149
18319
|
documents,
|
|
@@ -18206,6 +18376,7 @@ async function rerank({
|
|
|
18206
18376
|
};
|
|
18207
18377
|
}
|
|
18208
18378
|
);
|
|
18379
|
+
validateRankingIndices({ ranking, documents });
|
|
18209
18380
|
logWarnings({
|
|
18210
18381
|
warnings: warnings != null ? warnings : [],
|
|
18211
18382
|
provider: model.provider,
|
|
@@ -18215,14 +18386,15 @@ async function rerank({
|
|
|
18215
18386
|
event: {
|
|
18216
18387
|
callId,
|
|
18217
18388
|
operationId: "ai.rerank",
|
|
18389
|
+
runtimeContext,
|
|
18218
18390
|
provider: model.provider,
|
|
18219
18391
|
modelId: model.modelId,
|
|
18220
18392
|
documents,
|
|
18221
18393
|
query,
|
|
18222
|
-
ranking: ranking.map((
|
|
18223
|
-
originalIndex:
|
|
18224
|
-
score:
|
|
18225
|
-
document: documents[
|
|
18394
|
+
ranking: ranking.map((ranking2) => ({
|
|
18395
|
+
originalIndex: ranking2.index,
|
|
18396
|
+
score: ranking2.relevanceScore,
|
|
18397
|
+
document: documents[ranking2.index]
|
|
18226
18398
|
})),
|
|
18227
18399
|
warnings: warnings != null ? warnings : [],
|
|
18228
18400
|
providerMetadata,
|
|
@@ -18259,6 +18431,19 @@ async function rerank({
|
|
|
18259
18431
|
}
|
|
18260
18432
|
});
|
|
18261
18433
|
}
|
|
18434
|
+
function validateRankingIndices({
|
|
18435
|
+
ranking,
|
|
18436
|
+
documents
|
|
18437
|
+
}) {
|
|
18438
|
+
for (const { index } of ranking) {
|
|
18439
|
+
if (!Number.isInteger(index) || index < 0 || index >= documents.length) {
|
|
18440
|
+
throw new InvalidResponseDataError3({
|
|
18441
|
+
data: ranking,
|
|
18442
|
+
message: `Invalid ranking index ${index}. Expected an integer between 0 and ${documents.length - 1}.`
|
|
18443
|
+
});
|
|
18444
|
+
}
|
|
18445
|
+
}
|
|
18446
|
+
}
|
|
18262
18447
|
var DefaultRerankResult = class {
|
|
18263
18448
|
constructor(options) {
|
|
18264
18449
|
this.originalDocuments = options.originalDocuments;
|
|
@@ -18273,7 +18458,7 @@ var DefaultRerankResult = class {
|
|
|
18273
18458
|
|
|
18274
18459
|
// src/transcribe/transcribe.ts
|
|
18275
18460
|
import {
|
|
18276
|
-
detectMediaType as
|
|
18461
|
+
detectMediaType as detectMediaType6,
|
|
18277
18462
|
withUserAgentSuffix as withUserAgentSuffix13
|
|
18278
18463
|
} from "@ai-sdk/provider-utils";
|
|
18279
18464
|
var defaultDownload2 = createDownload();
|
|
@@ -18307,7 +18492,7 @@ async function transcribe({
|
|
|
18307
18492
|
abortSignal,
|
|
18308
18493
|
headers: headersWithUserAgent,
|
|
18309
18494
|
providerOptions,
|
|
18310
|
-
mediaType: (_a25 =
|
|
18495
|
+
mediaType: (_a25 = detectMediaType6({
|
|
18311
18496
|
data: audioData,
|
|
18312
18497
|
topLevelType: "audio"
|
|
18313
18498
|
})) != null ? _a25 : "audio/wav"
|
|
@@ -19676,7 +19861,7 @@ var TextStreamChatTransport = class extends HttpChatTransport {
|
|
|
19676
19861
|
// src/upload-file/upload-file.ts
|
|
19677
19862
|
import {
|
|
19678
19863
|
convertBase64ToUint8Array as convertBase64ToUint8Array6,
|
|
19679
|
-
detectMediaType as
|
|
19864
|
+
detectMediaType as detectMediaType7
|
|
19680
19865
|
} from "@ai-sdk/provider-utils";
|
|
19681
19866
|
async function uploadFile({
|
|
19682
19867
|
api,
|
|
@@ -19689,7 +19874,7 @@ async function uploadFile({
|
|
|
19689
19874
|
}) {
|
|
19690
19875
|
var _a25;
|
|
19691
19876
|
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 =
|
|
19877
|
+
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
19878
|
let result;
|
|
19694
19879
|
try {
|
|
19695
19880
|
const filesApi = "uploadFile" in api ? api : typeof api.files === "function" ? api.files() : (() => {
|
|
@@ -19906,6 +20091,7 @@ export {
|
|
|
19906
20091
|
isStaticToolUIPart,
|
|
19907
20092
|
isStepCount,
|
|
19908
20093
|
isTextUIPart,
|
|
20094
|
+
isToolOutputErrorUIPart,
|
|
19909
20095
|
isToolUIPart,
|
|
19910
20096
|
jsonSchema,
|
|
19911
20097
|
lastAssistantMessageIsCompleteWithApprovalResponses,
|