@langchain/openai 0.6.8 → 1.0.0-alpha.1

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.
Files changed (162) hide show
  1. package/README.md +8 -8
  2. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  3. package/dist/azure/chat_models.cjs +661 -808
  4. package/dist/azure/chat_models.cjs.map +1 -0
  5. package/dist/azure/chat_models.d.cts +449 -0
  6. package/dist/azure/chat_models.d.cts.map +1 -0
  7. package/dist/azure/chat_models.d.ts +32 -28
  8. package/dist/azure/chat_models.d.ts.map +1 -0
  9. package/dist/azure/chat_models.js +660 -804
  10. package/dist/azure/chat_models.js.map +1 -0
  11. package/dist/azure/embeddings.cjs +81 -130
  12. package/dist/azure/embeddings.cjs.map +1 -0
  13. package/dist/azure/embeddings.d.cts +27 -0
  14. package/dist/azure/embeddings.d.cts.map +1 -0
  15. package/dist/azure/embeddings.d.ts +25 -20
  16. package/dist/azure/embeddings.d.ts.map +1 -0
  17. package/dist/azure/embeddings.js +80 -126
  18. package/dist/azure/embeddings.js.map +1 -0
  19. package/dist/azure/llms.cjs +109 -168
  20. package/dist/azure/llms.cjs.map +1 -0
  21. package/dist/azure/llms.d.cts +33 -0
  22. package/dist/azure/llms.d.cts.map +1 -0
  23. package/dist/azure/llms.d.ts +31 -25
  24. package/dist/azure/llms.d.ts.map +1 -0
  25. package/dist/azure/llms.js +108 -164
  26. package/dist/azure/llms.js.map +1 -0
  27. package/dist/chat_models.cjs +1951 -2763
  28. package/dist/chat_models.cjs.map +1 -0
  29. package/dist/chat_models.d.cts +930 -0
  30. package/dist/chat_models.d.cts.map +1 -0
  31. package/dist/chat_models.d.ts +365 -336
  32. package/dist/chat_models.d.ts.map +1 -0
  33. package/dist/chat_models.js +1946 -2753
  34. package/dist/chat_models.js.map +1 -0
  35. package/dist/embeddings.cjs +136 -193
  36. package/dist/embeddings.cjs.map +1 -0
  37. package/dist/embeddings.d.cts +115 -0
  38. package/dist/embeddings.d.cts.map +1 -0
  39. package/dist/embeddings.d.ts +88 -81
  40. package/dist/embeddings.d.ts.map +1 -0
  41. package/dist/embeddings.js +134 -188
  42. package/dist/embeddings.js.map +1 -0
  43. package/dist/index.cjs +47 -34
  44. package/dist/index.d.cts +16 -0
  45. package/dist/index.d.ts +16 -13
  46. package/dist/index.js +17 -13
  47. package/dist/langchain-core/dist/types/_internal.d.cts +11 -0
  48. package/dist/langchain-core/dist/types/_internal.d.cts.map +1 -0
  49. package/dist/langchain-core/dist/types/_internal.d.ts +11 -0
  50. package/dist/langchain-core/dist/types/_internal.d.ts.map +1 -0
  51. package/dist/langchain-core/dist/utils/stream.d.cts +26 -0
  52. package/dist/langchain-core/dist/utils/stream.d.cts.map +1 -0
  53. package/dist/langchain-core/dist/utils/stream.d.ts +26 -0
  54. package/dist/langchain-core/dist/utils/stream.d.ts.map +1 -0
  55. package/dist/llms.cjs +312 -468
  56. package/dist/llms.cjs.map +1 -0
  57. package/dist/llms.d.cts +123 -0
  58. package/dist/llms.d.cts.map +1 -0
  59. package/dist/llms.d.ts +93 -87
  60. package/dist/llms.d.ts.map +1 -0
  61. package/dist/llms.js +309 -462
  62. package/dist/llms.js.map +1 -0
  63. package/dist/tools/custom.cjs +25 -26
  64. package/dist/tools/custom.cjs.map +1 -0
  65. package/dist/tools/custom.d.cts +10 -0
  66. package/dist/tools/custom.d.cts.map +1 -0
  67. package/dist/tools/custom.d.ts +8 -3
  68. package/dist/tools/custom.d.ts.map +1 -0
  69. package/dist/tools/custom.js +24 -23
  70. package/dist/tools/custom.js.map +1 -0
  71. package/dist/tools/dalle.cjs +104 -194
  72. package/dist/tools/dalle.cjs.map +1 -0
  73. package/dist/tools/dalle.d.cts +123 -0
  74. package/dist/tools/dalle.d.cts.map +1 -0
  75. package/dist/tools/dalle.d.ts +111 -104
  76. package/dist/tools/dalle.d.ts.map +1 -0
  77. package/dist/tools/dalle.js +102 -189
  78. package/dist/tools/dalle.js.map +1 -0
  79. package/dist/tools/index.cjs +1 -17
  80. package/dist/tools/index.js +1 -1
  81. package/dist/types.d.cts +263 -0
  82. package/dist/types.d.cts.map +1 -0
  83. package/dist/types.d.ts +244 -234
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/utils/azure.cjs +86 -47
  86. package/dist/utils/azure.cjs.map +1 -0
  87. package/dist/utils/azure.d.cts +76 -0
  88. package/dist/utils/azure.d.cts.map +1 -0
  89. package/dist/utils/azure.d.ts +51 -9
  90. package/dist/utils/azure.d.ts.map +1 -0
  91. package/dist/utils/azure.js +85 -45
  92. package/dist/utils/azure.js.map +1 -0
  93. package/dist/utils/client.cjs +25 -0
  94. package/dist/utils/client.cjs.map +1 -0
  95. package/dist/utils/client.d.cts +5 -0
  96. package/dist/utils/client.d.cts.map +1 -0
  97. package/dist/utils/client.d.ts +5 -0
  98. package/dist/utils/client.d.ts.map +1 -0
  99. package/dist/utils/client.js +24 -0
  100. package/dist/utils/client.js.map +1 -0
  101. package/dist/utils/errors.cjs +9 -8
  102. package/dist/utils/errors.cjs.map +1 -0
  103. package/dist/utils/errors.js +9 -6
  104. package/dist/utils/errors.js.map +1 -0
  105. package/dist/utils/message_inputs.cjs +139 -0
  106. package/dist/utils/message_inputs.cjs.map +1 -0
  107. package/dist/utils/message_inputs.d.cts +9 -0
  108. package/dist/utils/message_inputs.d.cts.map +1 -0
  109. package/dist/utils/message_inputs.d.ts +9 -0
  110. package/dist/utils/message_inputs.d.ts.map +1 -0
  111. package/dist/utils/message_inputs.js +137 -0
  112. package/dist/utils/message_inputs.js.map +1 -0
  113. package/dist/utils/misc.cjs +30 -0
  114. package/dist/utils/misc.cjs.map +1 -0
  115. package/dist/utils/misc.d.cts +9 -0
  116. package/dist/utils/misc.d.cts.map +1 -0
  117. package/dist/utils/misc.d.ts +9 -0
  118. package/dist/utils/misc.d.ts.map +1 -0
  119. package/dist/utils/misc.js +27 -0
  120. package/dist/utils/misc.js.map +1 -0
  121. package/dist/utils/output.cjs +74 -0
  122. package/dist/utils/output.cjs.map +1 -0
  123. package/dist/utils/output.js +72 -0
  124. package/dist/utils/output.js.map +1 -0
  125. package/dist/utils/prompts.cjs +39 -38
  126. package/dist/utils/prompts.cjs.map +1 -0
  127. package/dist/utils/prompts.d.cts +42 -0
  128. package/dist/utils/prompts.d.cts.map +1 -0
  129. package/dist/utils/prompts.d.ts +10 -4
  130. package/dist/utils/prompts.d.ts.map +1 -0
  131. package/dist/utils/prompts.js +40 -36
  132. package/dist/utils/prompts.js.map +1 -0
  133. package/dist/utils/standard.cjs +113 -0
  134. package/dist/utils/standard.cjs.map +1 -0
  135. package/dist/utils/standard.js +111 -0
  136. package/dist/utils/standard.js.map +1 -0
  137. package/dist/utils/tools.cjs +150 -127
  138. package/dist/utils/tools.cjs.map +1 -0
  139. package/dist/utils/tools.d.cts +13 -0
  140. package/dist/utils/tools.d.cts.map +1 -0
  141. package/dist/utils/tools.d.ts +12 -42
  142. package/dist/utils/tools.d.ts.map +1 -0
  143. package/dist/utils/tools.js +146 -123
  144. package/dist/utils/tools.js.map +1 -0
  145. package/package.json +33 -41
  146. package/dist/tools/index.d.ts +0 -1
  147. package/dist/types.cjs +0 -2
  148. package/dist/types.js +0 -1
  149. package/dist/utils/errors.d.ts +0 -2
  150. package/dist/utils/headers.cjs +0 -39
  151. package/dist/utils/headers.d.ts +0 -8
  152. package/dist/utils/headers.js +0 -35
  153. package/dist/utils/openai-format-fndef.cjs +0 -80
  154. package/dist/utils/openai-format-fndef.d.ts +0 -44
  155. package/dist/utils/openai-format-fndef.js +0 -77
  156. package/dist/utils/openai.cjs +0 -127
  157. package/dist/utils/openai.d.ts +0 -15
  158. package/dist/utils/openai.js +0 -119
  159. package/index.cjs +0 -1
  160. package/index.d.cts +0 -1
  161. package/index.d.ts +0 -1
  162. package/index.js +0 -1
