@langchain/openai 1.2.13 → 1.3.0-dev-1773698445534

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 (247) hide show
  1. package/dist/azure/chat_models/common.cjs +2 -3
  2. package/dist/azure/chat_models/common.cjs.map +1 -1
  3. package/dist/azure/chat_models/common.d.ts +0 -1
  4. package/dist/azure/chat_models/common.d.ts.map +1 -1
  5. package/dist/azure/chat_models/common.js +1 -2
  6. package/dist/azure/chat_models/common.js.map +1 -1
  7. package/dist/azure/chat_models/completions.cjs +3 -4
  8. package/dist/azure/chat_models/completions.cjs.map +1 -1
  9. package/dist/azure/chat_models/completions.js +1 -2
  10. package/dist/azure/chat_models/completions.js.map +1 -1
  11. package/dist/azure/chat_models/index.cjs +5 -6
  12. package/dist/azure/chat_models/index.cjs.map +1 -1
  13. package/dist/azure/chat_models/index.js +1 -2
  14. package/dist/azure/chat_models/index.js.map +1 -1
  15. package/dist/azure/chat_models/responses.cjs +3 -4
  16. package/dist/azure/chat_models/responses.cjs.map +1 -1
  17. package/dist/azure/chat_models/responses.js +1 -2
  18. package/dist/azure/chat_models/responses.js.map +1 -1
  19. package/dist/azure/embeddings.cjs +4 -5
  20. package/dist/azure/embeddings.cjs.map +1 -1
  21. package/dist/azure/embeddings.d.cts +2 -2
  22. package/dist/azure/embeddings.d.cts.map +1 -1
  23. package/dist/azure/embeddings.d.ts +2 -2
  24. package/dist/azure/embeddings.d.ts.map +1 -1
  25. package/dist/azure/embeddings.js +1 -2
  26. package/dist/azure/embeddings.js.map +1 -1
  27. package/dist/azure/llms.cjs +3 -4
  28. package/dist/azure/llms.cjs.map +1 -1
  29. package/dist/azure/llms.js +1 -2
  30. package/dist/azure/llms.js.map +1 -1
  31. package/dist/chat_models/base.cjs +15 -10
  32. package/dist/chat_models/base.cjs.map +1 -1
  33. package/dist/chat_models/base.d.cts +20 -20
  34. package/dist/chat_models/base.d.cts.map +1 -1
  35. package/dist/chat_models/base.d.ts +20 -20
  36. package/dist/chat_models/base.d.ts.map +1 -1
  37. package/dist/chat_models/base.js +11 -6
  38. package/dist/chat_models/base.js.map +1 -1
  39. package/dist/chat_models/completions.cjs +6 -7
  40. package/dist/chat_models/completions.cjs.map +1 -1
  41. package/dist/chat_models/completions.d.cts +6 -6
  42. package/dist/chat_models/completions.d.cts.map +1 -1
  43. package/dist/chat_models/completions.d.ts +6 -6
  44. package/dist/chat_models/completions.d.ts.map +1 -1
  45. package/dist/chat_models/completions.js +1 -2
  46. package/dist/chat_models/completions.js.map +1 -1
  47. package/dist/chat_models/index.cjs +6 -7
  48. package/dist/chat_models/index.cjs.map +1 -1
  49. package/dist/chat_models/index.js +1 -2
  50. package/dist/chat_models/index.js.map +1 -1
  51. package/dist/chat_models/profiles.cjs +1 -2
  52. package/dist/chat_models/profiles.cjs.map +1 -1
  53. package/dist/chat_models/profiles.js +1 -1
  54. package/dist/chat_models/responses.cjs +17 -14
  55. package/dist/chat_models/responses.cjs.map +1 -1
  56. package/dist/chat_models/responses.d.cts +8 -8
  57. package/dist/chat_models/responses.d.cts.map +1 -1
  58. package/dist/chat_models/responses.d.ts +8 -8
  59. package/dist/chat_models/responses.d.ts.map +1 -1
  60. package/dist/chat_models/responses.js +13 -10
  61. package/dist/chat_models/responses.js.map +1 -1
  62. package/dist/converters/completions.cjs +3 -4
  63. package/dist/converters/completions.cjs.map +1 -1
  64. package/dist/converters/completions.d.cts +8 -8
  65. package/dist/converters/completions.d.cts.map +1 -1
  66. package/dist/converters/completions.d.ts +8 -8
  67. package/dist/converters/completions.d.ts.map +1 -1
  68. package/dist/converters/completions.js +1 -2
  69. package/dist/converters/completions.js.map +1 -1
  70. package/dist/converters/index.cjs +2 -2
  71. package/dist/converters/index.js +3 -4
  72. package/dist/converters/responses.cjs +15 -11
  73. package/dist/converters/responses.cjs.map +1 -1
  74. package/dist/converters/responses.d.cts +8 -8
  75. package/dist/converters/responses.d.cts.map +1 -1
  76. package/dist/converters/responses.d.ts +8 -8
  77. package/dist/converters/responses.d.ts.map +1 -1
  78. package/dist/converters/responses.js +12 -8
  79. package/dist/converters/responses.js.map +1 -1
  80. package/dist/embeddings.cjs +3 -4
  81. package/dist/embeddings.cjs.map +1 -1
  82. package/dist/embeddings.d.cts +4 -4
  83. package/dist/embeddings.d.cts.map +1 -1
  84. package/dist/embeddings.d.ts +4 -4
  85. package/dist/embeddings.d.ts.map +1 -1
  86. package/dist/embeddings.js +3 -4
  87. package/dist/embeddings.js.map +1 -1
  88. package/dist/index.cjs +33 -34
  89. package/dist/index.d.cts +2 -1
  90. package/dist/index.d.ts +2 -2
  91. package/dist/index.js +1 -2
  92. package/dist/llms.cjs +4 -5
  93. package/dist/llms.cjs.map +1 -1
  94. package/dist/llms.d.cts +7 -7
  95. package/dist/llms.d.cts.map +1 -1
  96. package/dist/llms.d.ts +7 -7
  97. package/dist/llms.d.ts.map +1 -1
  98. package/dist/llms.js +4 -5
  99. package/dist/llms.js.map +1 -1
  100. package/dist/tools/applyPatch.cjs +1 -2
  101. package/dist/tools/applyPatch.cjs.map +1 -1
  102. package/dist/tools/applyPatch.d.cts +6 -6
  103. package/dist/tools/applyPatch.d.cts.map +1 -1
  104. package/dist/tools/applyPatch.d.ts +6 -6
  105. package/dist/tools/applyPatch.d.ts.map +1 -1
  106. package/dist/tools/applyPatch.js +1 -2
  107. package/dist/tools/applyPatch.js.map +1 -1
  108. package/dist/tools/codeInterpreter.cjs +1 -2
  109. package/dist/tools/codeInterpreter.cjs.map +1 -1
  110. package/dist/tools/codeInterpreter.d.cts +2 -2
  111. package/dist/tools/codeInterpreter.d.cts.map +1 -1
  112. package/dist/tools/codeInterpreter.d.ts +2 -2
  113. package/dist/tools/codeInterpreter.d.ts.map +1 -1
  114. package/dist/tools/codeInterpreter.js +1 -1
  115. package/dist/tools/computerUse.cjs +1 -2
  116. package/dist/tools/computerUse.cjs.map +1 -1
  117. package/dist/tools/computerUse.d.cts +12 -12
  118. package/dist/tools/computerUse.d.cts.map +1 -1
  119. package/dist/tools/computerUse.d.ts +12 -12
  120. package/dist/tools/computerUse.d.ts.map +1 -1
  121. package/dist/tools/computerUse.js +1 -2
  122. package/dist/tools/computerUse.js.map +1 -1
  123. package/dist/tools/custom.cjs +1 -2
  124. package/dist/tools/custom.cjs.map +1 -1
  125. package/dist/tools/custom.d.cts +2 -2
  126. package/dist/tools/custom.d.cts.map +1 -1
  127. package/dist/tools/custom.d.ts +2 -2
  128. package/dist/tools/custom.d.ts.map +1 -1
  129. package/dist/tools/custom.js +1 -2
  130. package/dist/tools/custom.js.map +1 -1
  131. package/dist/tools/dalle.cjs +1 -2
  132. package/dist/tools/dalle.cjs.map +1 -1
  133. package/dist/tools/dalle.d.cts +3 -3
  134. package/dist/tools/dalle.d.cts.map +1 -1
  135. package/dist/tools/dalle.d.ts +3 -3
  136. package/dist/tools/dalle.d.ts.map +1 -1
  137. package/dist/tools/dalle.js +3 -4
  138. package/dist/tools/dalle.js.map +1 -1
  139. package/dist/tools/fileSearch.cjs +1 -2
  140. package/dist/tools/fileSearch.cjs.map +1 -1
  141. package/dist/tools/fileSearch.d.cts +2 -2
  142. package/dist/tools/fileSearch.d.cts.map +1 -1
  143. package/dist/tools/fileSearch.d.ts +2 -2
  144. package/dist/tools/fileSearch.d.ts.map +1 -1
  145. package/dist/tools/fileSearch.js +1 -1
  146. package/dist/tools/fileSearch.js.map +1 -1
  147. package/dist/tools/imageGeneration.cjs +1 -2
  148. package/dist/tools/imageGeneration.cjs.map +1 -1
  149. package/dist/tools/imageGeneration.d.cts +2 -2
  150. package/dist/tools/imageGeneration.d.cts.map +1 -1
  151. package/dist/tools/imageGeneration.d.ts +2 -2
  152. package/dist/tools/imageGeneration.d.ts.map +1 -1
  153. package/dist/tools/imageGeneration.js +1 -1
  154. package/dist/tools/imageGeneration.js.map +1 -1
  155. package/dist/tools/index.cjs +14 -13
  156. package/dist/tools/index.cjs.map +1 -1
  157. package/dist/tools/index.d.cts +2 -0
  158. package/dist/tools/index.d.cts.map +1 -1
  159. package/dist/tools/index.d.ts +2 -0
  160. package/dist/tools/index.d.ts.map +1 -1
  161. package/dist/tools/index.js +5 -4
  162. package/dist/tools/index.js.map +1 -1
  163. package/dist/tools/localShell.cjs +1 -2
  164. package/dist/tools/localShell.cjs.map +1 -1
  165. package/dist/tools/localShell.d.cts +4 -4
  166. package/dist/tools/localShell.d.cts.map +1 -1
  167. package/dist/tools/localShell.d.ts +4 -4
  168. package/dist/tools/localShell.d.ts.map +1 -1
  169. package/dist/tools/localShell.js +1 -2
  170. package/dist/tools/localShell.js.map +1 -1
  171. package/dist/tools/mcp.cjs +1 -2
  172. package/dist/tools/mcp.cjs.map +1 -1
  173. package/dist/tools/mcp.d.cts +2 -2
  174. package/dist/tools/mcp.d.cts.map +1 -1
  175. package/dist/tools/mcp.d.ts +2 -2
  176. package/dist/tools/mcp.d.ts.map +1 -1
  177. package/dist/tools/mcp.js +1 -1
  178. package/dist/tools/mcp.js.map +1 -1
  179. package/dist/tools/shell.cjs +1 -2
  180. package/dist/tools/shell.cjs.map +1 -1
  181. package/dist/tools/shell.d.cts +5 -5
  182. package/dist/tools/shell.d.cts.map +1 -1
  183. package/dist/tools/shell.d.ts +5 -5
  184. package/dist/tools/shell.d.ts.map +1 -1
  185. package/dist/tools/shell.js +1 -2
  186. package/dist/tools/shell.js.map +1 -1
  187. package/dist/tools/toolSearch.cjs +67 -0
  188. package/dist/tools/toolSearch.cjs.map +1 -0
  189. package/dist/tools/toolSearch.d.cts +79 -0
  190. package/dist/tools/toolSearch.d.cts.map +1 -0
  191. package/dist/tools/toolSearch.d.ts +79 -0
  192. package/dist/tools/toolSearch.d.ts.map +1 -0
  193. package/dist/tools/toolSearch.js +67 -0
  194. package/dist/tools/toolSearch.js.map +1 -0
  195. package/dist/tools/webSearch.cjs +1 -2
  196. package/dist/tools/webSearch.cjs.map +1 -1
  197. package/dist/tools/webSearch.d.cts +2 -2
  198. package/dist/tools/webSearch.d.cts.map +1 -1
  199. package/dist/tools/webSearch.d.ts +2 -2
  200. package/dist/tools/webSearch.d.ts.map +1 -1
  201. package/dist/tools/webSearch.js +1 -1
  202. package/dist/tools/webSearch.js.map +1 -1
  203. package/dist/types.d.cts +10 -10
  204. package/dist/types.d.cts.map +1 -1
  205. package/dist/types.d.ts +10 -10
  206. package/dist/types.d.ts.map +1 -1
  207. package/dist/utils/azure.cjs +2 -3
  208. package/dist/utils/azure.cjs.map +1 -1
  209. package/dist/utils/azure.js +1 -2
  210. package/dist/utils/azure.js.map +1 -1
  211. package/dist/utils/client.cjs +2 -3
  212. package/dist/utils/client.cjs.map +1 -1
  213. package/dist/utils/client.js +1 -2
  214. package/dist/utils/client.js.map +1 -1
  215. package/dist/utils/errors.cjs +1 -2
  216. package/dist/utils/errors.cjs.map +1 -1
  217. package/dist/utils/errors.js +1 -1
  218. package/dist/utils/errors.js.map +1 -1
  219. package/dist/utils/misc.cjs +1 -2
  220. package/dist/utils/misc.cjs.map +1 -1
  221. package/dist/utils/misc.d.cts +2 -2
  222. package/dist/utils/misc.d.cts.map +1 -1
  223. package/dist/utils/misc.d.ts +2 -2
  224. package/dist/utils/misc.d.ts.map +1 -1
  225. package/dist/utils/misc.js +1 -2
  226. package/dist/utils/misc.js.map +1 -1
  227. package/dist/utils/output.cjs +1 -2
  228. package/dist/utils/output.cjs.map +1 -1
  229. package/dist/utils/output.js +1 -2
  230. package/dist/utils/output.js.map +1 -1
  231. package/dist/utils/prompts.cjs +2 -3
  232. package/dist/utils/prompts.cjs.map +1 -1
  233. package/dist/utils/prompts.d.cts +2 -2
  234. package/dist/utils/prompts.d.cts.map +1 -1
  235. package/dist/utils/prompts.d.ts +2 -2
  236. package/dist/utils/prompts.d.ts.map +1 -1
  237. package/dist/utils/prompts.js +1 -2
  238. package/dist/utils/prompts.js.map +1 -1
  239. package/dist/utils/tools.cjs +3 -4
  240. package/dist/utils/tools.cjs.map +1 -1
  241. package/dist/utils/tools.d.cts +5 -5
  242. package/dist/utils/tools.d.cts.map +1 -1
  243. package/dist/utils/tools.d.ts +5 -6
  244. package/dist/utils/tools.d.ts.map +1 -1
  245. package/dist/utils/tools.js +3 -4
  246. package/dist/utils/tools.js.map +1 -1
  247. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"embeddings.js","names":["OpenAIClient"],"sources":["../src/embeddings.ts"],"sourcesContent":["import { type ClientOptions, OpenAI as OpenAIClient } from \"openai\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Embeddings, type EmbeddingsParams } from \"@langchain/core/embeddings\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\nimport type { OpenAIApiKey } from \"./types.js\";\nimport {\n getEndpoint,\n OpenAIEndpointConfig,\n getHeadersWithUserAgent,\n} from \"./utils/azure.js\";\nimport { wrapOpenAIClientError } from \"./utils/client.js\";\n\n/**\n * @see https://platform.openai.com/docs/guides/embeddings#embedding-models\n */\nexport type OpenAIEmbeddingModelId =\n | OpenAIClient.EmbeddingModel\n | (string & NonNullable<unknown>);\n\n/**\n * Interface for OpenAIEmbeddings parameters. Extends EmbeddingsParams and\n * defines additional parameters specific to the OpenAIEmbeddings class.\n */\nexport interface OpenAIEmbeddingsParams extends EmbeddingsParams {\n /**\n * Model name to use\n * Alias for `model`\n * @deprecated Use \"model\" instead.\n */\n modelName: OpenAIEmbeddingModelId;\n /** Model name to use */\n model: OpenAIEmbeddingModelId;\n\n /**\n * The number of dimensions the resulting output embeddings should have.\n * Only supported in `text-embedding-3` and later models.\n */\n dimensions?: number;\n\n /**\n * Timeout to use when making requests to OpenAI.\n */\n timeout?: number;\n\n /**\n * The maximum number of documents to embed in a single request. This is\n * limited by the OpenAI API to a maximum of 2048.\n */\n batchSize?: number;\n\n /**\n * Whether to strip new lines from the input text. This is recommended by\n * OpenAI for older models, but may not be suitable for all use cases.\n * See: https://github.com/openai/openai-python/issues/418#issuecomment-1525939500\n */\n stripNewLines?: boolean;\n\n /**\n * The format to return the embeddings in. Can be either 'float' or 'base64'.\n */\n encodingFormat?: \"float\" | \"base64\";\n}\n\n/**\n * Class for generating embeddings using the OpenAI API.\n *\n * To use with Azure, import the `AzureOpenAIEmbeddings` class.\n *\n * @example\n * ```typescript\n * // Embed a query using OpenAIEmbeddings to generate embeddings for a given text\n * const model = new OpenAIEmbeddings();\n * const res = await model.embedQuery(\n * \"What would be a good company name for a company that makes colorful socks?\",\n * );\n * console.log({ res });\n *\n * ```\n */\nexport class OpenAIEmbeddings<TOutput = number[]>\n extends Embeddings<TOutput>\n implements Partial<OpenAIEmbeddingsParams>\n{\n model = \"text-embedding-ada-002\";\n\n /** @deprecated Use \"model\" instead */\n modelName: string;\n\n batchSize = 512;\n\n // TODO: Update to `false` on next minor release (see: https://github.com/langchain-ai/langchainjs/pull/3612)\n stripNewLines = true;\n\n /**\n * The number of dimensions the resulting output embeddings should have.\n * Only supported in `text-embedding-3` and later models.\n */\n dimensions?: number;\n\n timeout?: number;\n\n organization?: string;\n\n encodingFormat?: \"float\" | \"base64\";\n\n protected client: OpenAIClient;\n\n protected clientConfig: ClientOptions;\n\n protected apiKey?: OpenAIApiKey;\n\n constructor(\n fields?: Partial<OpenAIEmbeddingsParams> & {\n verbose?: boolean;\n /**\n * The OpenAI API key to use.\n * Alias for `apiKey`.\n */\n openAIApiKey?: OpenAIApiKey;\n /** The OpenAI API key to use. */\n apiKey?: OpenAIApiKey;\n configuration?: ClientOptions;\n }\n ) {\n const fieldsWithDefaults = { maxConcurrency: 2, ...fields };\n\n super(fieldsWithDefaults);\n\n const apiKey =\n fieldsWithDefaults?.apiKey ??\n fieldsWithDefaults?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n\n this.organization =\n fieldsWithDefaults?.configuration?.organization ??\n getEnvironmentVariable(\"OPENAI_ORGANIZATION\");\n\n this.model =\n fieldsWithDefaults?.model ?? fieldsWithDefaults?.modelName ?? this.model;\n this.modelName = this.model;\n this.batchSize = fieldsWithDefaults?.batchSize ?? this.batchSize;\n this.stripNewLines =\n fieldsWithDefaults?.stripNewLines ?? this.stripNewLines;\n this.timeout = fieldsWithDefaults?.timeout;\n this.dimensions = fieldsWithDefaults?.dimensions;\n this.encodingFormat = fieldsWithDefaults?.encodingFormat;\n\n this.clientConfig = {\n apiKey,\n organization: this.organization,\n dangerouslyAllowBrowser: true,\n ...fields?.configuration,\n };\n }\n\n /**\n * Method to generate embeddings for an array of documents. Splits the\n * documents into batches and makes requests to the OpenAI API to generate\n * embeddings.\n * @param texts Array of documents to generate embeddings for.\n * @returns Promise that resolves to a 2D array of embeddings for each document.\n */\n async embedDocuments(texts: string[]): Promise<TOutput[]> {\n const batches = chunkArray(\n this.stripNewLines ? texts.map((t) => t.replace(/\\n/g, \" \")) : texts,\n this.batchSize\n );\n\n const batchRequests = batches.map((batch) => {\n const params: OpenAIClient.EmbeddingCreateParams = {\n model: this.model,\n input: batch,\n };\n if (this.dimensions) {\n params.dimensions = this.dimensions;\n }\n if (this.encodingFormat) {\n params.encoding_format = this.encodingFormat;\n }\n return this.embeddingWithRetry(params);\n });\n const batchResponses = await Promise.all(batchRequests);\n\n const embeddings: TOutput[] = [];\n for (let i = 0; i < batchResponses.length; i += 1) {\n const batch = batches[i];\n const { data: batchResponse } = batchResponses[i];\n for (let j = 0; j < batch.length; j += 1) {\n embeddings.push(batchResponse[j].embedding as TOutput);\n }\n }\n return embeddings;\n }\n\n /**\n * Method to generate an embedding for a single document. Calls the\n * embeddingWithRetry method with the document as the input.\n * @param text Document to generate an embedding for.\n * @returns Promise that resolves to an embedding for the document.\n */\n async embedQuery(text: string): Promise<TOutput> {\n const params: OpenAIClient.EmbeddingCreateParams = {\n model: this.model,\n input: this.stripNewLines ? text.replace(/\\n/g, \" \") : text,\n };\n if (this.dimensions) {\n params.dimensions = this.dimensions;\n }\n if (this.encodingFormat) {\n params.encoding_format = this.encodingFormat;\n }\n const { data } = await this.embeddingWithRetry(params);\n return data[0].embedding as TOutput;\n }\n\n /**\n * Private method to make a request to the OpenAI API to generate\n * embeddings. Handles the retry logic and returns the response from the\n * API.\n * @param request Request to send to the OpenAI API.\n * @returns Promise that resolves to the response from the API.\n */\n protected async embeddingWithRetry(\n request: OpenAIClient.EmbeddingCreateParams\n ) {\n if (!this.client) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!params.baseURL) {\n delete params.baseURL;\n }\n\n params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);\n\n this.client = new OpenAIClient(params);\n }\n const requestOptions = {};\n\n return this.caller.call(async () => {\n try {\n const res = await this.client.embeddings.create(\n request,\n requestOptions\n );\n return res;\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA+EA,IAAa,mBAAb,cACU,WAEV;CACE,QAAQ;;CAGR;CAEA,YAAY;CAGZ,gBAAgB;;;;;CAMhB;CAEA;CAEA;CAEA;CAEA,AAAU;CAEV,AAAU;CAEV,AAAU;CAEV,YACE,QAWA;EACA,MAAM,qBAAqB;GAAE,gBAAgB;GAAG,GAAG;GAAQ;AAE3D,QAAM,mBAAmB;EAEzB,MAAM,SACJ,oBAAoB,UACpB,oBAAoB,gBACpB,uBAAuB,iBAAiB;AAE1C,OAAK,eACH,oBAAoB,eAAe,gBACnC,uBAAuB,sBAAsB;AAE/C,OAAK,QACH,oBAAoB,SAAS,oBAAoB,aAAa,KAAK;AACrE,OAAK,YAAY,KAAK;AACtB,OAAK,YAAY,oBAAoB,aAAa,KAAK;AACvD,OAAK,gBACH,oBAAoB,iBAAiB,KAAK;AAC5C,OAAK,UAAU,oBAAoB;AACnC,OAAK,aAAa,oBAAoB;AACtC,OAAK,iBAAiB,oBAAoB;AAE1C,OAAK,eAAe;GAClB;GACA,cAAc,KAAK;GACnB,yBAAyB;GACzB,GAAG,QAAQ;GACZ;;;;;;;;;CAUH,MAAM,eAAe,OAAqC;EACxD,MAAM,UAAU,WACd,KAAK,gBAAgB,MAAM,KAAK,MAAM,EAAE,QAAQ,OAAO,IAAI,CAAC,GAAG,OAC/D,KAAK,UACN;EAED,MAAM,gBAAgB,QAAQ,KAAK,UAAU;GAC3C,MAAM,SAA6C;IACjD,OAAO,KAAK;IACZ,OAAO;IACR;AACD,OAAI,KAAK,WACP,QAAO,aAAa,KAAK;AAE3B,OAAI,KAAK,eACP,QAAO,kBAAkB,KAAK;AAEhC,UAAO,KAAK,mBAAmB,OAAO;IACtC;EACF,MAAM,iBAAiB,MAAM,QAAQ,IAAI,cAAc;EAEvD,MAAM,aAAwB,EAAE;AAChC,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK,GAAG;GACjD,MAAM,QAAQ,QAAQ;GACtB,MAAM,EAAE,MAAM,kBAAkB,eAAe;AAC/C,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,EACrC,YAAW,KAAK,cAAc,GAAG,UAAqB;;AAG1D,SAAO;;;;;;;;CAST,MAAM,WAAW,MAAgC;EAC/C,MAAM,SAA6C;GACjD,OAAO,KAAK;GACZ,OAAO,KAAK,gBAAgB,KAAK,QAAQ,OAAO,IAAI,GAAG;GACxD;AACD,MAAI,KAAK,WACP,QAAO,aAAa,KAAK;AAE3B,MAAI,KAAK,eACP,QAAO,kBAAkB,KAAK;EAEhC,MAAM,EAAE,SAAS,MAAM,KAAK,mBAAmB,OAAO;AACtD,SAAO,KAAK,GAAG;;;;;;;;;CAUjB,MAAgB,mBACd,SACA;AACA,MAAI,CAAC,KAAK,QAAQ;GAKhB,MAAM,WAAW,YAJkC,EACjD,SAAS,KAAK,aAAa,SAC5B,CAEiD;GAElD,MAAM,SAAS;IACb,GAAG,KAAK;IACR,SAAS;IACT,SAAS,KAAK;IACd,YAAY;IACb;AAED,OAAI,CAAC,OAAO,QACV,QAAO,OAAO;AAGhB,UAAO,iBAAiB,wBAAwB,OAAO,eAAe;AAEtE,QAAK,SAAS,IAAIA,SAAa,OAAO;;EAExC,MAAM,iBAAiB,EAAE;AAEzB,SAAO,KAAK,OAAO,KAAK,YAAY;AAClC,OAAI;AAKF,WAJY,MAAM,KAAK,OAAO,WAAW,OACvC,SACA,eACD;YAEM,GAAG;AAEV,UADc,sBAAsB,EAAE;;IAGxC"}
