@langchain/openai 0.3.5 → 0.3.6-rc.0
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/dist/azure/embeddings.d.ts +3 -1
- package/dist/chat_models.cjs +73 -16
- package/dist/chat_models.js +73 -16
- package/dist/embeddings.d.ts +6 -1
- package/package.json +2 -2
|
@@ -10,5 +10,7 @@ export declare class AzureOpenAIEmbeddings extends OpenAIEmbeddings {
|
|
|
10
10
|
deploymentName?: string;
|
|
11
11
|
openAIApiVersion?: string;
|
|
12
12
|
}, configuration?: ClientOptions & LegacyOpenAIInput);
|
|
13
|
-
protected embeddingWithRetry(request: OpenAIClient.EmbeddingCreateParams): Promise<OpenAIClient.Embeddings.CreateEmbeddingResponse
|
|
13
|
+
protected embeddingWithRetry(request: OpenAIClient.EmbeddingCreateParams): Promise<OpenAIClient.Embeddings.CreateEmbeddingResponse & {
|
|
14
|
+
_request_id?: string | null | undefined;
|
|
15
|
+
}>;
|
|
14
16
|
}
|
package/dist/chat_models.cjs
CHANGED
|
@@ -1157,6 +1157,22 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
1157
1157
|
await runManager?.handleLLMNewToken(generationChunk.text ?? "", newTokenIndices, undefined, undefined, undefined, { chunk: generationChunk });
|
|
1158
1158
|
}
|
|
1159
1159
|
if (usage) {
|
|
1160
|
+
const inputTokenDetails = {
|
|
1161
|
+
...(usage.prompt_tokens_details?.audio_tokens !== null && {
|
|
1162
|
+
audio: usage.prompt_tokens_details?.audio_tokens,
|
|
1163
|
+
}),
|
|
1164
|
+
...(usage.prompt_tokens_details?.cached_tokens !== null && {
|
|
1165
|
+
cache_read: usage.prompt_tokens_details?.cached_tokens,
|
|
1166
|
+
}),
|
|
1167
|
+
};
|
|
1168
|
+
const outputTokenDetails = {
|
|
1169
|
+
...(usage.completion_tokens_details?.audio_tokens !== null && {
|
|
1170
|
+
audio: usage.completion_tokens_details?.audio_tokens,
|
|
1171
|
+
}),
|
|
1172
|
+
...(usage.completion_tokens_details?.reasoning_tokens !== null && {
|
|
1173
|
+
reasoning: usage.completion_tokens_details?.reasoning_tokens,
|
|
1174
|
+
}),
|
|
1175
|
+
};
|
|
1160
1176
|
const generationChunk = new outputs_1.ChatGenerationChunk({
|
|
1161
1177
|
message: new messages_1.AIMessageChunk({
|
|
1162
1178
|
content: "",
|
|
@@ -1167,6 +1183,12 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
1167
1183
|
input_tokens: usage.prompt_tokens,
|
|
1168
1184
|
output_tokens: usage.completion_tokens,
|
|
1169
1185
|
total_tokens: usage.total_tokens,
|
|
1186
|
+
...(Object.keys(inputTokenDetails).length > 0 && {
|
|
1187
|
+
input_token_details: inputTokenDetails,
|
|
1188
|
+
}),
|
|
1189
|
+
...(Object.keys(outputTokenDetails).length > 0 && {
|
|
1190
|
+
output_token_details: outputTokenDetails,
|
|
1191
|
+
}),
|
|
1170
1192
|
},
|
|
1171
1193
|
}),
|
|
1172
1194
|
text: "",
|
|
@@ -1186,7 +1208,7 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
1186
1208
|
}
|
|
1187
1209
|
/** @ignore */
|
|
1188
1210
|
async _generate(messages, options, runManager) {
|
|
1189
|
-
const
|
|
1211
|
+
const usageMetadata = {};
|
|
1190
1212
|
const params = this.invocationParams(options);
|
|
1191
1213
|
const messagesMapped = _convertMessagesToOpenAIParams(messages);
|
|
1192
1214
|
if (params.stream) {
|
|
@@ -1213,10 +1235,19 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
1213
1235
|
// fallback to estimation.
|
|
1214
1236
|
const promptTokenUsage = await this.getEstimatedTokenCountFromPrompt(messages, functions, function_call);
|
|
1215
1237
|
const completionTokenUsage = await this.getNumTokensFromGenerations(generations);
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
return {
|
|
1238
|
+
usageMetadata.input_tokens = promptTokenUsage;
|
|
1239
|
+
usageMetadata.output_tokens = completionTokenUsage;
|
|
1240
|
+
usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;
|
|
1241
|
+
return {
|
|
1242
|
+
generations,
|
|
1243
|
+
llmOutput: {
|
|
1244
|
+
estimatedTokenUsage: {
|
|
1245
|
+
promptTokens: usageMetadata.input_tokens,
|
|
1246
|
+
completionTokens: usageMetadata.output_tokens,
|
|
1247
|
+
totalTokens: usageMetadata.total_tokens,
|
|
1248
|
+
},
|
|
1249
|
+
},
|
|
1250
|
+
};
|
|
1220
1251
|
}
|
|
1221
1252
|
else {
|
|
1222
1253
|
let data;
|
|
@@ -1241,16 +1272,40 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
1241
1272
|
...options?.options,
|
|
1242
1273
|
});
|
|
1243
1274
|
}
|
|
1244
|
-
const { completion_tokens: completionTokens, prompt_tokens: promptTokens, total_tokens: totalTokens, } = data?.usage ?? {};
|
|
1275
|
+
const { completion_tokens: completionTokens, prompt_tokens: promptTokens, total_tokens: totalTokens, prompt_tokens_details: promptTokensDetails, completion_tokens_details: completionTokensDetails, } = data?.usage ?? {};
|
|
1245
1276
|
if (completionTokens) {
|
|
1246
|
-
|
|
1247
|
-
(
|
|
1277
|
+
usageMetadata.output_tokens =
|
|
1278
|
+
(usageMetadata.output_tokens ?? 0) + completionTokens;
|
|
1248
1279
|
}
|
|
1249
1280
|
if (promptTokens) {
|
|
1250
|
-
|
|
1281
|
+
usageMetadata.input_tokens =
|
|
1282
|
+
(usageMetadata.input_tokens ?? 0) + promptTokens;
|
|
1251
1283
|
}
|
|
1252
1284
|
if (totalTokens) {
|
|
1253
|
-
|
|
1285
|
+
usageMetadata.total_tokens =
|
|
1286
|
+
(usageMetadata.total_tokens ?? 0) + totalTokens;
|
|
1287
|
+
}
|
|
1288
|
+
if (promptTokensDetails?.audio_tokens !== null ||
|
|
1289
|
+
promptTokensDetails?.cached_tokens !== null) {
|
|
1290
|
+
usageMetadata.input_token_details = {
|
|
1291
|
+
...(promptTokensDetails?.audio_tokens !== null && {
|
|
1292
|
+
audio: promptTokensDetails?.audio_tokens,
|
|
1293
|
+
}),
|
|
1294
|
+
...(promptTokensDetails?.cached_tokens !== null && {
|
|
1295
|
+
cache_read: promptTokensDetails?.cached_tokens,
|
|
1296
|
+
}),
|
|
1297
|
+
};
|
|
1298
|
+
}
|
|
1299
|
+
if (completionTokensDetails?.audio_tokens !== null ||
|
|
1300
|
+
completionTokensDetails?.reasoning_tokens !== null) {
|
|
1301
|
+
usageMetadata.output_token_details = {
|
|
1302
|
+
...(completionTokensDetails?.audio_tokens !== null && {
|
|
1303
|
+
audio: completionTokensDetails?.audio_tokens,
|
|
1304
|
+
}),
|
|
1305
|
+
...(completionTokensDetails?.reasoning_tokens !== null && {
|
|
1306
|
+
reasoning: completionTokensDetails?.reasoning_tokens,
|
|
1307
|
+
}),
|
|
1308
|
+
};
|
|
1254
1309
|
}
|
|
1255
1310
|
const generations = [];
|
|
1256
1311
|
for (const part of data?.choices ?? []) {
|
|
@@ -1264,17 +1319,19 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
1264
1319
|
...(part.logprobs ? { logprobs: part.logprobs } : {}),
|
|
1265
1320
|
};
|
|
1266
1321
|
if ((0, messages_1.isAIMessage)(generation.message)) {
|
|
1267
|
-
generation.message.usage_metadata =
|
|
1268
|
-
input_tokens: tokenUsage.promptTokens ?? 0,
|
|
1269
|
-
output_tokens: tokenUsage.completionTokens ?? 0,
|
|
1270
|
-
total_tokens: tokenUsage.totalTokens ?? 0,
|
|
1271
|
-
};
|
|
1322
|
+
generation.message.usage_metadata = usageMetadata;
|
|
1272
1323
|
}
|
|
1273
1324
|
generations.push(generation);
|
|
1274
1325
|
}
|
|
1275
1326
|
return {
|
|
1276
1327
|
generations,
|
|
1277
|
-
llmOutput: {
|
|
1328
|
+
llmOutput: {
|
|
1329
|
+
tokenUsage: {
|
|
1330
|
+
promptTokens: usageMetadata.input_tokens,
|
|
1331
|
+
completionTokens: usageMetadata.output_tokens,
|
|
1332
|
+
totalTokens: usageMetadata.total_tokens,
|
|
1333
|
+
},
|
|
1334
|
+
},
|
|
1278
1335
|
};
|
|
1279
1336
|
}
|
|
1280
1337
|
}
|
package/dist/chat_models.js
CHANGED
|
@@ -1152,6 +1152,22 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
1152
1152
|
await runManager?.handleLLMNewToken(generationChunk.text ?? "", newTokenIndices, undefined, undefined, undefined, { chunk: generationChunk });
|
|
1153
1153
|
}
|
|
1154
1154
|
if (usage) {
|
|
1155
|
+
const inputTokenDetails = {
|
|
1156
|
+
...(usage.prompt_tokens_details?.audio_tokens !== null && {
|
|
1157
|
+
audio: usage.prompt_tokens_details?.audio_tokens,
|
|
1158
|
+
}),
|
|
1159
|
+
...(usage.prompt_tokens_details?.cached_tokens !== null && {
|
|
1160
|
+
cache_read: usage.prompt_tokens_details?.cached_tokens,
|
|
1161
|
+
}),
|
|
1162
|
+
};
|
|
1163
|
+
const outputTokenDetails = {
|
|
1164
|
+
...(usage.completion_tokens_details?.audio_tokens !== null && {
|
|
1165
|
+
audio: usage.completion_tokens_details?.audio_tokens,
|
|
1166
|
+
}),
|
|
1167
|
+
...(usage.completion_tokens_details?.reasoning_tokens !== null && {
|
|
1168
|
+
reasoning: usage.completion_tokens_details?.reasoning_tokens,
|
|
1169
|
+
}),
|
|
1170
|
+
};
|
|
1155
1171
|
const generationChunk = new ChatGenerationChunk({
|
|
1156
1172
|
message: new AIMessageChunk({
|
|
1157
1173
|
content: "",
|
|
@@ -1162,6 +1178,12 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
1162
1178
|
input_tokens: usage.prompt_tokens,
|
|
1163
1179
|
output_tokens: usage.completion_tokens,
|
|
1164
1180
|
total_tokens: usage.total_tokens,
|
|
1181
|
+
...(Object.keys(inputTokenDetails).length > 0 && {
|
|
1182
|
+
input_token_details: inputTokenDetails,
|
|
1183
|
+
}),
|
|
1184
|
+
...(Object.keys(outputTokenDetails).length > 0 && {
|
|
1185
|
+
output_token_details: outputTokenDetails,
|
|
1186
|
+
}),
|
|
1165
1187
|
},
|
|
1166
1188
|
}),
|
|
1167
1189
|
text: "",
|
|
@@ -1181,7 +1203,7 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
1181
1203
|
}
|
|
1182
1204
|
/** @ignore */
|
|
1183
1205
|
async _generate(messages, options, runManager) {
|
|
1184
|
-
const
|
|
1206
|
+
const usageMetadata = {};
|
|
1185
1207
|
const params = this.invocationParams(options);
|
|
1186
1208
|
const messagesMapped = _convertMessagesToOpenAIParams(messages);
|
|
1187
1209
|
if (params.stream) {
|
|
@@ -1208,10 +1230,19 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
1208
1230
|
// fallback to estimation.
|
|
1209
1231
|
const promptTokenUsage = await this.getEstimatedTokenCountFromPrompt(messages, functions, function_call);
|
|
1210
1232
|
const completionTokenUsage = await this.getNumTokensFromGenerations(generations);
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
return {
|
|
1233
|
+
usageMetadata.input_tokens = promptTokenUsage;
|
|
1234
|
+
usageMetadata.output_tokens = completionTokenUsage;
|
|
1235
|
+
usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;
|
|
1236
|
+
return {
|
|
1237
|
+
generations,
|
|
1238
|
+
llmOutput: {
|
|
1239
|
+
estimatedTokenUsage: {
|
|
1240
|
+
promptTokens: usageMetadata.input_tokens,
|
|
1241
|
+
completionTokens: usageMetadata.output_tokens,
|
|
1242
|
+
totalTokens: usageMetadata.total_tokens,
|
|
1243
|
+
},
|
|
1244
|
+
},
|
|
1245
|
+
};
|
|
1215
1246
|
}
|
|
1216
1247
|
else {
|
|
1217
1248
|
let data;
|
|
@@ -1236,16 +1267,40 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
1236
1267
|
...options?.options,
|
|
1237
1268
|
});
|
|
1238
1269
|
}
|
|
1239
|
-
const { completion_tokens: completionTokens, prompt_tokens: promptTokens, total_tokens: totalTokens, } = data?.usage ?? {};
|
|
1270
|
+
const { completion_tokens: completionTokens, prompt_tokens: promptTokens, total_tokens: totalTokens, prompt_tokens_details: promptTokensDetails, completion_tokens_details: completionTokensDetails, } = data?.usage ?? {};
|
|
1240
1271
|
if (completionTokens) {
|
|
1241
|
-
|
|
1242
|
-
(
|
|
1272
|
+
usageMetadata.output_tokens =
|
|
1273
|
+
(usageMetadata.output_tokens ?? 0) + completionTokens;
|
|
1243
1274
|
}
|
|
1244
1275
|
if (promptTokens) {
|
|
1245
|
-
|
|
1276
|
+
usageMetadata.input_tokens =
|
|
1277
|
+
(usageMetadata.input_tokens ?? 0) + promptTokens;
|
|
1246
1278
|
}
|
|
1247
1279
|
if (totalTokens) {
|
|
1248
|
-
|
|
1280
|
+
usageMetadata.total_tokens =
|
|
1281
|
+
(usageMetadata.total_tokens ?? 0) + totalTokens;
|
|
1282
|
+
}
|
|
1283
|
+
if (promptTokensDetails?.audio_tokens !== null ||
|
|
1284
|
+
promptTokensDetails?.cached_tokens !== null) {
|
|
1285
|
+
usageMetadata.input_token_details = {
|
|
1286
|
+
...(promptTokensDetails?.audio_tokens !== null && {
|
|
1287
|
+
audio: promptTokensDetails?.audio_tokens,
|
|
1288
|
+
}),
|
|
1289
|
+
...(promptTokensDetails?.cached_tokens !== null && {
|
|
1290
|
+
cache_read: promptTokensDetails?.cached_tokens,
|
|
1291
|
+
}),
|
|
1292
|
+
};
|
|
1293
|
+
}
|
|
1294
|
+
if (completionTokensDetails?.audio_tokens !== null ||
|
|
1295
|
+
completionTokensDetails?.reasoning_tokens !== null) {
|
|
1296
|
+
usageMetadata.output_token_details = {
|
|
1297
|
+
...(completionTokensDetails?.audio_tokens !== null && {
|
|
1298
|
+
audio: completionTokensDetails?.audio_tokens,
|
|
1299
|
+
}),
|
|
1300
|
+
...(completionTokensDetails?.reasoning_tokens !== null && {
|
|
1301
|
+
reasoning: completionTokensDetails?.reasoning_tokens,
|
|
1302
|
+
}),
|
|
1303
|
+
};
|
|
1249
1304
|
}
|
|
1250
1305
|
const generations = [];
|
|
1251
1306
|
for (const part of data?.choices ?? []) {
|
|
@@ -1259,17 +1314,19 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
1259
1314
|
...(part.logprobs ? { logprobs: part.logprobs } : {}),
|
|
1260
1315
|
};
|
|
1261
1316
|
if (isAIMessage(generation.message)) {
|
|
1262
|
-
generation.message.usage_metadata =
|
|
1263
|
-
input_tokens: tokenUsage.promptTokens ?? 0,
|
|
1264
|
-
output_tokens: tokenUsage.completionTokens ?? 0,
|
|
1265
|
-
total_tokens: tokenUsage.totalTokens ?? 0,
|
|
1266
|
-
};
|
|
1317
|
+
generation.message.usage_metadata = usageMetadata;
|
|
1267
1318
|
}
|
|
1268
1319
|
generations.push(generation);
|
|
1269
1320
|
}
|
|
1270
1321
|
return {
|
|
1271
1322
|
generations,
|
|
1272
|
-
llmOutput: {
|
|
1323
|
+
llmOutput: {
|
|
1324
|
+
tokenUsage: {
|
|
1325
|
+
promptTokens: usageMetadata.input_tokens,
|
|
1326
|
+
completionTokens: usageMetadata.output_tokens,
|
|
1327
|
+
totalTokens: usageMetadata.total_tokens,
|
|
1328
|
+
},
|
|
1329
|
+
},
|
|
1273
1330
|
};
|
|
1274
1331
|
}
|
|
1275
1332
|
}
|
package/dist/embeddings.d.ts
CHANGED
|
@@ -102,5 +102,10 @@ export declare class OpenAIEmbeddings extends Embeddings implements OpenAIEmbedd
|
|
|
102
102
|
* @param request Request to send to the OpenAI API.
|
|
103
103
|
* @returns Promise that resolves to the response from the API.
|
|
104
104
|
*/
|
|
105
|
-
protected embeddingWithRetry(request: OpenAIClient.EmbeddingCreateParams): Promise<OpenAIClient.Embeddings.CreateEmbeddingResponse
|
|
105
|
+
protected embeddingWithRetry(request: OpenAIClient.EmbeddingCreateParams): Promise<OpenAIClient.Embeddings.CreateEmbeddingResponse & {
|
|
106
|
+
_request_id?: string | null | undefined; /**
|
|
107
|
+
* The number of dimensions the resulting output embeddings should have.
|
|
108
|
+
* Only supported in `text-embedding-3` and later models.
|
|
109
|
+
*/
|
|
110
|
+
}>;
|
|
106
111
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langchain/openai",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6-rc.0",
|
|
4
4
|
"description": "OpenAI integrations for LangChain.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"js-tiktoken": "^1.0.12",
|
|
39
|
-
"openai": "^4.
|
|
39
|
+
"openai": "^4.67.2",
|
|
40
40
|
"zod": "^3.22.4",
|
|
41
41
|
"zod-to-json-schema": "^3.22.3"
|
|
42
42
|
},
|