@@ -1,820 +1,673 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AzureChatOpenAI = void 0;
4
- const openai_1 = require("openai");
5
- const env_1 = require("@langchain/core/utils/env");
6
- const chat_models_js_1 = require("../chat_models.cjs");
7
- const azure_js_1 = require("../utils/azure.cjs");
8
- const headers_js_1 = require("../utils/headers.cjs");
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_azure = require('../utils/azure.cjs');
3
+ const require_chat_models = require('../chat_models.cjs');
4
+ const openai = require_rolldown_runtime.__toESM(require("openai"));
5
+ const __langchain_core_utils_env = require_rolldown_runtime.__toESM(require("@langchain/core/utils/env"));
6
+
7
+ //#region src/azure/chat_models.ts
9
8
  const AZURE_ALIASES = {
10
- openAIApiKey: "openai_api_key",
11
- openAIApiVersion: "openai_api_version",
12
- openAIBasePath: "openai_api_base",
13
- deploymentName: "deployment_name",
14
- azureOpenAIEndpoint: "azure_endpoint",
15
- azureOpenAIApiVersion: "openai_api_version",
16
- azureOpenAIBasePath: "openai_api_base",
17
- azureOpenAIApiDeploymentName: "deployment_name",
18
- };
19
- const AZURE_SECRETS = {
20
- azureOpenAIApiKey: "AZURE_OPENAI_API_KEY",
9
+ openAIApiKey: "openai_api_key",
10
+ openAIApiVersion: "openai_api_version",
11
+ openAIBasePath: "openai_api_base",
12
+ deploymentName: "deployment_name",
13
+ azureOpenAIEndpoint: "azure_endpoint",
14
+ azureOpenAIApiVersion: "openai_api_version",
15
+ azureOpenAIBasePath: "openai_api_base",
16
+ azureOpenAIApiDeploymentName: "deployment_name"
21
17
  };
18
+ const AZURE_SECRETS = { azureOpenAIApiKey: "AZURE_OPENAI_API_KEY" };
22
19
  const AZURE_SERIALIZABLE_KEYS = [
23
- "azureOpenAIApiKey",
24
- "azureOpenAIApiVersion",
25
- "azureOpenAIBasePath",
26
- "azureOpenAIEndpoint",
27
- "azureOpenAIApiInstanceName",
28
- "azureOpenAIApiDeploymentName",
29
- "deploymentName",
30
- "openAIApiKey",
31
- "openAIApiVersion",
20
+ "azureOpenAIApiKey",
21
+ "azureOpenAIApiVersion",
22
+ "azureOpenAIBasePath",
23
+ "azureOpenAIEndpoint",
24
+ "azureOpenAIApiInstanceName",
25
+ "azureOpenAIApiDeploymentName",
26
+ "deploymentName",
27
+ "openAIApiKey",
28
+ "openAIApiVersion"
32
29
  ];
33
30
  function _constructAzureFields(fields) {
34
- this.azureOpenAIApiKey =
35
- fields?.azureOpenAIApiKey ??
36
- fields?.openAIApiKey ??
37
- fields?.apiKey ??
38
- (0, env_1.getEnvironmentVariable)("AZURE_OPENAI_API_KEY");
39
- this.azureOpenAIApiInstanceName =
40
- fields?.azureOpenAIApiInstanceName ??
41
- (0, env_1.getEnvironmentVariable)("AZURE_OPENAI_API_INSTANCE_NAME");
42
- this.azureOpenAIApiDeploymentName =
43
- fields?.azureOpenAIApiDeploymentName ??
44
- fields?.deploymentName ??
45
- (0, env_1.getEnvironmentVariable)("AZURE_OPENAI_API_DEPLOYMENT_NAME");
46
- this.azureOpenAIApiVersion =
47
- fields?.azureOpenAIApiVersion ??
48
- fields?.openAIApiVersion ??
49
- (0, env_1.getEnvironmentVariable)("AZURE_OPENAI_API_VERSION");
50
- this.azureOpenAIBasePath =
51
- fields?.azureOpenAIBasePath ??
52
- (0, env_1.getEnvironmentVariable)("AZURE_OPENAI_BASE_PATH");
53
- this.azureOpenAIEndpoint =
54
- fields?.azureOpenAIEndpoint ??
55
- (0, env_1.getEnvironmentVariable)("AZURE_OPENAI_ENDPOINT");
56
- this.azureADTokenProvider = fields?.azureADTokenProvider;
57
- if (!this.azureOpenAIApiKey && !this.apiKey && !this.azureADTokenProvider) {
58
- throw new Error("Azure OpenAI API key or Token Provider not found");
59
- }
31
+ this.azureOpenAIApiKey = fields?.azureOpenAIApiKey ?? fields?.openAIApiKey ?? fields?.apiKey ?? (0, __langchain_core_utils_env.getEnvironmentVariable)("AZURE_OPENAI_API_KEY");
32
+ this.azureOpenAIApiInstanceName = fields?.azureOpenAIApiInstanceName ?? (0, __langchain_core_utils_env.getEnvironmentVariable)("AZURE_OPENAI_API_INSTANCE_NAME");
33
+ this.azureOpenAIApiDeploymentName = fields?.azureOpenAIApiDeploymentName ?? fields?.deploymentName ?? (0, __langchain_core_utils_env.getEnvironmentVariable)("AZURE_OPENAI_API_DEPLOYMENT_NAME");
34
+ this.azureOpenAIApiVersion = fields?.azureOpenAIApiVersion ?? fields?.openAIApiVersion ?? (0, __langchain_core_utils_env.getEnvironmentVariable)("AZURE_OPENAI_API_VERSION");
35
+ this.azureOpenAIBasePath = fields?.azureOpenAIBasePath ?? (0, __langchain_core_utils_env.getEnvironmentVariable)("AZURE_OPENAI_BASE_PATH");
36
+ this.azureOpenAIEndpoint = fields?.azureOpenAIEndpoint ?? (0, __langchain_core_utils_env.getEnvironmentVariable)("AZURE_OPENAI_ENDPOINT");
37
+ this.azureADTokenProvider = fields?.azureADTokenProvider;
38
+ if (!this.azureOpenAIApiKey && !this.apiKey && !this.azureADTokenProvider) throw new Error("Azure OpenAI API key or Token Provider not found");
60
39
  }
