🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

ai

Package Overview
Dependencies
Maintainers
5
Versions
1347
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ai - npm Package Compare versions

Comparing version
7.0.22
to
7.0.23
+2
-2
package.json
{
"name": "ai",
"version": "7.0.22",
"version": "7.0.23",
"type": "module",

@@ -45,3 +45,3 @@ "description": "AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.",

"dependencies": {
"@ai-sdk/gateway": "4.0.16",
"@ai-sdk/gateway": "4.0.17",
"@ai-sdk/provider": "4.0.3",

@@ -48,0 +48,0 @@ "@ai-sdk/provider-utils": "5.0.7"

@@ -174,232 +174,244 @@ import {

await notify({
event: {
callId,
operationId: 'ai.embedMany',
provider: model.provider,
modelId: model.modelId,
value: values,
maxRetries,
headers: headersWithUserAgent,
providerOptions,
},
callbacks: [resolvedOnStart, telemetryDispatcher.onStart],
});
const runInTracingChannelSpan =
telemetryDispatcher.runInTracingChannelSpan ??
(async <T>({ execute }: { execute: () => PromiseLike<T> }) =>
await execute());
try {
const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([
model.maxEmbeddingsPerCall,
model.supportsParallelCalls,
]);
const startEvent = {
callId,
operationId: 'ai.embedMany',
provider: model.provider,
modelId: model.modelId,
value: values,
maxRetries,
headers: headersWithUserAgent,
providerOptions,
};
if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {
const { embeddings, usage, warnings, response, providerMetadata } =
await retry(async () => {
const embedCallId = generateCallId();
return await runInTracingChannelSpan({
type: 'embedMany',
event: startEvent,
execute: async () => {
await notify({
event: startEvent,
callbacks: [resolvedOnStart, telemetryDispatcher.onStart],
});
await notify({
event: {
callId,
embedCallId,
operationId: 'ai.embedMany.doEmbed',
provider: model.provider,
modelId: model.modelId,
values,
},
callbacks: [telemetryDispatcher.onEmbedStart],
});
try {
const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all(
[model.maxEmbeddingsPerCall, model.supportsParallelCalls],
);
const modelResponse = await model.doEmbed({
values,
abortSignal,
headers: headersWithUserAgent,
providerOptions,
if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {
const { embeddings, usage, warnings, response, providerMetadata } =
await retry(async () => {
const embedCallId = generateCallId();
await notify({
event: {
callId,
embedCallId,
operationId: 'ai.embedMany.doEmbed',
provider: model.provider,
modelId: model.modelId,
values,
},
callbacks: [telemetryDispatcher.onEmbedStart],
});
const modelResponse = await model.doEmbed({
values,
abortSignal,
headers: headersWithUserAgent,
providerOptions,
});
const embeddings = modelResponse.embeddings;
const usage = modelResponse.usage ?? { tokens: NaN };
await notify({
event: {
callId,
embedCallId,
operationId: 'ai.embedMany.doEmbed',
provider: model.provider,
modelId: model.modelId,
values,
embeddings,
usage,
},
callbacks: [telemetryDispatcher.onEmbedEnd],
});
return {
embeddings,
usage,
warnings: modelResponse.warnings ?? [],
providerMetadata: modelResponse.providerMetadata,
response: modelResponse.response,
};
});
logWarnings({
warnings,
provider: model.provider,
model: model.modelId,
});
const embeddings = modelResponse.embeddings;
const usage = modelResponse.usage ?? { tokens: NaN };
await notify({
event: {
callId,
embedCallId,
operationId: 'ai.embedMany.doEmbed',
operationId: 'ai.embedMany',
provider: model.provider,
modelId: model.modelId,
values,
embeddings,
value: values,
embedding: embeddings,
usage,
warnings,
providerMetadata,
response: [response],
},
callbacks: [telemetryDispatcher.onEmbedEnd],
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd],
});
return {
return new DefaultEmbedManyResult({
values,
embeddings,
usage,
warnings: modelResponse.warnings ?? [],
providerMetadata: modelResponse.providerMetadata,
response: modelResponse.response,
};
});
warnings,
providerMetadata,
responses: [response],
});
}
logWarnings({
warnings,
provider: model.provider,
model: model.modelId,
});
const valueChunks = splitArray(values, maxEmbeddingsPerCall);
await notify({
event: {
callId,
operationId: 'ai.embedMany',
provider: model.provider,
modelId: model.modelId,
value: values,
embedding: embeddings,
usage,
warnings,
providerMetadata,
response: [response],
},
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd],
});
const embeddings: Array<Embedding> = [];
const warnings: Array<Warning> = [];
const responses: Array<
| {
headers?: Record<string, string>;
body?: unknown;
}
| undefined
> = [];
let tokens = 0;
let providerMetadata: ProviderMetadata | undefined;
return new DefaultEmbedManyResult({
values,
embeddings,
usage,
warnings,
providerMetadata,
responses: [response],
});
}
const parallelChunks = splitArray(
valueChunks,
supportsParallelCalls ? maxParallelCalls : 1,
);
const valueChunks = splitArray(values, maxEmbeddingsPerCall);
for (const parallelChunk of parallelChunks) {
const results = await Promise.all(
parallelChunk.map(chunk => {
return retry(async () => {
const embedCallId = generateCallId();
const embeddings: Array<Embedding> = [];
const warnings: Array<Warning> = [];
const responses: Array<
| {
headers?: Record<string, string>;
body?: unknown;
}
| undefined
> = [];
let tokens = 0;
let providerMetadata: ProviderMetadata | undefined;
await notify({
event: {
callId,
embedCallId,
operationId: 'ai.embedMany.doEmbed',
provider: model.provider,
modelId: model.modelId,
values: chunk,
},
callbacks: [telemetryDispatcher.onEmbedStart],
});
const parallelChunks = splitArray(
valueChunks,
supportsParallelCalls ? maxParallelCalls : 1,
);
const modelResponse = await model.doEmbed({
values: chunk,
abortSignal,
headers: headersWithUserAgent,
providerOptions,
});
for (const parallelChunk of parallelChunks) {
const results = await Promise.all(
parallelChunk.map(chunk => {
return retry(async () => {
const embedCallId = generateCallId();
const chunkEmbeddings = modelResponse.embeddings;
const usage = modelResponse.usage ?? { tokens: NaN };
await notify({
event: {
callId,
embedCallId,
operationId: 'ai.embedMany.doEmbed',
provider: model.provider,
modelId: model.modelId,
values: chunk,
},
callbacks: [telemetryDispatcher.onEmbedStart],
});
await notify({
event: {
callId,
embedCallId,
operationId: 'ai.embedMany.doEmbed',
provider: model.provider,
modelId: model.modelId,
values: chunk,
embeddings: chunkEmbeddings,
usage,
},
callbacks: [telemetryDispatcher.onEmbedEnd],
});
const modelResponse = await model.doEmbed({
values: chunk,
abortSignal,
headers: headersWithUserAgent,
providerOptions,
});
return {
embeddings: chunkEmbeddings,
usage,
warnings: modelResponse.warnings ?? [],
providerMetadata: modelResponse.providerMetadata,
response: modelResponse.response,
};
});
}),
);
const chunkEmbeddings = modelResponse.embeddings;
const usage = modelResponse.usage ?? { tokens: NaN };
await notify({
event: {
callId,
embedCallId,
operationId: 'ai.embedMany.doEmbed',
provider: model.provider,
modelId: model.modelId,
values: chunk,
embeddings: chunkEmbeddings,
usage,
},
callbacks: [telemetryDispatcher.onEmbedEnd],
});
return {
embeddings: chunkEmbeddings,
usage,
warnings: modelResponse.warnings ?? [],
providerMetadata: modelResponse.providerMetadata,
response: modelResponse.response,
};
});
}),
);
for (const result of results) {
embeddings.push(...result.embeddings);
warnings.push(...result.warnings);
responses.push(result.response);
tokens += result.usage.tokens;
if (result.providerMetadata) {
if (!providerMetadata) {
providerMetadata = { ...result.providerMetadata };
} else {
for (const [providerName, metadata] of Object.entries(
result.providerMetadata,
)) {
providerMetadata[providerName] = {
...(providerMetadata[providerName] ?? {}),
...metadata,
};
for (const result of results) {
embeddings.push(...result.embeddings);
warnings.push(...result.warnings);
responses.push(result.response);
tokens += result.usage.tokens;
if (result.providerMetadata) {
if (!providerMetadata) {
providerMetadata = { ...result.providerMetadata };
} else {
for (const [providerName, metadata] of Object.entries(
result.providerMetadata,
)) {
providerMetadata[providerName] = {
...(providerMetadata[providerName] ?? {}),
...metadata,
};
}
}
}
}
}
}
}
logWarnings({
warnings,
provider: model.provider,
model: model.modelId,
});
logWarnings({
warnings,
provider: model.provider,
model: model.modelId,
});
await notify({
event: {
callId,
operationId: 'ai.embedMany',
provider: model.provider,
modelId: model.modelId,
value: values,
embedding: embeddings,
usage: { tokens },
warnings,
providerMetadata,
response: responses,
},
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd],
});
await notify({
event: {
callId,
operationId: 'ai.embedMany',
provider: model.provider,
modelId: model.modelId,
value: values,
embedding: embeddings,
usage: { tokens },
warnings,
providerMetadata,
response: responses,
},
callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd],
});
return new DefaultEmbedManyResult({
values,
embeddings,
usage: { tokens },
warnings,
providerMetadata: providerMetadata,
responses,
});
} catch (error) {
await telemetryDispatcher.onError?.({ callId, error });
throw error;
}
return new DefaultEmbedManyResult({
values,
embeddings,
usage: { tokens },
warnings,
providerMetadata: providerMetadata,
responses,
});
} catch (error) {
await telemetryDispatcher.onError?.({ callId, error });
throw error;
}
},
});
}

@@ -406,0 +418,0 @@

@@ -10,2 +10,3 @@ export const AI_SDK_TELEMETRY_TRACING_CHANNEL = 'ai:telemetry';

| 'embed'
| 'embedMany'
| 'rerank';

@@ -12,0 +13,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display