1
+ {"version":3,"file":"embeddings.js","names":["OpenAIClient"],"sources":["../src/embeddings.ts"],"sourcesContent":["import { type ClientOptions, OpenAI as OpenAIClient } from \"openai\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Embeddings, type EmbeddingsParams } from \"@langchain/core/embeddings\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\nimport type { OpenAIApiKey } from \"./types.js\";\nimport {\n getEndpoint,\n OpenAIEndpointConfig,\n getHeadersWithUserAgent,\n} from \"./utils/azure.js\";\nimport { wrapOpenAIClientError } from \"./utils/client.js\";\n\n/**\n * @see https://platform.openai.com/docs/guides/embeddings#embedding-models\n */\nexport type OpenAIEmbeddingModelId =\n | OpenAIClient.EmbeddingModel\n | (string & NonNullable<unknown>);\n\n/**\n * Interface for OpenAIEmbeddings parameters. Extends EmbeddingsParams and\n * defines additional parameters specific to the OpenAIEmbeddings class.\n */\nexport interface OpenAIEmbeddingsParams extends EmbeddingsParams {\n /**\n * Model name to use\n * Alias for `model`\n * @deprecated Use \"model\" instead.\n */\n modelName: OpenAIEmbeddingModelId;\n /** Model name to use */\n model: OpenAIEmbeddingModelId;\n\n /**\n * The number of dimensions the resulting output embeddings should have.\n * Only supported in `text-embedding-3` and later models.\n */\n dimensions?: number;\n\n /**\n * Timeout to use when making requests to OpenAI.\n */\n timeout?: number;\n\n /**\n * The maximum number of documents to embed in a single request. This is\n * limited by the OpenAI API to a maximum of 2048.\n */\n batchSize?: number;\n\n /**\n * Whether to strip new lines from the input text. This is recommended by\n * OpenAI for older models, but may not be suitable for all use cases.\n * See: https://github.com/openai/openai-python/issues/418#issuecomment-1525939500\n */\n stripNewLines?: boolean;\n\n /**\n * The format to return the embeddings in. Can be either 'float' or 'base64'.\n */\n encodingFormat?: \"float\" | \"base64\";\n}\n\n/**\n * Class for generating embeddings using the OpenAI API.\n *\n * To use with Azure, import the `AzureOpenAIEmbeddings` class.\n *\n * @example\n * ```typescript\n * // Embed a query using OpenAIEmbeddings to generate embeddings for a given text\n * const model = new OpenAIEmbeddings();\n * const res = await model.embedQuery(\n * \"What would be a good company name for a company that makes colorful socks?\",\n * );\n * console.log({ res });\n *\n * ```\n */\nexport class OpenAIEmbeddings<TOutput = number[]>\n extends Embeddings<TOutput>\n implements Partial<OpenAIEmbeddingsParams>\n{\n model = \"text-embedding-ada-002\";\n\n /** @deprecated Use \"model\" instead */\n modelName: string;\n\n batchSize = 512;\n\n // TODO: Update to `false` on next minor release (see: https://github.com/langchain-ai/langchainjs/pull/3612)\n stripNewLines = true;\n\n /**\n * The number of dimensions the resulting output embeddings should have.\n * Only supported in `text-embedding-3` and later models.\n */\n dimensions?: number;\n\n timeout?: number;\n\n organization?: string;\n\n encodingFormat?: \"float\" | \"base64\";\n\n protected client: OpenAIClient;\n\n protected clientConfig: ClientOptions;\n\n protected apiKey?: OpenAIApiKey;\n\n constructor(\n fields?: Partial<OpenAIEmbeddingsParams> & {\n verbose?: boolean;\n /**\n * The OpenAI API key to use.\n * Alias for `apiKey`.\n */\n openAIApiKey?: OpenAIApiKey;\n /** The OpenAI API key to use. */\n apiKey?: OpenAIApiKey;\n configuration?: ClientOptions;\n }\n ) {\n const fieldsWithDefaults = { maxConcurrency: 2, ...fields };\n\n super(fieldsWithDefaults);\n\n const apiKey =\n fieldsWithDefaults?.apiKey ??\n fieldsWithDefaults?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n\n this.organization =\n fieldsWithDefaults?.configuration?.organization ??\n getEnvironmentVariable(\"OPENAI_ORGANIZATION\");\n\n this.model =\n fieldsWithDefaults?.model ?? fieldsWithDefaults?.modelName ?? this.model;\n this.modelName = this.model;\n this.batchSize = fieldsWithDefaults?.batchSize ?? this.batchSize;\n this.stripNewLines =\n fieldsWithDefaults?.stripNewLines ?? this.stripNewLines;\n this.timeout = fieldsWithDefaults?.timeout;\n this.dimensions = fieldsWithDefaults?.dimensions;\n this.encodingFormat = fieldsWithDefaults?.encodingFormat;\n\n this.clientConfig = {\n apiKey,\n organization: this.organization,\n dangerouslyAllowBrowser: true,\n ...fields?.configuration,\n };\n }\n\n /**\n * Method to generate embeddings for an array of documents. Splits the\n * documents into batches and makes requests to the OpenAI API to generate\n * embeddings.\n * @param texts Array of documents to generate embeddings for.\n * @returns Promise that resolves to a 2D array of embeddings for each document.\n */\n async embedDocuments(texts: string[]): Promise<TOutput[]> {\n const batches = chunkArray(\n this.stripNewLines ? texts.map((t) => t.replace(/\\n/g, \" \")) : texts,\n this.batchSize\n );\n\n const batchRequests = batches.map((batch) => {\n const params: OpenAIClient.EmbeddingCreateParams = {\n model: this.model,\n input: batch,\n };\n if (this.dimensions) {\n params.dimensions = this.dimensions;\n }\n if (this.encodingFormat) {\n params.encoding_format = this.encodingFormat;\n }\n return this.embeddingWithRetry(params);\n });\n const batchResponses = await Promise.all(batchRequests);\n\n const embeddings: TOutput[] = [];\n for (let i = 0; i < batchResponses.length; i += 1) {\n const batch = batches[i];\n const { data: batchResponse } = batchResponses[i];\n for (let j = 0; j < batch.length; j += 1) {\n embeddings.push(batchResponse[j].embedding as TOutput);\n }\n }\n return embeddings;\n }\n\n /**\n * Method to generate an embedding for a single document. Calls the\n * embeddingWithRetry method with the document as the input.\n * @param text Document to generate an embedding for.\n * @returns Promise that resolves to an embedding for the document.\n */\n async embedQuery(text: string): Promise<TOutput> {\n const params: OpenAIClient.EmbeddingCreateParams = {\n model: this.model,\n input: this.stripNewLines ? text.replace(/\\n/g, \" \") : text,\n };\n if (this.dimensions) {\n params.dimensions = this.dimensions;\n }\n if (this.encodingFormat) {\n params.encoding_format = this.encodingFormat;\n }\n const { data } = await this.embeddingWithRetry(params);\n return data[0].embedding as TOutput;\n }\n\n /**\n * Private method to make a request to the OpenAI API to generate\n * embeddings. Handles the retry logic and returns the response from the\n * API.\n * @param request Request to send to the OpenAI API.\n * @returns Promise that resolves to the response from the API.\n */\n protected async embeddingWithRetry(\n request: OpenAIClient.EmbeddingCreateParams\n ) {\n if (!this.client) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!params.baseURL) {\n delete params.baseURL;\n }\n\n params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);\n\n this.client = new OpenAIClient(params);\n }\n const requestOptions = {};\n\n return this.caller.call(async () => {\n try {\n const res = await this.client.embeddings.create(\n request,\n requestOptions\n );\n return res;\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA+EA,IAAa,mBAAb,cACU,WAEV;CACE,QAAQ;;CAGR;CAEA,YAAY;CAGZ,gBAAgB;;;;;CAMhB;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YACE,QAWA;EACA,MAAM,qBAAqB;GAAE,gBAAgB;GAAG,GAAG;GAAQ;AAE3D,QAAM,mBAAmB;EAEzB,MAAM,SACJ,oBAAoB,UACpB,oBAAoB,gBACpB,uBAAuB,iBAAiB;AAE1C,OAAK,eACH,oBAAoB,eAAe,gBACnC,uBAAuB,sBAAsB;AAE/C,OAAK,QACH,oBAAoB,SAAS,oBAAoB,aAAa,KAAK;AACrE,OAAK,YAAY,KAAK;AACtB,OAAK,YAAY,oBAAoB,aAAa,KAAK;AACvD,OAAK,gBACH,oBAAoB,iBAAiB,KAAK;AAC5C,OAAK,UAAU,oBAAoB;AACnC,OAAK,aAAa,oBAAoB;AACtC,OAAK,iBAAiB,oBAAoB;AAE1C,OAAK,eAAe;GAClB;GACA,cAAc,KAAK;GACnB,yBAAyB;GACzB,GAAG,QAAQ;GACZ;;;;;;;;;CAUH,MAAM,eAAe,OAAqC;EACxD,MAAM,UAAU,WACd,KAAK,gBAAgB,MAAM,KAAK,MAAM,EAAE,QAAQ,OAAO,IAAI,CAAC,GAAG,OAC/D,KAAK,UACN;EAED,MAAM,gBAAgB,QAAQ,KAAK,UAAU;GAC3C,MAAM,SAA6C;IACjD,OAAO,KAAK;IACZ,OAAO;IACR;AACD,OAAI,KAAK,WACP,QAAO,aAAa,KAAK;AAE3B,OAAI,KAAK,eACP,QAAO,kBAAkB,KAAK;AAEhC,UAAO,KAAK,mBAAmB,OAAO;IACtC;EACF,MAAM,iBAAiB,MAAM,QAAQ,IAAI,cAAc;EAEvD,MAAM,aAAwB,EAAE;AAChC,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK,GAAG;GACjD,MAAM,QAAQ,QAAQ;GACtB,MAAM,EAAE,MAAM,kBAAkB,eAAe;AAC/C,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,EACrC,YAAW,KAAK,cAAc,GAAG,UAAqB;;AAG1D,SAAO;;;;;;;;CAST,MAAM,WAAW,MAAgC;EAC/C,MAAM,SAA6C;GACjD,OAAO,KAAK;GACZ,OAAO,KAAK,gBAAgB,KAAK,QAAQ,OAAO,IAAI,GAAG;GACxD;AACD,MAAI,KAAK,WACP,QAAO,aAAa,KAAK;AAE3B,MAAI,KAAK,eACP,QAAO,kBAAkB,KAAK;EAEhC,MAAM,EAAE,SAAS,MAAM,KAAK,mBAAmB,OAAO;AACtD,SAAO,KAAK,GAAG;;;;;;;;;CAUjB,MAAgB,mBACd,SACA;AACA,MAAI,CAAC,KAAK,QAAQ;GAKhB,MAAM,WAAW,YAJkC,EACjD,SAAS,KAAK,aAAa,SAC5B,CAEiD;GAElD,MAAM,SAAS;IACb,GAAG,KAAK;IACR,SAAS;IACT,SAAS,KAAK;IACd,YAAY;IACb;AAED,OAAI,CAAC,OAAO,QACV,QAAO,OAAO;AAGhB,UAAO,iBAAiB,wBAAwB,OAAO,eAAe;AAEtE,QAAK,SAAS,IAAIA,OAAa,OAAO;;EAExC,MAAM,iBAAiB,EAAE;AAEzB,SAAO,KAAK,OAAO,KAAK,YAAY;AAClC,OAAI;AAKF,WAJY,MAAM,KAAK,OAAO,WAAW,OACvC,SACA,eACD;YAEM,GAAG;AAEV,UADc,sBAAsB,EAAE;;IAGxC"}
package/dist/index.cjs CHANGED
@@ -1,27 +1,26 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_client = require('./utils/client.cjs');
3
- const require_misc = require('./utils/misc.cjs');
4
- const require_azure = require('./utils/azure.cjs');
5
- const require_base = require('./chat_models/base.cjs');
6
- const require_completions = require('./converters/completions.cjs');
7
- const require_completions$1 = require('./chat_models/completions.cjs');
8
- const require_completions$2 = require('./azure/chat_models/completions.cjs');
9
- const require_responses = require('./converters/responses.cjs');
10
- const require_responses$1 = require('./chat_models/responses.cjs');
11
- const require_responses$2 = require('./azure/chat_models/responses.cjs');
12
- const require_index = require('./chat_models/index.cjs');
13
- const require_index$1 = require('./azure/chat_models/index.cjs');
14
- const require_llms = require('./llms.cjs');
15
- const require_llms$1 = require('./azure/llms.cjs');
16
- const require_embeddings = require('./embeddings.cjs');
17
- const require_embeddings$1 = require('./azure/embeddings.cjs');
18
- const require_dalle = require('./tools/dalle.cjs');
19
- const require_index$2 = require('./tools/index.cjs');
20
- const require_custom = require('./tools/custom.cjs');
21
- const require_prompts = require('./utils/prompts.cjs');
22
- require('./converters/index.cjs');
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_client = require("./utils/client.cjs");
3
+ const require_misc = require("./utils/misc.cjs");
4
+ const require_azure = require("./utils/azure.cjs");
5
+ const require_base = require("./chat_models/base.cjs");
6
+ const require_completions = require("./converters/completions.cjs");
7
+ const require_completions$1 = require("./chat_models/completions.cjs");
8
+ const require_completions$2 = require("./azure/chat_models/completions.cjs");
9
+ const require_responses = require("./converters/responses.cjs");
10
+ const require_responses$1 = require("./chat_models/responses.cjs");
11
+ const require_responses$2 = require("./azure/chat_models/responses.cjs");
12
+ const require_index = require("./chat_models/index.cjs");
13
+ const require_index$1 = require("./azure/chat_models/index.cjs");
14
+ const require_llms = require("./llms.cjs");
15
+ const require_llms$1 = require("./azure/llms.cjs");
16
+ const require_embeddings = require("./embeddings.cjs");
17
+ const require_embeddings$1 = require("./azure/embeddings.cjs");
18
+ const require_dalle = require("./tools/dalle.cjs");
19
+ const require_index$2 = require("./tools/index.cjs");
20
+ const require_custom = require("./tools/custom.cjs");
21
+ const require_prompts = require("./utils/prompts.cjs");
22
+ require("./converters/index.cjs");
23
23
  let openai = require("openai");
24
-
25
24
  exports.AzureChatOpenAI = require_index$1.AzureChatOpenAI;
26
25
  exports.AzureChatOpenAICompletions = require_completions$2.AzureChatOpenAICompletions;
27
26
  exports.AzureChatOpenAIResponses = require_responses$2.AzureChatOpenAIResponses;
@@ -33,11 +32,11 @@ exports.ChatOpenAICompletions = require_completions$1.ChatOpenAICompletions;
33
32
  exports.ChatOpenAIResponses = require_responses$1.ChatOpenAIResponses;
34
33
  exports.DallEAPIWrapper = require_dalle.DallEAPIWrapper;
35
34
  exports.OpenAI = require_llms.OpenAI;
36
- Object.defineProperty(exports, 'OpenAIClient', {
37
- enumerable: true,
38
- get: function () {
39
- return openai.OpenAI;
40
- }
35
+ Object.defineProperty(exports, "OpenAIClient", {
36
+ enumerable: true,
37
+ get: function() {
38
+ return openai.OpenAI;
39
+ }
41
40
  });
42
41
  exports.OpenAIEmbeddings = require_embeddings.OpenAIEmbeddings;
43
42
  exports.completionsApiContentBlockConverter = require_completions.completionsApiContentBlockConverter;
@@ -60,11 +59,11 @@ exports.getHeadersWithUserAgent = require_azure.getHeadersWithUserAgent;
60
59
  exports.isHeaders = require_azure.isHeaders;
61
60
  exports.messageToOpenAIRole = require_misc.messageToOpenAIRole;
62
61
  exports.normalizeHeaders = require_azure.normalizeHeaders;
63
- Object.defineProperty(exports, 'toFile', {
64
- enumerable: true,
65
- get: function () {
66
- return openai.toFile;
67
- }
62
+ Object.defineProperty(exports, "toFile", {
63
+ enumerable: true,
64
+ get: function() {
65
+ return openai.toFile;
66
+ }
68
67
  });
69
68
  exports.tools = require_index$2.tools;
70
- exports.wrapOpenAIClientError = require_client.wrapOpenAIClientError;
69
+ exports.wrapOpenAIClientError = require_client.wrapOpenAIClientError;
package/dist/index.d.cts CHANGED
@@ -23,6 +23,7 @@ import { ComputerUseAction, ComputerUseClickAction, ComputerUseDoubleClickAction
23
23
  import { LocalShellAction, LocalShellOptions, LocalShellTool } from "./tools/localShell.cjs";
24
24
  import { ShellAction, ShellCallOutcome, ShellCommandOutput, ShellOptions, ShellResult, ShellTool } from "./tools/shell.cjs";
25
25
  import { ApplyPatchCreateFileOperation, ApplyPatchDeleteFileOperation, ApplyPatchOperation, ApplyPatchOptions, ApplyPatchTool, ApplyPatchUpdateFileOperation } from "./tools/applyPatch.cjs";
26
+ import { ToolSearchOptions, ToolSearchTool } from "./tools/toolSearch.cjs";
26
27
  import { tools } from "./tools/index.cjs";
27
28
  import { customTool } from "./tools/custom.cjs";
28
29
  import { convertPromptToOpenAI } from "./utils/prompts.cjs";
@@ -30,4 +31,4 @@ import { messageToOpenAIRole } from "./utils/misc.cjs";
30
31
  import { completionsApiContentBlockConverter, convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams, convertStandardContentBlockToCompletionsContentPart, convertStandardContentMessageToCompletionsMessage } from "./converters/completions.cjs";
31
32
  import { ResponsesCreate, ResponsesCreateInvoke, ResponsesInputItem, ResponsesParse, ResponsesParseInvoke, convertMessagesToResponsesInput, convertReasoningSummaryToResponsesReasoningItem, convertResponsesDeltaToChatGenerationChunk, convertResponsesMessageToAIMessage, convertResponsesUsageToUsageMetadata, convertStandardContentMessageToResponsesInput } from "./converters/responses.cjs";
32
33
  import { ClientOptions, OpenAI as OpenAIClient, toFile } from "openai";
33
- export { ApplyPatchCreateFileOperation, ApplyPatchDeleteFileOperation, ApplyPatchOperation, ApplyPatchOptions, ApplyPatchTool, ApplyPatchUpdateFileOperation, AzureChatOpenAI, AzureChatOpenAICompletions, type AzureChatOpenAIFields, AzureChatOpenAIResponses, AzureOpenAI, AzureOpenAIChatInput, AzureOpenAIEmbeddings, AzureOpenAIInput, BaseChatOpenAI, type BaseChatOpenAICallOptions, type BaseChatOpenAIFields, ChatOpenAI, type ChatOpenAICallOptions, ChatOpenAICompletions, type ChatOpenAICompletionsCallOptions, type ChatOpenAIFields, ChatOpenAIReasoningSummary, ChatOpenAIResponseFormat, ChatOpenAIResponses, type ChatOpenAIResponsesCallOptions, type ClientOptions, CodeInterpreterAutoContainer, CodeInterpreterMemoryLimit, CodeInterpreterOptions, CodeInterpreterTool, ComputerUseAction, ComputerUseClickAction, ComputerUseDoubleClickAction, ComputerUseDragAction, ComputerUseEnvironment, ComputerUseInput, ComputerUseKeypressAction, ComputerUseMoveAction, ComputerUseOptions, ComputerUseScreenshotAction, ComputerUseScrollAction, ComputerUseTool, ComputerUseTypeAction, ComputerUseWaitAction, DallEAPIWrapper, DallEAPIWrapperParams, FileSearchComparisonFilter, FileSearchComparisonType, FileSearchCompoundFilter, FileSearchFilter, FileSearchHybridSearchWeights, FileSearchOptions, FileSearchRankingOptions, FileSearchTool, HeadersLike, ImageGenerationInputMask, ImageGenerationOptions, ImageGenerationTool, LocalShellAction, LocalShellOptions, LocalShellTool, McpApprovalFilter, McpConnectorId, McpConnectorOptions, McpRemoteServerOptions, McpTool, McpToolFilter, OpenAI, OpenAIApiKey, OpenAIBaseInput, OpenAICacheRetentionParam, type OpenAICallOptions, type OpenAIChatInput, OpenAIChatModelId, OpenAIClient, OpenAICoreRequestOptions, OpenAIEmbeddingModelId, OpenAIEmbeddings, OpenAIEmbeddingsParams, OpenAIEndpointConfig, OpenAIImageModelId, OpenAIInput, OpenAIVerbosityParam, ResponseFormatConfiguration, ResponsesCreate, ResponsesCreateInvoke, ResponsesInputItem, ResponsesParse, ResponsesParseInvoke, ShellAction, ShellCallOutcome, ShellCommandOutput, ShellOptions, ShellResult, ShellTool, TiktokenModel, WebSearchFilters, WebSearchOptions, WebSearchTool, completionsApiContentBlockConverter, convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams, convertMessagesToResponsesInput, convertPromptToOpenAI, convertReasoningSummaryToResponsesReasoningItem, convertResponsesDeltaToChatGenerationChunk, convertResponsesMessageToAIMessage, convertResponsesUsageToUsageMetadata, convertStandardContentBlockToCompletionsContentPart, convertStandardContentMessageToCompletionsMessage, convertStandardContentMessageToResponsesInput, customTool, getEndpoint, getFormattedEnv, getHeadersWithUserAgent, isHeaders, messageToOpenAIRole, normalizeHeaders, toFile, tools, wrapOpenAIClientError };
34
+ export { ApplyPatchCreateFileOperation, ApplyPatchDeleteFileOperation, ApplyPatchOperation, ApplyPatchOptions, ApplyPatchTool, ApplyPatchUpdateFileOperation, AzureChatOpenAI, AzureChatOpenAICompletions, type AzureChatOpenAIFields, AzureChatOpenAIResponses, AzureOpenAI, AzureOpenAIChatInput, AzureOpenAIEmbeddings, AzureOpenAIInput, BaseChatOpenAI, type BaseChatOpenAICallOptions, type BaseChatOpenAIFields, ChatOpenAI, type ChatOpenAICallOptions, ChatOpenAICompletions, type ChatOpenAICompletionsCallOptions, type ChatOpenAIFields, ChatOpenAIReasoningSummary, ChatOpenAIResponseFormat, ChatOpenAIResponses, type ChatOpenAIResponsesCallOptions, type ClientOptions, CodeInterpreterAutoContainer, CodeInterpreterMemoryLimit, CodeInterpreterOptions, CodeInterpreterTool, ComputerUseAction, ComputerUseClickAction, ComputerUseDoubleClickAction, ComputerUseDragAction, ComputerUseEnvironment, ComputerUseInput, ComputerUseKeypressAction, ComputerUseMoveAction, ComputerUseOptions, ComputerUseScreenshotAction, ComputerUseScrollAction, ComputerUseTool, ComputerUseTypeAction, ComputerUseWaitAction, DallEAPIWrapper, DallEAPIWrapperParams, FileSearchComparisonFilter, FileSearchComparisonType, FileSearchCompoundFilter, FileSearchFilter, FileSearchHybridSearchWeights, FileSearchOptions, FileSearchRankingOptions, FileSearchTool, HeadersLike, ImageGenerationInputMask, ImageGenerationOptions, ImageGenerationTool, LocalShellAction, LocalShellOptions, LocalShellTool, McpApprovalFilter, McpConnectorId, McpConnectorOptions, McpRemoteServerOptions, McpTool, McpToolFilter, OpenAI, OpenAIApiKey, OpenAIBaseInput, OpenAICacheRetentionParam, type OpenAICallOptions, type OpenAIChatInput, OpenAIChatModelId, OpenAIClient, OpenAICoreRequestOptions, OpenAIEmbeddingModelId, OpenAIEmbeddings, OpenAIEmbeddingsParams, OpenAIEndpointConfig, OpenAIImageModelId, OpenAIInput, OpenAIVerbosityParam, ResponseFormatConfiguration, ResponsesCreate, ResponsesCreateInvoke, ResponsesInputItem, ResponsesParse, ResponsesParseInvoke, ShellAction, ShellCallOutcome, ShellCommandOutput, ShellOptions, ShellResult, ShellTool, TiktokenModel, ToolSearchOptions, ToolSearchTool, WebSearchFilters, WebSearchOptions, WebSearchTool, completionsApiContentBlockConverter, convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams, convertMessagesToResponsesInput, convertPromptToOpenAI, convertReasoningSummaryToResponsesReasoningItem, convertResponsesDeltaToChatGenerationChunk, convertResponsesMessageToAIMessage, convertResponsesUsageToUsageMetadata, convertStandardContentBlockToCompletionsContentPart, convertStandardContentMessageToCompletionsMessage, convertStandardContentMessageToResponsesInput, customTool, getEndpoint, getFormattedEnv, getHeadersWithUserAgent, isHeaders, messageToOpenAIRole, normalizeHeaders, toFile, tools, wrapOpenAIClientError };
package/dist/index.d.ts CHANGED
@@ -23,12 +23,12 @@ import { ComputerUseAction, ComputerUseClickAction, ComputerUseDoubleClickAction
23
23
  import { LocalShellAction, LocalShellOptions, LocalShellTool } from "./tools/localShell.js";
24
24
  import { ShellAction, ShellCallOutcome, ShellCommandOutput, ShellOptions, ShellResult, ShellTool } from "./tools/shell.js";
25
25
  import { ApplyPatchCreateFileOperation, ApplyPatchDeleteFileOperation, ApplyPatchOperation, ApplyPatchOptions, ApplyPatchTool, ApplyPatchUpdateFileOperation } from "./tools/applyPatch.js";
26
+ import { ToolSearchOptions, ToolSearchTool } from "./tools/toolSearch.js";
26
27
  import { tools } from "./tools/index.js";
27
28
  import { customTool } from "./tools/custom.js";
28
29
  import { convertPromptToOpenAI } from "./utils/prompts.js";
29
30
  import { messageToOpenAIRole } from "./utils/misc.js";
30
31
  import { completionsApiContentBlockConverter, convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams, convertStandardContentBlockToCompletionsContentPart, convertStandardContentMessageToCompletionsMessage } from "./converters/completions.js";
31
32
  import { ResponsesCreate, ResponsesCreateInvoke, ResponsesInputItem, ResponsesParse, ResponsesParseInvoke, convertMessagesToResponsesInput, convertReasoningSummaryToResponsesReasoningItem, convertResponsesDeltaToChatGenerationChunk, convertResponsesMessageToAIMessage, convertResponsesUsageToUsageMetadata, convertStandardContentMessageToResponsesInput } from "./converters/responses.js";
32
- import "./converters/index.js";
33
33
  import { ClientOptions, OpenAI as OpenAIClient, toFile } from "openai";
34
- export { ApplyPatchCreateFileOperation, ApplyPatchDeleteFileOperation, ApplyPatchOperation, ApplyPatchOptions, ApplyPatchTool, ApplyPatchUpdateFileOperation, AzureChatOpenAI, AzureChatOpenAICompletions, type AzureChatOpenAIFields, AzureChatOpenAIResponses, AzureOpenAI, AzureOpenAIChatInput, AzureOpenAIEmbeddings, AzureOpenAIInput, BaseChatOpenAI, type BaseChatOpenAICallOptions, type BaseChatOpenAIFields, ChatOpenAI, type ChatOpenAICallOptions, ChatOpenAICompletions, type ChatOpenAICompletionsCallOptions, type ChatOpenAIFields, ChatOpenAIReasoningSummary, ChatOpenAIResponseFormat, ChatOpenAIResponses, type ChatOpenAIResponsesCallOptions, type ClientOptions, CodeInterpreterAutoContainer, CodeInterpreterMemoryLimit, CodeInterpreterOptions, CodeInterpreterTool, ComputerUseAction, ComputerUseClickAction, ComputerUseDoubleClickAction, ComputerUseDragAction, ComputerUseEnvironment, ComputerUseInput, ComputerUseKeypressAction, ComputerUseMoveAction, ComputerUseOptions, ComputerUseScreenshotAction, ComputerUseScrollAction, ComputerUseTool, ComputerUseTypeAction, ComputerUseWaitAction, DallEAPIWrapper, DallEAPIWrapperParams, FileSearchComparisonFilter, FileSearchComparisonType, FileSearchCompoundFilter, FileSearchFilter, FileSearchHybridSearchWeights, FileSearchOptions, FileSearchRankingOptions, FileSearchTool, HeadersLike, ImageGenerationInputMask, ImageGenerationOptions, ImageGenerationTool, LocalShellAction, LocalShellOptions, LocalShellTool, McpApprovalFilter, McpConnectorId, McpConnectorOptions, McpRemoteServerOptions, McpTool, McpToolFilter, OpenAI, OpenAIApiKey, OpenAIBaseInput, OpenAICacheRetentionParam, type OpenAICallOptions, type OpenAIChatInput, OpenAIChatModelId, OpenAIClient, OpenAICoreRequestOptions, OpenAIEmbeddingModelId, OpenAIEmbeddings, OpenAIEmbeddingsParams, OpenAIEndpointConfig, OpenAIImageModelId, OpenAIInput, OpenAIVerbosityParam, ResponseFormatConfiguration, ResponsesCreate, ResponsesCreateInvoke, ResponsesInputItem, ResponsesParse, ResponsesParseInvoke, ShellAction, ShellCallOutcome, ShellCommandOutput, ShellOptions, ShellResult, ShellTool, TiktokenModel, WebSearchFilters, WebSearchOptions, WebSearchTool, completionsApiContentBlockConverter, convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams, convertMessagesToResponsesInput, convertPromptToOpenAI, convertReasoningSummaryToResponsesReasoningItem, convertResponsesDeltaToChatGenerationChunk, convertResponsesMessageToAIMessage, convertResponsesUsageToUsageMetadata, convertStandardContentBlockToCompletionsContentPart, convertStandardContentMessageToCompletionsMessage, convertStandardContentMessageToResponsesInput, customTool, getEndpoint, getFormattedEnv, getHeadersWithUserAgent, isHeaders, messageToOpenAIRole, normalizeHeaders, toFile, tools, wrapOpenAIClientError };
34
+ export { ApplyPatchCreateFileOperation, ApplyPatchDeleteFileOperation, ApplyPatchOperation, ApplyPatchOptions, ApplyPatchTool, ApplyPatchUpdateFileOperation, AzureChatOpenAI, AzureChatOpenAICompletions, type AzureChatOpenAIFields, AzureChatOpenAIResponses, AzureOpenAI, AzureOpenAIChatInput, AzureOpenAIEmbeddings, AzureOpenAIInput, BaseChatOpenAI, type BaseChatOpenAICallOptions, type BaseChatOpenAIFields, ChatOpenAI, type ChatOpenAICallOptions, ChatOpenAICompletions, type ChatOpenAICompletionsCallOptions, type ChatOpenAIFields, ChatOpenAIReasoningSummary, ChatOpenAIResponseFormat, ChatOpenAIResponses, type ChatOpenAIResponsesCallOptions, type ClientOptions, CodeInterpreterAutoContainer, CodeInterpreterMemoryLimit, CodeInterpreterOptions, CodeInterpreterTool, ComputerUseAction, ComputerUseClickAction, ComputerUseDoubleClickAction, ComputerUseDragAction, ComputerUseEnvironment, ComputerUseInput, ComputerUseKeypressAction, ComputerUseMoveAction, ComputerUseOptions, ComputerUseScreenshotAction, ComputerUseScrollAction, ComputerUseTool, ComputerUseTypeAction, ComputerUseWaitAction, DallEAPIWrapper, DallEAPIWrapperParams, FileSearchComparisonFilter, FileSearchComparisonType, FileSearchCompoundFilter, FileSearchFilter, FileSearchHybridSearchWeights, FileSearchOptions, FileSearchRankingOptions, FileSearchTool, HeadersLike, ImageGenerationInputMask, ImageGenerationOptions, ImageGenerationTool, LocalShellAction, LocalShellOptions, LocalShellTool, McpApprovalFilter, McpConnectorId, McpConnectorOptions, McpRemoteServerOptions, McpTool, McpToolFilter, OpenAI, OpenAIApiKey, OpenAIBaseInput, OpenAICacheRetentionParam, type OpenAICallOptions, type OpenAIChatInput, OpenAIChatModelId, OpenAIClient, OpenAICoreRequestOptions, OpenAIEmbeddingModelId, OpenAIEmbeddings, OpenAIEmbeddingsParams, OpenAIEndpointConfig, OpenAIImageModelId, OpenAIInput, OpenAIVerbosityParam, ResponseFormatConfiguration, ResponsesCreate, ResponsesCreateInvoke, ResponsesInputItem, ResponsesParse, ResponsesParseInvoke, ShellAction, ShellCallOutcome, ShellCommandOutput, ShellOptions, ShellResult, ShellTool, TiktokenModel, ToolSearchOptions, ToolSearchTool, WebSearchFilters, WebSearchOptions, WebSearchTool, completionsApiContentBlockConverter, convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams, convertMessagesToResponsesInput, convertPromptToOpenAI, convertReasoningSummaryToResponsesReasoningItem, convertResponsesDeltaToChatGenerationChunk, convertResponsesMessageToAIMessage, convertResponsesUsageToUsageMetadata, convertStandardContentBlockToCompletionsContentPart, convertStandardContentMessageToCompletionsMessage, convertStandardContentMessageToResponsesInput, customTool, getEndpoint, getFormattedEnv, getHeadersWithUserAgent, isHeaders, messageToOpenAIRole, normalizeHeaders, toFile, tools, wrapOpenAIClientError };
package/dist/index.js CHANGED
@@ -20,5 +20,4 @@ import { customTool } from "./tools/custom.js";
20
20
  import { convertPromptToOpenAI } from "./utils/prompts.js";
21
21
  import "./converters/index.js";
22
22
  import { OpenAI as OpenAIClient, toFile } from "openai";
23
-
24
- export { AzureChatOpenAI, AzureChatOpenAICompletions, AzureChatOpenAIResponses, AzureOpenAI, AzureOpenAIEmbeddings, BaseChatOpenAI, ChatOpenAI, ChatOpenAICompletions, ChatOpenAIResponses, DallEAPIWrapper, OpenAI, OpenAIClient, OpenAIEmbeddings, completionsApiContentBlockConverter, convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams, convertMessagesToResponsesInput, convertPromptToOpenAI, convertReasoningSummaryToResponsesReasoningItem, convertResponsesDeltaToChatGenerationChunk, convertResponsesMessageToAIMessage, convertResponsesUsageToUsageMetadata, convertStandardContentBlockToCompletionsContentPart, convertStandardContentMessageToCompletionsMessage, convertStandardContentMessageToResponsesInput, customTool, getEndpoint, getFormattedEnv, getHeadersWithUserAgent, isHeaders, messageToOpenAIRole, normalizeHeaders, toFile, tools, wrapOpenAIClientError };
23
+ export { AzureChatOpenAI, AzureChatOpenAICompletions, AzureChatOpenAIResponses, AzureOpenAI, AzureOpenAIEmbeddings, BaseChatOpenAI, ChatOpenAI, ChatOpenAICompletions, ChatOpenAIResponses, DallEAPIWrapper, OpenAI, OpenAIClient, OpenAIEmbeddings, completionsApiContentBlockConverter, convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams, convertMessagesToResponsesInput, convertPromptToOpenAI, convertReasoningSummaryToResponsesReasoningItem, convertResponsesDeltaToChatGenerationChunk, convertResponsesMessageToAIMessage, convertResponsesUsageToUsageMetadata, convertStandardContentBlockToCompletionsContentPart, convertStandardContentMessageToCompletionsMessage, convertStandardContentMessageToResponsesInput, customTool, getEndpoint, getFormattedEnv, getHeadersWithUserAgent, isHeaders, messageToOpenAIRole, normalizeHeaders, toFile, tools, wrapOpenAIClientError };
package/dist/llms.cjs CHANGED
@@ -1,12 +1,11 @@
1
- const require_client = require('./utils/client.cjs');
2
- const require_azure = require('./utils/azure.cjs');
1
+ const require_client = require("./utils/client.cjs");
2
+ const require_azure = require("./utils/azure.cjs");
3
3
  let openai = require("openai");
4
4
  let _langchain_core_outputs = require("@langchain/core/outputs");
5
5
  let _langchain_core_utils_env = require("@langchain/core/utils/env");
6
6
  let _langchain_core_language_models_base = require("@langchain/core/language_models/base");
7
7
  let _langchain_core_language_models_llms = require("@langchain/core/language_models/llms");
8
8
  let _langchain_core_utils_chunk_array = require("@langchain/core/utils/chunk_array");
9
-
10
9
  //#region src/llms.ts
11
10
  /**
12
11
  * Wrapper around OpenAI large language models.
@@ -83,7 +82,7 @@ var OpenAI = class extends _langchain_core_language_models_llms.BaseLLM {
83
82
  clientConfig;
84
83
  constructor(fields) {
85
84
  super(fields ?? {});
86
- this._addVersion("@langchain/openai", "1.2.13");
85
+ this._addVersion("@langchain/openai", "1.3.0-dev-1773698445534");
87
86
  this.openAIApiKey = fields?.apiKey ?? fields?.openAIApiKey ?? (0, _langchain_core_utils_env.getEnvironmentVariable)("OPENAI_API_KEY");
88
87
  this.apiKey = this.openAIApiKey;
89
88
  this.organization = fields?.configuration?.organization ?? (0, _langchain_core_utils_env.getEnvironmentVariable)("OPENAI_ORGANIZATION");
@@ -304,7 +303,7 @@ var OpenAI = class extends _langchain_core_language_models_llms.BaseLLM {
304
303
  return "openai";
305
304
  }
306
305
  };
307
-
308
306
  //#endregion
309
307
  exports.OpenAI = OpenAI;
308
+
310
309
  //# sourceMappingURL=llms.cjs.map
package/dist/llms.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llms.cjs","names":["BaseLLM","GenerationChunk","wrapOpenAIClientError","getEndpoint","getHeadersWithUserAgent","OpenAIClient"],"sources":["../src/llms.ts"],"sourcesContent":["import type { TiktokenModel } from \"js-tiktoken/lite\";\nimport { type ClientOptions, OpenAI as OpenAIClient } from \"openai\";\nimport { calculateMaxTokens } from \"@langchain/core/language_models/base\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { GenerationChunk, type LLMResult } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport {\n BaseLLM,\n type BaseLLMParams,\n} from \"@langchain/core/language_models/llms\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\nimport type {\n OpenAIApiKey,\n OpenAICallOptions,\n OpenAICoreRequestOptions,\n OpenAIInput,\n} from \"./types.js\";\nimport {\n OpenAIEndpointConfig,\n getEndpoint,\n getHeadersWithUserAgent,\n} from \"./utils/azure.js\";\nimport { wrapOpenAIClientError } from \"./utils/client.js\";\n\nexport type { OpenAICallOptions, OpenAIInput };\n\n/**\n * Interface for tracking token usage in OpenAI calls.\n */\ninterface TokenUsage {\n completionTokens?: number;\n promptTokens?: number;\n totalTokens?: number;\n}\n\n/**\n * Wrapper around OpenAI large language models.\n *\n * To use you should have the `openai` package installed, with the\n * `OPENAI_API_KEY` environment variable set.\n *\n * To use with Azure, import the `AzureOpenAI` class.\n *\n * @remarks\n * Any parameters that are valid to be passed to {@link\n * https://platform.openai.com/docs/api-reference/completions/create |\n * `openai.createCompletion`} can be passed through {@link modelKwargs}, even\n * if not explicitly available on this class.\n * @example\n * ```typescript\n * const model = new OpenAI({\n * modelName: \"gpt-4\",\n * temperature: 0.7,\n * maxTokens: 1000,\n * maxRetries: 5,\n * });\n *\n * const res = await model.invoke(\n * \"Question: What would be a good company name for a company that makes colorful socks?\\nAnswer:\"\n * );\n * console.log({ res });\n * ```\n */\nexport class OpenAI<CallOptions extends OpenAICallOptions = OpenAICallOptions>\n extends BaseLLM<CallOptions>\n implements Partial<OpenAIInput>\n{\n static lc_name() {\n return \"OpenAI\";\n }\n\n get callKeys() {\n return [...super.callKeys, \"options\"];\n }\n\n lc_serializable = true;\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n openAIApiKey: \"OPENAI_API_KEY\",\n apiKey: \"OPENAI_API_KEY\",\n organization: \"OPENAI_ORGANIZATION\",\n };\n }\n\n get lc_aliases(): Record<string, string> {\n return {\n modelName: \"model\",\n openAIApiKey: \"openai_api_key\",\n apiKey: \"openai_api_key\",\n };\n }\n\n temperature?: number;\n\n maxTokens?: number;\n\n topP?: number;\n\n frequencyPenalty?: number;\n\n presencePenalty?: number;\n\n n = 1;\n\n bestOf?: number;\n\n logitBias?: Record<string, number>;\n\n model = \"gpt-3.5-turbo-instruct\";\n\n /** @deprecated Use \"model\" instead */\n modelName: string;\n\n modelKwargs?: OpenAIInput[\"modelKwargs\"];\n\n batchSize = 20;\n\n timeout?: number;\n\n stop?: string[];\n\n stopSequences?: string[];\n\n user?: string;\n\n streaming = false;\n\n openAIApiKey?: OpenAIApiKey;\n\n apiKey?: OpenAIApiKey;\n\n organization?: string;\n\n protected client: OpenAIClient;\n\n protected clientConfig: ClientOptions;\n\n constructor(\n fields?: Partial<OpenAIInput> &\n BaseLLMParams & {\n configuration?: ClientOptions;\n }\n ) {\n super(fields ?? {});\n this._addVersion(\"@langchain/openai\", __PKG_VERSION__);\n\n this.openAIApiKey =\n fields?.apiKey ??\n fields?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n this.apiKey = this.openAIApiKey;\n\n this.organization =\n fields?.configuration?.organization ??\n getEnvironmentVariable(\"OPENAI_ORGANIZATION\");\n\n this.model = fields?.model ?? fields?.modelName ?? this.model;\n if (\n (this.model?.startsWith(\"gpt-3.5-turbo\") ||\n this.model?.startsWith(\"gpt-4\") ||\n this.model?.startsWith(\"o1\")) &&\n !this.model?.includes(\"-instruct\")\n ) {\n throw new Error(\n [\n `Your chosen OpenAI model, \"${this.model}\", is a chat model and not a text-in/text-out LLM.`,\n `Passing it into the \"OpenAI\" class is no longer supported.`,\n `Please use the \"ChatOpenAI\" class instead.`,\n \"\",\n `See this page for more information:`,\n \"|\",\n `└> https://js.langchain.com/docs/integrations/chat/openai`,\n ].join(\"\\n\")\n );\n }\n this.modelName = this.model;\n this.modelKwargs = fields?.modelKwargs ?? {};\n this.batchSize = fields?.batchSize ?? this.batchSize;\n this.timeout = fields?.timeout;\n\n this.temperature = fields?.temperature ?? this.temperature;\n this.maxTokens = fields?.maxTokens ?? this.maxTokens;\n this.topP = fields?.topP ?? this.topP;\n this.frequencyPenalty = fields?.frequencyPenalty ?? this.frequencyPenalty;\n this.presencePenalty = fields?.presencePenalty ?? this.presencePenalty;\n this.n = fields?.n ?? this.n;\n this.bestOf = fields?.bestOf ?? this.bestOf;\n this.logitBias = fields?.logitBias;\n this.stop = fields?.stopSequences ?? fields?.stop;\n this.stopSequences = this.stop;\n this.user = fields?.user;\n\n this.streaming = fields?.streaming ?? false;\n\n if (this.streaming && this.bestOf && this.bestOf > 1) {\n throw new Error(\"Cannot stream results when bestOf > 1\");\n }\n\n this.clientConfig = {\n apiKey: this.apiKey,\n organization: this.organization,\n dangerouslyAllowBrowser: true,\n ...fields?.configuration,\n };\n }\n\n /**\n * Get the parameters used to invoke the model\n */\n invocationParams(\n options?: this[\"ParsedCallOptions\"]\n ): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> {\n return {\n model: this.model,\n temperature: this.temperature,\n max_tokens: this.maxTokens,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n n: this.n,\n best_of: this.bestOf,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n stream: this.streaming,\n ...this.modelKwargs,\n };\n }\n\n /** @ignore */\n _identifyingParams(): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> & {\n model_name: string;\n } & ClientOptions {\n return {\n model_name: this.model,\n ...this.invocationParams(),\n ...this.clientConfig,\n };\n }\n\n /**\n * Get the identifying parameters for the model\n */\n identifyingParams(): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> & {\n model_name: string;\n } & ClientOptions {\n return this._identifyingParams();\n }\n\n /**\n * Call out to OpenAI's endpoint with k unique prompts\n *\n * @param [prompts] - The prompts to pass into the model.\n * @param [options] - Optional list of stop words to use when generating.\n * @param [runManager] - Optional callback manager to use when generating.\n *\n * @returns The full LLM output.\n *\n * @example\n * ```ts\n * import { OpenAI } from \"langchain/llms/openai\";\n * const openai = new OpenAI();\n * const response = await openai.generate([\"Tell me a joke.\"]);\n * ```\n */\n async _generate(\n prompts: string[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<LLMResult> {\n const subPrompts = chunkArray(prompts, this.batchSize);\n const choices: OpenAIClient.CompletionChoice[] = [];\n const tokenUsage: TokenUsage = {};\n\n const params = this.invocationParams(options);\n\n if (params.max_tokens === -1) {\n if (prompts.length !== 1) {\n throw new Error(\n \"max_tokens set to -1 not supported for multiple inputs\"\n );\n }\n params.max_tokens = await calculateMaxTokens({\n prompt: prompts[0],\n // Cast here to allow for other models that may not fit the union\n modelName: this.model as TiktokenModel,\n });\n }\n\n for (let i = 0; i < subPrompts.length; i += 1) {\n const data = params.stream\n ? await (async () => {\n const choices: OpenAIClient.CompletionChoice[] = [];\n let response: Omit<OpenAIClient.Completion, \"choices\"> | undefined;\n const stream = await this.completionWithRetry(\n {\n ...params,\n stream: true,\n prompt: subPrompts[i],\n },\n options\n );\n for await (const message of stream) {\n // on the first message set the response properties\n if (!response) {\n response = {\n id: message.id,\n object: message.object,\n created: message.created,\n model: message.model,\n };\n }\n\n // on all messages, update choice\n for (const part of message.choices) {\n if (!choices[part.index]) {\n choices[part.index] = part;\n } else {\n const choice = choices[part.index];\n choice.text += part.text;\n choice.finish_reason = part.finish_reason;\n choice.logprobs = part.logprobs;\n }\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(part.text, {\n prompt: Math.floor(part.index / this.n),\n completion: part.index % this.n,\n });\n }\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n return { ...response, choices };\n })()\n : await this.completionWithRetry(\n {\n ...params,\n stream: false,\n prompt: subPrompts[i],\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n\n choices.push(...data.choices);\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n } = data.usage\n ? data.usage\n : {\n completion_tokens: undefined,\n prompt_tokens: undefined,\n total_tokens: undefined,\n };\n\n if (completionTokens) {\n tokenUsage.completionTokens =\n (tokenUsage.completionTokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n tokenUsage.promptTokens = (tokenUsage.promptTokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n tokenUsage.totalTokens = (tokenUsage.totalTokens ?? 0) + totalTokens;\n }\n }\n\n const generations = chunkArray(choices, this.n).map((promptChoices) =>\n promptChoices.map((choice) => ({\n text: choice.text ?? \"\",\n generationInfo: {\n finishReason: choice.finish_reason,\n logprobs: choice.logprobs,\n },\n }))\n );\n return {\n generations,\n llmOutput: { tokenUsage },\n };\n }\n\n // TODO(jacoblee): Refactor with _generate(..., {stream: true}) implementation?\n async *_streamResponseChunks(\n input: string,\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<GenerationChunk> {\n const params = {\n ...this.invocationParams(options),\n prompt: input,\n stream: true as const,\n };\n const stream = await this.completionWithRetry(params, options);\n for await (const data of stream) {\n const choice = data?.choices[0];\n if (!choice) {\n continue;\n }\n const chunk = new GenerationChunk({\n text: choice.text,\n generationInfo: {\n finishReason: choice.finish_reason,\n },\n });\n yield chunk;\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(chunk.text ?? \"\");\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n /**\n * Calls the OpenAI API with retry logic in case of failures.\n * @param request The request to send to the OpenAI API.\n * @param options Optional configuration for the API call.\n * @returns The response from the OpenAI API.\n */\n async completionWithRetry(\n request: OpenAIClient.CompletionCreateParamsStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Completion>>;\n\n async completionWithRetry(\n request: OpenAIClient.CompletionCreateParamsNonStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<OpenAIClient.Completions.Completion>;\n\n async completionWithRetry(\n request:\n | OpenAIClient.CompletionCreateParamsStreaming\n | OpenAIClient.CompletionCreateParamsNonStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<\n AsyncIterable<OpenAIClient.Completion> | OpenAIClient.Completions.Completion\n > {\n const requestOptions = this._getClientOptions(options);\n return this.caller.call(async () => {\n try {\n const res = await this.client.completions.create(\n request,\n requestOptions\n );\n return res;\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n\n /**\n * Calls the OpenAI API with retry logic in case of failures.\n * @param request The request to send to the OpenAI API.\n * @param options Optional configuration for the API call.\n * @returns The response from the OpenAI API.\n */\n protected _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!this.client) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!params.baseURL) {\n delete params.baseURL;\n }\n\n params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);\n\n this.client = new OpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n _llmType() {\n return \"openai\";\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"llms.cjs","names":["BaseLLM","GenerationChunk","wrapOpenAIClientError","getEndpoint","getHeadersWithUserAgent","OpenAIClient"],"sources":["../src/llms.ts"],"sourcesContent":["import type { TiktokenModel } from \"js-tiktoken/lite\";\nimport { type ClientOptions, OpenAI as OpenAIClient } from \"openai\";\nimport { calculateMaxTokens } from \"@langchain/core/language_models/base\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { GenerationChunk, type LLMResult } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport {\n BaseLLM,\n type BaseLLMParams,\n} from \"@langchain/core/language_models/llms\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\nimport type {\n OpenAIApiKey,\n OpenAICallOptions,\n OpenAICoreRequestOptions,\n OpenAIInput,\n} from \"./types.js\";\nimport {\n OpenAIEndpointConfig,\n getEndpoint,\n getHeadersWithUserAgent,\n} from \"./utils/azure.js\";\nimport { wrapOpenAIClientError } from \"./utils/client.js\";\n\nexport type { OpenAICallOptions, OpenAIInput };\n\n/**\n * Interface for tracking token usage in OpenAI calls.\n */\ninterface TokenUsage {\n completionTokens?: number;\n promptTokens?: number;\n totalTokens?: number;\n}\n\n/**\n * Wrapper around OpenAI large language models.\n *\n * To use you should have the `openai` package installed, with the\n * `OPENAI_API_KEY` environment variable set.\n *\n * To use with Azure, import the `AzureOpenAI` class.\n *\n * @remarks\n * Any parameters that are valid to be passed to {@link\n * https://platform.openai.com/docs/api-reference/completions/create |\n * `openai.createCompletion`} can be passed through {@link modelKwargs}, even\n * if not explicitly available on this class.\n * @example\n * ```typescript\n * const model = new OpenAI({\n * modelName: \"gpt-4\",\n * temperature: 0.7,\n * maxTokens: 1000,\n * maxRetries: 5,\n * });\n *\n * const res = await model.invoke(\n * \"Question: What would be a good company name for a company that makes colorful socks?\\nAnswer:\"\n * );\n * console.log({ res });\n * ```\n */\nexport class OpenAI<CallOptions extends OpenAICallOptions = OpenAICallOptions>\n extends BaseLLM<CallOptions>\n implements Partial<OpenAIInput>\n{\n static lc_name() {\n return \"OpenAI\";\n }\n\n get callKeys() {\n return [...super.callKeys, \"options\"];\n }\n\n lc_serializable = true;\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n openAIApiKey: \"OPENAI_API_KEY\",\n apiKey: \"OPENAI_API_KEY\",\n organization: \"OPENAI_ORGANIZATION\",\n };\n }\n\n get lc_aliases(): Record<string, string> {\n return {\n modelName: \"model\",\n openAIApiKey: \"openai_api_key\",\n apiKey: \"openai_api_key\",\n };\n }\n\n temperature?: number;\n\n maxTokens?: number;\n\n topP?: number;\n\n frequencyPenalty?: number;\n\n presencePenalty?: number;\n\n n = 1;\n\n bestOf?: number;\n\n logitBias?: Record<string, number>;\n\n model = \"gpt-3.5-turbo-instruct\";\n\n /** @deprecated Use \"model\" instead */\n modelName: string;\n\n modelKwargs?: OpenAIInput[\"modelKwargs\"];\n\n batchSize = 20;\n\n timeout?: number;\n\n stop?: string[];\n\n stopSequences?: string[];\n\n user?: string;\n\n streaming = false;\n\n openAIApiKey?: OpenAIApiKey;\n\n apiKey?: OpenAIApiKey;\n\n organization?: string;\n\n protected client: OpenAIClient;\n\n protected clientConfig: ClientOptions;\n\n constructor(\n fields?: Partial<OpenAIInput> &\n BaseLLMParams & {\n configuration?: ClientOptions;\n }\n ) {\n super(fields ?? {});\n this._addVersion(\"@langchain/openai\", __PKG_VERSION__);\n\n this.openAIApiKey =\n fields?.apiKey ??\n fields?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n this.apiKey = this.openAIApiKey;\n\n this.organization =\n fields?.configuration?.organization ??\n getEnvironmentVariable(\"OPENAI_ORGANIZATION\");\n\n this.model = fields?.model ?? fields?.modelName ?? this.model;\n if (\n (this.model?.startsWith(\"gpt-3.5-turbo\") ||\n this.model?.startsWith(\"gpt-4\") ||\n this.model?.startsWith(\"o1\")) &&\n !this.model?.includes(\"-instruct\")\n ) {\n throw new Error(\n [\n `Your chosen OpenAI model, \"${this.model}\", is a chat model and not a text-in/text-out LLM.`,\n `Passing it into the \"OpenAI\" class is no longer supported.`,\n `Please use the \"ChatOpenAI\" class instead.`,\n \"\",\n `See this page for more information:`,\n \"|\",\n `└> https://js.langchain.com/docs/integrations/chat/openai`,\n ].join(\"\\n\")\n );\n }\n this.modelName = this.model;\n this.modelKwargs = fields?.modelKwargs ?? {};\n this.batchSize = fields?.batchSize ?? this.batchSize;\n this.timeout = fields?.timeout;\n\n this.temperature = fields?.temperature ?? this.temperature;\n this.maxTokens = fields?.maxTokens ?? this.maxTokens;\n this.topP = fields?.topP ?? this.topP;\n this.frequencyPenalty = fields?.frequencyPenalty ?? this.frequencyPenalty;\n this.presencePenalty = fields?.presencePenalty ?? this.presencePenalty;\n this.n = fields?.n ?? this.n;\n this.bestOf = fields?.bestOf ?? this.bestOf;\n this.logitBias = fields?.logitBias;\n this.stop = fields?.stopSequences ?? fields?.stop;\n this.stopSequences = this.stop;\n this.user = fields?.user;\n\n this.streaming = fields?.streaming ?? false;\n\n if (this.streaming && this.bestOf && this.bestOf > 1) {\n throw new Error(\"Cannot stream results when bestOf > 1\");\n }\n\n this.clientConfig = {\n apiKey: this.apiKey,\n organization: this.organization,\n dangerouslyAllowBrowser: true,\n ...fields?.configuration,\n };\n }\n\n /**\n * Get the parameters used to invoke the model\n */\n invocationParams(\n options?: this[\"ParsedCallOptions\"]\n ): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> {\n return {\n model: this.model,\n temperature: this.temperature,\n max_tokens: this.maxTokens,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n n: this.n,\n best_of: this.bestOf,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n stream: this.streaming,\n ...this.modelKwargs,\n };\n }\n\n /** @ignore */\n _identifyingParams(): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> & {\n model_name: string;\n } & ClientOptions {\n return {\n model_name: this.model,\n ...this.invocationParams(),\n ...this.clientConfig,\n };\n }\n\n /**\n * Get the identifying parameters for the model\n */\n identifyingParams(): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> & {\n model_name: string;\n } & ClientOptions {\n return this._identifyingParams();\n }\n\n /**\n * Call out to OpenAI's endpoint with k unique prompts\n *\n * @param [prompts] - The prompts to pass into the model.\n * @param [options] - Optional list of stop words to use when generating.\n * @param [runManager] - Optional callback manager to use when generating.\n *\n * @returns The full LLM output.\n *\n * @example\n * ```ts\n * import { OpenAI } from \"langchain/llms/openai\";\n * const openai = new OpenAI();\n * const response = await openai.generate([\"Tell me a joke.\"]);\n * ```\n */\n async _generate(\n prompts: string[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<LLMResult> {\n const subPrompts = chunkArray(prompts, this.batchSize);\n const choices: OpenAIClient.CompletionChoice[] = [];\n const tokenUsage: TokenUsage = {};\n\n const params = this.invocationParams(options);\n\n if (params.max_tokens === -1) {\n if (prompts.length !== 1) {\n throw new Error(\n \"max_tokens set to -1 not supported for multiple inputs\"\n );\n }\n params.max_tokens = await calculateMaxTokens({\n prompt: prompts[0],\n // Cast here to allow for other models that may not fit the union\n modelName: this.model as TiktokenModel,\n });\n }\n\n for (let i = 0; i < subPrompts.length; i += 1) {\n const data = params.stream\n ? await (async () => {\n const choices: OpenAIClient.CompletionChoice[] = [];\n let response: Omit<OpenAIClient.Completion, \"choices\"> | undefined;\n const stream = await this.completionWithRetry(\n {\n ...params,\n stream: true,\n prompt: subPrompts[i],\n },\n options\n );\n for await (const message of stream) {\n // on the first message set the response properties\n if (!response) {\n response = {\n id: message.id,\n object: message.object,\n created: message.created,\n model: message.model,\n };\n }\n\n // on all messages, update choice\n for (const part of message.choices) {\n if (!choices[part.index]) {\n choices[part.index] = part;\n } else {\n const choice = choices[part.index];\n choice.text += part.text;\n choice.finish_reason = part.finish_reason;\n choice.logprobs = part.logprobs;\n }\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(part.text, {\n prompt: Math.floor(part.index / this.n),\n completion: part.index % this.n,\n });\n }\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n return { ...response, choices };\n })()\n : await this.completionWithRetry(\n {\n ...params,\n stream: false,\n prompt: subPrompts[i],\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n\n choices.push(...data.choices);\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n } = data.usage\n ? data.usage\n : {\n completion_tokens: undefined,\n prompt_tokens: undefined,\n total_tokens: undefined,\n };\n\n if (completionTokens) {\n tokenUsage.completionTokens =\n (tokenUsage.completionTokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n tokenUsage.promptTokens = (tokenUsage.promptTokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n tokenUsage.totalTokens = (tokenUsage.totalTokens ?? 0) + totalTokens;\n }\n }\n\n const generations = chunkArray(choices, this.n).map((promptChoices) =>\n promptChoices.map((choice) => ({\n text: choice.text ?? \"\",\n generationInfo: {\n finishReason: choice.finish_reason,\n logprobs: choice.logprobs,\n },\n }))\n );\n return {\n generations,\n llmOutput: { tokenUsage },\n };\n }\n\n // TODO(jacoblee): Refactor with _generate(..., {stream: true}) implementation?\n async *_streamResponseChunks(\n input: string,\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<GenerationChunk> {\n const params = {\n ...this.invocationParams(options),\n prompt: input,\n stream: true as const,\n };\n const stream = await this.completionWithRetry(params, options);\n for await (const data of stream) {\n const choice = data?.choices[0];\n if (!choice) {\n continue;\n }\n const chunk = new GenerationChunk({\n text: choice.text,\n generationInfo: {\n finishReason: choice.finish_reason,\n },\n });\n yield chunk;\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(chunk.text ?? \"\");\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n /**\n * Calls the OpenAI API with retry logic in case of failures.\n * @param request The request to send to the OpenAI API.\n * @param options Optional configuration for the API call.\n * @returns The response from the OpenAI API.\n */\n async completionWithRetry(\n request: OpenAIClient.CompletionCreateParamsStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Completion>>;\n\n async completionWithRetry(\n request: OpenAIClient.CompletionCreateParamsNonStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<OpenAIClient.Completions.Completion>;\n\n async completionWithRetry(\n request:\n | OpenAIClient.CompletionCreateParamsStreaming\n | OpenAIClient.CompletionCreateParamsNonStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<\n AsyncIterable<OpenAIClient.Completion> | OpenAIClient.Completions.Completion\n > {\n const requestOptions = this._getClientOptions(options);\n return this.caller.call(async () => {\n try {\n const res = await this.client.completions.create(\n request,\n requestOptions\n );\n return res;\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n\n /**\n * Calls the OpenAI API with retry logic in case of failures.\n * @param request The request to send to the OpenAI API.\n * @param options Optional configuration for the API call.\n * @returns The response from the OpenAI API.\n */\n protected _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!this.client) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!params.baseURL) {\n delete params.baseURL;\n }\n\n params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);\n\n this.client = new OpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n _llmType() {\n return \"openai\";\n }\n}\n"],"mappings":"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"}
package/dist/llms.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { OpenAIApiKey, OpenAICallOptions, OpenAICoreRequestOptions, OpenAIInput } from "./types.cjs";
2
- import { ClientOptions, OpenAI as OpenAI$1 } from "openai";
2
+ import { ClientOptions, OpenAI } from "openai";
3
3
  import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
4
4
  import { GenerationChunk, LLMResult } from "@langchain/core/outputs";
5
5
  import { BaseLLM, BaseLLMParams } from "@langchain/core/language_models/llms";
@@ -62,7 +62,7 @@ declare class OpenAI$2<CallOptions extends OpenAICallOptions = OpenAICallOptions
62
62
  openAIApiKey?: OpenAIApiKey;
63
63
  apiKey?: OpenAIApiKey;
64
64
  organization?: string;
65
- protected client: OpenAI$1;
65
+ protected client: OpenAI;
66
66
  protected clientConfig: ClientOptions;
67
67
  constructor(fields?: Partial<OpenAIInput> & BaseLLMParams & {
68
68
  configuration?: ClientOptions;
@@ -70,15 +70,15 @@ declare class OpenAI$2<CallOptions extends OpenAICallOptions = OpenAICallOptions
70
70
  /**
71
71
  * Get the parameters used to invoke the model
72
72
  */
73
- invocationParams(options?: this["ParsedCallOptions"]): Omit<OpenAI$1.CompletionCreateParams, "prompt">;
73
+ invocationParams(options?: this["ParsedCallOptions"]): Omit<OpenAI.CompletionCreateParams, "prompt">;
74
74
  /** @ignore */
75
- _identifyingParams(): Omit<OpenAI$1.CompletionCreateParams, "prompt"> & {
75
+ _identifyingParams(): Omit<OpenAI.CompletionCreateParams, "prompt"> & {
76
76
  model_name: string;
77
77
  } & ClientOptions;
78
78
  /**
79
79
  * Get the identifying parameters for the model
80
80
  */
81
- identifyingParams(): Omit<OpenAI$1.CompletionCreateParams, "prompt"> & {
81
+ identifyingParams(): Omit<OpenAI.CompletionCreateParams, "prompt"> & {
82
82
  model_name: string;
83
83
  } & ClientOptions;
84
84
  /**
@@ -105,8 +105,8 @@ declare class OpenAI$2<CallOptions extends OpenAICallOptions = OpenAICallOptions
105
105
  * @param options Optional configuration for the API call.
106
106
  * @returns The response from the OpenAI API.
107
107
  */
108
- completionWithRetry(request: OpenAI$1.CompletionCreateParamsStreaming, options?: OpenAICoreRequestOptions): Promise<AsyncIterable<OpenAI$1.Completion>>;
109
- completionWithRetry(request: OpenAI$1.CompletionCreateParamsNonStreaming, options?: OpenAICoreRequestOptions): Promise<OpenAI$1.Completions.Completion>;
108
+ completionWithRetry(request: OpenAI.CompletionCreateParamsStreaming, options?: OpenAICoreRequestOptions): Promise<AsyncIterable<OpenAI.Completion>>;
109
+ completionWithRetry(request: OpenAI.CompletionCreateParamsNonStreaming, options?: OpenAICoreRequestOptions): Promise<OpenAI.Completions.Completion>;
110
110
  /**
111
111
  * Calls the OpenAI API with retry logic in case of failures.
112
112
  * @param request The request to send to the OpenAI API.
@@ -1 +1 @@
1
- {"version":3,"file":"llms.d.cts","names":[],"sources":["../src/llms.ts"],"mappings":";;;;;;;;AA+DA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,QAAA,qBAA2B,iBAAA,GAAoB,iBAAA,UAClD,OAAA,CAAQ,WAAA,aACL,OAAA,CAAQ,WAAA;EAAA,OAEZ,OAAA,CAAA;EAAA,IAIH,QAAA,CAAA;EAIJ,eAAA;EAAA,IAEI,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAAA,IAQjB,UAAA,CAAA,GAAc,MAAA;EAQlB,WAAA;EAEA,SAAA;EAEA,IAAA;EAEA,gBAAA;EAEA,eAAA;EAEA,CAAA;EAEA,MAAA;EAEA,SAAA,GAAY,MAAA;EAEZ,KAAA;EA5CW;EA+CX,SAAA;EAEA,WAAA,GAAc,WAAA;EAEd,SAAA;EAEA,OAAA;EAEA,IAAA;EAEA,aAAA;EAEA,IAAA;EAEA,SAAA;EAEA,YAAA,GAAe,YAAA;EAEf,MAAA,GAAS,YAAA;EAET,YAAA;EAAA,UAEU,MAAA,EAAQ,QAAA;EAAA,UAER,YAAA,EAAc,aAAA;EAExB,WAAA,CACE,MAAA,GAAS,OAAA,CAAQ,WAAA,IACf,aAAA;IACE,aAAA,GAAgB,aAAA;EAAA;EAhDtB;;;EAqHA,gBAAA,CACE,OAAA,+BACC,IAAA,CAAK,QAAA,CAAa,sBAAA;EA/GrB;EAkIA,kBAAA,CAAA,GAAsB,IAAA,CAAK,QAAA,CAAa,sBAAA;IACtC,UAAA;EAAA,IACE,aAAA;EA9HQ;;;EAyIZ,iBAAA,CAAA,GAAqB,IAAA,CAAK,QAAA,CAAa,sBAAA;IACrC,UAAA;EAAA,IACE,aAAA;EAhIJ;;;;;;;;;;;;;;;;EAoJM,SAAA,CACJ,OAAA,YACA,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,OAAA,CAAQ,SAAA;EAyHJ,qBAAA,CACL,KAAA,UACA,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,cAAA,CAAe,eAAA;EA9PZ;;;;;;EA+RA,mBAAA,CACJ,OAAA,EAAS,QAAA,CAAa,+BAAA,EACtB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA,CAAc,QAAA,CAAa,UAAA;EAEhC,mBAAA,CACJ,OAAA,EAAS,QAAA,CAAa,kCAAA,EACtB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,QAAA,CAAa,WAAA,CAAY,UAAA;EA7MpC;;;;;;EAAA,UA4OU,iBAAA,CACR,OAAA,EAAS,wBAAA,eACR,wBAAA;EA8BH,QAAA,CAAA;AAAA"}
1
+ {"version":3,"file":"llms.d.cts","names":[],"sources":["../src/llms.ts"],"mappings":";;;;;;;;AA+DA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,QAAA,qBAA2B,iBAAA,GAAoB,iBAAA,UAClD,OAAA,CAAQ,WAAA,aACL,OAAA,CAAQ,WAAA;EAAA,OAEZ,OAAA,CAAA;EAAA,IAIH,QAAA,CAAA;EAIJ,eAAA;EAAA,IAEI,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAAA,IAQjB,UAAA,CAAA,GAAc,MAAA;EAQlB,WAAA;EAEA,SAAA;EAEA,IAAA;EAEA,gBAAA;EAEA,eAAA;EAEA,CAAA;EAEA,MAAA;EAEA,SAAA,GAAY,MAAA;EAEZ,KAAA;EA5CW;EA+CX,SAAA;EAEA,WAAA,GAAc,WAAA;EAEd,SAAA;EAEA,OAAA;EAEA,IAAA;EAEA,aAAA;EAEA,IAAA;EAEA,SAAA;EAEA,YAAA,GAAe,YAAA;EAEf,MAAA,GAAS,YAAA;EAET,YAAA;EAAA,UAEU,MAAA,EAAQ,MAAA;EAAA,UAER,YAAA,EAAc,aAAA;EAExB,WAAA,CACE,MAAA,GAAS,OAAA,CAAQ,WAAA,IACf,aAAA;IACE,aAAA,GAAgB,aAAA;EAAA;EAhDtB;;;EAqHA,gBAAA,CACE,OAAA,+BACC,IAAA,CAAK,MAAA,CAAa,sBAAA;EA/GrB;EAkIA,kBAAA,CAAA,GAAsB,IAAA,CAAK,MAAA,CAAa,sBAAA;IACtC,UAAA;EAAA,IACE,aAAA;EA9HQ;;;EAyIZ,iBAAA,CAAA,GAAqB,IAAA,CAAK,MAAA,CAAa,sBAAA;IACrC,UAAA;EAAA,IACE,aAAA;EAhIJ;;;;;;;;;;;;;;;;EAoJM,SAAA,CACJ,OAAA,YACA,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,OAAA,CAAQ,SAAA;EAyHJ,qBAAA,CACL,KAAA,UACA,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,cAAA,CAAe,eAAA;EA9PZ;;;;;;EA+RA,mBAAA,CACJ,OAAA,EAAS,MAAA,CAAa,+BAAA,EACtB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAa,UAAA;EAEhC,mBAAA,CACJ,OAAA,EAAS,MAAA,CAAa,kCAAA,EACtB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,MAAA,CAAa,WAAA,CAAY,UAAA;EA7MpC;;;;;;EAAA,UA4OU,iBAAA,CACR,OAAA,EAAS,wBAAA,eACR,wBAAA;EA8BH,QAAA,CAAA;AAAA"}
package/dist/llms.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { OpenAIApiKey, OpenAICallOptions, OpenAICoreRequestOptions, OpenAIInput } from "./types.js";
2
- import { ClientOptions, OpenAI as OpenAI$1 } from "openai";
2
+ import { ClientOptions, OpenAI } from "openai";
3
3
  import { GenerationChunk, LLMResult } from "@langchain/core/outputs";
4
4
  import { BaseLLM, BaseLLMParams } from "@langchain/core/language_models/llms";
5
5
  import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
@@ -62,7 +62,7 @@ declare class OpenAI$2<CallOptions extends OpenAICallOptions = OpenAICallOptions
62
62
  openAIApiKey?: OpenAIApiKey;
63
63
  apiKey?: OpenAIApiKey;
64
64
  organization?: string;
65
- protected client: OpenAI$1;
65
+ protected client: OpenAI;
66
66
  protected clientConfig: ClientOptions;
67
67
  constructor(fields?: Partial<OpenAIInput> & BaseLLMParams & {
68
68
  configuration?: ClientOptions;
@@ -70,15 +70,15 @@ declare class OpenAI$2<CallOptions extends OpenAICallOptions = OpenAICallOptions
70
70
  /**
71
71
  * Get the parameters used to invoke the model
72
72
  */
73
- invocationParams(options?: this["ParsedCallOptions"]): Omit<OpenAI$1.CompletionCreateParams, "prompt">;
73
+ invocationParams(options?: this["ParsedCallOptions"]): Omit<OpenAI.CompletionCreateParams, "prompt">;
74
74
  /** @ignore */
75
- _identifyingParams(): Omit<OpenAI$1.CompletionCreateParams, "prompt"> & {
75
+ _identifyingParams(): Omit<OpenAI.CompletionCreateParams, "prompt"> & {
76
76
  model_name: string;
77
77
  } & ClientOptions;
78
78
  /**
79
79
  * Get the identifying parameters for the model
80
80
  */
81
- identifyingParams(): Omit<OpenAI$1.CompletionCreateParams, "prompt"> & {
81
+ identifyingParams(): Omit<OpenAI.CompletionCreateParams, "prompt"> & {
82
82
  model_name: string;
83
83
  } & ClientOptions;
84
84
  /**
@@ -105,8 +105,8 @@ declare class OpenAI$2<CallOptions extends OpenAICallOptions = OpenAICallOptions
105
105
  * @param options Optional configuration for the API call.
106
106
  * @returns The response from the OpenAI API.
107
107
  */
108
- completionWithRetry(request: OpenAI$1.CompletionCreateParamsStreaming, options?: OpenAICoreRequestOptions): Promise<AsyncIterable<OpenAI$1.Completion>>;
109
- completionWithRetry(request: OpenAI$1.CompletionCreateParamsNonStreaming, options?: OpenAICoreRequestOptions): Promise<OpenAI$1.Completions.Completion>;
108
+ completionWithRetry(request: OpenAI.CompletionCreateParamsStreaming, options?: OpenAICoreRequestOptions): Promise<AsyncIterable<OpenAI.Completion>>;
109
+ completionWithRetry(request: OpenAI.CompletionCreateParamsNonStreaming, options?: OpenAICoreRequestOptions): Promise<OpenAI.Completions.Completion>;
110
110
  /**
111
111
  * Calls the OpenAI API with retry logic in case of failures.
112
112
  * @param request The request to send to the OpenAI API.
@@ -1 +1 @@
1
- {"version":3,"file":"llms.d.ts","names":[],"sources":["../src/llms.ts"],"mappings":";;;;;;;;AA+DA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,QAAA,qBAA2B,iBAAA,GAAoB,iBAAA,UAClD,OAAA,CAAQ,WAAA,aACL,OAAA,CAAQ,WAAA;EAAA,OAEZ,OAAA,CAAA;EAAA,IAIH,QAAA,CAAA;EAIJ,eAAA;EAAA,IAEI,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAAA,IAQjB,UAAA,CAAA,GAAc,MAAA;EAQlB,WAAA;EAEA,SAAA;EAEA,IAAA;EAEA,gBAAA;EAEA,eAAA;EAEA,CAAA;EAEA,MAAA;EAEA,SAAA,GAAY,MAAA;EAEZ,KAAA;EA5CW;EA+CX,SAAA;EAEA,WAAA,GAAc,WAAA;EAEd,SAAA;EAEA,OAAA;EAEA,IAAA;EAEA,aAAA;EAEA,IAAA;EAEA,SAAA;EAEA,YAAA,GAAe,YAAA;EAEf,MAAA,GAAS,YAAA;EAET,YAAA;EAAA,UAEU,MAAA,EAAQ,QAAA;EAAA,UAER,YAAA,EAAc,aAAA;EAExB,WAAA,CACE,MAAA,GAAS,OAAA,CAAQ,WAAA,IACf,aAAA;IACE,aAAA,GAAgB,aAAA;EAAA;EAhDtB;;;EAqHA,gBAAA,CACE,OAAA,+BACC,IAAA,CAAK,QAAA,CAAa,sBAAA;EA/GrB;EAkIA,kBAAA,CAAA,GAAsB,IAAA,CAAK,QAAA,CAAa,sBAAA;IACtC,UAAA;EAAA,IACE,aAAA;EA9HQ;;;EAyIZ,iBAAA,CAAA,GAAqB,IAAA,CAAK,QAAA,CAAa,sBAAA;IACrC,UAAA;EAAA,IACE,aAAA;EAhIJ;;;;;;;;;;;;;;;;EAoJM,SAAA,CACJ,OAAA,YACA,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,OAAA,CAAQ,SAAA;EAyHJ,qBAAA,CACL,KAAA,UACA,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,cAAA,CAAe,eAAA;EA9PZ;;;;;;EA+RA,mBAAA,CACJ,OAAA,EAAS,QAAA,CAAa,+BAAA,EACtB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA,CAAc,QAAA,CAAa,UAAA;EAEhC,mBAAA,CACJ,OAAA,EAAS,QAAA,CAAa,kCAAA,EACtB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,QAAA,CAAa,WAAA,CAAY,UAAA;EA7MpC;;;;;;EAAA,UA4OU,iBAAA,CACR,OAAA,EAAS,wBAAA,eACR,wBAAA;EA8BH,QAAA,CAAA;AAAA"}
1
+ {"version":3,"file":"llms.d.ts","names":[],"sources":["../src/llms.ts"],"mappings":";;;;;;;;AA+DA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,QAAA,qBAA2B,iBAAA,GAAoB,iBAAA,UAClD,OAAA,CAAQ,WAAA,aACL,OAAA,CAAQ,WAAA;EAAA,OAEZ,OAAA,CAAA;EAAA,IAIH,QAAA,CAAA;EAIJ,eAAA;EAAA,IAEI,UAAA,CAAA;IAAA,CAAiB,GAAA;EAAA;EAAA,IAQjB,UAAA,CAAA,GAAc,MAAA;EAQlB,WAAA;EAEA,SAAA;EAEA,IAAA;EAEA,gBAAA;EAEA,eAAA;EAEA,CAAA;EAEA,MAAA;EAEA,SAAA,GAAY,MAAA;EAEZ,KAAA;EA5CW;EA+CX,SAAA;EAEA,WAAA,GAAc,WAAA;EAEd,SAAA;EAEA,OAAA;EAEA,IAAA;EAEA,aAAA;EAEA,IAAA;EAEA,SAAA;EAEA,YAAA,GAAe,YAAA;EAEf,MAAA,GAAS,YAAA;EAET,YAAA;EAAA,UAEU,MAAA,EAAQ,MAAA;EAAA,UAER,YAAA,EAAc,aAAA;EAExB,WAAA,CACE,MAAA,GAAS,OAAA,CAAQ,WAAA,IACf,aAAA;IACE,aAAA,GAAgB,aAAA;EAAA;EAhDtB;;;EAqHA,gBAAA,CACE,OAAA,+BACC,IAAA,CAAK,MAAA,CAAa,sBAAA;EA/GrB;EAkIA,kBAAA,CAAA,GAAsB,IAAA,CAAK,MAAA,CAAa,sBAAA;IACtC,UAAA;EAAA,IACE,aAAA;EA9HQ;;;EAyIZ,iBAAA,CAAA,GAAqB,IAAA,CAAK,MAAA,CAAa,sBAAA;IACrC,UAAA;EAAA,IACE,aAAA;EAhIJ;;;;;;;;;;;;;;;;EAoJM,SAAA,CACJ,OAAA,YACA,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,OAAA,CAAQ,SAAA;EAyHJ,qBAAA,CACL,KAAA,UACA,OAAA,6BACA,UAAA,GAAa,wBAAA,GACZ,cAAA,CAAe,eAAA;EA9PZ;;;;;;EA+RA,mBAAA,CACJ,OAAA,EAAS,MAAA,CAAa,+BAAA,EACtB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAa,UAAA;EAEhC,mBAAA,CACJ,OAAA,EAAS,MAAA,CAAa,kCAAA,EACtB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,MAAA,CAAa,WAAA,CAAY,UAAA;EA7MpC;;;;;;EAAA,UA4OU,iBAAA,CACR,OAAA,EAAS,wBAAA,eACR,wBAAA;EA8BH,QAAA,CAAA;AAAA"}
package/dist/llms.js CHANGED
@@ -1,12 +1,11 @@
1
1
  import { wrapOpenAIClientError } from "./utils/client.js";
2
2
  import { getEndpoint, getHeadersWithUserAgent } from "./utils/azure.js";
3
- import { OpenAI as OpenAI$1 } from "openai";
3
+ import { OpenAI } from "openai";
4
4
  import { GenerationChunk } from "@langchain/core/outputs";
5
5
  import { getEnvironmentVariable } from "@langchain/core/utils/env";
6
6
  import { calculateMaxTokens } from "@langchain/core/language_models/base";
7
7
  import { BaseLLM } from "@langchain/core/language_models/llms";
8
8
  import { chunkArray } from "@langchain/core/utils/chunk_array";
9
-
10
9
  //#region src/llms.ts
11
10
  /**
12
11
  * Wrapper around OpenAI large language models.
@@ -83,7 +82,7 @@ var OpenAI$2 = class extends BaseLLM {
83
82
  clientConfig;
84
83
  constructor(fields) {
85
84
  super(fields ?? {});
86
- this._addVersion("@langchain/openai", "1.2.13");
85
+ this._addVersion("@langchain/openai", "1.3.0-dev-1773698445534");
87
86
  this.openAIApiKey = fields?.apiKey ?? fields?.openAIApiKey ?? getEnvironmentVariable("OPENAI_API_KEY");
88
87
  this.apiKey = this.openAIApiKey;
89
88
  this.organization = fields?.configuration?.organization ?? getEnvironmentVariable("OPENAI_ORGANIZATION");
@@ -293,7 +292,7 @@ var OpenAI$2 = class extends BaseLLM {
293
292
  };
294
293
  if (!params.baseURL) delete params.baseURL;
295
294
  params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);
296
- this.client = new OpenAI$1(params);
295
+ this.client = new OpenAI(params);
297
296
  }
298
297
  return {
299
298
  ...this.clientConfig,
@@ -304,7 +303,7 @@ var OpenAI$2 = class extends BaseLLM {
304
303
  return "openai";
305
304
  }
306
305
  };
307
-
308
306
  //#endregion
309
307
  export { OpenAI$2 as OpenAI };
308
+
310
309
  //# sourceMappingURL=llms.js.map
package/dist/llms.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llms.js","names":["OpenAI","OpenAIClient"],"sources":["../src/llms.ts"],"sourcesContent":["import type { TiktokenModel } from \"js-tiktoken/lite\";\nimport { type ClientOptions, OpenAI as OpenAIClient } from \"openai\";\nimport { calculateMaxTokens } from \"@langchain/core/language_models/base\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { GenerationChunk, type LLMResult } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport {\n BaseLLM,\n type BaseLLMParams,\n} from \"@langchain/core/language_models/llms\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\nimport type {\n OpenAIApiKey,\n OpenAICallOptions,\n OpenAICoreRequestOptions,\n OpenAIInput,\n} from \"./types.js\";\nimport {\n OpenAIEndpointConfig,\n getEndpoint,\n getHeadersWithUserAgent,\n} from \"./utils/azure.js\";\nimport { wrapOpenAIClientError } from \"./utils/client.js\";\n\nexport type { OpenAICallOptions, OpenAIInput };\n\n/**\n * Interface for tracking token usage in OpenAI calls.\n */\ninterface TokenUsage {\n completionTokens?: number;\n promptTokens?: number;\n totalTokens?: number;\n}\n\n/**\n * Wrapper around OpenAI large language models.\n *\n * To use you should have the `openai` package installed, with the\n * `OPENAI_API_KEY` environment variable set.\n *\n * To use with Azure, import the `AzureOpenAI` class.\n *\n * @remarks\n * Any parameters that are valid to be passed to {@link\n * https://platform.openai.com/docs/api-reference/completions/create |\n * `openai.createCompletion`} can be passed through {@link modelKwargs}, even\n * if not explicitly available on this class.\n * @example\n * ```typescript\n * const model = new OpenAI({\n * modelName: \"gpt-4\",\n * temperature: 0.7,\n * maxTokens: 1000,\n * maxRetries: 5,\n * });\n *\n * const res = await model.invoke(\n * \"Question: What would be a good company name for a company that makes colorful socks?\\nAnswer:\"\n * );\n * console.log({ res });\n * ```\n */\nexport class OpenAI<CallOptions extends OpenAICallOptions = OpenAICallOptions>\n extends BaseLLM<CallOptions>\n implements Partial<OpenAIInput>\n{\n static lc_name() {\n return \"OpenAI\";\n }\n\n get callKeys() {\n return [...super.callKeys, \"options\"];\n }\n\n lc_serializable = true;\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n openAIApiKey: \"OPENAI_API_KEY\",\n apiKey: \"OPENAI_API_KEY\",\n organization: \"OPENAI_ORGANIZATION\",\n };\n }\n\n get lc_aliases(): Record<string, string> {\n return {\n modelName: \"model\",\n openAIApiKey: \"openai_api_key\",\n apiKey: \"openai_api_key\",\n };\n }\n\n temperature?: number;\n\n maxTokens?: number;\n\n topP?: number;\n\n frequencyPenalty?: number;\n\n presencePenalty?: number;\n\n n = 1;\n\n bestOf?: number;\n\n logitBias?: Record<string, number>;\n\n model = \"gpt-3.5-turbo-instruct\";\n\n /** @deprecated Use \"model\" instead */\n modelName: string;\n\n modelKwargs?: OpenAIInput[\"modelKwargs\"];\n\n batchSize = 20;\n\n timeout?: number;\n\n stop?: string[];\n\n stopSequences?: string[];\n\n user?: string;\n\n streaming = false;\n\n openAIApiKey?: OpenAIApiKey;\n\n apiKey?: OpenAIApiKey;\n\n organization?: string;\n\n protected client: OpenAIClient;\n\n protected clientConfig: ClientOptions;\n\n constructor(\n fields?: Partial<OpenAIInput> &\n BaseLLMParams & {\n configuration?: ClientOptions;\n }\n ) {\n super(fields ?? {});\n this._addVersion(\"@langchain/openai\", __PKG_VERSION__);\n\n this.openAIApiKey =\n fields?.apiKey ??\n fields?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n this.apiKey = this.openAIApiKey;\n\n this.organization =\n fields?.configuration?.organization ??\n getEnvironmentVariable(\"OPENAI_ORGANIZATION\");\n\n this.model = fields?.model ?? fields?.modelName ?? this.model;\n if (\n (this.model?.startsWith(\"gpt-3.5-turbo\") ||\n this.model?.startsWith(\"gpt-4\") ||\n this.model?.startsWith(\"o1\")) &&\n !this.model?.includes(\"-instruct\")\n ) {\n throw new Error(\n [\n `Your chosen OpenAI model, \"${this.model}\", is a chat model and not a text-in/text-out LLM.`,\n `Passing it into the \"OpenAI\" class is no longer supported.`,\n `Please use the \"ChatOpenAI\" class instead.`,\n \"\",\n `See this page for more information:`,\n \"|\",\n `└> https://js.langchain.com/docs/integrations/chat/openai`,\n ].join(\"\\n\")\n );\n }\n this.modelName = this.model;\n this.modelKwargs = fields?.modelKwargs ?? {};\n this.batchSize = fields?.batchSize ?? this.batchSize;\n this.timeout = fields?.timeout;\n\n this.temperature = fields?.temperature ?? this.temperature;\n this.maxTokens = fields?.maxTokens ?? this.maxTokens;\n this.topP = fields?.topP ?? this.topP;\n this.frequencyPenalty = fields?.frequencyPenalty ?? this.frequencyPenalty;\n this.presencePenalty = fields?.presencePenalty ?? this.presencePenalty;\n this.n = fields?.n ?? this.n;\n this.bestOf = fields?.bestOf ?? this.bestOf;\n this.logitBias = fields?.logitBias;\n this.stop = fields?.stopSequences ?? fields?.stop;\n this.stopSequences = this.stop;\n this.user = fields?.user;\n\n this.streaming = fields?.streaming ?? false;\n\n if (this.streaming && this.bestOf && this.bestOf > 1) {\n throw new Error(\"Cannot stream results when bestOf > 1\");\n }\n\n this.clientConfig = {\n apiKey: this.apiKey,\n organization: this.organization,\n dangerouslyAllowBrowser: true,\n ...fields?.configuration,\n };\n }\n\n /**\n * Get the parameters used to invoke the model\n */\n invocationParams(\n options?: this[\"ParsedCallOptions\"]\n ): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> {\n return {\n model: this.model,\n temperature: this.temperature,\n max_tokens: this.maxTokens,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n n: this.n,\n best_of: this.bestOf,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n stream: this.streaming,\n ...this.modelKwargs,\n };\n }\n\n /** @ignore */\n _identifyingParams(): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> & {\n model_name: string;\n } & ClientOptions {\n return {\n model_name: this.model,\n ...this.invocationParams(),\n ...this.clientConfig,\n };\n }\n\n /**\n * Get the identifying parameters for the model\n */\n identifyingParams(): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> & {\n model_name: string;\n } & ClientOptions {\n return this._identifyingParams();\n }\n\n /**\n * Call out to OpenAI's endpoint with k unique prompts\n *\n * @param [prompts] - The prompts to pass into the model.\n * @param [options] - Optional list of stop words to use when generating.\n * @param [runManager] - Optional callback manager to use when generating.\n *\n * @returns The full LLM output.\n *\n * @example\n * ```ts\n * import { OpenAI } from \"langchain/llms/openai\";\n * const openai = new OpenAI();\n * const response = await openai.generate([\"Tell me a joke.\"]);\n * ```\n */\n async _generate(\n prompts: string[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<LLMResult> {\n const subPrompts = chunkArray(prompts, this.batchSize);\n const choices: OpenAIClient.CompletionChoice[] = [];\n const tokenUsage: TokenUsage = {};\n\n const params = this.invocationParams(options);\n\n if (params.max_tokens === -1) {\n if (prompts.length !== 1) {\n throw new Error(\n \"max_tokens set to -1 not supported for multiple inputs\"\n );\n }\n params.max_tokens = await calculateMaxTokens({\n prompt: prompts[0],\n // Cast here to allow for other models that may not fit the union\n modelName: this.model as TiktokenModel,\n });\n }\n\n for (let i = 0; i < subPrompts.length; i += 1) {\n const data = params.stream\n ? await (async () => {\n const choices: OpenAIClient.CompletionChoice[] = [];\n let response: Omit<OpenAIClient.Completion, \"choices\"> | undefined;\n const stream = await this.completionWithRetry(\n {\n ...params,\n stream: true,\n prompt: subPrompts[i],\n },\n options\n );\n for await (const message of stream) {\n // on the first message set the response properties\n if (!response) {\n response = {\n id: message.id,\n object: message.object,\n created: message.created,\n model: message.model,\n };\n }\n\n // on all messages, update choice\n for (const part of message.choices) {\n if (!choices[part.index]) {\n choices[part.index] = part;\n } else {\n const choice = choices[part.index];\n choice.text += part.text;\n choice.finish_reason = part.finish_reason;\n choice.logprobs = part.logprobs;\n }\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(part.text, {\n prompt: Math.floor(part.index / this.n),\n completion: part.index % this.n,\n });\n }\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n return { ...response, choices };\n })()\n : await this.completionWithRetry(\n {\n ...params,\n stream: false,\n prompt: subPrompts[i],\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n\n choices.push(...data.choices);\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n } = data.usage\n ? data.usage\n : {\n completion_tokens: undefined,\n prompt_tokens: undefined,\n total_tokens: undefined,\n };\n\n if (completionTokens) {\n tokenUsage.completionTokens =\n (tokenUsage.completionTokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n tokenUsage.promptTokens = (tokenUsage.promptTokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n tokenUsage.totalTokens = (tokenUsage.totalTokens ?? 0) + totalTokens;\n }\n }\n\n const generations = chunkArray(choices, this.n).map((promptChoices) =>\n promptChoices.map((choice) => ({\n text: choice.text ?? \"\",\n generationInfo: {\n finishReason: choice.finish_reason,\n logprobs: choice.logprobs,\n },\n }))\n );\n return {\n generations,\n llmOutput: { tokenUsage },\n };\n }\n\n // TODO(jacoblee): Refactor with _generate(..., {stream: true}) implementation?\n async *_streamResponseChunks(\n input: string,\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<GenerationChunk> {\n const params = {\n ...this.invocationParams(options),\n prompt: input,\n stream: true as const,\n };\n const stream = await this.completionWithRetry(params, options);\n for await (const data of stream) {\n const choice = data?.choices[0];\n if (!choice) {\n continue;\n }\n const chunk = new GenerationChunk({\n text: choice.text,\n generationInfo: {\n finishReason: choice.finish_reason,\n },\n });\n yield chunk;\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(chunk.text ?? \"\");\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n /**\n * Calls the OpenAI API with retry logic in case of failures.\n * @param request The request to send to the OpenAI API.\n * @param options Optional configuration for the API call.\n * @returns The response from the OpenAI API.\n */\n async completionWithRetry(\n request: OpenAIClient.CompletionCreateParamsStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Completion>>;\n\n async completionWithRetry(\n request: OpenAIClient.CompletionCreateParamsNonStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<OpenAIClient.Completions.Completion>;\n\n async completionWithRetry(\n request:\n | OpenAIClient.CompletionCreateParamsStreaming\n | OpenAIClient.CompletionCreateParamsNonStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<\n AsyncIterable<OpenAIClient.Completion> | OpenAIClient.Completions.Completion\n > {\n const requestOptions = this._getClientOptions(options);\n return this.caller.call(async () => {\n try {\n const res = await this.client.completions.create(\n request,\n requestOptions\n );\n return res;\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n\n /**\n * Calls the OpenAI API with retry logic in case of failures.\n * @param request The request to send to the OpenAI API.\n * @param options Optional configuration for the API call.\n * @returns The response from the OpenAI API.\n */\n protected _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!this.client) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!params.baseURL) {\n delete params.baseURL;\n }\n\n params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);\n\n this.client = new OpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n _llmType() {\n return \"openai\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DA,IAAaA,WAAb,cACU,QAEV;CACE,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,WAAW;AACb,SAAO,CAAC,GAAG,MAAM,UAAU,UAAU;;CAGvC,kBAAkB;CAElB,IAAI,aAAoD;AACtD,SAAO;GACL,cAAc;GACd,QAAQ;GACR,cAAc;GACf;;CAGH,IAAI,aAAqC;AACvC,SAAO;GACL,WAAW;GACX,cAAc;GACd,QAAQ;GACT;;CAGH;CAEA;CAEA;CAEA;CAEA;CAEA,IAAI;CAEJ;CAEA;CAEA,QAAQ;;CAGR;CAEA;CAEA,YAAY;CAEZ;CAEA;CAEA;CAEA;CAEA,YAAY;CAEZ;CAEA;CAEA;CAEA,AAAU;CAEV,AAAU;CAEV,YACE,QAIA;AACA,QAAM,UAAU,EAAE,CAAC;AACnB,OAAK,YAAY,8BAAqC;AAEtD,OAAK,eACH,QAAQ,UACR,QAAQ,gBACR,uBAAuB,iBAAiB;AAC1C,OAAK,SAAS,KAAK;AAEnB,OAAK,eACH,QAAQ,eAAe,gBACvB,uBAAuB,sBAAsB;AAE/C,OAAK,QAAQ,QAAQ,SAAS,QAAQ,aAAa,KAAK;AACxD,OACG,KAAK,OAAO,WAAW,gBAAgB,IACtC,KAAK,OAAO,WAAW,QAAQ,IAC/B,KAAK,OAAO,WAAW,KAAK,KAC9B,CAAC,KAAK,OAAO,SAAS,YAAY,CAElC,OAAM,IAAI,MACR;GACE,8BAA8B,KAAK,MAAM;GACzC;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,KAAK,KAAK,CACb;AAEH,OAAK,YAAY,KAAK;AACtB,OAAK,cAAc,QAAQ,eAAe,EAAE;AAC5C,OAAK,YAAY,QAAQ,aAAa,KAAK;AAC3C,OAAK,UAAU,QAAQ;AAEvB,OAAK,cAAc,QAAQ,eAAe,KAAK;AAC/C,OAAK,YAAY,QAAQ,aAAa,KAAK;AAC3C,OAAK,OAAO,QAAQ,QAAQ,KAAK;AACjC,OAAK,mBAAmB,QAAQ,oBAAoB,KAAK;AACzD,OAAK,kBAAkB,QAAQ,mBAAmB,KAAK;AACvD,OAAK,IAAI,QAAQ,KAAK,KAAK;AAC3B,OAAK,SAAS,QAAQ,UAAU,KAAK;AACrC,OAAK,YAAY,QAAQ;AACzB,OAAK,OAAO,QAAQ,iBAAiB,QAAQ;AAC7C,OAAK,gBAAgB,KAAK;AAC1B,OAAK,OAAO,QAAQ;AAEpB,OAAK,YAAY,QAAQ,aAAa;AAEtC,MAAI,KAAK,aAAa,KAAK,UAAU,KAAK,SAAS,EACjD,OAAM,IAAI,MAAM,wCAAwC;AAG1D,OAAK,eAAe;GAClB,QAAQ,KAAK;GACb,cAAc,KAAK;GACnB,yBAAyB;GACzB,GAAG,QAAQ;GACZ;;;;;CAMH,iBACE,SACqD;AACrD,SAAO;GACL,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,YAAY,KAAK;GACjB,OAAO,KAAK;GACZ,mBAAmB,KAAK;GACxB,kBAAkB,KAAK;GACvB,GAAG,KAAK;GACR,SAAS,KAAK;GACd,YAAY,KAAK;GACjB,MAAM,SAAS,QAAQ,KAAK;GAC5B,MAAM,KAAK;GACX,QAAQ,KAAK;GACb,GAAG,KAAK;GACT;;;CAIH,qBAEkB;AAChB,SAAO;GACL,YAAY,KAAK;GACjB,GAAG,KAAK,kBAAkB;GAC1B,GAAG,KAAK;GACT;;;;;CAMH,oBAEkB;AAChB,SAAO,KAAK,oBAAoB;;;;;;;;;;;;;;;;;;CAmBlC,MAAM,UACJ,SACA,SACA,YACoB;EACpB,MAAM,aAAa,WAAW,SAAS,KAAK,UAAU;EACtD,MAAM,UAA2C,EAAE;EACnD,MAAM,aAAyB,EAAE;EAEjC,MAAM,SAAS,KAAK,iBAAiB,QAAQ;AAE7C,MAAI,OAAO,eAAe,IAAI;AAC5B,OAAI,QAAQ,WAAW,EACrB,OAAM,IAAI,MACR,yDACD;AAEH,UAAO,aAAa,MAAM,mBAAmB;IAC3C,QAAQ,QAAQ;IAEhB,WAAW,KAAK;IACjB,CAAC;;AAGJ,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;GAC7C,MAAM,OAAO,OAAO,SAChB,OAAO,YAAY;IACjB,MAAM,UAA2C,EAAE;IACnD,IAAI;IACJ,MAAM,SAAS,MAAM,KAAK,oBACxB;KACE,GAAG;KACH,QAAQ;KACR,QAAQ,WAAW;KACpB,EACD,QACD;AACD,eAAW,MAAM,WAAW,QAAQ;AAElC,SAAI,CAAC,SACH,YAAW;MACT,IAAI,QAAQ;MACZ,QAAQ,QAAQ;MAChB,SAAS,QAAQ;MACjB,OAAO,QAAQ;MAChB;AAIH,UAAK,MAAM,QAAQ,QAAQ,SAAS;AAClC,UAAI,CAAC,QAAQ,KAAK,OAChB,SAAQ,KAAK,SAAS;WACjB;OACL,MAAM,SAAS,QAAQ,KAAK;AAC5B,cAAO,QAAQ,KAAK;AACpB,cAAO,gBAAgB,KAAK;AAC5B,cAAO,WAAW,KAAK;;AAGzB,MAAK,YAAY,kBAAkB,KAAK,MAAM;OAC5C,QAAQ,KAAK,MAAM,KAAK,QAAQ,KAAK,EAAE;OACvC,YAAY,KAAK,QAAQ,KAAK;OAC/B,CAAC;;;AAGN,QAAI,QAAQ,QAAQ,QAClB,OAAM,IAAI,MAAM,aAAa;AAE/B,WAAO;KAAE,GAAG;KAAU;KAAS;OAC7B,GACJ,MAAM,KAAK,oBACT;IACE,GAAG;IACH,QAAQ;IACR,QAAQ,WAAW;IACpB,EACD;IACE,QAAQ,QAAQ;IAChB,GAAG,QAAQ;IACZ,CACF;AAEL,WAAQ,KAAK,GAAG,KAAK,QAAQ;GAC7B,MAAM,EACJ,mBAAmB,kBACnB,eAAe,cACf,cAAc,gBACZ,KAAK,QACL,KAAK,QACL;IACE,mBAAmB;IACnB,eAAe;IACf,cAAc;IACf;AAEL,OAAI,iBACF,YAAW,oBACR,WAAW,oBAAoB,KAAK;AAGzC,OAAI,aACF,YAAW,gBAAgB,WAAW,gBAAgB,KAAK;AAG7D,OAAI,YACF,YAAW,eAAe,WAAW,eAAe,KAAK;;AAa7D,SAAO;GACL,aAVkB,WAAW,SAAS,KAAK,EAAE,CAAC,KAAK,kBACnD,cAAc,KAAK,YAAY;IAC7B,MAAM,OAAO,QAAQ;IACrB,gBAAgB;KACd,cAAc,OAAO;KACrB,UAAU,OAAO;KAClB;IACF,EAAE,CACJ;GAGC,WAAW,EAAE,YAAY;GAC1B;;CAIH,OAAO,sBACL,OACA,SACA,YACiC;EACjC,MAAM,SAAS;GACb,GAAG,KAAK,iBAAiB,QAAQ;GACjC,QAAQ;GACR,QAAQ;GACT;EACD,MAAM,SAAS,MAAM,KAAK,oBAAoB,QAAQ,QAAQ;AAC9D,aAAW,MAAM,QAAQ,QAAQ;GAC/B,MAAM,SAAS,MAAM,QAAQ;AAC7B,OAAI,CAAC,OACH;GAEF,MAAM,QAAQ,IAAI,gBAAgB;IAChC,MAAM,OAAO;IACb,gBAAgB,EACd,cAAc,OAAO,eACtB;IACF,CAAC;AACF,SAAM;AAEN,GAAK,YAAY,kBAAkB,MAAM,QAAQ,GAAG;;AAEtD,MAAI,QAAQ,QAAQ,QAClB,OAAM,IAAI,MAAM,aAAa;;CAoBjC,MAAM,oBACJ,SAGA,SAGA;EACA,MAAM,iBAAiB,KAAK,kBAAkB,QAAQ;AACtD,SAAO,KAAK,OAAO,KAAK,YAAY;AAClC,OAAI;AAKF,WAJY,MAAM,KAAK,OAAO,YAAY,OACxC,SACA,eACD;YAEM,GAAG;AAEV,UADc,sBAAsB,EAAE;;IAGxC;;;;;;;;CASJ,AAAU,kBACR,SAC0B;AAC1B,MAAI,CAAC,KAAK,QAAQ;GAKhB,MAAM,WAAW,YAJkC,EACjD,SAAS,KAAK,aAAa,SAC5B,CAEiD;GAElD,MAAM,SAAS;IACb,GAAG,KAAK;IACR,SAAS;IACT,SAAS,KAAK;IACd,YAAY;IACb;AAED,OAAI,CAAC,OAAO,QACV,QAAO,OAAO;AAGhB,UAAO,iBAAiB,wBAAwB,OAAO,eAAe;AAEtE,QAAK,SAAS,IAAIC,SAAa,OAAO;;AAMxC,SAJuB;GACrB,GAAG,KAAK;GACR,GAAG;GACJ;;CAIH,WAAW;AACT,SAAO"}
1
+ {"version":3,"file":"llms.js","names":["OpenAI","OpenAIClient"],"sources":["../src/llms.ts"],"sourcesContent":["import type { TiktokenModel } from \"js-tiktoken/lite\";\nimport { type ClientOptions, OpenAI as OpenAIClient } from \"openai\";\nimport { calculateMaxTokens } from \"@langchain/core/language_models/base\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { GenerationChunk, type LLMResult } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport {\n BaseLLM,\n type BaseLLMParams,\n} from \"@langchain/core/language_models/llms\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\nimport type {\n OpenAIApiKey,\n OpenAICallOptions,\n OpenAICoreRequestOptions,\n OpenAIInput,\n} from \"./types.js\";\nimport {\n OpenAIEndpointConfig,\n getEndpoint,\n getHeadersWithUserAgent,\n} from \"./utils/azure.js\";\nimport { wrapOpenAIClientError } from \"./utils/client.js\";\n\nexport type { OpenAICallOptions, OpenAIInput };\n\n/**\n * Interface for tracking token usage in OpenAI calls.\n */\ninterface TokenUsage {\n completionTokens?: number;\n promptTokens?: number;\n totalTokens?: number;\n}\n\n/**\n * Wrapper around OpenAI large language models.\n *\n * To use you should have the `openai` package installed, with the\n * `OPENAI_API_KEY` environment variable set.\n *\n * To use with Azure, import the `AzureOpenAI` class.\n *\n * @remarks\n * Any parameters that are valid to be passed to {@link\n * https://platform.openai.com/docs/api-reference/completions/create |\n * `openai.createCompletion`} can be passed through {@link modelKwargs}, even\n * if not explicitly available on this class.\n * @example\n * ```typescript\n * const model = new OpenAI({\n * modelName: \"gpt-4\",\n * temperature: 0.7,\n * maxTokens: 1000,\n * maxRetries: 5,\n * });\n *\n * const res = await model.invoke(\n * \"Question: What would be a good company name for a company that makes colorful socks?\\nAnswer:\"\n * );\n * console.log({ res });\n * ```\n */\nexport class OpenAI<CallOptions extends OpenAICallOptions = OpenAICallOptions>\n extends BaseLLM<CallOptions>\n implements Partial<OpenAIInput>\n{\n static lc_name() {\n return \"OpenAI\";\n }\n\n get callKeys() {\n return [...super.callKeys, \"options\"];\n }\n\n lc_serializable = true;\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return {\n openAIApiKey: \"OPENAI_API_KEY\",\n apiKey: \"OPENAI_API_KEY\",\n organization: \"OPENAI_ORGANIZATION\",\n };\n }\n\n get lc_aliases(): Record<string, string> {\n return {\n modelName: \"model\",\n openAIApiKey: \"openai_api_key\",\n apiKey: \"openai_api_key\",\n };\n }\n\n temperature?: number;\n\n maxTokens?: number;\n\n topP?: number;\n\n frequencyPenalty?: number;\n\n presencePenalty?: number;\n\n n = 1;\n\n bestOf?: number;\n\n logitBias?: Record<string, number>;\n\n model = \"gpt-3.5-turbo-instruct\";\n\n /** @deprecated Use \"model\" instead */\n modelName: string;\n\n modelKwargs?: OpenAIInput[\"modelKwargs\"];\n\n batchSize = 20;\n\n timeout?: number;\n\n stop?: string[];\n\n stopSequences?: string[];\n\n user?: string;\n\n streaming = false;\n\n openAIApiKey?: OpenAIApiKey;\n\n apiKey?: OpenAIApiKey;\n\n organization?: string;\n\n protected client: OpenAIClient;\n\n protected clientConfig: ClientOptions;\n\n constructor(\n fields?: Partial<OpenAIInput> &\n BaseLLMParams & {\n configuration?: ClientOptions;\n }\n ) {\n super(fields ?? {});\n this._addVersion(\"@langchain/openai\", __PKG_VERSION__);\n\n this.openAIApiKey =\n fields?.apiKey ??\n fields?.openAIApiKey ??\n getEnvironmentVariable(\"OPENAI_API_KEY\");\n this.apiKey = this.openAIApiKey;\n\n this.organization =\n fields?.configuration?.organization ??\n getEnvironmentVariable(\"OPENAI_ORGANIZATION\");\n\n this.model = fields?.model ?? fields?.modelName ?? this.model;\n if (\n (this.model?.startsWith(\"gpt-3.5-turbo\") ||\n this.model?.startsWith(\"gpt-4\") ||\n this.model?.startsWith(\"o1\")) &&\n !this.model?.includes(\"-instruct\")\n ) {\n throw new Error(\n [\n `Your chosen OpenAI model, \"${this.model}\", is a chat model and not a text-in/text-out LLM.`,\n `Passing it into the \"OpenAI\" class is no longer supported.`,\n `Please use the \"ChatOpenAI\" class instead.`,\n \"\",\n `See this page for more information:`,\n \"|\",\n `└> https://js.langchain.com/docs/integrations/chat/openai`,\n ].join(\"\\n\")\n );\n }\n this.modelName = this.model;\n this.modelKwargs = fields?.modelKwargs ?? {};\n this.batchSize = fields?.batchSize ?? this.batchSize;\n this.timeout = fields?.timeout;\n\n this.temperature = fields?.temperature ?? this.temperature;\n this.maxTokens = fields?.maxTokens ?? this.maxTokens;\n this.topP = fields?.topP ?? this.topP;\n this.frequencyPenalty = fields?.frequencyPenalty ?? this.frequencyPenalty;\n this.presencePenalty = fields?.presencePenalty ?? this.presencePenalty;\n this.n = fields?.n ?? this.n;\n this.bestOf = fields?.bestOf ?? this.bestOf;\n this.logitBias = fields?.logitBias;\n this.stop = fields?.stopSequences ?? fields?.stop;\n this.stopSequences = this.stop;\n this.user = fields?.user;\n\n this.streaming = fields?.streaming ?? false;\n\n if (this.streaming && this.bestOf && this.bestOf > 1) {\n throw new Error(\"Cannot stream results when bestOf > 1\");\n }\n\n this.clientConfig = {\n apiKey: this.apiKey,\n organization: this.organization,\n dangerouslyAllowBrowser: true,\n ...fields?.configuration,\n };\n }\n\n /**\n * Get the parameters used to invoke the model\n */\n invocationParams(\n options?: this[\"ParsedCallOptions\"]\n ): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> {\n return {\n model: this.model,\n temperature: this.temperature,\n max_tokens: this.maxTokens,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n n: this.n,\n best_of: this.bestOf,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n stream: this.streaming,\n ...this.modelKwargs,\n };\n }\n\n /** @ignore */\n _identifyingParams(): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> & {\n model_name: string;\n } & ClientOptions {\n return {\n model_name: this.model,\n ...this.invocationParams(),\n ...this.clientConfig,\n };\n }\n\n /**\n * Get the identifying parameters for the model\n */\n identifyingParams(): Omit<OpenAIClient.CompletionCreateParams, \"prompt\"> & {\n model_name: string;\n } & ClientOptions {\n return this._identifyingParams();\n }\n\n /**\n * Call out to OpenAI's endpoint with k unique prompts\n *\n * @param [prompts] - The prompts to pass into the model.\n * @param [options] - Optional list of stop words to use when generating.\n * @param [runManager] - Optional callback manager to use when generating.\n *\n * @returns The full LLM output.\n *\n * @example\n * ```ts\n * import { OpenAI } from \"langchain/llms/openai\";\n * const openai = new OpenAI();\n * const response = await openai.generate([\"Tell me a joke.\"]);\n * ```\n */\n async _generate(\n prompts: string[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<LLMResult> {\n const subPrompts = chunkArray(prompts, this.batchSize);\n const choices: OpenAIClient.CompletionChoice[] = [];\n const tokenUsage: TokenUsage = {};\n\n const params = this.invocationParams(options);\n\n if (params.max_tokens === -1) {\n if (prompts.length !== 1) {\n throw new Error(\n \"max_tokens set to -1 not supported for multiple inputs\"\n );\n }\n params.max_tokens = await calculateMaxTokens({\n prompt: prompts[0],\n // Cast here to allow for other models that may not fit the union\n modelName: this.model as TiktokenModel,\n });\n }\n\n for (let i = 0; i < subPrompts.length; i += 1) {\n const data = params.stream\n ? await (async () => {\n const choices: OpenAIClient.CompletionChoice[] = [];\n let response: Omit<OpenAIClient.Completion, \"choices\"> | undefined;\n const stream = await this.completionWithRetry(\n {\n ...params,\n stream: true,\n prompt: subPrompts[i],\n },\n options\n );\n for await (const message of stream) {\n // on the first message set the response properties\n if (!response) {\n response = {\n id: message.id,\n object: message.object,\n created: message.created,\n model: message.model,\n };\n }\n\n // on all messages, update choice\n for (const part of message.choices) {\n if (!choices[part.index]) {\n choices[part.index] = part;\n } else {\n const choice = choices[part.index];\n choice.text += part.text;\n choice.finish_reason = part.finish_reason;\n choice.logprobs = part.logprobs;\n }\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(part.text, {\n prompt: Math.floor(part.index / this.n),\n completion: part.index % this.n,\n });\n }\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n return { ...response, choices };\n })()\n : await this.completionWithRetry(\n {\n ...params,\n stream: false,\n prompt: subPrompts[i],\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n\n choices.push(...data.choices);\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n } = data.usage\n ? data.usage\n : {\n completion_tokens: undefined,\n prompt_tokens: undefined,\n total_tokens: undefined,\n };\n\n if (completionTokens) {\n tokenUsage.completionTokens =\n (tokenUsage.completionTokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n tokenUsage.promptTokens = (tokenUsage.promptTokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n tokenUsage.totalTokens = (tokenUsage.totalTokens ?? 0) + totalTokens;\n }\n }\n\n const generations = chunkArray(choices, this.n).map((promptChoices) =>\n promptChoices.map((choice) => ({\n text: choice.text ?? \"\",\n generationInfo: {\n finishReason: choice.finish_reason,\n logprobs: choice.logprobs,\n },\n }))\n );\n return {\n generations,\n llmOutput: { tokenUsage },\n };\n }\n\n // TODO(jacoblee): Refactor with _generate(..., {stream: true}) implementation?\n async *_streamResponseChunks(\n input: string,\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<GenerationChunk> {\n const params = {\n ...this.invocationParams(options),\n prompt: input,\n stream: true as const,\n };\n const stream = await this.completionWithRetry(params, options);\n for await (const data of stream) {\n const choice = data?.choices[0];\n if (!choice) {\n continue;\n }\n const chunk = new GenerationChunk({\n text: choice.text,\n generationInfo: {\n finishReason: choice.finish_reason,\n },\n });\n yield chunk;\n // eslint-disable-next-line no-void\n void runManager?.handleLLMNewToken(chunk.text ?? \"\");\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n /**\n * Calls the OpenAI API with retry logic in case of failures.\n * @param request The request to send to the OpenAI API.\n * @param options Optional configuration for the API call.\n * @returns The response from the OpenAI API.\n */\n async completionWithRetry(\n request: OpenAIClient.CompletionCreateParamsStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Completion>>;\n\n async completionWithRetry(\n request: OpenAIClient.CompletionCreateParamsNonStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<OpenAIClient.Completions.Completion>;\n\n async completionWithRetry(\n request:\n | OpenAIClient.CompletionCreateParamsStreaming\n | OpenAIClient.CompletionCreateParamsNonStreaming,\n options?: OpenAICoreRequestOptions\n ): Promise<\n AsyncIterable<OpenAIClient.Completion> | OpenAIClient.Completions.Completion\n > {\n const requestOptions = this._getClientOptions(options);\n return this.caller.call(async () => {\n try {\n const res = await this.client.completions.create(\n request,\n requestOptions\n );\n return res;\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n\n /**\n * Calls the OpenAI API with retry logic in case of failures.\n * @param request The request to send to the OpenAI API.\n * @param options Optional configuration for the API call.\n * @returns The response from the OpenAI API.\n */\n protected _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!this.client) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!params.baseURL) {\n delete params.baseURL;\n }\n\n params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);\n\n this.client = new OpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n _llmType() {\n return \"openai\";\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  let _langchain_core_tools = require("@langchain/core/tools");
2
2
  let zod_v4 = require("zod/v4");
3
-
4
3
  //#region src/tools/applyPatch.ts
5
4
  const ApplyPatchCreateFileOperationSchema = zod_v4.z.object({
6
5
  type: zod_v4.z.literal("create_file"),
@@ -109,7 +108,7 @@ function applyPatch(options) {
109
108
  };
110
109
  return patchTool;
111
110
  }
112
-
113
111
  //#endregion
114
112
  exports.applyPatch = applyPatch;
113
+
115
114
  //# sourceMappingURL=applyPatch.cjs.map