@langchain/openai 0.4.3 → 0.4.4
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/chat_models.cjs +6 -3
- package/dist/azure/chat_models.js +7 -4
- package/dist/chat_models.cjs +12 -3
- package/dist/chat_models.js +12 -3
- package/dist/types.d.ts +6 -0
- package/package.json +1 -1
|
@@ -554,11 +554,14 @@ class AzureChatOpenAI extends chat_models_js_1.ChatOpenAI {
|
|
|
554
554
|
if (!params.baseURL) {
|
|
555
555
|
delete params.baseURL;
|
|
556
556
|
}
|
|
557
|
+
let env = (0, env_1.getEnv)();
|
|
558
|
+
if (env === "node" || env === "deno") {
|
|
559
|
+
env = `(${env}/${process.version}; ${process.platform}; ${process.arch})`;
|
|
560
|
+
}
|
|
561
|
+
const specifiedUserAgent = params.defaultHeaders?.["User-Agent"];
|
|
557
562
|
params.defaultHeaders = {
|
|
558
563
|
...params.defaultHeaders,
|
|
559
|
-
"User-Agent":
|
|
560
|
-
? `${params.defaultHeaders["User-Agent"]}: langchainjs-azure-openai-v2`
|
|
561
|
-
: `langchainjs-azure-openai-v2`,
|
|
564
|
+
"User-Agent": `langchainjs-azure-openai/2.0.0 (${env})${specifiedUserAgent ? ` ${specifiedUserAgent}` : ""}`,
|
|
562
565
|
};
|
|
563
566
|
this.client = new openai_1.AzureOpenAI({
|
|
564
567
|
apiVersion: this.azureOpenAIApiVersion,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AzureOpenAI as AzureOpenAIClient } from "openai";
|
|
2
|
-
import { getEnvironmentVariable } from "@langchain/core/utils/env";
|
|
2
|
+
import { getEnv, getEnvironmentVariable } from "@langchain/core/utils/env";
|
|
3
3
|
import { ChatOpenAI, } from "../chat_models.js";
|
|
4
4
|
import { getEndpoint } from "../utils/azure.js";
|
|
5
5
|
/**
|
|
@@ -551,11 +551,14 @@ export class AzureChatOpenAI extends ChatOpenAI {
|
|
|
551
551
|
if (!params.baseURL) {
|
|
552
552
|
delete params.baseURL;
|
|
553
553
|
}
|
|
554
|
+
let env = getEnv();
|
|
555
|
+
if (env === "node" || env === "deno") {
|
|
556
|
+
env = `(${env}/${process.version}; ${process.platform}; ${process.arch})`;
|
|
557
|
+
}
|
|
558
|
+
const specifiedUserAgent = params.defaultHeaders?.["User-Agent"];
|
|
554
559
|
params.defaultHeaders = {
|
|
555
560
|
...params.defaultHeaders,
|
|
556
|
-
"User-Agent":
|
|
557
|
-
? `${params.defaultHeaders["User-Agent"]}: langchainjs-azure-openai-v2`
|
|
558
|
-
: `langchainjs-azure-openai-v2`,
|
|
561
|
+
"User-Agent": `langchainjs-azure-openai/2.0.0 (${env})${specifiedUserAgent ? ` ${specifiedUserAgent}` : ""}`,
|
|
559
562
|
};
|
|
560
563
|
this.client = new AzureOpenAIClient({
|
|
561
564
|
apiVersion: this.azureOpenAIApiVersion,
|
package/dist/chat_models.cjs
CHANGED
|
@@ -55,7 +55,7 @@ function _convertMessagesToOpenAIParams(messages, model) {
|
|
|
55
55
|
// TODO: Function messages do not support array content, fix cast
|
|
56
56
|
return messages.flatMap((message) => {
|
|
57
57
|
let role = messageToOpenAIRole(message);
|
|
58
|
-
if (role === "system" && model
|
|
58
|
+
if (role === "system" && isReasoningModel(model)) {
|
|
59
59
|
role = "developer";
|
|
60
60
|
}
|
|
61
61
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -112,6 +112,9 @@ function _convertChatOpenAIToolTypeToOpenAITool(tool, fields) {
|
|
|
112
112
|
}
|
|
113
113
|
return (0, tools_js_1._convertToOpenAITool)(tool, fields);
|
|
114
114
|
}
|
|
115
|
+
function isReasoningModel(model) {
|
|
116
|
+
return model?.startsWith("o1") || model?.startsWith("o3");
|
|
117
|
+
}
|
|
115
118
|
/**
|
|
116
119
|
* OpenAI chat model integration.
|
|
117
120
|
*
|
|
@@ -918,7 +921,6 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
918
921
|
this.topP = fields?.topP ?? this.topP;
|
|
919
922
|
this.frequencyPenalty = fields?.frequencyPenalty ?? this.frequencyPenalty;
|
|
920
923
|
this.presencePenalty = fields?.presencePenalty ?? this.presencePenalty;
|
|
921
|
-
this.maxTokens = fields?.maxTokens;
|
|
922
924
|
this.logprobs = fields?.logprobs;
|
|
923
925
|
this.topLogprobs = fields?.topLogprobs;
|
|
924
926
|
this.n = fields?.n ?? this.n;
|
|
@@ -930,6 +932,7 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
930
932
|
this.audio = fields?.audio;
|
|
931
933
|
this.modalities = fields?.modalities;
|
|
932
934
|
this.reasoningEffort = fields?.reasoningEffort;
|
|
935
|
+
this.maxTokens = fields?.maxCompletionTokens ?? fields?.maxTokens;
|
|
933
936
|
if (this.model === "o1") {
|
|
934
937
|
this.disableStreaming = true;
|
|
935
938
|
}
|
|
@@ -1006,7 +1009,6 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
1006
1009
|
top_p: this.topP,
|
|
1007
1010
|
frequency_penalty: this.frequencyPenalty,
|
|
1008
1011
|
presence_penalty: this.presencePenalty,
|
|
1009
|
-
max_tokens: this.maxTokens === -1 ? undefined : this.maxTokens,
|
|
1010
1012
|
logprobs: this.logprobs,
|
|
1011
1013
|
top_logprobs: this.topLogprobs,
|
|
1012
1014
|
n: this.n,
|
|
@@ -1040,6 +1042,13 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
|
|
|
1040
1042
|
if (reasoningEffort !== undefined) {
|
|
1041
1043
|
params.reasoning_effort = reasoningEffort;
|
|
1042
1044
|
}
|
|
1045
|
+
if (isReasoningModel(params.model)) {
|
|
1046
|
+
params.max_completion_tokens =
|
|
1047
|
+
this.maxTokens === -1 ? undefined : this.maxTokens;
|
|
1048
|
+
}
|
|
1049
|
+
else {
|
|
1050
|
+
params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;
|
|
1051
|
+
}
|
|
1043
1052
|
return params;
|
|
1044
1053
|
}
|
|
1045
1054
|
_convertOpenAIChatCompletionMessageToBaseMessage(message, rawResponse) {
|
package/dist/chat_models.js
CHANGED
|
@@ -51,7 +51,7 @@ export function _convertMessagesToOpenAIParams(messages, model) {
|
|
|
51
51
|
// TODO: Function messages do not support array content, fix cast
|
|
52
52
|
return messages.flatMap((message) => {
|
|
53
53
|
let role = messageToOpenAIRole(message);
|
|
54
|
-
if (role === "system" && model
|
|
54
|
+
if (role === "system" && isReasoningModel(model)) {
|
|
55
55
|
role = "developer";
|
|
56
56
|
}
|
|
57
57
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -107,6 +107,9 @@ function _convertChatOpenAIToolTypeToOpenAITool(tool, fields) {
|
|
|
107
107
|
}
|
|
108
108
|
return _convertToOpenAITool(tool, fields);
|
|
109
109
|
}
|
|
110
|
+
function isReasoningModel(model) {
|
|
111
|
+
return model?.startsWith("o1") || model?.startsWith("o3");
|
|
112
|
+
}
|
|
110
113
|
/**
|
|
111
114
|
* OpenAI chat model integration.
|
|
112
115
|
*
|
|
@@ -913,7 +916,6 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
913
916
|
this.topP = fields?.topP ?? this.topP;
|
|
914
917
|
this.frequencyPenalty = fields?.frequencyPenalty ?? this.frequencyPenalty;
|
|
915
918
|
this.presencePenalty = fields?.presencePenalty ?? this.presencePenalty;
|
|
916
|
-
this.maxTokens = fields?.maxTokens;
|
|
917
919
|
this.logprobs = fields?.logprobs;
|
|
918
920
|
this.topLogprobs = fields?.topLogprobs;
|
|
919
921
|
this.n = fields?.n ?? this.n;
|
|
@@ -925,6 +927,7 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
925
927
|
this.audio = fields?.audio;
|
|
926
928
|
this.modalities = fields?.modalities;
|
|
927
929
|
this.reasoningEffort = fields?.reasoningEffort;
|
|
930
|
+
this.maxTokens = fields?.maxCompletionTokens ?? fields?.maxTokens;
|
|
928
931
|
if (this.model === "o1") {
|
|
929
932
|
this.disableStreaming = true;
|
|
930
933
|
}
|
|
@@ -1001,7 +1004,6 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
1001
1004
|
top_p: this.topP,
|
|
1002
1005
|
frequency_penalty: this.frequencyPenalty,
|
|
1003
1006
|
presence_penalty: this.presencePenalty,
|
|
1004
|
-
max_tokens: this.maxTokens === -1 ? undefined : this.maxTokens,
|
|
1005
1007
|
logprobs: this.logprobs,
|
|
1006
1008
|
top_logprobs: this.topLogprobs,
|
|
1007
1009
|
n: this.n,
|
|
@@ -1035,6 +1037,13 @@ export class ChatOpenAI extends BaseChatModel {
|
|
|
1035
1037
|
if (reasoningEffort !== undefined) {
|
|
1036
1038
|
params.reasoning_effort = reasoningEffort;
|
|
1037
1039
|
}
|
|
1040
|
+
if (isReasoningModel(params.model)) {
|
|
1041
|
+
params.max_completion_tokens =
|
|
1042
|
+
this.maxTokens === -1 ? undefined : this.maxTokens;
|
|
1043
|
+
}
|
|
1044
|
+
else {
|
|
1045
|
+
params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;
|
|
1046
|
+
}
|
|
1038
1047
|
return params;
|
|
1039
1048
|
}
|
|
1040
1049
|
_convertOpenAIChatCompletionMessageToBaseMessage(message, rawResponse) {
|
package/dist/types.d.ts
CHANGED
|
@@ -12,6 +12,12 @@ export declare interface OpenAIBaseInput {
|
|
|
12
12
|
* tokens as possible given the prompt and the model's maximum context size.
|
|
13
13
|
*/
|
|
14
14
|
maxTokens?: number;
|
|
15
|
+
/**
|
|
16
|
+
* Maximum number of tokens to generate in the completion. -1 returns as many
|
|
17
|
+
* tokens as possible given the prompt and the model's maximum context size.
|
|
18
|
+
* Alias for `maxTokens` for reasoning models.
|
|
19
|
+
*/
|
|
20
|
+
maxCompletionTokens?: number;
|
|
15
21
|
/** Total probability mass of tokens to consider at each step */
|
|
16
22
|
topP: number;
|
|
17
23
|
/** Penalizes repeated tokens according to frequency */
|