61
40
  function _getAzureClientOptions(options) {
62
- if (!this.client) {
63
- const openAIEndpointConfig = {
64
- azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,
65
- azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,
66
- azureOpenAIApiKey: this.azureOpenAIApiKey,
67
- azureOpenAIBasePath: this.azureOpenAIBasePath,
68
- azureADTokenProvider: this.azureADTokenProvider,
69
- baseURL: this.clientConfig.baseURL,
70
- azureOpenAIEndpoint: this.azureOpenAIEndpoint,
71
- };
72
- const endpoint = (0, azure_js_1.getEndpoint)(openAIEndpointConfig);
73
- const params = {
74
- ...this.clientConfig,
75
- baseURL: endpoint,
76
- timeout: this.timeout,
77
- maxRetries: 0,
78
- };
79
- if (!this.azureADTokenProvider) {
80
- params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;
81
- }
82
- if (!params.baseURL) {
83
- delete params.baseURL;
84
- }
85
- let env = (0, env_1.getEnv)();
86
- if (env === "node" || env === "deno") {
87
- env = `(${env}/${process.version}; ${process.platform}; ${process.arch})`;
88
- }
89
- const defaultHeaders = (0, headers_js_1.normalizeHeaders)(params.defaultHeaders);
90
- params.defaultHeaders = {
91
- ...params.defaultHeaders,
92
- "User-Agent": defaultHeaders["User-Agent"]
93
- ? `langchainjs-azure-openai/2.0.0 (${env})${defaultHeaders["User-Agent"]}`
94
- : `langchainjs-azure-openai/2.0.0 (${env})`,
95
- };
96
- this.client = new openai_1.AzureOpenAI({
97
- apiVersion: this.azureOpenAIApiVersion,
98
- azureADTokenProvider: this.azureADTokenProvider,
99
- deployment: this.azureOpenAIApiDeploymentName,
100
- ...params,
101
- });
102
- }
103
- const requestOptions = {
104
- ...this.clientConfig,
105
- ...options,
106
- };
107
- if (this.azureOpenAIApiKey) {
108
- requestOptions.headers = {
109
- "api-key": this.azureOpenAIApiKey,
110
- ...requestOptions.headers,
111
- };
112
- requestOptions.query = {
113
- "api-version": this.azureOpenAIApiVersion,
114
- ...requestOptions.query,
115
- };
116
- }
117
- return requestOptions;
41
+ if (!this.client) {
42
+ const openAIEndpointConfig = {
43
+ azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,
44
+ azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,
45
+ azureOpenAIApiKey: this.azureOpenAIApiKey,
46
+ azureOpenAIBasePath: this.azureOpenAIBasePath,
47
+ azureADTokenProvider: this.azureADTokenProvider,
48
+ baseURL: this.clientConfig.baseURL,
49
+ azureOpenAIEndpoint: this.azureOpenAIEndpoint
50
+ };
51
+ const endpoint = require_azure.getEndpoint(openAIEndpointConfig);
52
+ const params = {
53
+ ...this.clientConfig,
54
+ baseURL: endpoint,
55
+ timeout: this.timeout,
56
+ maxRetries: 0
57
+ };
58
+ if (!this.azureADTokenProvider) params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;
59
+ if (!params.baseURL) delete params.baseURL;
60
+ let env = (0, __langchain_core_utils_env.getEnv)();
61
+ if (env === "node" || env === "deno") env = `(${env}/${process.version}; ${process.platform}; ${process.arch})`;
62
+ const defaultHeaders = require_azure.normalizeHeaders(params.defaultHeaders);
63
+ params.defaultHeaders = {
64
+ ...params.defaultHeaders,
65
+ "User-Agent": defaultHeaders["User-Agent"] ? `langchainjs-azure-openai/2.0.0 (${env})${defaultHeaders["User-Agent"]}` : `langchainjs-azure-openai/2.0.0 (${env})`
66
+ };
67
+ this.client = new openai.AzureOpenAI({
68
+ apiVersion: this.azureOpenAIApiVersion,
69
+ azureADTokenProvider: this.azureADTokenProvider,
70
+ deployment: this.azureOpenAIApiDeploymentName,
71
+ ...params
72
+ });
73
+ }
74
+ const requestOptions = {
75
+ ...this.clientConfig,
76
+ ...options
77
+ };
78
+ if (this.azureOpenAIApiKey) {
79
+ requestOptions.headers = {
80
+ "api-key": this.azureOpenAIApiKey,
81
+ ...requestOptions.headers
82
+ };
83
+ requestOptions.query = {
84
+ "api-version": this.azureOpenAIApiVersion,
85
+ ...requestOptions.query
86
+ };
87
+ }
88
+ return requestOptions;
118
89
  }
119
90
  function _serializeAzureChat(input) {
120
- const json = input;
121
- function isRecord(obj) {
122
- return typeof obj === "object" && obj != null;
123
- }
124
- if (isRecord(json) && isRecord(json.kwargs)) {
125
- delete json.kwargs.azure_openai_base_path;
126
- delete json.kwargs.azure_openai_api_deployment_name;
127
- delete json.kwargs.azure_openai_api_key;
128
- delete json.kwargs.azure_openai_api_version;
129
- delete json.kwargs.azure_open_ai_base_path;
130
- if (!json.kwargs.azure_endpoint && this.azureOpenAIEndpoint) {
131
- json.kwargs.azure_endpoint = this.azureOpenAIEndpoint;
132
- }
133
- if (!json.kwargs.azure_endpoint && this.azureOpenAIBasePath) {
134
- const parts = this.azureOpenAIBasePath.split("/openai/deployments/");
135
- if (parts.length === 2 && parts[0].startsWith("http")) {
136
- const [endpoint] = parts;
137
- json.kwargs.azure_endpoint = endpoint;
138
- }
139
- }
140
- if (!json.kwargs.azure_endpoint && this.azureOpenAIApiInstanceName) {
141
- json.kwargs.azure_endpoint = `https://${this.azureOpenAIApiInstanceName}.openai.azure.com/`;
142
- }
143
- if (!json.kwargs.deployment_name && this.azureOpenAIApiDeploymentName) {
144
- json.kwargs.deployment_name = this.azureOpenAIApiDeploymentName;
145
- }
146
- if (!json.kwargs.deployment_name && this.azureOpenAIBasePath) {
147
- const parts = this.azureOpenAIBasePath.split("/openai/deployments/");
148
- if (parts.length === 2) {
149
- const [, deployment] = parts;
150
- json.kwargs.deployment_name = deployment;
151
- }
152
- }
153
- if (json.kwargs.azure_endpoint &&
154
- json.kwargs.deployment_name &&
155
- json.kwargs.openai_api_base) {
156
- delete json.kwargs.openai_api_base;
157
- }
158
- if (json.kwargs.azure_openai_api_instance_name &&
159
- json.kwargs.azure_endpoint) {
160
- delete json.kwargs.azure_openai_api_instance_name;
161
- }
162
- }
163
- return json;
164
- }
165
- class AzureChatOpenAIResponses extends chat_models_js_1.ChatOpenAIResponses {
166
- _llmType() {
167
- return "azure_openai";
168
- }
169
- get lc_aliases() {
170
- return {
171
- ...super.lc_aliases,
172
- ...AZURE_ALIASES,
173
- };
174
- }
175
- get lc_secrets() {
176
- return {
177
- ...super.lc_secrets,
178
- ...AZURE_SECRETS,
179
- };
180
- }
181
- get lc_serializable_keys() {
182
- return [...super.lc_serializable_keys, ...AZURE_SERIALIZABLE_KEYS];
183
- }
184
- getLsParams(options) {
185
- const params = super.getLsParams(options);
186
- params.ls_provider = "azure";
187
- return params;
188
- }
189
- constructor(fields) {
190
- super(fields);
191
- Object.defineProperty(this, "azureOpenAIApiVersion", {
192
- enumerable: true,
193
- configurable: true,
194
- writable: true,
195
- value: void 0
196
- });
197
- Object.defineProperty(this, "azureOpenAIApiKey", {
198
- enumerable: true,
199
- configurable: true,
200
- writable: true,
201
- value: void 0
202
- });
203
- Object.defineProperty(this, "azureADTokenProvider", {
204
- enumerable: true,
205
- configurable: true,
206
- writable: true,
207
- value: void 0
208
- });
209
- Object.defineProperty(this, "azureOpenAIApiInstanceName", {
210
- enumerable: true,
211
- configurable: true,
212
- writable: true,
213
- value: void 0
214
- });
215
- Object.defineProperty(this, "azureOpenAIApiDeploymentName", {
216
- enumerable: true,
217
- configurable: true,
218
- writable: true,
219
- value: void 0
220
- });
221
- Object.defineProperty(this, "azureOpenAIBasePath", {
222
- enumerable: true,
223
- configurable: true,
224
- writable: true,
225
- value: void 0
226
- });
227
- Object.defineProperty(this, "azureOpenAIEndpoint", {
228
- enumerable: true,
229
- configurable: true,
230
- writable: true,
231
- value: void 0
232
- });
233
- _constructAzureFields.call(this, fields);
234
- }
235
- _getClientOptions(options) {
236
- return _getAzureClientOptions.call(this, options);
237
- }
238
- toJSON() {
239
- return _serializeAzureChat.call(this, super.toJSON());
240
- }
241
- }
242
- class AzureChatOpenAICompletions extends chat_models_js_1.ChatOpenAICompletions {
243
- _llmType() {
244
- return "azure_openai";
245
- }
246
- get lc_aliases() {
247
- return {
248
- ...super.lc_aliases,
249
- ...AZURE_ALIASES,
250
- };
251
- }
252
- get lc_secrets() {
253
- return {
254
- ...super.lc_secrets,
255
- ...AZURE_SECRETS,
256
- };
257
- }
258
- get lc_serializable_keys() {
259
- return [...super.lc_serializable_keys, ...AZURE_SERIALIZABLE_KEYS];
260
- }
261
- getLsParams(options) {
262
- const params = super.getLsParams(options);
263
- params.ls_provider = "azure";
264
- return params;
265
- }
266
- constructor(fields) {
267
- super(fields);
268
- Object.defineProperty(this, "azureOpenAIApiVersion", {
269
- enumerable: true,
270
- configurable: true,
271
- writable: true,
272
- value: void 0
273
- });
274
- Object.defineProperty(this, "azureOpenAIApiKey", {
275
- enumerable: true,
276
- configurable: true,
277
- writable: true,
278
- value: void 0
279
- });
280
- Object.defineProperty(this, "azureADTokenProvider", {
281
- enumerable: true,
282
- configurable: true,
283
- writable: true,
284
- value: void 0
285
- });
286
- Object.defineProperty(this, "azureOpenAIApiInstanceName", {
287
- enumerable: true,
288
- configurable: true,
289
- writable: true,
290
- value: void 0
291
- });
292
- Object.defineProperty(this, "azureOpenAIApiDeploymentName", {
293
- enumerable: true,
294
- configurable: true,
295
- writable: true,
296
- value: void 0
297
- });
298
- Object.defineProperty(this, "azureOpenAIBasePath", {
299
- enumerable: true,
300
- configurable: true,
301
- writable: true,
302
- value: void 0
303
- });
304
- Object.defineProperty(this, "azureOpenAIEndpoint", {
305
- enumerable: true,
306
- configurable: true,
307
- writable: true,
308
- value: void 0
309
- });
310
- _constructAzureFields.call(this, fields);
311
- }
312
- _getClientOptions(options) {
313
- return _getAzureClientOptions.call(this, options);
314
- }
315
- toJSON() {
316
- return _serializeAzureChat.call(this, super.toJSON());
317
- }
91
+ const json = input;
92
+ function isRecord(obj) {
93
+ return typeof obj === "object" && obj != null;
94
+ }
95
+ if (isRecord(json) && isRecord(json.kwargs)) {
96
+ delete json.kwargs.azure_openai_base_path;
97
+ delete json.kwargs.azure_openai_api_deployment_name;
98
+ delete json.kwargs.azure_openai_api_key;
99
+ delete json.kwargs.azure_openai_api_version;
100
+ delete json.kwargs.azure_open_ai_base_path;
101
+ if (!json.kwargs.azure_endpoint && this.azureOpenAIEndpoint) json.kwargs.azure_endpoint = this.azureOpenAIEndpoint;
102
+ if (!json.kwargs.azure_endpoint && this.azureOpenAIBasePath) {
103
+ const parts = this.azureOpenAIBasePath.split("/openai/deployments/");
104
+ if (parts.length === 2 && parts[0].startsWith("http")) {
105
+ const [endpoint] = parts;
106
+ json.kwargs.azure_endpoint = endpoint;
107
+ }
108
+ }
109
+ if (!json.kwargs.azure_endpoint && this.azureOpenAIApiInstanceName) json.kwargs.azure_endpoint = `https://${this.azureOpenAIApiInstanceName}.openai.azure.com/`;
110
+ if (!json.kwargs.deployment_name && this.azureOpenAIApiDeploymentName) json.kwargs.deployment_name = this.azureOpenAIApiDeploymentName;
111
+ if (!json.kwargs.deployment_name && this.azureOpenAIBasePath) {
112
+ const parts = this.azureOpenAIBasePath.split("/openai/deployments/");
113
+ if (parts.length === 2) {
114
+ const [, deployment] = parts;
115
+ json.kwargs.deployment_name = deployment;
116
+ }
117
+ }
118
+ if (json.kwargs.azure_endpoint && json.kwargs.deployment_name && json.kwargs.openai_api_base) delete json.kwargs.openai_api_base;
119
+ if (json.kwargs.azure_openai_api_instance_name && json.kwargs.azure_endpoint) delete json.kwargs.azure_openai_api_instance_name;
120
+ }
121
+ return json;
318
122
  }
