@langchain/openai 0.2.2 → 0.2.3
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/chat_models.cjs +34 -10
- package/dist/chat_models.d.ts +1 -0
- package/dist/chat_models.js +34 -10
- package/dist/types.d.ts +6 -1
- package/package.json +1 -1
package/dist/chat_models.cjs
CHANGED
|
@@ -47,7 +47,7 @@ function messageToOpenAIRole(message) {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
exports.messageToOpenAIRole = messageToOpenAIRole;
|
|
50
|
-
function openAIResponseToChatMessage(message,
|
|
50
|
+
function openAIResponseToChatMessage(message, rawResponse, includeRawResponse) {
|
|
51
51
|
const rawToolCalls = message.tool_calls;
|
|
52
52
|
switch (message.role) {
|
|
53
53
|
case "assistant": {
|
|
@@ -62,15 +62,26 @@ function openAIResponseToChatMessage(message, messageId) {
|
|
|
62
62
|
invalidToolCalls.push((0, openai_tools_1.makeInvalidToolCall)(rawToolCall, e.message));
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
+
const additional_kwargs = {
|
|
66
|
+
function_call: message.function_call,
|
|
67
|
+
tool_calls: rawToolCalls,
|
|
68
|
+
};
|
|
69
|
+
if (includeRawResponse !== undefined) {
|
|
70
|
+
additional_kwargs.__raw_response = rawResponse;
|
|
71
|
+
}
|
|
72
|
+
let response_metadata;
|
|
73
|
+
if (rawResponse.system_fingerprint) {
|
|
74
|
+
response_metadata = {
|
|
75
|
+
system_fingerprint: rawResponse.system_fingerprint,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
65
78
|
return new messages_1.AIMessage({
|
|
66
79
|
content: message.content || "",
|
|
67
80
|
tool_calls: toolCalls,
|
|
68
81
|
invalid_tool_calls: invalidToolCalls,
|
|
69
|
-
additional_kwargs
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
},
|
|
73
|
-
id: messageId,
|
|
82
|
+
additional_kwargs,
|
|
83
|
+
response_metadata,
|
|
84
|
+
id: rawResponse.id,
|
|
74
85
|
});
|
|
75
86
|
}
|
|
76
87
|
default:
|
|
@@ -79,7 +90,7 @@ function openAIResponseToChatMessage(message, messageId) {
|
|
|
79
90
|
}
|
|
80
91
|
function _convertDeltaToMessageChunk(
|
|
81
92
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
82
|
-
delta,
|
|
93
|
+
delta, rawResponse, defaultRole, includeRawResponse) {
|
|
83
94
|
const role = delta.role ?? defaultRole;
|
|
84
95
|
const content = delta.content ?? "";
|
|
85
96
|
let additional_kwargs;
|
|
@@ -96,6 +107,9 @@ delta, messageId, defaultRole) {
|
|
|
96
107
|
else {
|
|
97
108
|
additional_kwargs = {};
|
|
98
109
|
}
|
|
110
|
+
if (includeRawResponse) {
|
|
111
|
+
additional_kwargs.__raw_response = rawResponse;
|
|
112
|
+
}
|
|
99
113
|
if (role === "user") {
|
|
100
114
|
return new messages_1.HumanMessageChunk({ content });
|
|
101
115
|
}
|
|
@@ -116,7 +130,7 @@ delta, messageId, defaultRole) {
|
|
|
116
130
|
content,
|
|
117
131
|
tool_call_chunks: toolCallChunks,
|
|
118
132
|
additional_kwargs,
|
|
119
|
-
id:
|
|
133
|
+
id: rawResponse.id,
|
|
120
134
|
});
|
|
121
135
|
}
|
|
122
136
|
else if (role === "system") {
|
|
@@ -411,6 +425,12 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
411
425
|
writable: true,
|
|
412
426
|
value: void 0
|
|
413
427
|
});
|
|
428
|
+
Object.defineProperty(this, "__includeRawResponse", {
|
|
429
|
+
enumerable: true,
|
|
430
|
+
configurable: true,
|
|
431
|
+
writable: true,
|
|
432
|
+
value: void 0
|
|
433
|
+
});
|
|
414
434
|
Object.defineProperty(this, "client", {
|
|
415
435
|
enumerable: true,
|
|
416
436
|
configurable: true,
|
|
@@ -466,6 +486,7 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
466
486
|
this.stop = fields?.stopSequences ?? fields?.stop;
|
|
467
487
|
this.stopSequences = this?.stop;
|
|
468
488
|
this.user = fields?.user;
|
|
489
|
+
this.__includeRawResponse = fields?.__includeRawResponse;
|
|
469
490
|
if (this.azureOpenAIApiKey || this.azureADTokenProvider) {
|
|
470
491
|
if (!this.azureOpenAIApiInstanceName && !this.azureOpenAIBasePath) {
|
|
471
492
|
throw new Error("Azure OpenAI API instance name not found");
|
|
@@ -588,7 +609,7 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
588
609
|
if (!delta) {
|
|
589
610
|
continue;
|
|
590
611
|
}
|
|
591
|
-
const chunk = _convertDeltaToMessageChunk(delta, data
|
|
612
|
+
const chunk = _convertDeltaToMessageChunk(delta, data, defaultRole, this.__includeRawResponse);
|
|
592
613
|
defaultRole = delta.role ?? defaultRole;
|
|
593
614
|
const newTokenIndices = {
|
|
594
615
|
prompt: options.promptIndex ?? 0,
|
|
@@ -602,6 +623,9 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
602
623
|
const generationInfo = { ...newTokenIndices };
|
|
603
624
|
if (choice.finish_reason !== undefined) {
|
|
604
625
|
generationInfo.finish_reason = choice.finish_reason;
|
|
626
|
+
// Only include system fingerprint in the last chunk for now
|
|
627
|
+
// to avoid concatenation issues
|
|
628
|
+
generationInfo.system_fingerprint = data.system_fingerprint;
|
|
605
629
|
}
|
|
606
630
|
if (this.logprobs) {
|
|
607
631
|
generationInfo.logprobs = choice.logprobs;
|
|
@@ -698,7 +722,7 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
698
722
|
const text = part.message?.content ?? "";
|
|
699
723
|
const generation = {
|
|
700
724
|
text,
|
|
701
|
-
message: openAIResponseToChatMessage(part.message ?? { role: "assistant" }, data.
|
|
725
|
+
message: openAIResponseToChatMessage(part.message ?? { role: "assistant" }, data, this.__includeRawResponse),
|
|
702
726
|
};
|
|
703
727
|
generation.generationInfo = {
|
|
704
728
|
...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),
|
package/dist/chat_models.d.ts
CHANGED
|
@@ -113,6 +113,7 @@ export declare class ChatOpenAI<CallOptions extends ChatOpenAICallOptions = Chat
|
|
|
113
113
|
azureOpenAIApiDeploymentName?: string;
|
|
114
114
|
azureOpenAIBasePath?: string;
|
|
115
115
|
organization?: string;
|
|
116
|
+
__includeRawResponse?: boolean;
|
|
116
117
|
protected client: OpenAIClient;
|
|
117
118
|
protected clientConfig: ClientOptions;
|
|
118
119
|
constructor(fields?: Partial<OpenAIChatInput> & Partial<AzureOpenAIInput> & BaseChatModelParams & {
|
package/dist/chat_models.js
CHANGED
|
@@ -43,7 +43,7 @@ export function messageToOpenAIRole(message) {
|
|
|
43
43
|
throw new Error(`Unknown message type: ${type}`);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
function openAIResponseToChatMessage(message,
|
|
46
|
+
function openAIResponseToChatMessage(message, rawResponse, includeRawResponse) {
|
|
47
47
|
const rawToolCalls = message.tool_calls;
|
|
48
48
|
switch (message.role) {
|
|
49
49
|
case "assistant": {
|
|
@@ -58,15 +58,26 @@ function openAIResponseToChatMessage(message, messageId) {
|
|
|
58
58
|
invalidToolCalls.push(makeInvalidToolCall(rawToolCall, e.message));
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
+
const additional_kwargs = {
|
|
62
|
+
function_call: message.function_call,
|
|
63
|
+
tool_calls: rawToolCalls,
|
|
64
|
+
};
|
|
65
|
+
if (includeRawResponse !== undefined) {
|
|
66
|
+
additional_kwargs.__raw_response = rawResponse;
|
|
67
|
+
}
|
|
68
|
+
let response_metadata;
|
|
69
|
+
if (rawResponse.system_fingerprint) {
|
|
70
|
+
response_metadata = {
|
|
71
|
+
system_fingerprint: rawResponse.system_fingerprint,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
61
74
|
return new AIMessage({
|
|
62
75
|
content: message.content || "",
|
|
63
76
|
tool_calls: toolCalls,
|
|
64
77
|
invalid_tool_calls: invalidToolCalls,
|
|
65
|
-
additional_kwargs
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
},
|
|
69
|
-
id: messageId,
|
|
78
|
+
additional_kwargs,
|
|
79
|
+
response_metadata,
|
|
80
|
+
id: rawResponse.id,
|
|
70
81
|
});
|
|
71
82
|
}
|
|
72
83
|
default:
|
|
@@ -75,7 +86,7 @@ function openAIResponseToChatMessage(message, messageId) {
|
|
|
75
86
|
}
|
|
76
87
|
function _convertDeltaToMessageChunk(
|
|
77
88
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
78
|
-
delta,
|
|
89
|
+
delta, rawResponse, defaultRole, includeRawResponse) {
|
|
79
90
|
const role = delta.role ?? defaultRole;
|
|
80
91
|
const content = delta.content ?? "";
|
|
81
92
|
let additional_kwargs;
|
|
@@ -92,6 +103,9 @@ delta, messageId, defaultRole) {
|
|
|
92
103
|
else {
|
|
93
104
|
additional_kwargs = {};
|
|
94
105
|
}
|
|
106
|
+
if (includeRawResponse) {
|
|
107
|
+
additional_kwargs.__raw_response = rawResponse;
|
|
108
|
+
}
|
|
95
109
|
if (role === "user") {
|
|
96
110
|
return new HumanMessageChunk({ content });
|
|
97
111
|
}
|
|
@@ -112,7 +126,7 @@ delta, messageId, defaultRole) {
|
|
|
112
126
|
content,
|
|
113
127
|
tool_call_chunks: toolCallChunks,
|
|
114
128
|
additional_kwargs,
|
|
115
|
-
id:
|
|
129
|
+
id: rawResponse.id,
|
|
116
130
|
});
|
|
117
131
|
}
|
|
118
132
|
else if (role === "system") {
|
|
@@ -407,6 +421,12 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
407
421
|
writable: true,
|
|
408
422
|
value: void 0
|
|
409
423
|
});
|
|
424
|
+
Object.defineProperty(this, "__includeRawResponse", {
|
|
425
|
+
enumerable: true,
|
|
426
|
+
configurable: true,
|
|
427
|
+
writable: true,
|
|
428
|
+
value: void 0
|
|
429
|
+
});
|
|
410
430
|
Object.defineProperty(this, "client", {
|
|
411
431
|
enumerable: true,
|
|
412
432
|
configurable: true,
|
|
@@ -462,6 +482,7 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
462
482
|
this.stop = fields?.stopSequences ?? fields?.stop;
|
|
463
483
|
this.stopSequences = this?.stop;
|
|
464
484
|
this.user = fields?.user;
|
|
485
|
+
this.__includeRawResponse = fields?.__includeRawResponse;
|
|
465
486
|
if (this.azureOpenAIApiKey || this.azureADTokenProvider) {
|
|
466
487
|
if (!this.azureOpenAIApiInstanceName && !this.azureOpenAIBasePath) {
|
|
467
488
|
throw new Error("Azure OpenAI API instance name not found");
|
|
@@ -584,7 +605,7 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
584
605
|
if (!delta) {
|
|
585
606
|
continue;
|
|
586
607
|
}
|
|
587
|
-
const chunk = _convertDeltaToMessageChunk(delta, data
|
|
608
|
+
const chunk = _convertDeltaToMessageChunk(delta, data, defaultRole, this.__includeRawResponse);
|
|
588
609
|
defaultRole = delta.role ?? defaultRole;
|
|
589
610
|
const newTokenIndices = {
|
|
590
611
|
prompt: options.promptIndex ?? 0,
|
|
@@ -598,6 +619,9 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
598
619
|
const generationInfo = { ...newTokenIndices };
|
|
599
620
|
if (choice.finish_reason !== undefined) {
|
|
600
621
|
generationInfo.finish_reason = choice.finish_reason;
|
|
622
|
+
// Only include system fingerprint in the last chunk for now
|
|
623
|
+
// to avoid concatenation issues
|
|
624
|
+
generationInfo.system_fingerprint = data.system_fingerprint;
|
|
601
625
|
}
|
|
602
626
|
if (this.logprobs) {
|
|
603
627
|
generationInfo.logprobs = choice.logprobs;
|
|
@@ -694,7 +718,7 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
694
718
|
const text = part.message?.content ?? "";
|
|
695
719
|
const generation = {
|
|
696
720
|
text,
|
|
697
|
-
message: openAIResponseToChatMessage(part.message ?? { role: "assistant" }, data.
|
|
721
|
+
message: openAIResponseToChatMessage(part.message ?? { role: "assistant" }, data, this.__includeRawResponse),
|
|
698
722
|
};
|
|
699
723
|
generation.generationInfo = {
|
|
700
724
|
...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),
|
package/dist/types.d.ts
CHANGED
|
@@ -115,7 +115,12 @@ export interface OpenAIChatInput extends OpenAIBaseInput {
|
|
|
115
115
|
*/
|
|
116
116
|
topLogprobs?: number;
|
|
117
117
|
/** ChatGPT messages to pass as a prefix to the prompt */
|
|
118
|
-
prefixMessages?: OpenAIClient.Chat.
|
|
118
|
+
prefixMessages?: OpenAIClient.Chat.ChatCompletionMessageParam[];
|
|
119
|
+
/**
|
|
120
|
+
* Whether to include the raw OpenAI response in the output message's "additional_kwargs" field.
|
|
121
|
+
* Currently in experimental beta.
|
|
122
|
+
*/
|
|
123
|
+
__includeRawResponse?: boolean;
|
|
119
124
|
}
|
|
120
125
|
export declare interface AzureOpenAIInput {
|
|
121
126
|
/**
|