123
+ var AzureChatOpenAIResponses = class extends require_chat_models.ChatOpenAIResponses {
124
+ azureOpenAIApiVersion;
125
+ azureOpenAIApiKey;
126
+ azureADTokenProvider;
127
+ azureOpenAIApiInstanceName;
128
+ azureOpenAIApiDeploymentName;
129
+ azureOpenAIBasePath;
130
+ azureOpenAIEndpoint;
131
+ _llmType() {
132
+ return "azure_openai";
133
+ }
134
+ get lc_aliases() {
135
+ return {
136
+ ...super.lc_aliases,
137
+ ...AZURE_ALIASES
138
+ };
139
+ }
140
+ get lc_secrets() {
141
+ return {
142
+ ...super.lc_secrets,
143
+ ...AZURE_SECRETS
144
+ };
145
+ }
146
+ get lc_serializable_keys() {
147
+ return [...super.lc_serializable_keys, ...AZURE_SERIALIZABLE_KEYS];
148
+ }
149
+ getLsParams(options) {
150
+ const params = super.getLsParams(options);
151
+ params.ls_provider = "azure";
152
+ return params;
153
+ }
154
+ constructor(fields) {
155
+ super(fields);
156
+ _constructAzureFields.call(this, fields);
157
+ }
158
+ _getClientOptions(options) {
159
+ return _getAzureClientOptions.call(this, options);
160
+ }
161
+ toJSON() {
162
+ return _serializeAzureChat.call(this, super.toJSON());
163
+ }
164
+ };
165
+ var AzureChatOpenAICompletions = class extends require_chat_models.ChatOpenAICompletions {
166
+ azureOpenAIApiVersion;
167
+ azureOpenAIApiKey;
168
+ azureADTokenProvider;
169
+ azureOpenAIApiInstanceName;
170
+ azureOpenAIApiDeploymentName;
171
+ azureOpenAIBasePath;
172
+ azureOpenAIEndpoint;
173
+ _llmType() {
174
+ return "azure_openai";
175
+ }
176
+ get lc_aliases() {
177
+ return {
178
+ ...super.lc_aliases,
179
+ ...AZURE_ALIASES
180
+ };
181
+ }
182
+ get lc_secrets() {
183
+ return {
184
+ ...super.lc_secrets,
185
+ ...AZURE_SECRETS
186
+ };
187
+ }
188
+ get lc_serializable_keys() {
189
+ return [...super.lc_serializable_keys, ...AZURE_SERIALIZABLE_KEYS];
190
+ }
191
+ getLsParams(options) {
192
+ const params = super.getLsParams(options);
193
+ params.ls_provider = "azure";
194
+ return params;
195
+ }
196
+ constructor(fields) {
197
+ super(fields);
198
+ _constructAzureFields.call(this, fields);
199
+ }
200
+ _getClientOptions(options) {
201
+ return _getAzureClientOptions.call(this, options);
202
+ }
203
+ toJSON() {
204
+ return _serializeAzureChat.call(this, super.toJSON());
205
+ }
206
+ };
319
207
  /**
320
- * Azure OpenAI chat model integration.
321
- *
322
- * Setup:
323
- * Install `@langchain/openai` and set the following environment variables:
324
- *
325
- * ```bash
326
- * npm install @langchain/openai
327
- * export AZURE_OPENAI_API_KEY="your-api-key"
328
- * export AZURE_OPENAI_API_DEPLOYMENT_NAME="your-deployment-name"
329
- * export AZURE_OPENAI_API_VERSION="your-version"
330
- * export AZURE_OPENAI_BASE_PATH="your-base-path"
331
- * ```
332
- *
333
- * ## [Constructor args](https://api.js.langchain.com/classes/langchain_openai.AzureChatOpenAI.html#constructor)
334
- *
335
- * ## [Runtime args](https://api.js.langchain.com/interfaces/langchain_openai.ChatOpenAICallOptions.html)
336
- *
337
- * Runtime args can be passed as the second argument to any of the base runnable methods `.invoke`. `.stream`, `.batch`, etc.
338
- * They can also be passed via `.withConfig`, or the second arg in `.bindTools`, like shown in the examples below:
339
- *
340
- * ```typescript
341
- * // When calling `.withConfig`, call options should be passed via the first argument
342
- * const llmWithArgsBound = llm.withConfig({
343
- * stop: ["\n"],
344
- * tools: [...],
345
- * });
346
- *
347
- * // When calling `.bindTools`, call options should be passed via the second argument
348
- * const llmWithTools = llm.bindTools(
349
- * [...],
350
- * {
351
- * tool_choice: "auto",
352
- * }
353
- * );
354
- * ```
355
- *
356
- * ## Examples
357
- *
358
- * <details open>
359
- * <summary><strong>Instantiate</strong></summary>
360
- *
361
- * ```typescript
362
- * import { AzureChatOpenAI } from '@langchain/openai';
363
- *
364
- * const llm = new AzureChatOpenAI({
365
- * azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY, // In Node.js defaults to process.env.AZURE_OPENAI_API_KEY
366
- * azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME, // In Node.js defaults to process.env.AZURE_OPENAI_API_INSTANCE_NAME
367
- * azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME, // In Node.js defaults to process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME
368
- * azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION, // In Node.js defaults to process.env.AZURE_OPENAI_API_VERSION
369
- * temperature: 0,
370
- * maxTokens: undefined,
371
- * timeout: undefined,
372
- * maxRetries: 2,
373
- * // apiKey: "...",
374
- * // baseUrl: "...",
375
- * // other params...
376
- * });
377
- * ```
378
- * </details>
379
- *
380
- * <br />
381
- *
382
- * <details>
383
- * <summary><strong>Invoking</strong></summary>
384
- *
385
- * ```typescript
386
- * const input = `Translate "I love programming" into French.`;
387
- *
388
- * // Models also accept a list of chat messages or a formatted prompt
389
- * const result = await llm.invoke(input);
390
- * console.log(result);
391
- * ```
392
- *
393
- * ```txt
394
- * AIMessage {
395
- * "id": "chatcmpl-9u4Mpu44CbPjwYFkTbeoZgvzB00Tz",
396
- * "content": "J'adore la programmation.",
397
- * "response_metadata": {
398
- * "tokenUsage": {
399
- * "completionTokens": 5,
400
- * "promptTokens": 28,
401
- * "totalTokens": 33
402
- * },
403
- * "finish_reason": "stop",
404
- * "system_fingerprint": "fp_3aa7262c27"
405
- * },
406
- * "usage_metadata": {
407
- * "input_tokens": 28,
408
- * "output_tokens": 5,
409
- * "total_tokens": 33
410
- * }
411
- * }
412
- * ```
413
- * </details>
414
- *
415
- * <br />
416
- *
417
- * <details>
418
- * <summary><strong>Streaming Chunks</strong></summary>
419
- *
420
- * ```typescript
421
- * for await (const chunk of await llm.stream(input)) {
422
- * console.log(chunk);
423
- * }
424
- * ```
425
- *
426
- * ```txt
427
- * AIMessageChunk {
428
- * "id": "chatcmpl-9u4NWB7yUeHCKdLr6jP3HpaOYHTqs",
429
- * "content": ""
430
- * }
431
- * AIMessageChunk {
432
- * "content": "J"
433
- * }
434
- * AIMessageChunk {
435
- * "content": "'adore"
436
- * }
437
- * AIMessageChunk {
438
- * "content": " la"
439
- * }
440
- * AIMessageChunk {
441
- * "content": " programmation",,
442
- * }
443
- * AIMessageChunk {
444
- * "content": ".",,
445
- * }
446
- * AIMessageChunk {
447
- * "content": "",
448
- * "response_metadata": {
449
- * "finish_reason": "stop",
450
- * "system_fingerprint": "fp_c9aa9c0491"
451
- * },
452
- * }
453
- * AIMessageChunk {
454
- * "content": "",
455
- * "usage_metadata": {
456
- * "input_tokens": 28,
457
- * "output_tokens": 5,
458
- * "total_tokens": 33
459
- * }
460
- * }
461
- * ```
462
- * </details>
463
- *
464
- * <br />
465
- *
466
- * <details>
467
- * <summary><strong>Aggregate Streamed Chunks</strong></summary>
468
- *
469
- * ```typescript
470
- * import { AIMessageChunk } from '@langchain/core/messages';
471
- * import { concat } from '@langchain/core/utils/stream';
472
- *
473
- * const stream = await llm.stream(input);
474
- * let full: AIMessageChunk | undefined;
475
- * for await (const chunk of stream) {
476
- * full = !full ? chunk : concat(full, chunk);
477
- * }
478
- * console.log(full);
479
- * ```
480
- *
481
- * ```txt
482
- * AIMessageChunk {
483
- * "id": "chatcmpl-9u4PnX6Fy7OmK46DASy0bH6cxn5Xu",
484
- * "content": "J'adore la programmation.",
485
- * "response_metadata": {
486
- * "prompt": 0,
487
- * "completion": 0,
488
- * "finish_reason": "stop",
489
- * },
490
- * "usage_metadata": {
491
- * "input_tokens": 28,
492
- * "output_tokens": 5,
493
- * "total_tokens": 33
494
- * }
495
- * }
496
- * ```
497
- * </details>
498
- *
499
- * <br />
500
- *
501
- * <details>
502
- * <summary><strong>Bind tools</strong></summary>
503
- *
504
- * ```typescript
505
- * import { z } from 'zod';
506
- *
507
- * const GetWeather = {
508
- * name: "GetWeather",
509
- * description: "Get the current weather in a given location",
510
- * schema: z.object({
511
- * location: z.string().describe("The city and state, e.g. San Francisco, CA")
512
- * }),
513
- * }
514
- *
515
- * const GetPopulation = {
516
- * name: "GetPopulation",
517
- * description: "Get the current population in a given location",
518
- * schema: z.object({
519
- * location: z.string().describe("The city and state, e.g. San Francisco, CA")
520
- * }),
521
- * }
522
- *
523
- * const llmWithTools = llm.bindTools([GetWeather, GetPopulation]);
524
- * const aiMsg = await llmWithTools.invoke(
525
- * "Which city is hotter today and which is bigger: LA or NY?"
526
- * );
527
- * console.log(aiMsg.tool_calls);
528
- * ```
529
- *
530
- * ```txt
531
- * [
532
- * {
533
- * name: 'GetWeather',
534
- * args: { location: 'Los Angeles, CA' },
535
- * type: 'tool_call',
536
- * id: 'call_uPU4FiFzoKAtMxfmPnfQL6UK'
537
- * },
538
- * {
539
- * name: 'GetWeather',
540
- * args: { location: 'New York, NY' },
541
- * type: 'tool_call',
542
- * id: 'call_UNkEwuQsHrGYqgDQuH9nPAtX'
543
- * },
544
- * {
545
- * name: 'GetPopulation',
546
- * args: { location: 'Los Angeles, CA' },
547
- * type: 'tool_call',
548
- * id: 'call_kL3OXxaq9OjIKqRTpvjaCH14'
549
- * },
550
- * {
551
- * name: 'GetPopulation',
552
- * args: { location: 'New York, NY' },
553
- * type: 'tool_call',
554
- * id: 'call_s9KQB1UWj45LLGaEnjz0179q'
555
- * }
556
- * ]
557
- * ```
558
- * </details>
559
- *
560
- * <br />
561
- *
562
- * <details>
563
- * <summary><strong>Structured Output</strong></summary>
564
- *
565
- * ```typescript
566
- * import { z } from 'zod';
567
- *
568
- * const Joke = z.object({
569
- * setup: z.string().describe("The setup of the joke"),
570
- * punchline: z.string().describe("The punchline to the joke"),
571
- * rating: z.number().nullable().describe("How funny the joke is, from 1 to 10")
572
- * }).describe('Joke to tell user.');
573
- *
574
- * const structuredLlm = llm.withStructuredOutput(Joke, { name: "Joke" });
575
- * const jokeResult = await structuredLlm.invoke("Tell me a joke about cats");
576
- * console.log(jokeResult);
577
- * ```
578
- *
579
- * ```txt
580
- * {
581
- * setup: 'Why was the cat sitting on the computer?',
582
- * punchline: 'Because it wanted to keep an eye on the mouse!',
583
- * rating: 7
584
- * }
585
- * ```
586
- * </details>
587
- *
588
- * <br />
589
- *
590
- * <details>
591
- * <summary><strong>JSON Object Response Format</strong></summary>
592
- *
593
- * ```typescript
594
- * const jsonLlm = llm.withConfig({ response_format: { type: "json_object" } });
595
- * const jsonLlmAiMsg = await jsonLlm.invoke(
596
- * "Return a JSON object with key 'randomInts' and a value of 10 random ints in [0-99]"
597
- * );
598
- * console.log(jsonLlmAiMsg.content);
599
- * ```
600
- *
601
- * ```txt
602
- * {
603
- * "randomInts": [23, 87, 45, 12, 78, 34, 56, 90, 11, 67]
604
- * }
605
- * ```
606
- * </details>
607
- *
608
- * <br />
609
- *
610
- * <details>
611
- * <summary><strong>Multimodal</strong></summary>
612
- *
613
- * ```typescript
614
- * import { HumanMessage } from '@langchain/core/messages';
615
- *
616
- * const imageUrl = "https://example.com/image.jpg";
617
- * const imageData = await fetch(imageUrl).then(res => res.arrayBuffer());
618
- * const base64Image = Buffer.from(imageData).toString('base64');
619
- *
620
- * const message = new HumanMessage({
621
- * content: [
622
- * { type: "text", text: "describe the weather in this image" },
623
- * {
624
- * type: "image_url",
625
- * image_url: { url: `data:image/jpeg;base64,${base64Image}` },
626
- * },
627
- * ]
628
- * });
629
- *
630
- * const imageDescriptionAiMsg = await llm.invoke([message]);
631
- * console.log(imageDescriptionAiMsg.content);
632
- * ```
633
- *
634
- * ```txt
635
- * The weather in the image appears to be clear and sunny. The sky is mostly blue with a few scattered white clouds, indicating fair weather. The bright sunlight is casting shadows on the green, grassy hill, suggesting it is a pleasant day with good visibility. There are no signs of rain or stormy conditions.
636
- * ```
637
- * </details>
638
- *
639
- * <br />
640
- *
641
- * <details>
642
- * <summary><strong>Usage Metadata</strong></summary>
643
- *
644
- * ```typescript
645
- * const aiMsgForMetadata = await llm.invoke(input);
646
- * console.log(aiMsgForMetadata.usage_metadata);
647
- * ```
648
- *
649
- * ```txt
650
- * { input_tokens: 28, output_tokens: 5, total_tokens: 33 }
651
- * ```
652
- * </details>
653
- *
654
- * <br />
655
- *
656
- * <details>
657
- * <summary><strong>Logprobs</strong></summary>
658
- *
659
- * ```typescript
660
- * const logprobsLlm = new ChatOpenAI({ model: "gpt-4o-mini", logprobs: true });
661
- * const aiMsgForLogprobs = await logprobsLlm.invoke(input);
662
- * console.log(aiMsgForLogprobs.response_metadata.logprobs);
663
- * ```
664
- *
665
- * ```txt
666
- * {
667
- * content: [
668
- * {
669
- * token: 'J',
670
- * logprob: -0.000050616763,
671
- * bytes: [Array],
672
- * top_logprobs: []
673
- * },
674
- * {
675
- * token: "'",
676
- * logprob: -0.01868736,
677
- * bytes: [Array],
678
- * top_logprobs: []
679
- * },
680
- * {
681
- * token: 'ad',
682
- * logprob: -0.0000030545007,
683
- * bytes: [Array],
684
- * top_logprobs: []
685
- * },
686
- * { token: 'ore', logprob: 0, bytes: [Array], top_logprobs: [] },
687
- * {
688
- * token: ' la',
689
- * logprob: -0.515404,
690
- * bytes: [Array],
691
- * top_logprobs: []
692
- * },
693
- * {
694
- * token: ' programm',
695
- * logprob: -0.0000118755715,
696
- * bytes: [Array],
697
- * top_logprobs: []
698
- * },
699
- * { token: 'ation', logprob: 0, bytes: [Array], top_logprobs: [] },
700
- * {
701
- * token: '.',
702
- * logprob: -0.0000037697225,
703
- * bytes: [Array],
704
- * top_logprobs: []
705
- * }
706
- * ],
707
- * refusal: null
708
- * }
709
- * ```
710
- * </details>
711
- *
712
- * <br />
713
- *
714
- * <details>
715
- * <summary><strong>Response Metadata</strong></summary>
716
- *
717
- * ```typescript
718
- * const aiMsgForResponseMetadata = await llm.invoke(input);
719
- * console.log(aiMsgForResponseMetadata.response_metadata);
720
- * ```
721
- *
722
- * ```txt
723
- * {
724
- * tokenUsage: { completionTokens: 5, promptTokens: 28, totalTokens: 33 },
725
- * finish_reason: 'stop',
726
- * system_fingerprint: 'fp_3aa7262c27'
727
- * }
728
- * ```
729
- * </details>
730
- */
731
- class AzureChatOpenAI extends chat_models_js_1.ChatOpenAI {
732
- _llmType() {
733
- return "azure_openai";
734
- }
735
- get lc_aliases() {
736
- return {
737
- ...super.lc_aliases,
738
- ...AZURE_ALIASES,
739
- };
740
- }
741
- get lc_secrets() {
742
- return {
743
- ...super.lc_secrets,
744
- ...AZURE_SECRETS,
745
- };
746
- }
747
- get lc_serializable_keys() {
748
- return [...super.lc_serializable_keys, ...AZURE_SERIALIZABLE_KEYS];
749
- }
750
- getLsParams(options) {
751
- const params = super.getLsParams(options);
752
- params.ls_provider = "azure";
753
- return params;
754
- }
755
- constructor(fields) {
756
- super({
757
- ...fields,
758
- completions: new AzureChatOpenAICompletions(fields),
759
- responses: new AzureChatOpenAIResponses(fields),
760
- });
761
- Object.defineProperty(this, "azureOpenAIApiVersion", {
762
- enumerable: true,
763
- configurable: true,
764
- writable: true,
765
- value: void 0
766
- });
767
- Object.defineProperty(this, "azureOpenAIApiKey", {
768
- enumerable: true,
769
- configurable: true,
770
- writable: true,
771
- value: void 0
772
- });
773
- Object.defineProperty(this, "azureADTokenProvider", {
774
- enumerable: true,
775
- configurable: true,
776
- writable: true,
777
- value: void 0
778
- });
779
- Object.defineProperty(this, "azureOpenAIApiInstanceName", {
780
- enumerable: true,
781
- configurable: true,
782
- writable: true,
783
- value: void 0
784
- });
785
- Object.defineProperty(this, "azureOpenAIApiDeploymentName", {
786
- enumerable: true,
787
- configurable: true,
788
- writable: true,
789
- value: void 0
790
- });
791
- Object.defineProperty(this, "azureOpenAIBasePath", {
792
- enumerable: true,
793
- configurable: true,
794
- writable: true,
795
- value: void 0
796
- });
797
- Object.defineProperty(this, "azureOpenAIEndpoint", {
798
- enumerable: true,
799
- configurable: true,
800
- writable: true,
801
- value: void 0
802
- });
803
- _constructAzureFields.call(this, fields);
804
- }
805
- /** @internal */
806
- _getStructuredOutputMethod(config) {
807
- const ensuredConfig = { ...config };
808
- // Not all Azure gpt-4o deployments models support jsonSchema yet
809
- if (this.model.startsWith("gpt-4o")) {
810
- if (ensuredConfig?.method === undefined) {
811
- return "functionCalling";
812
- }
813
- }
814
- return super._getStructuredOutputMethod(ensuredConfig);
815
- }
816
- toJSON() {
817
- return _serializeAzureChat.call(this, super.toJSON());
818
- }
819
- }
208
+ * Azure OpenAI chat model integration.
209
+ *
210
+ * Setup:
211
+ * Install `@langchain/openai` and set the following environment variables:
212
+ *
213
+ * ```bash
214
+ * npm install @langchain/openai
215
+ * export AZURE_OPENAI_API_KEY="your-api-key"
216
+ * export AZURE_OPENAI_API_DEPLOYMENT_NAME="your-deployment-name"
217
+ * export AZURE_OPENAI_API_VERSION="your-version"
218
+ * export AZURE_OPENAI_BASE_PATH="your-base-path"
219
+ * ```
220
+ *
221
+ * ## [Constructor args](https://api.js.langchain.com/classes/langchain_openai.AzureChatOpenAI.html#constructor)
222
+ *
223
+ * ## [Runtime args](https://api.js.langchain.com/interfaces/langchain_openai.ChatOpenAICallOptions.html)
224
+ *
225
+ * Runtime args can be passed as the second argument to any of the base runnable methods `.invoke`. `.stream`, `.batch`, etc.
226
+ * They can also be passed via `.withConfig`, or the second arg in `.bindTools`, like shown in the examples below:
227
+ *
228
+ * ```typescript
229
+ * // When calling `.withConfig`, call options should be passed via the first argument
230
+ * const llmWithArgsBound = llm.withConfig({
231
+ * stop: ["\n"],
232
+ * tools: [...],
233
+ * });
234
+ *
235
+ * // When calling `.bindTools`, call options should be passed via the second argument
236
+ * const llmWithTools = llm.bindTools(
237
+ * [...],
238
+ * {
239
+ * tool_choice: "auto",
240
+ * }
241
+ * );
242
+ * ```
243
+ *
244
+ * ## Examples
245
+ *
246
+ * <details open>
247
+ * <summary><strong>Instantiate</strong></summary>
248
+ *
249
+ * ```typescript
250
+ * import { AzureChatOpenAI } from '@langchain/openai';
251
+ *
252
+ * const llm = new AzureChatOpenAI({
253
+ * azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY, // In Node.js defaults to process.env.AZURE_OPENAI_API_KEY
254
+ * azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME, // In Node.js defaults to process.env.AZURE_OPENAI_API_INSTANCE_NAME
255
+ * azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME, // In Node.js defaults to process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME
256
+ * azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION, // In Node.js defaults to process.env.AZURE_OPENAI_API_VERSION
257
+ * temperature: 0,
258
+ * maxTokens: undefined,
259
+ * timeout: undefined,
260
+ * maxRetries: 2,
261
+ * // apiKey: "...",
262
+ * // baseUrl: "...",
263
+ * // other params...
264
+ * });
265
+ * ```
266
+ * </details>
267
+ *
268
+ * <br />
269
+ *
270
+ * <details>
271
+ * <summary><strong>Invoking</strong></summary>
272
+ *
273
+ * ```typescript
274
+ * const input = `Translate "I love programming" into French.`;
275
+ *
276
+ * // Models also accept a list of chat messages or a formatted prompt
277
+ * const result = await llm.invoke(input);
278
+ * console.log(result);
279
+ * ```
280
+ *
281
+ * ```txt
282
+ * AIMessage {
283
+ * "id": "chatcmpl-9u4Mpu44CbPjwYFkTbeoZgvzB00Tz",
284
+ * "content": "J'adore la programmation.",
285
+ * "response_metadata": {
286
+ * "tokenUsage": {
287
+ * "completionTokens": 5,
288
+ * "promptTokens": 28,
289
+ * "totalTokens": 33
290
+ * },
291
+ * "finish_reason": "stop",
292
+ * "system_fingerprint": "fp_3aa7262c27"
293
+ * },
294
+ * "usage_metadata": {
295
+ * "input_tokens": 28,
296
+ * "output_tokens": 5,
297
+ * "total_tokens": 33
298
+ * }
299
+ * }
300
+ * ```
301
+ * </details>
302
+ *
303
+ * <br />
304
+ *
305
+ * <details>
306
+ * <summary><strong>Streaming Chunks</strong></summary>
307
+ *
308
+ * ```typescript
309
+ * for await (const chunk of await llm.stream(input)) {
310
+ * console.log(chunk);
311
+ * }
312
+ * ```
313
+ *
314
+ * ```txt
315
+ * AIMessageChunk {
316
+ * "id": "chatcmpl-9u4NWB7yUeHCKdLr6jP3HpaOYHTqs",
317
+ * "content": ""
318
+ * }
319
+ * AIMessageChunk {
320
+ * "content": "J"
321
+ * }
322
+ * AIMessageChunk {
323
+ * "content": "'adore"
324
+ * }
325
+ * AIMessageChunk {
326
+ * "content": " la"
327
+ * }
328
+ * AIMessageChunk {
329
+ * "content": " programmation",,
330
+ * }
331
+ * AIMessageChunk {
332
+ * "content": ".",,
333
+ * }
334
+ * AIMessageChunk {
335
+ * "content": "",
336
+ * "response_metadata": {
337
+ * "finish_reason": "stop",
338
+ * "system_fingerprint": "fp_c9aa9c0491"
339
+ * },
340
+ * }
341
+ * AIMessageChunk {
342
+ * "content": "",
343
+ * "usage_metadata": {
344
+ * "input_tokens": 28,
345
+ * "output_tokens": 5,
346
+ * "total_tokens": 33
347
+ * }
348
+ * }
349
+ * ```
350
+ * </details>
351
+ *
352
+ * <br />
353
+ *
354
+ * <details>
355
+ * <summary><strong>Aggregate Streamed Chunks</strong></summary>
356
+ *
357
+ * ```typescript
358
+ * import { AIMessageChunk } from '@langchain/core/messages';
359
+ * import { concat } from '@langchain/core/utils/stream';
360
+ *
361
+ * const stream = await llm.stream(input);
362
+ * let full: AIMessageChunk | undefined;
363
+ * for await (const chunk of stream) {
364
+ * full = !full ? chunk : concat(full, chunk);
365
+ * }
366
+ * console.log(full);
367
+ * ```
368
+ *
369
+ * ```txt
370
+ * AIMessageChunk {
371
+ * "id": "chatcmpl-9u4PnX6Fy7OmK46DASy0bH6cxn5Xu",
372
+ * "content": "J'adore la programmation.",
373
+ * "response_metadata": {
374
+ * "prompt": 0,
375
+ * "completion": 0,
376
+ * "finish_reason": "stop",
377
+ * },
378
+ * "usage_metadata": {
379
+ * "input_tokens": 28,
380
+ * "output_tokens": 5,
381
+ * "total_tokens": 33
382
+ * }
383
+ * }
384
+ * ```
385
+ * </details>
386
+ *
387
+ * <br />
388
+ *
389
+ * <details>
390
+ * <summary><strong>Bind tools</strong></summary>
391
+ *
392
+ * ```typescript
393
+ * import { z } from 'zod';
394
+ *
395
+ * const GetWeather = {
396
+ * name: "GetWeather",
397
+ * description: "Get the current weather in a given location",
398
+ * schema: z.object({
399
+ * location: z.string().describe("The city and state, e.g. San Francisco, CA")
400
+ * }),
401
+ * }
402
+ *
403
+ * const GetPopulation = {
404
+ * name: "GetPopulation",
405
+ * description: "Get the current population in a given location",
406
+ * schema: z.object({
407
+ * location: z.string().describe("The city and state, e.g. San Francisco, CA")
408
+ * }),
409
+ * }
410
+ *
411
+ * const llmWithTools = llm.bindTools([GetWeather, GetPopulation]);
412
+ * const aiMsg = await llmWithTools.invoke(
413
+ * "Which city is hotter today and which is bigger: LA or NY?"
414
+ * );
415
+ * console.log(aiMsg.tool_calls);
416
+ * ```
417
+ *
418
+ * ```txt
419
+ * [
420
+ * {
421
+ * name: 'GetWeather',
422
+ * args: { location: 'Los Angeles, CA' },
423
+ * type: 'tool_call',
424
+ * id: 'call_uPU4FiFzoKAtMxfmPnfQL6UK'
425
+ * },
426
+ * {
427
+ * name: 'GetWeather',
428
+ * args: { location: 'New York, NY' },
429
+ * type: 'tool_call',
430
+ * id: 'call_UNkEwuQsHrGYqgDQuH9nPAtX'
431
+ * },
432
+ * {
433
+ * name: 'GetPopulation',
434
+ * args: { location: 'Los Angeles, CA' },
435
+ * type: 'tool_call',
436
+ * id: 'call_kL3OXxaq9OjIKqRTpvjaCH14'
437
+ * },
438
+ * {
439
+ * name: 'GetPopulation',
440
+ * args: { location: 'New York, NY' },
441
+ * type: 'tool_call',
442
+ * id: 'call_s9KQB1UWj45LLGaEnjz0179q'
443
+ * }
444
+ * ]
445
+ * ```
446
+ * </details>
447
+ *
448
+ * <br />
449
+ *
450
+ * <details>
451
+ * <summary><strong>Structured Output</strong></summary>
452
+ *
453
+ * ```typescript
454
+ * import { z } from 'zod';
455
+ *
456
+ * const Joke = z.object({
457
+ * setup: z.string().describe("The setup of the joke"),
458
+ * punchline: z.string().describe("The punchline to the joke"),
459
+ * rating: z.number().nullable().describe("How funny the joke is, from 1 to 10")
460
+ * }).describe('Joke to tell user.');
461
+ *
462
+ * const structuredLlm = llm.withStructuredOutput(Joke, { name: "Joke" });
463
+ * const jokeResult = await structuredLlm.invoke("Tell me a joke about cats");
464
+ * console.log(jokeResult);
465
+ * ```
466
+ *
467
+ * ```txt
468
+ * {
469
+ * setup: 'Why was the cat sitting on the computer?',
470
+ * punchline: 'Because it wanted to keep an eye on the mouse!',
471
+ * rating: 7
472
+ * }
473
+ * ```
474
+ * </details>
475
+ *
476
+ * <br />
477
+ *
478
+ * <details>
479
+ * <summary><strong>JSON Object Response Format</strong></summary>
480
+ *
481
+ * ```typescript
482
+ * const jsonLlm = llm.withConfig({ response_format: { type: "json_object" } });
483
+ * const jsonLlmAiMsg = await jsonLlm.invoke(
484
+ * "Return a JSON object with key 'randomInts' and a value of 10 random ints in [0-99]"
485
+ * );
486
+ * console.log(jsonLlmAiMsg.content);
487
+ * ```
488
+ *
489
+ * ```txt
490
+ * {
491
+ * "randomInts": [23, 87, 45, 12, 78, 34, 56, 90, 11, 67]
492
+ * }
493
+ * ```
494
+ * </details>
495
+ *
496
+ * <br />
497
+ *
498
+ * <details>
499
+ * <summary><strong>Multimodal</strong></summary>
500
+ *
501
+ * ```typescript
502
+ * import { HumanMessage } from '@langchain/core/messages';
503
+ *
504
+ * const imageUrl = "https://example.com/image.jpg";
505
+ * const imageData = await fetch(imageUrl).then(res => res.arrayBuffer());
506
+ * const base64Image = Buffer.from(imageData).toString('base64');
507
+ *
508
+ * const message = new HumanMessage({
509
+ * content: [
510
+ * { type: "text", text: "describe the weather in this image" },
511
+ * {
512
+ * type: "image_url",
513
+ * image_url: { url: `data:image/jpeg;base64,${base64Image}` },
514
+ * },
515
+ * ]
516
+ * });
517
+ *
518
+ * const imageDescriptionAiMsg = await llm.invoke([message]);
519
+ * console.log(imageDescriptionAiMsg.content);
520
+ * ```
521
+ *
522
+ * ```txt
523
+ * The weather in the image appears to be clear and sunny. The sky is mostly blue with a few scattered white clouds, indicating fair weather. The bright sunlight is casting shadows on the green, grassy hill, suggesting it is a pleasant day with good visibility. There are no signs of rain or stormy conditions.
524
+ * ```
525
+ * </details>
526
+ *
527
+ * <br />
528
+ *
529
+ * <details>
530
+ * <summary><strong>Usage Metadata</strong></summary>
531
+ *
532
+ * ```typescript
533
+ * const aiMsgForMetadata = await llm.invoke(input);
534
+ * console.log(aiMsgForMetadata.usage_metadata);
535
+ * ```
536
+ *
537
+ * ```txt
538
+ * { input_tokens: 28, output_tokens: 5, total_tokens: 33 }
539
+ * ```
540
+ * </details>
541
+ *
542
+ * <br />
543
+ *
544
+ * <details>
545
+ * <summary><strong>Logprobs</strong></summary>
546
+ *
547
+ * ```typescript
548
+ * const logprobsLlm = new ChatOpenAI({ model: "gpt-4o-mini", logprobs: true });
549
+ * const aiMsgForLogprobs = await logprobsLlm.invoke(input);
550
+ * console.log(aiMsgForLogprobs.response_metadata.logprobs);
551
+ * ```
552
+ *
553
+ * ```txt
554
+ * {
555
+ * content: [
556
+ * {
557
+ * token: 'J',
558
+ * logprob: -0.000050616763,
559
+ * bytes: [Array],
560
+ * top_logprobs: []
561
+ * },
562
+ * {
563
+ * token: "'",
564
+ * logprob: -0.01868736,
565
+ * bytes: [Array],
566
+ * top_logprobs: []
567
+ * },
568
+ * {
569
+ * token: 'ad',
570
+ * logprob: -0.0000030545007,
571
+ * bytes: [Array],
572
+ * top_logprobs: []
573
+ * },
574
+ * { token: 'ore', logprob: 0, bytes: [Array], top_logprobs: [] },
575
+ * {
576
+ * token: ' la',
577
+ * logprob: -0.515404,
578
+ * bytes: [Array],
579
+ * top_logprobs: []
580
+ * },
581
+ * {
582
+ * token: ' programm',
583
+ * logprob: -0.0000118755715,
584
+ * bytes: [Array],
585
+ * top_logprobs: []
586
+ * },
587
+ * { token: 'ation', logprob: 0, bytes: [Array], top_logprobs: [] },
588
+ * {
589
+ * token: '.',
590
+ * logprob: -0.0000037697225,
591
+ * bytes: [Array],
592
+ * top_logprobs: []
593
+ * }
594
+ * ],
595
+ * refusal: null
596
+ * }
597
+ * ```
598
+ * </details>
599
+ *
600
+ * <br />
601
+ *
602
+ * <details>
603
+ * <summary><strong>Response Metadata</strong></summary>
604
+ *
605
+ * ```typescript
606
+ * const aiMsgForResponseMetadata = await llm.invoke(input);
607
+ * console.log(aiMsgForResponseMetadata.response_metadata);
608
+ * ```
609
+ *
610
+ * ```txt
611
+ * {
612
+ * tokenUsage: { completionTokens: 5, promptTokens: 28, totalTokens: 33 },
613
+ * finish_reason: 'stop',
614
+ * system_fingerprint: 'fp_3aa7262c27'
615
+ * }
616
+ * ```
617
+ * </details>
618
+ */
619
+ var AzureChatOpenAI = class extends require_chat_models.ChatOpenAI {
620
+ azureOpenAIApiVersion;
621
+ azureOpenAIApiKey;
622
+ azureADTokenProvider;
623
+ azureOpenAIApiInstanceName;
624
+ azureOpenAIApiDeploymentName;
625
+ azureOpenAIBasePath;
626
+ azureOpenAIEndpoint;
627
+ _llmType() {
628
+ return "azure_openai";
629
+ }
630
+ get lc_aliases() {
631
+ return {
632
+ ...super.lc_aliases,
633
+ ...AZURE_ALIASES
634
+ };
635
+ }
636
+ get lc_secrets() {
637
+ return {
638
+ ...super.lc_secrets,
639
+ ...AZURE_SECRETS
640
+ };
641
+ }
642
+ get lc_serializable_keys() {
643
+ return [...super.lc_serializable_keys, ...AZURE_SERIALIZABLE_KEYS];
644
+ }
645
+ getLsParams(options) {
646
+ const params = super.getLsParams(options);
647
+ params.ls_provider = "azure";
648
+ return params;
649
+ }
650
+ constructor(fields) {
651
+ super({
652
+ ...fields,
653
+ completions: new AzureChatOpenAICompletions(fields),
654
+ responses: new AzureChatOpenAIResponses(fields)
655
+ });
656
+ _constructAzureFields.call(this, fields);
657
+ }
658
+ /** @internal */
659
+ _getStructuredOutputMethod(config) {
660
+ const ensuredConfig = { ...config };
661
+ if (this.model.startsWith("gpt-4o")) {
662
+ if (ensuredConfig?.method === void 0) return "functionCalling";
663
+ }
664
+ return super._getStructuredOutputMethod(ensuredConfig);
665
+ }
666
+ toJSON() {
667
+ return _serializeAzureChat.call(this, super.toJSON());
668
+ }
669
+ };
670
+
671
+ //#endregion
820
672
  exports.AzureChatOpenAI = AzureChatOpenAI;
673
+ //# sourceMappingURL=chat_models.cjs.map