@langchain/openai 1.6.2 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/azure/chat_models/common.d.cts +1 -2
  3. package/dist/azure/chat_models/common.d.cts.map +1 -1
  4. package/dist/azure/chat_models/common.d.ts +1 -2
  5. package/dist/azure/chat_models/common.d.ts.map +1 -1
  6. package/dist/azure/chat_models/completions.d.cts +1 -2
  7. package/dist/azure/chat_models/completions.d.cts.map +1 -1
  8. package/dist/azure/chat_models/completions.d.ts +1 -2
  9. package/dist/azure/chat_models/completions.d.ts.map +1 -1
  10. package/dist/azure/chat_models/index.cjs +5 -0
  11. package/dist/azure/chat_models/index.cjs.map +1 -1
  12. package/dist/azure/chat_models/index.d.cts +3 -2
  13. package/dist/azure/chat_models/index.d.cts.map +1 -1
  14. package/dist/azure/chat_models/index.d.ts +3 -2
  15. package/dist/azure/chat_models/index.d.ts.map +1 -1
  16. package/dist/azure/chat_models/index.js +5 -0
  17. package/dist/azure/chat_models/index.js.map +1 -1
  18. package/dist/azure/chat_models/responses.cjs +5 -0
  19. package/dist/azure/chat_models/responses.cjs.map +1 -1
  20. package/dist/azure/chat_models/responses.d.cts +3 -2
  21. package/dist/azure/chat_models/responses.d.cts.map +1 -1
  22. package/dist/azure/chat_models/responses.d.ts +3 -2
  23. package/dist/azure/chat_models/responses.d.ts.map +1 -1
  24. package/dist/azure/chat_models/responses.js +5 -0
  25. package/dist/azure/chat_models/responses.js.map +1 -1
  26. package/dist/azure/embeddings.d.cts +1 -2
  27. package/dist/azure/embeddings.d.cts.map +1 -1
  28. package/dist/azure/embeddings.d.ts +1 -2
  29. package/dist/azure/embeddings.d.ts.map +1 -1
  30. package/dist/azure/llms.d.cts +1 -2
  31. package/dist/azure/llms.d.cts.map +1 -1
  32. package/dist/azure/llms.d.ts.map +1 -1
  33. package/dist/chat_models/base.cjs +1 -1
  34. package/dist/chat_models/base.d.cts +4 -4
  35. package/dist/chat_models/base.d.cts.map +1 -1
  36. package/dist/chat_models/base.d.ts +4 -4
  37. package/dist/chat_models/base.d.ts.map +1 -1
  38. package/dist/chat_models/base.js +1 -1
  39. package/dist/chat_models/completions.cjs +2 -2
  40. package/dist/chat_models/completions.cjs.map +1 -1
  41. package/dist/chat_models/completions.d.cts +2 -3
  42. package/dist/chat_models/completions.d.cts.map +1 -1
  43. package/dist/chat_models/completions.d.ts +2 -3
  44. package/dist/chat_models/completions.d.ts.map +1 -1
  45. package/dist/chat_models/completions.js +2 -2
  46. package/dist/chat_models/completions.js.map +1 -1
  47. package/dist/chat_models/index.cjs +2 -2
  48. package/dist/chat_models/index.cjs.map +1 -1
  49. package/dist/chat_models/index.d.cts +4 -4
  50. package/dist/chat_models/index.d.cts.map +1 -1
  51. package/dist/chat_models/index.d.ts +4 -4
  52. package/dist/chat_models/index.d.ts.map +1 -1
  53. package/dist/chat_models/index.js +2 -2
  54. package/dist/chat_models/index.js.map +1 -1
  55. package/dist/chat_models/profiles.cjs +350 -193
  56. package/dist/chat_models/profiles.cjs.map +1 -1
  57. package/dist/chat_models/profiles.js +350 -193
  58. package/dist/chat_models/profiles.js.map +1 -1
  59. package/dist/chat_models/responses.cjs +2 -2
  60. package/dist/chat_models/responses.cjs.map +1 -1
  61. package/dist/chat_models/responses.d.cts +3 -4
  62. package/dist/chat_models/responses.d.cts.map +1 -1
  63. package/dist/chat_models/responses.d.ts +3 -4
  64. package/dist/chat_models/responses.d.ts.map +1 -1
  65. package/dist/chat_models/responses.js +2 -2
  66. package/dist/chat_models/responses.js.map +1 -1
  67. package/dist/converters/completions.d.cts +6 -7
  68. package/dist/converters/completions.d.cts.map +1 -1
  69. package/dist/converters/completions.d.ts +6 -7
  70. package/dist/converters/completions.d.ts.map +1 -1
  71. package/dist/converters/responses.d.cts +11 -12
  72. package/dist/converters/responses.d.cts.map +1 -1
  73. package/dist/converters/responses.d.ts +11 -12
  74. package/dist/converters/responses.d.ts.map +1 -1
  75. package/dist/embeddings.d.cts +3 -4
  76. package/dist/embeddings.d.cts.map +1 -1
  77. package/dist/embeddings.d.ts +3 -4
  78. package/dist/embeddings.d.ts.map +1 -1
  79. package/dist/llms.cjs +1 -1
  80. package/dist/llms.d.cts.map +1 -1
  81. package/dist/llms.d.ts.map +1 -1
  82. package/dist/llms.js +1 -1
  83. package/dist/tools/applyPatch.d.cts +8 -9
  84. package/dist/tools/applyPatch.d.cts.map +1 -1
  85. package/dist/tools/applyPatch.d.ts +8 -9
  86. package/dist/tools/applyPatch.d.ts.map +1 -1
  87. package/dist/tools/codeInterpreter.d.cts +5 -6
  88. package/dist/tools/codeInterpreter.d.cts.map +1 -1
  89. package/dist/tools/codeInterpreter.d.ts +5 -6
  90. package/dist/tools/codeInterpreter.d.ts.map +1 -1
  91. package/dist/tools/computerUse.d.cts +17 -18
  92. package/dist/tools/computerUse.d.cts.map +1 -1
  93. package/dist/tools/computerUse.d.ts +17 -18
  94. package/dist/tools/computerUse.d.ts.map +1 -1
  95. package/dist/tools/custom.d.cts +2 -3
  96. package/dist/tools/custom.d.cts.map +1 -1
  97. package/dist/tools/custom.d.ts +2 -3
  98. package/dist/tools/custom.d.ts.map +1 -1
  99. package/dist/tools/dalle.d.cts +3 -4
  100. package/dist/tools/dalle.d.cts.map +1 -1
  101. package/dist/tools/dalle.d.ts +3 -4
  102. package/dist/tools/dalle.d.ts.map +1 -1
  103. package/dist/tools/fileSearch.d.cts +9 -10
  104. package/dist/tools/fileSearch.d.cts.map +1 -1
  105. package/dist/tools/fileSearch.d.ts +9 -10
  106. package/dist/tools/fileSearch.d.ts.map +1 -1
  107. package/dist/tools/imageGeneration.d.cts +4 -5
  108. package/dist/tools/imageGeneration.d.cts.map +1 -1
  109. package/dist/tools/imageGeneration.d.ts +4 -5
  110. package/dist/tools/imageGeneration.d.ts.map +1 -1
  111. package/dist/tools/index.d.cts +2 -2
  112. package/dist/tools/index.d.cts.map +1 -1
  113. package/dist/tools/index.d.ts +2 -2
  114. package/dist/tools/index.d.ts.map +1 -1
  115. package/dist/tools/localShell.d.cts +5 -6
  116. package/dist/tools/localShell.d.cts.map +1 -1
  117. package/dist/tools/localShell.d.ts +5 -6
  118. package/dist/tools/localShell.d.ts.map +1 -1
  119. package/dist/tools/mcp.d.cts +8 -9
  120. package/dist/tools/mcp.d.cts.map +1 -1
  121. package/dist/tools/mcp.d.ts +8 -9
  122. package/dist/tools/mcp.d.ts.map +1 -1
  123. package/dist/tools/shell.d.cts +8 -9
  124. package/dist/tools/shell.d.cts.map +1 -1
  125. package/dist/tools/shell.d.ts +8 -9
  126. package/dist/tools/shell.d.ts.map +1 -1
  127. package/dist/tools/toolSearch.d.cts +3 -4
  128. package/dist/tools/toolSearch.d.cts.map +1 -1
  129. package/dist/tools/toolSearch.d.ts +3 -4
  130. package/dist/tools/toolSearch.d.ts.map +1 -1
  131. package/dist/tools/webSearch.d.cts +5 -6
  132. package/dist/tools/webSearch.d.cts.map +1 -1
  133. package/dist/tools/webSearch.d.ts +5 -6
  134. package/dist/tools/webSearch.d.ts.map +1 -1
  135. package/dist/types.d.cts +16 -16
  136. package/dist/types.d.cts.map +1 -1
  137. package/dist/types.d.ts +16 -16
  138. package/dist/types.d.ts.map +1 -1
  139. package/dist/utils/azure.d.cts +7 -8
  140. package/dist/utils/azure.d.cts.map +1 -1
  141. package/dist/utils/azure.d.ts +7 -8
  142. package/dist/utils/azure.d.ts.map +1 -1
  143. package/dist/utils/client.d.cts +1 -2
  144. package/dist/utils/client.d.cts.map +1 -1
  145. package/dist/utils/client.d.ts +1 -2
  146. package/dist/utils/client.d.ts.map +1 -1
  147. package/dist/utils/misc.d.cts +1 -2
  148. package/dist/utils/misc.d.cts.map +1 -1
  149. package/dist/utils/misc.d.ts +1 -2
  150. package/dist/utils/misc.d.ts.map +1 -1
  151. package/dist/utils/profile.cjs +27 -0
  152. package/dist/utils/profile.cjs.map +1 -0
  153. package/dist/utils/profile.js +27 -0
  154. package/dist/utils/profile.js.map +1 -0
  155. package/dist/utils/prompts.d.cts +1 -2
  156. package/dist/utils/prompts.d.cts.map +1 -1
  157. package/dist/utils/prompts.d.ts +1 -2
  158. package/dist/utils/prompts.d.ts.map +1 -1
  159. package/dist/utils/responses_stream_events.d.cts +2 -3
  160. package/dist/utils/responses_stream_events.d.cts.map +1 -1
  161. package/dist/utils/responses_stream_events.d.ts +2 -3
  162. package/dist/utils/responses_stream_events.d.ts.map +1 -1
  163. package/dist/utils/tools.d.cts +4 -5
  164. package/dist/utils/tools.d.cts.map +1 -1
  165. package/dist/utils/tools.d.ts +4 -5
  166. package/dist/utils/tools.d.ts.map +1 -1
  167. package/package.json +9 -9
  168. package/dist/utils/file_mime_types.cjs +0 -15
  169. package/dist/utils/file_mime_types.cjs.map +0 -1
  170. package/dist/utils/file_mime_types.js +0 -15
  171. package/dist/utils/file_mime_types.js.map +0 -1
@@ -17,7 +17,7 @@ interface OpenAILLMOutput {
17
17
  totalTokens?: number;
18
18
  };
19
19
  }
20
- interface BaseChatOpenAICallOptions extends BaseChatModelCallOptions, BaseFunctionCallOptions {
20
+ export interface BaseChatOpenAICallOptions extends BaseChatModelCallOptions, BaseFunctionCallOptions {
21
21
  /**
22
22
  * Additional options to pass to the underlying axios request.
23
23
  */
@@ -161,14 +161,14 @@ interface BaseChatOpenAICallOptions extends BaseChatModelCallOptions, BaseFuncti
161
161
  */
162
162
  verbosity?: OpenAIVerbosityParam;
163
163
  }
164
- interface BaseChatOpenAIFields extends Partial<OpenAIChatInput>, BaseChatModelParams {
164
+ export interface BaseChatOpenAIFields extends Partial<OpenAIChatInput>, BaseChatModelParams {
165
165
  /**
166
166
  * Optional configuration options for the OpenAI client.
167
167
  */
168
168
  configuration?: ClientOptions;
169
169
  }
170
170
  /** @internal */
171
- declare abstract class BaseChatOpenAI<CallOptions extends BaseChatOpenAICallOptions> extends BaseChatModel<CallOptions, AIMessageChunk> implements Partial<OpenAIChatInput> {
171
+ export declare abstract class BaseChatOpenAI<CallOptions extends BaseChatOpenAICallOptions> extends BaseChatModel<CallOptions, AIMessageChunk> implements Partial<OpenAIChatInput> {
172
172
  temperature?: number;
173
173
  topP?: number;
174
174
  frequencyPenalty?: number;
@@ -362,5 +362,5 @@ declare abstract class BaseChatOpenAI<CallOptions extends BaseChatOpenAICallOpti
362
362
  }>;
363
363
  }
364
364
  //#endregion
365
- export { BaseChatOpenAI, BaseChatOpenAICallOptions, BaseChatOpenAIFields, type OpenAIChatInput };
365
+ export type { OpenAIChatInput };
366
366
  //# sourceMappingURL=base.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.cts","names":[],"sources":["../../src/chat_models/base.ts"],"mappings":";;;;;;;;;;;;UA4EU;EACR;IACE;IACA;IACA;;;UAMa,kCACP,0BAA0B;;;;EAIlC,UAAU;;;;;;EAOV,QAAQ;;;;;;EAQR,cAAc,mBAAmB;;;;;EAMjC;;;;EAKA,kBAAkB;;;;;;EAOlB;;;;;;EAOA,iBAAiB,OAAa,KAAK;;;;;;EAOnC;;;;;;;;;;;;EAaA;;;;;;;;;;;;;EAcA,aAAa,MAAM,OAAa,KAAK;;;;;;EAOrC,QAAQ,OAAa,KAAK;;;;;EAM1B,aAAa,OAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B1B,YAAY,OAAa;;;;;;;;;;EAWzB,kBAAkB,OAAa;;;;;EAM/B,eAAe,OAAa,KAAK;;;;;;EAOjC;;;;EAKA,uBAAuB;;;;EAKvB,qBAAqB;;;;EAKrB,YAAY;;UAGG,6BACP,QAAQ,kBAAkB;;;;EAIlC,gBAAgB;;;uBAiBI,eACpB,oBAAoB,mCAEZ,cAAc,aAAa,2BACxB,QAAQ;EAEnB;EAEA;EAEA;EAEA;EAEA;EAEA,YAAY;EAEZ;EAEA,cAAc;EAEd;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA,SAAS;EAET;EAEA;;EAGA,QAAQ;;EAGR,cAAc;;;;;EAMd;EAEA,QAAQ,OAAa,KAAK;EAE1B,aAAa,MAAM,OAAa,KAAK;EAErC,YAAY,OAAa;;;;;;;;;;;;EAazB;;;;;EAMA,eAAe,OAAa,KAAK;;;;;;EAOjC;;;;EAKA,uBAAuB;;;;EAKvB,qBAAqB;;;;EAKrB,YAAY;YAEF,gBAAgB;EAE1B;SAIO;MAIH;EAiBJ;MAEI;KAAiB;;MAOjB,cAAc;MAOd;EA4CJ,YAAY,qCAAqC;YAY9B,+BACjB,sCACC;YAuBgB,0BACjB,oCACA,mBAAmB;;EA6BrB,sBAAsB,KACpB,OAAa,KAAK;IAGlB;MACE;;;;EAWJ,qBAAiB,KAAA,SAAA;IAZH;MAcb;EAED,YAAY,SAAS;;;;;YA+FX,oBACR,sCACC,OAAa;;;;;YAsCN,mBACR,YAAY,iCACX;YAkBO,oBACR;;EASF,kBACE,SAAS,uCACR;YA6BO,wCACR,MAAM,oBACN;IAAW;MACV,OAAa;EAoBP,UACP,OAAO,sBACP,SAAS,QAAQ,eAChB,SAAS,wBAAwB,gBAAgB;EA+BrC,OAAO,OAAO,wBAAwB,UAAU,cAAW,+CAAA,uBAAA,kDAAA,oDAAA;EAO3D,OAAO,OAAO,wBAAwB,UAAU,cAAW,QAAA,kDAAA,oDAAA;;EAQ1E,qBAAqB,YAAY,oBAAoB;EAuB/C,yBAAyB,UAAU,gBAAa;;;;;YAwEtC,6BAA6B,aAAa,mBAAgB;;YAgB1D,kCACd,UAAU,eACV,YAAY,OAAa,KAAK,2BAA2B,YACzD,kCAGI,OAAa,KAAK,mCACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEG,gBACJ,0BACA;IACE,QAAQ,SAAO;IACf,UAAU;MAEX,QAAQ,OAAa;;;;;;;;;;;;;;;;;;MAuCpB,WAAW;;YAKL,2BACR,QAAQ;EAmBV,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,uCACR,SAAS,wBAAwB;EAEpC,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,sCACR,SAAS;IAA0B,KAAK;IAAa,QAAQ;;EAEhE,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,yCAEP,SAAS,wBAAwB,aACjC,SAAS;IAA0B,KAAK;IAAa,QAAQ"}
1
+ {"version":3,"file":"base.d.cts","names":["OpenAIClient","OpenAI"],"sources":["../../src/chat_models/base.ts"],"mappings":";;;;;;;;;;;;UA4EU;EACR;IACE;IACA;IACA;;;iBAMa,kCACP,0BAA0B;;;;EAIlC,UAAU;;;;;;EAOV,QAAQ;;;;;;EAQR,cAAc,mBAAmB;;;;;EAMjC;;;;EAKA,kBAAkB;;;;;;EAOlB;;;;;;EAOA,iBAAiBA,OAAa,KAAK;;;;;;EAOnC;;;;;;;;;;;;EAaA;;;;;;;;;;;;;EAcA,aAAa,MAAMA,OAAa,KAAK;;;;;;EAOrC,QAAQA,OAAa,KAAK;;;;;EAM1B,aAAaA,OAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B1B,YAAYA,OAAa;;;;;;;;;;EAWzB,kBAAkBA,OAAa;;;;;EAM/B,eAAeA,OAAa,KAAK;;;;;;EAOjC;;;;EAKA,uBAAuB;;;;EAKvB,qBAAqB;;;;EAKrB,YAAY;;iBAGG,6BACP,QAAQ,kBAAkB;;;;EAIlC,gBAAgB;;;8BAiBI,eACpB,oBAAoB,mCAEZ,cAAc,aAAa,2BACxB,QAAQ;EAEnB;EAEA;EAEA;EAEA;EAEA;EAEA,YAAY;EAEZ;EAEA,cAAc;EAEd;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA,SAAS;EAET;EAEA;;EAGA,QAAQA;;EAGR,cAAc;;;;;EAMd;EAEA,QAAQA,OAAa,KAAK;EAE1B,aAAa,MAAMA,OAAa,KAAK;EAErC,YAAYA,OAAa;;;;;;;;;;;;EAazB;;;;;EAMA,eAAeA,OAAa,KAAK;;;;;;EAOjC;;;;EAKA,uBAAuB;;;;EAKvB,qBAAqB;;;;EAKrB,YAAY;YAEF,gBAAgB;EAE1B;SAIO;MAIH;EAiBJ;MAEI;KAAiB;;MAOjB,cAAc;MAOd;EA4CJ,YAAY,qCAAqC;YAY9B,+BACjB,sCACC;YAuBgB,0BACjB,oCACA,mBAAmB;;EA6BrB,sBAAsB,KACpBA,OAAa,KAAK;IAGlB;MACE;;;;EAWJ,qBAAiB,KAAAC,SAAA;IAZH;MAcb;EAED,YAAY,SAAS;;;;;YA+FX,oBACR,sCACCD,OAAa;;;;;YAsCN,mBACR,YAAY,iCACX;YAkBO,oBACR;;EASF,kBACE,SAAS,uCACR;YA6BO,wCACR,MAAM,oBACN;IAAW;MACVA,OAAa;EAoBP,UACP,OAAO,sBACP,SAAS,QAAQ,eAChB,SAAS,wBAAwB,gBAAgB;EA+BrC,OAAO,OAAO,wBAAwB,UAAU,cAAW,+CAAA,uBAAA,kDAAA,oDAAA;EAO3D,OAAO,OAAO,wBAAwB,UAAU,cAAW,QAAA,kDAAA,oDAAA;;EAQ1E,qBAAqB,YAAY,oBAAoB;EAuB/C,yBAAyB,UAAU,gBAAa;;;;;YAwEtC,6BAA6B,aAAa,mBAAgB;;YAgB1D,kCACd,UAAU,eACV,YAAYA,OAAa,KAAK,2BAA2B,YACzD,kCAGIA,OAAa,KAAK,mCACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEG,gBACJ,0BACA;IACE,QAAQC,SAAO;IACf,UAAU;MAEX,QAAQD,OAAa;;;;;;;;;;;;;;;;;;MAuCpB,WAAW;;YAKL,2BACR,QAAQ;EAmBV,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,uCACR,SAAS,wBAAwB;EAEpC,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,sCACR,SAAS;IAA0B,KAAK;IAAa,QAAQ;;EAEhE,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,yCAEP,SAAS,wBAAwB,aACjC,SAAS;IAA0B,KAAK;IAAa,QAAQ"}
@@ -17,7 +17,7 @@ interface OpenAILLMOutput {
17
17
  totalTokens?: number;
18
18
  };
19
19
  }
20
- interface BaseChatOpenAICallOptions extends BaseChatModelCallOptions, BaseFunctionCallOptions {
20
+ export interface BaseChatOpenAICallOptions extends BaseChatModelCallOptions, BaseFunctionCallOptions {
21
21
  /**
22
22
  * Additional options to pass to the underlying axios request.
23
23
  */
@@ -161,14 +161,14 @@ interface BaseChatOpenAICallOptions extends BaseChatModelCallOptions, BaseFuncti
161
161
  */
162
162
  verbosity?: OpenAIVerbosityParam;
163
163
  }
164
- interface BaseChatOpenAIFields extends Partial<OpenAIChatInput>, BaseChatModelParams {
164
+ export interface BaseChatOpenAIFields extends Partial<OpenAIChatInput>, BaseChatModelParams {
165
165
  /**
166
166
  * Optional configuration options for the OpenAI client.
167
167
  */
168
168
  configuration?: ClientOptions;
169
169
  }
170
170
  /** @internal */
171
- declare abstract class BaseChatOpenAI<CallOptions extends BaseChatOpenAICallOptions> extends BaseChatModel<CallOptions, AIMessageChunk> implements Partial<OpenAIChatInput> {
171
+ export declare abstract class BaseChatOpenAI<CallOptions extends BaseChatOpenAICallOptions> extends BaseChatModel<CallOptions, AIMessageChunk> implements Partial<OpenAIChatInput> {
172
172
  temperature?: number;
173
173
  topP?: number;
174
174
  frequencyPenalty?: number;
@@ -362,5 +362,5 @@ declare abstract class BaseChatOpenAI<CallOptions extends BaseChatOpenAICallOpti
362
362
  }>;
363
363
  }
364
364
  //#endregion
365
- export { BaseChatOpenAI, BaseChatOpenAICallOptions, BaseChatOpenAIFields, type OpenAIChatInput };
365
+ export type { OpenAIChatInput };
366
366
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","names":[],"sources":["../../src/chat_models/base.ts"],"mappings":";;;;;;;;;;;;UA4EU;EACR;IACE;IACA;IACA;;;UAMa,kCACP,0BAA0B;;;;EAIlC,UAAU;;;;;;EAOV,QAAQ;;;;;;EAQR,cAAc,mBAAmB;;;;;EAMjC;;;;EAKA,kBAAkB;;;;;;EAOlB;;;;;;EAOA,iBAAiB,OAAa,KAAK;;;;;;EAOnC;;;;;;;;;;;;EAaA;;;;;;;;;;;;;EAcA,aAAa,MAAM,OAAa,KAAK;;;;;;EAOrC,QAAQ,OAAa,KAAK;;;;;EAM1B,aAAa,OAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B1B,YAAY,OAAa;;;;;;;;;;EAWzB,kBAAkB,OAAa;;;;;EAM/B,eAAe,OAAa,KAAK;;;;;;EAOjC;;;;EAKA,uBAAuB;;;;EAKvB,qBAAqB;;;;EAKrB,YAAY;;UAGG,6BACP,QAAQ,kBAAkB;;;;EAIlC,gBAAgB;;;uBAiBI,eACpB,oBAAoB,mCAEZ,cAAc,aAAa,2BACxB,QAAQ;EAEnB;EAEA;EAEA;EAEA;EAEA;EAEA,YAAY;EAEZ;EAEA,cAAc;EAEd;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA,SAAS;EAET;EAEA;;EAGA,QAAQ;;EAGR,cAAc;;;;;EAMd;EAEA,QAAQ,OAAa,KAAK;EAE1B,aAAa,MAAM,OAAa,KAAK;EAErC,YAAY,OAAa;;;;;;;;;;;;EAazB;;;;;EAMA,eAAe,OAAa,KAAK;;;;;;EAOjC;;;;EAKA,uBAAuB;;;;EAKvB,qBAAqB;;;;EAKrB,YAAY;YAEF,gBAAgB;EAE1B;SAIO;MAIH;EAiBJ;MAEI;KAAiB;;MAOjB,cAAc;MAOd;EA4CJ,YAAY,qCAAqC;YAY9B,+BACjB,sCACC;YAuBgB,0BACjB,oCACA,mBAAmB;;EA6BrB,sBAAsB,KACpB,OAAa,KAAK;IAGlB;MACE;;;;EAWJ,qBAAiB,KAAA,SAAA;IAZH;MAcb;EAED,YAAY,SAAS;;;;;YA+FX,oBACR,sCACC,OAAa;;;;;YAsCN,mBACR,YAAY,iCACX;YAkBO,oBACR;;EASF,kBACE,SAAS,uCACR;YA6BO,wCACR,MAAM,oBACN;IAAW;MACV,OAAa;EAoBP,UACP,OAAO,sBACP,SAAS,QAAQ,eAChB,SAAS,wBAAwB,gBAAgB;EA+BrC,OAAO,OAAO,wBAAwB,UAAU,cAAW,+CAAA,uBAAA,kDAAA,oDAAA;EAO3D,OAAO,OAAO,wBAAwB,UAAU,cAAW,QAAA,kDAAA,oDAAA;;EAQ1E,qBAAqB,YAAY,oBAAoB;EAuB/C,yBAAyB,UAAU,gBAAa;;;;;YAwEtC,6BAA6B,aAAa,mBAAgB;;YAgB1D,kCACd,UAAU,eACV,YAAY,OAAa,KAAK,2BAA2B,YACzD,kCAGI,OAAa,KAAK,mCACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEG,gBACJ,0BACA;IACE,QAAQ,SAAO;IACf,UAAU;MAEX,QAAQ,OAAa;;;;;;;;;;;;;;;;;;MAuCpB,WAAW;;YAKL,2BACR,QAAQ;EAmBV,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,uCACR,SAAS,wBAAwB;EAEpC,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,sCACR,SAAS;IAA0B,KAAK;IAAa,QAAQ;;EAEhE,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,yCAEP,SAAS,wBAAwB,aACjC,SAAS;IAA0B,KAAK;IAAa,QAAQ"}
1
+ {"version":3,"file":"base.d.ts","names":["OpenAIClient","OpenAI"],"sources":["../../src/chat_models/base.ts"],"mappings":";;;;;;;;;;;;UA4EU;EACR;IACE;IACA;IACA;;;iBAMa,kCACP,0BAA0B;;;;EAIlC,UAAU;;;;;;EAOV,QAAQ;;;;;;EAQR,cAAc,mBAAmB;;;;;EAMjC;;;;EAKA,kBAAkB;;;;;;EAOlB;;;;;;EAOA,iBAAiBA,OAAa,KAAK;;;;;;EAOnC;;;;;;;;;;;;EAaA;;;;;;;;;;;;;EAcA,aAAa,MAAMA,OAAa,KAAK;;;;;;EAOrC,QAAQA,OAAa,KAAK;;;;;EAM1B,aAAaA,OAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B1B,YAAYA,OAAa;;;;;;;;;;EAWzB,kBAAkBA,OAAa;;;;;EAM/B,eAAeA,OAAa,KAAK;;;;;;EAOjC;;;;EAKA,uBAAuB;;;;EAKvB,qBAAqB;;;;EAKrB,YAAY;;iBAGG,6BACP,QAAQ,kBAAkB;;;;EAIlC,gBAAgB;;;8BAiBI,eACpB,oBAAoB,mCAEZ,cAAc,aAAa,2BACxB,QAAQ;EAEnB;EAEA;EAEA;EAEA;EAEA;EAEA,YAAY;EAEZ;EAEA,cAAc;EAEd;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA,SAAS;EAET;EAEA;;EAGA,QAAQA;;EAGR,cAAc;;;;;EAMd;EAEA,QAAQA,OAAa,KAAK;EAE1B,aAAa,MAAMA,OAAa,KAAK;EAErC,YAAYA,OAAa;;;;;;;;;;;;EAazB;;;;;EAMA,eAAeA,OAAa,KAAK;;;;;;EAOjC;;;;EAKA,uBAAuB;;;;EAKvB,qBAAqB;;;;EAKrB,YAAY;YAEF,gBAAgB;EAE1B;SAIO;MAIH;EAiBJ;MAEI;KAAiB;;MAOjB,cAAc;MAOd;EA4CJ,YAAY,qCAAqC;YAY9B,+BACjB,sCACC;YAuBgB,0BACjB,oCACA,mBAAmB;;EA6BrB,sBAAsB,KACpBA,OAAa,KAAK;IAGlB;MACE;;;;EAWJ,qBAAiB,KAAAC,SAAA;IAZH;MAcb;EAED,YAAY,SAAS;;;;;YA+FX,oBACR,sCACCD,OAAa;;;;;YAsCN,mBACR,YAAY,iCACX;YAkBO,oBACR;;EASF,kBACE,SAAS,uCACR;YA6BO,wCACR,MAAM,oBACN;IAAW;MACVA,OAAa;EAoBP,UACP,OAAO,sBACP,SAAS,QAAQ,eAChB,SAAS,wBAAwB,gBAAgB;EA+BrC,OAAO,OAAO,wBAAwB,UAAU,cAAW,+CAAA,uBAAA,kDAAA,oDAAA;EAO3D,OAAO,OAAO,wBAAwB,UAAU,cAAW,QAAA,kDAAA,oDAAA;;EAQ1E,qBAAqB,YAAY,oBAAoB;EAuB/C,yBAAyB,UAAU,gBAAa;;;;;YAwEtC,6BAA6B,aAAa,mBAAgB;;YAgB1D,kCACd,UAAU,eACV,YAAYA,OAAa,KAAK,2BAA2B,YACzD,kCAGIA,OAAa,KAAK,mCACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEG,gBACJ,0BACA;IACE,QAAQC,SAAO;IACf,UAAU;MAEX,QAAQD,OAAa;;;;;;;;;;;;;;;;;;MAuCpB,WAAW;;YAKL,2BACR,QAAQ;EAmBV,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,uCACR,SAAS,wBAAwB;EAEpC,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,sCACR,SAAS;IAA0B,KAAK;IAAa,QAAQ;;EAEhE,qBAEE,kBAAkB,sBAAsB,qBAExC,cACI,eAAe,aACf,mBAAmB,aAEnB,qBACJ,SAAS,yCAEP,SAAS,wBAAwB,aACjC,SAAS;IAA0B,KAAK;IAAa,QAAQ"}
@@ -275,7 +275,7 @@ var BaseChatOpenAI = class extends BaseChatModel {
275
275
  if (fields?.supportsStrictToolCalling !== void 0) this.supportsStrictToolCalling = fields.supportsStrictToolCalling;
276
276
  if (fields?.service_tier !== void 0) this.service_tier = fields.service_tier;
277
277
  this.zdrEnabled = fields?.zdrEnabled ?? false;
278
- this._addVersion("@langchain/openai", "1.6.2");
278
+ this._addVersion("@langchain/openai", "1.6.3");
279
279
  }
280
280
  /**
281
281
  * Returns backwards compatible reasoning parameters from constructor params and call options
@@ -1,5 +1,5 @@
1
1
  const require_client = require("../utils/client.cjs");
2
- const require_file_mime_types = require("../utils/file_mime_types.cjs");
2
+ const require_profile = require("../utils/profile.cjs");
3
3
  const require_tools = require("../utils/tools.cjs");
4
4
  const require_misc = require("../utils/misc.cjs");
5
5
  const require_base = require("./base.cjs");
@@ -24,7 +24,7 @@ var ChatOpenAICompletions = class extends require_base.BaseChatOpenAI {
24
24
  super(require_base.getChatOpenAIModelParams(modelOrFields, fieldsArg));
25
25
  }
26
26
  get profile() {
27
- return require_file_mime_types.withoutFileMimeTypesUnlessSupported(super.profile, false);
27
+ return require_profile.profileForApi(super.profile, false);
28
28
  }
29
29
  /** @internal */
30
30
  invocationParams(options, extra) {
@@ -1 +1 @@
1
- {"version":3,"file":"completions.cjs","names":["BaseChatOpenAI","getChatOpenAIModelParams","withoutFileMimeTypesUnlessSupported","formatToOpenAIToolChoice","normalizePromptCacheRetention","isReasoningModel","convertMessagesToCompletionsMessageParams","isAIMessage","AIMessage","convertOpenAICompletionsStream","ChatGenerationChunk","AIMessageChunk","wrapOpenAIClientError","convertCompletionsDeltaToBaseMessageChunk","convertCompletionsMessageToBaseMessage"],"sources":["../../src/chat_models/completions.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n isAIMessage,\n type UsageMetadata,\n type AIMessageFields,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport {\n ChatGenerationChunk,\n type ChatGeneration,\n type ChatResult,\n} from \"@langchain/core/outputs\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport type { ModelProfile } from \"@langchain/core/language_models/profile\";\nimport { wrapOpenAIClientError } from \"../utils/client.js\";\nimport { withoutFileMimeTypesUnlessSupported } from \"../utils/file_mime_types.js\";\nimport {\n OpenAIToolChoice,\n formatToOpenAIToolChoice,\n _convertToOpenAITool,\n} from \"../utils/tools.js\";\nimport {\n isReasoningModel,\n normalizePromptCacheRetention,\n} from \"../utils/misc.js\";\nimport {\n BaseChatOpenAI,\n BaseChatOpenAICallOptions,\n BaseChatOpenAIFields,\n getChatOpenAIModelParams,\n} from \"./base.js\";\nimport {\n convertCompletionsDeltaToBaseMessageChunk,\n convertCompletionsMessageToBaseMessage,\n convertMessagesToCompletionsMessageParams,\n} from \"../converters/completions.js\";\nimport { convertOpenAICompletionsStream } from \"../utils/stream_events.js\";\n\nexport interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}\n\ntype ChatCompletionsInvocationParams = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionCreateParams,\n \"messages\"\n>;\n\nconst TOOL_IMAGE_HINT =\n \"Chat Completions does not support images in tool messages. \" +\n \"Use the Responses API (`useResponsesApi: true`) to send images from tool results.\";\n\n/** Points a 400 caused by a tool-result image at the Responses API. */\nfunction addToolImageHint(\n error: unknown,\n messages: OpenAIClient.Chat.ChatCompletionMessageParam[]\n) {\n const hasToolImage = messages.some(\n (message) =>\n message.role === \"tool\" &&\n Array.isArray(message.content) &&\n message.content.some(\n (part) => (part as { type: string }).type === \"image\"\n )\n );\n if (\n hasToolImage &&\n error instanceof Error &&\n \"status\" in error &&\n error.status === 400\n ) {\n error.message = `${error.message}\\n\\n${TOOL_IMAGE_HINT}`;\n }\n return error;\n}\n\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport class ChatOpenAICompletions<\n CallOptions extends ChatOpenAICompletionsCallOptions =\n ChatOpenAICompletionsCallOptions,\n> extends BaseChatOpenAI<CallOptions> {\n constructor(model: string, fields?: Omit<BaseChatOpenAIFields, \"model\">);\n constructor(fields?: BaseChatOpenAIFields);\n constructor(\n modelOrFields?: string | BaseChatOpenAIFields,\n fieldsArg?: Omit<BaseChatOpenAIFields, \"model\">\n ) {\n super(getChatOpenAIModelParams(modelOrFields, fieldsArg));\n }\n\n override get profile(): ModelProfile {\n return withoutFileMimeTypesUnlessSupported(super.profile, false);\n }\n\n /** @internal */\n override invocationParams(\n options?: this[\"ParsedCallOptions\"],\n extra?: { streaming?: boolean }\n ): ChatCompletionsInvocationParams {\n let strict: boolean | undefined;\n if (options?.strict !== undefined) {\n strict = options.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n\n // A `json_schema` response format goes through the SDK `.parse()` helper,\n // which requires strict function tools — but only on the NON-streaming path\n // (`completionWithRetry` uses `.parse()` only when `!request.stream`).\n // Streaming structured output uses `create()`, which doesn't need strict, so\n // don't force it there. Default to strict for the parse path unless the\n // caller set strict:false. (Re-applied here because the agent core no longer\n // forces strict for every provider.)\n const isStreaming = this.streaming || extra?.streaming;\n if (\n !isStreaming &&\n options?.response_format?.type === \"json_schema\" &&\n strict !== false\n ) {\n strict = true;\n }\n\n let streamOptionsConfig = {};\n if (options?.stream_options !== undefined) {\n streamOptionsConfig = { stream_options: options.stream_options };\n } else if (this.streamUsage && (this.streaming || extra?.streaming)) {\n streamOptionsConfig = { stream_options: { include_usage: true } };\n }\n\n const params: Partial<ChatCompletionsInvocationParams> = {\n model: this.model,\n temperature: this.temperature,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n logprobs: this.logprobs,\n top_logprobs: this.topLogprobs,\n n: this.n,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n // if include_usage is set or streamUsage then stream must be set to true.\n stream: this.streaming,\n functions: options?.functions,\n function_call: options?.function_call,\n tools: options?.tools?.length\n ? options.tools.map((tool) =>\n this._convertChatOpenAIToolToCompletionsTool(tool, { strict })\n )\n : undefined,\n tool_choice: formatToOpenAIToolChoice(\n options?.tool_choice as OpenAIToolChoice\n ),\n response_format: this._getResponseFormat(options?.response_format),\n seed: options?.seed,\n ...streamOptionsConfig,\n parallel_tool_calls: options?.parallel_tool_calls,\n ...(this.audio || options?.audio\n ? { audio: this.audio || options?.audio }\n : {}),\n ...(this.modalities || options?.modalities\n ? { modalities: this.modalities || options?.modalities }\n : {}),\n ...this.modelKwargs,\n prompt_cache_key:\n options?.promptCacheKey ??\n this.modelKwargs?.prompt_cache_key ??\n this.promptCacheKey,\n prompt_cache_retention: normalizePromptCacheRetention(\n options?.promptCacheRetention ??\n this.modelKwargs?.prompt_cache_retention ??\n this.promptCacheRetention\n ),\n prompt_cache_options:\n options?.promptCacheOptions ??\n this.modelKwargs?.prompt_cache_options ??\n this.promptCacheOptions,\n verbosity: options?.verbosity ?? this.verbosity,\n };\n if (options?.prediction !== undefined) {\n params.prediction = options.prediction;\n }\n if (this.service_tier !== undefined) {\n params.service_tier = this.service_tier;\n }\n if (options?.service_tier !== undefined) {\n params.service_tier = options.service_tier;\n }\n const reasoning = this._getReasoningParams(options);\n if (reasoning !== undefined && reasoning.effort !== undefined) {\n params.reasoning_effort = reasoning.effort;\n }\n if (isReasoningModel(params.model)) {\n params.max_completion_tokens =\n this.maxTokens === -1 ? undefined : this.maxTokens;\n } else {\n params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;\n }\n\n return params as ChatCompletionsInvocationParams;\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n options.signal?.throwIfAborted();\n const usageMetadata = {} as UsageMetadata;\n const params = this.invocationParams(options);\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n if (params.stream) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks: Record<number, ChatGenerationChunk> = {};\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n if (finalChunks[index] === undefined) {\n finalChunks[index] = chunk;\n } else {\n finalChunks[index] = finalChunks[index].concat(chunk);\n }\n }\n const generations = Object.entries(finalChunks)\n .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n .map(([_, value]) => value);\n\n const { functions, function_call } = this.invocationParams(options);\n\n // OpenAI does not support token usage report under stream mode,\n // fallback to estimation.\n\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage =\n await this._getNumTokensFromGenerations(generations);\n\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n } else {\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options?.signal,\n maxRetries: options?.maxRetries,\n ...options?.options,\n }\n );\n\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data?.usage ?? {};\n\n if (completionTokens) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n\n if (\n promptTokensDetails?.audio_tokens !== null ||\n promptTokensDetails?.cached_tokens !== null ||\n promptTokensDetails?.cache_write_tokens != null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails?.audio_tokens !== null && {\n audio: promptTokensDetails?.audio_tokens,\n }),\n ...(promptTokensDetails?.cached_tokens !== null && {\n cache_read: promptTokensDetails?.cached_tokens,\n }),\n ...(promptTokensDetails?.cache_write_tokens != null && {\n cache_creation: promptTokensDetails?.cache_write_tokens,\n }),\n };\n }\n\n if (\n completionTokensDetails?.audio_tokens !== null ||\n completionTokensDetails?.reasoning_tokens !== null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails?.audio_tokens !== null && {\n audio: completionTokensDetails?.audio_tokens,\n }),\n ...(completionTokensDetails?.reasoning_tokens !== null && {\n reasoning: completionTokensDetails?.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data?.choices ?? []) {\n const text = part.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message ?? { role: \"assistant\" },\n data\n ),\n };\n generation.generationInfo = {\n ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n // Fields are not serialized unless passed to the constructor\n // Doing this ensures all fields on the message are serialized\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith(\"lc_\")\n )\n ) as AIMessageFields\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n }\n\n /**\n * Native implementation of the content-block-centric streaming protocol\n * for OpenAI Chat Completions.\n */\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n\n const streamIterable = await this.completionWithRetry(params, options);\n const shouldStreamUsage = this.streamUsage ?? options.streamUsage;\n\n const abortableStream = async function* (\n source: AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>,\n signal?: AbortSignal\n ) {\n for await (const data of source) {\n if (signal?.aborted) {\n return;\n }\n yield data;\n }\n };\n\n yield* convertOpenAICompletionsStream(\n abortableStream(streamIterable, options.signal),\n {\n streamUsage: shouldStreamUsage ?? true,\n provider: this.streamEventProvider,\n }\n );\n }\n\n /** Provider id used in native stream protocol passthrough events. */\n protected get streamEventProvider(): string {\n return \"openai\";\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n if (options.signal?.aborted) {\n return;\n }\n const choice = data?.choices?.[0];\n if (data.usage) {\n usage = data.usage;\n }\n if (!choice) {\n continue;\n }\n\n const { delta } = choice;\n if (!delta) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index ?? 0,\n };\n if (typeof chunk.content !== \"string\") {\n console.log(\n \"[WARNING]: Received non-string content from OpenAI. This is currently not supported.\"\n );\n continue;\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const generationInfo: Record<string, any> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n // Only include system fingerprint in the last chunk for now\n // to avoid concatenation issues\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens !== null && {\n audio: usage.prompt_tokens_details?.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens !== null && {\n cache_read: usage.prompt_tokens_details?.cached_tokens,\n }),\n ...(usage.prompt_tokens_details?.cache_write_tokens != null && {\n cache_creation: usage.prompt_tokens_details?.cache_write_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens !== null && {\n audio: usage.completion_tokens_details?.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens !== null && {\n reasoning: usage.completion_tokens_details?.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: \"\",\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: \"\",\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n { prompt: 0, completion: 0 },\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParams,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<\n | AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>\n | OpenAIClient.Chat.Completions.ChatCompletion\n > {\n // The SDK has its own `maxRetries`; take it for our caller instead so\n // the two retry loops don't multiply.\n const { maxRetries, ...sdkOptions } = requestOptions ?? {};\n const clientOptions = this._getClientOptions(sdkOptions);\n const isParseableFormat =\n request.response_format && request.response_format.type === \"json_schema\";\n return this.caller.callWithOptions({ maxRetries }, async () => {\n try {\n if (isParseableFormat && !request.stream) {\n return await this.client.chat.completions.parse(\n request,\n clientOptions\n );\n } else {\n return await this.client.chat.completions.create(\n request,\n clientOptions\n );\n }\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw addToolImageHint(error, request.messages);\n }\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return convertCompletionsDeltaToBaseMessageChunk({\n delta,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n defaultRole,\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return convertCompletionsMessageToBaseMessage({\n message,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"completions.cjs","names":["BaseChatOpenAI","getChatOpenAIModelParams","profileForApi","formatToOpenAIToolChoice","normalizePromptCacheRetention","isReasoningModel","convertMessagesToCompletionsMessageParams","isAIMessage","AIMessage","convertOpenAICompletionsStream","ChatGenerationChunk","AIMessageChunk","wrapOpenAIClientError","convertCompletionsDeltaToBaseMessageChunk","convertCompletionsMessageToBaseMessage"],"sources":["../../src/chat_models/completions.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n isAIMessage,\n type UsageMetadata,\n type AIMessageFields,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport {\n ChatGenerationChunk,\n type ChatGeneration,\n type ChatResult,\n} from \"@langchain/core/outputs\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport type { ModelProfile } from \"@langchain/core/language_models/profile\";\nimport { wrapOpenAIClientError } from \"../utils/client.js\";\nimport { profileForApi } from \"../utils/profile.js\";\nimport {\n OpenAIToolChoice,\n formatToOpenAIToolChoice,\n _convertToOpenAITool,\n} from \"../utils/tools.js\";\nimport {\n isReasoningModel,\n normalizePromptCacheRetention,\n} from \"../utils/misc.js\";\nimport {\n BaseChatOpenAI,\n BaseChatOpenAICallOptions,\n BaseChatOpenAIFields,\n getChatOpenAIModelParams,\n} from \"./base.js\";\nimport {\n convertCompletionsDeltaToBaseMessageChunk,\n convertCompletionsMessageToBaseMessage,\n convertMessagesToCompletionsMessageParams,\n} from \"../converters/completions.js\";\nimport { convertOpenAICompletionsStream } from \"../utils/stream_events.js\";\n\nexport interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}\n\ntype ChatCompletionsInvocationParams = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionCreateParams,\n \"messages\"\n>;\n\nconst TOOL_IMAGE_HINT =\n \"Chat Completions does not support images in tool messages. \" +\n \"Use the Responses API (`useResponsesApi: true`) to send images from tool results.\";\n\n/** Points a 400 caused by a tool-result image at the Responses API. */\nfunction addToolImageHint(\n error: unknown,\n messages: OpenAIClient.Chat.ChatCompletionMessageParam[]\n) {\n const hasToolImage = messages.some(\n (message) =>\n message.role === \"tool\" &&\n Array.isArray(message.content) &&\n message.content.some(\n (part) => (part as { type: string }).type === \"image\"\n )\n );\n if (\n hasToolImage &&\n error instanceof Error &&\n \"status\" in error &&\n error.status === 400\n ) {\n error.message = `${error.message}\\n\\n${TOOL_IMAGE_HINT}`;\n }\n return error;\n}\n\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport class ChatOpenAICompletions<\n CallOptions extends ChatOpenAICompletionsCallOptions =\n ChatOpenAICompletionsCallOptions,\n> extends BaseChatOpenAI<CallOptions> {\n constructor(model: string, fields?: Omit<BaseChatOpenAIFields, \"model\">);\n constructor(fields?: BaseChatOpenAIFields);\n constructor(\n modelOrFields?: string | BaseChatOpenAIFields,\n fieldsArg?: Omit<BaseChatOpenAIFields, \"model\">\n ) {\n super(getChatOpenAIModelParams(modelOrFields, fieldsArg));\n }\n\n override get profile(): ModelProfile {\n return profileForApi(super.profile, false);\n }\n\n /** @internal */\n override invocationParams(\n options?: this[\"ParsedCallOptions\"],\n extra?: { streaming?: boolean }\n ): ChatCompletionsInvocationParams {\n let strict: boolean | undefined;\n if (options?.strict !== undefined) {\n strict = options.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n\n // A `json_schema` response format goes through the SDK `.parse()` helper,\n // which requires strict function tools — but only on the NON-streaming path\n // (`completionWithRetry` uses `.parse()` only when `!request.stream`).\n // Streaming structured output uses `create()`, which doesn't need strict, so\n // don't force it there. Default to strict for the parse path unless the\n // caller set strict:false. (Re-applied here because the agent core no longer\n // forces strict for every provider.)\n const isStreaming = this.streaming || extra?.streaming;\n if (\n !isStreaming &&\n options?.response_format?.type === \"json_schema\" &&\n strict !== false\n ) {\n strict = true;\n }\n\n let streamOptionsConfig = {};\n if (options?.stream_options !== undefined) {\n streamOptionsConfig = { stream_options: options.stream_options };\n } else if (this.streamUsage && (this.streaming || extra?.streaming)) {\n streamOptionsConfig = { stream_options: { include_usage: true } };\n }\n\n const params: Partial<ChatCompletionsInvocationParams> = {\n model: this.model,\n temperature: this.temperature,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n logprobs: this.logprobs,\n top_logprobs: this.topLogprobs,\n n: this.n,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n // if include_usage is set or streamUsage then stream must be set to true.\n stream: this.streaming,\n functions: options?.functions,\n function_call: options?.function_call,\n tools: options?.tools?.length\n ? options.tools.map((tool) =>\n this._convertChatOpenAIToolToCompletionsTool(tool, { strict })\n )\n : undefined,\n tool_choice: formatToOpenAIToolChoice(\n options?.tool_choice as OpenAIToolChoice\n ),\n response_format: this._getResponseFormat(options?.response_format),\n seed: options?.seed,\n ...streamOptionsConfig,\n parallel_tool_calls: options?.parallel_tool_calls,\n ...(this.audio || options?.audio\n ? { audio: this.audio || options?.audio }\n : {}),\n ...(this.modalities || options?.modalities\n ? { modalities: this.modalities || options?.modalities }\n : {}),\n ...this.modelKwargs,\n prompt_cache_key:\n options?.promptCacheKey ??\n this.modelKwargs?.prompt_cache_key ??\n this.promptCacheKey,\n prompt_cache_retention: normalizePromptCacheRetention(\n options?.promptCacheRetention ??\n this.modelKwargs?.prompt_cache_retention ??\n this.promptCacheRetention\n ),\n prompt_cache_options:\n options?.promptCacheOptions ??\n this.modelKwargs?.prompt_cache_options ??\n this.promptCacheOptions,\n verbosity: options?.verbosity ?? this.verbosity,\n };\n if (options?.prediction !== undefined) {\n params.prediction = options.prediction;\n }\n if (this.service_tier !== undefined) {\n params.service_tier = this.service_tier;\n }\n if (options?.service_tier !== undefined) {\n params.service_tier = options.service_tier;\n }\n const reasoning = this._getReasoningParams(options);\n if (reasoning !== undefined && reasoning.effort !== undefined) {\n params.reasoning_effort = reasoning.effort;\n }\n if (isReasoningModel(params.model)) {\n params.max_completion_tokens =\n this.maxTokens === -1 ? undefined : this.maxTokens;\n } else {\n params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;\n }\n\n return params as ChatCompletionsInvocationParams;\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n options.signal?.throwIfAborted();\n const usageMetadata = {} as UsageMetadata;\n const params = this.invocationParams(options);\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n if (params.stream) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks: Record<number, ChatGenerationChunk> = {};\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n if (finalChunks[index] === undefined) {\n finalChunks[index] = chunk;\n } else {\n finalChunks[index] = finalChunks[index].concat(chunk);\n }\n }\n const generations = Object.entries(finalChunks)\n .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n .map(([_, value]) => value);\n\n const { functions, function_call } = this.invocationParams(options);\n\n // OpenAI does not support token usage report under stream mode,\n // fallback to estimation.\n\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage =\n await this._getNumTokensFromGenerations(generations);\n\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n } else {\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options?.signal,\n maxRetries: options?.maxRetries,\n ...options?.options,\n }\n );\n\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data?.usage ?? {};\n\n if (completionTokens) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n\n if (\n promptTokensDetails?.audio_tokens !== null ||\n promptTokensDetails?.cached_tokens !== null ||\n promptTokensDetails?.cache_write_tokens != null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails?.audio_tokens !== null && {\n audio: promptTokensDetails?.audio_tokens,\n }),\n ...(promptTokensDetails?.cached_tokens !== null && {\n cache_read: promptTokensDetails?.cached_tokens,\n }),\n ...(promptTokensDetails?.cache_write_tokens != null && {\n cache_creation: promptTokensDetails?.cache_write_tokens,\n }),\n };\n }\n\n if (\n completionTokensDetails?.audio_tokens !== null ||\n completionTokensDetails?.reasoning_tokens !== null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails?.audio_tokens !== null && {\n audio: completionTokensDetails?.audio_tokens,\n }),\n ...(completionTokensDetails?.reasoning_tokens !== null && {\n reasoning: completionTokensDetails?.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data?.choices ?? []) {\n const text = part.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message ?? { role: \"assistant\" },\n data\n ),\n };\n generation.generationInfo = {\n ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n // Fields are not serialized unless passed to the constructor\n // Doing this ensures all fields on the message are serialized\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith(\"lc_\")\n )\n ) as AIMessageFields\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n }\n\n /**\n * Native implementation of the content-block-centric streaming protocol\n * for OpenAI Chat Completions.\n */\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n\n const streamIterable = await this.completionWithRetry(params, options);\n const shouldStreamUsage = this.streamUsage ?? options.streamUsage;\n\n const abortableStream = async function* (\n source: AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>,\n signal?: AbortSignal\n ) {\n for await (const data of source) {\n if (signal?.aborted) {\n return;\n }\n yield data;\n }\n };\n\n yield* convertOpenAICompletionsStream(\n abortableStream(streamIterable, options.signal),\n {\n streamUsage: shouldStreamUsage ?? true,\n provider: this.streamEventProvider,\n }\n );\n }\n\n /** Provider id used in native stream protocol passthrough events. */\n protected get streamEventProvider(): string {\n return \"openai\";\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n if (options.signal?.aborted) {\n return;\n }\n const choice = data?.choices?.[0];\n if (data.usage) {\n usage = data.usage;\n }\n if (!choice) {\n continue;\n }\n\n const { delta } = choice;\n if (!delta) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index ?? 0,\n };\n if (typeof chunk.content !== \"string\") {\n console.log(\n \"[WARNING]: Received non-string content from OpenAI. This is currently not supported.\"\n );\n continue;\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const generationInfo: Record<string, any> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n // Only include system fingerprint in the last chunk for now\n // to avoid concatenation issues\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens !== null && {\n audio: usage.prompt_tokens_details?.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens !== null && {\n cache_read: usage.prompt_tokens_details?.cached_tokens,\n }),\n ...(usage.prompt_tokens_details?.cache_write_tokens != null && {\n cache_creation: usage.prompt_tokens_details?.cache_write_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens !== null && {\n audio: usage.completion_tokens_details?.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens !== null && {\n reasoning: usage.completion_tokens_details?.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: \"\",\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: \"\",\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n { prompt: 0, completion: 0 },\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParams,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<\n | AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>\n | OpenAIClient.Chat.Completions.ChatCompletion\n > {\n // The SDK has its own `maxRetries`; take it for our caller instead so\n // the two retry loops don't multiply.\n const { maxRetries, ...sdkOptions } = requestOptions ?? {};\n const clientOptions = this._getClientOptions(sdkOptions);\n const isParseableFormat =\n request.response_format && request.response_format.type === \"json_schema\";\n return this.caller.callWithOptions({ maxRetries }, async () => {\n try {\n if (isParseableFormat && !request.stream) {\n return await this.client.chat.completions.parse(\n request,\n clientOptions\n );\n } else {\n return await this.client.chat.completions.create(\n request,\n clientOptions\n );\n }\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw addToolImageHint(error, request.messages);\n }\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return convertCompletionsDeltaToBaseMessageChunk({\n delta,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n defaultRole,\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return convertCompletionsMessageToBaseMessage({\n message,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;AAkDA,MAAM,kBACJ;;AAIF,SAAS,iBACP,OACA,UACA;CASA,IARqB,SAAS,MAC3B,YACC,QAAQ,SAAS,UACjB,MAAM,QAAQ,QAAQ,OAAO,KAC7B,QAAQ,QAAQ,MACb,SAAU,KAA0B,SAAS,OAChD,CAGS,KACX,iBAAiB,SACjB,YAAY,SACZ,MAAM,WAAW,KAEjB,MAAM,UAAU,GAAG,MAAM,QAAQ,MAAM;CAEzC,OAAO;AACT;;;;;AAMA,IAAa,wBAAb,cAGUA,aAAAA,eAA4B;CAGpC,YACE,eACA,WACA;EACA,MAAMC,aAAAA,yBAAyB,eAAe,SAAS,CAAC;CAC1D;CAEA,IAAa,UAAwB;EACnC,OAAOC,gBAAAA,cAAc,MAAM,SAAS,KAAK;CAC3C;;CAGA,iBACE,SACA,OACiC;EACjC,IAAI;EACJ,IAAI,SAAS,WAAW,KAAA,GACtB,SAAS,QAAQ;OACZ,IAAI,KAAK,8BAA8B,KAAA,GAC5C,SAAS,KAAK;EAWhB,IACE,EAFkB,KAAK,aAAa,OAAO,cAG3C,SAAS,iBAAiB,SAAS,iBACnC,WAAW,OAEX,SAAS;EAGX,IAAI,sBAAsB,CAAC;EAC3B,IAAI,SAAS,mBAAmB,KAAA,GAC9B,sBAAsB,EAAE,gBAAgB,QAAQ,eAAe;OAC1D,IAAI,KAAK,gBAAgB,KAAK,aAAa,OAAO,YACvD,sBAAsB,EAAE,gBAAgB,EAAE,eAAe,KAAK,EAAE;EAGlE,MAAM,SAAmD;GACvD,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,OAAO,KAAK;GACZ,mBAAmB,KAAK;GACxB,kBAAkB,KAAK;GACvB,UAAU,KAAK;GACf,cAAc,KAAK;GACnB,GAAG,KAAK;GACR,YAAY,KAAK;GACjB,MAAM,SAAS,QAAQ,KAAK;GAC5B,MAAM,KAAK;GAEX,QAAQ,KAAK;GACb,WAAW,SAAS;GACpB,eAAe,SAAS;GACxB,OAAO,SAAS,OAAO,SACnB,QAAQ,MAAM,KAAK,SACjB,KAAK,wCAAwC,MAAM,EAAE,OAAO,CAAC,CAC/D,IACA,KAAA;GACJ,aAAaC,cAAAA,yBACX,SAAS,WACX;GACA,iBAAiB,KAAK,mBAAmB,SAAS,eAAe;GACjE,MAAM,SAAS;GACf,GAAG;GACH,qBAAqB,SAAS;GAC9B,GAAI,KAAK,SAAS,SAAS,QACvB,EAAE,OAAO,KAAK,SAAS,SAAS,MAAM,IACtC,CAAC;GACL,GAAI,KAAK,cAAc,SAAS,aAC5B,EAAE,YAAY,KAAK,cAAc,SAAS,WAAW,IACrD,CAAC;GACL,GAAG,KAAK;GACR,kBACE,SAAS,kBACT,KAAK,aAAa,oBAClB,KAAK;GACP,wBAAwBC,aAAAA,8BACtB,SAAS,wBACP,KAAK,aAAa,0BAClB,KAAK,oBACT;GACA,sBACE,SAAS,sBACT,KAAK,aAAa,wBAClB,KAAK;GACP,WAAW,SAAS,aAAa,KAAK;EACxC;EACA,IAAI,SAAS,eAAe,KAAA,GAC1B,OAAO,aAAa,QAAQ;EAE9B,IAAI,KAAK,iBAAiB,KAAA,GACxB,OAAO,eAAe,KAAK;EAE7B,IAAI,SAAS,iBAAiB,KAAA,GAC5B,OAAO,eAAe,QAAQ;EAEhC,MAAM,YAAY,KAAK,oBAAoB,OAAO;EAClD,IAAI,cAAc,KAAA,KAAa,UAAU,WAAW,KAAA,GAClD,OAAO,mBAAmB,UAAU;EAEtC,IAAIC,aAAAA,iBAAiB,OAAO,KAAK,GAC/B,OAAO,wBACL,KAAK,cAAc,KAAK,KAAA,IAAY,KAAK;OAE3C,OAAO,aAAa,KAAK,cAAc,KAAK,KAAA,IAAY,KAAK;EAG/D,OAAO;CACT;CAEA,MAAM,UACJ,UACA,SACA,YACqB;EACrB,QAAQ,QAAQ,eAAe;EAC/B,MAAM,gBAAgB,CAAC;EACvB,MAAM,SAAS,KAAK,iBAAiB,OAAO;EAC5C,MAAM,iBACJC,oBAAAA,0CAA0C;GACxC;GACA,OAAO,KAAK;EACd,CAAC;EAEH,IAAI,OAAO,QAAQ;GACjB,MAAM,SAAS,KAAK,sBAAsB,UAAU,SAAS,UAAU;GACvE,MAAM,cAAmD,CAAC;GAC1D,WAAW,MAAM,SAAS,QAAQ;IAChC,MAAM,QAAQ,oBAAoB;KAChC,GAAG,MAAM;KACT,GAAG,MAAM,QAAQ;IACnB;IACA,MAAM,QACH,MAAM,gBAAoC,cAAc;IAC3D,IAAI,YAAY,WAAW,KAAA,GACzB,YAAY,SAAS;SAErB,YAAY,SAAS,YAAY,MAAM,CAAC,OAAO,KAAK;GAExD;GACA,MAAM,cAAc,OAAO,QAAQ,WAAW,CAAC,CAC5C,MAAM,CAAC,OAAO,CAAC,UAAU,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM,EAAE,CAAC,CAAC,CACjE,KAAK,CAAC,GAAG,WAAW,KAAK;GAE5B,MAAM,EAAE,WAAW,kBAAkB,KAAK,iBAAiB,OAAO;GAKlE,MAAM,mBAAmB,MAAM,KAAK,kCAClC,UACA,WACA,aACF;GACA,MAAM,uBACJ,MAAM,KAAK,6BAA6B,WAAW;GAErD,cAAc,eAAe;GAC7B,cAAc,gBAAgB;GAC9B,cAAc,eAAe,mBAAmB;GAChD,OAAO;IACL;IACA,WAAW,EACT,qBAAqB;KACnB,cAAc,cAAc;KAC5B,kBAAkB,cAAc;KAChC,aAAa,cAAc;IAC7B,EACF;GACF;EACF,OAAO;GACL,MAAM,OAAO,MAAM,KAAK,oBACtB;IACE,GAAG;IACH,QAAQ;IACR,UAAU;GACZ,GACA;IACE,QAAQ,SAAS;IACjB,YAAY,SAAS;IACrB,GAAG,SAAS;GACd,CACF;GAEA,MAAM,EACJ,mBAAmB,kBACnB,eAAe,cACf,cAAc,aACd,uBAAuB,qBACvB,2BAA2B,4BACzB,MAAM,SAAS,CAAC;GAEpB,IAAI,kBACF,cAAc,iBACX,cAAc,iBAAiB,KAAK;GAGzC,IAAI,cACF,cAAc,gBACX,cAAc,gBAAgB,KAAK;GAGxC,IAAI,aACF,cAAc,gBACX,cAAc,gBAAgB,KAAK;GAGxC,IACE,qBAAqB,iBAAiB,QACtC,qBAAqB,kBAAkB,QACvC,qBAAqB,sBAAsB,MAE3C,cAAc,sBAAsB;IAClC,GAAI,qBAAqB,iBAAiB,QAAQ,EAChD,OAAO,qBAAqB,aAC9B;IACA,GAAI,qBAAqB,kBAAkB,QAAQ,EACjD,YAAY,qBAAqB,cACnC;IACA,GAAI,qBAAqB,sBAAsB,QAAQ,EACrD,gBAAgB,qBAAqB,mBACvC;GACF;GAGF,IACE,yBAAyB,iBAAiB,QAC1C,yBAAyB,qBAAqB,MAE9C,cAAc,uBAAuB;IACnC,GAAI,yBAAyB,iBAAiB,QAAQ,EACpD,OAAO,yBAAyB,aAClC;IACA,GAAI,yBAAyB,qBAAqB,QAAQ,EACxD,WAAW,yBAAyB,iBACtC;GACF;GAGF,MAAM,cAAgC,CAAC;GACvC,KAAK,MAAM,QAAQ,MAAM,WAAW,CAAC,GAAG;IAEtC,MAAM,aAA6B;KACjC,MAFW,KAAK,SAAS,WAAW;KAGpC,SAAS,KAAK,wCACZ,KAAK,WAAW,EAAE,MAAM,YAAY,GACpC,IACF;IACF;IACA,WAAW,iBAAiB;KAC1B,GAAI,KAAK,gBAAgB,EAAE,eAAe,KAAK,cAAc,IAAI,CAAC;KAClE,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAS,IAAI,CAAC;IACrD;IACA,KAAA,GAAIC,yBAAAA,YAAAA,CAAY,WAAW,OAAO,GAChC,WAAW,QAAQ,iBAAiB;IAItC,WAAW,UAAU,IAAIC,yBAAAA,UACvB,OAAO,YACL,OAAO,QAAQ,WAAW,OAAO,CAAC,CAAC,QAChC,CAAC,SAAS,CAAC,IAAI,WAAW,KAAK,CAClC,CACF,CACF;IACA,YAAY,KAAK,UAAU;GAC7B;GACA,OAAO;IACL;IACA,WAAW,EACT,YAAY;KACV,cAAc,cAAc;KAC5B,kBAAkB,cAAc;KAChC,aAAa,cAAc;IAC7B,EACF;GACF;EACF;CACF;;;;;CAMA,OAAO,uBACL,UACA,SACA,aACsC;EACtC,MAAM,iBACJF,oBAAAA,0CAA0C;GACxC;GACA,OAAO,KAAK;EACd,CAAC;EAEH,MAAM,SAAS;GACb,GAAG,KAAK,iBAAiB,SAAS,EAChC,WAAW,KACb,CAAC;GACD,UAAU;GACV,QAAQ;EACV;EAEA,MAAM,iBAAiB,MAAM,KAAK,oBAAoB,QAAQ,OAAO;EACrE,MAAM,oBAAoB,KAAK,eAAe,QAAQ;EAEtD,MAAM,kBAAkB,iBACtB,QACA,QACA;GACA,WAAW,MAAM,QAAQ,QAAQ;IAC/B,IAAI,QAAQ,SACV;IAEF,MAAM;GACR;EACF;EAEA,QAAA,GAAOG,0DAAAA,+BAAAA,CACL,gBAAgB,gBAAgB,QAAQ,MAAM,GAC9C;GACE,aAAa,qBAAqB;GAClC,UAAU,KAAK;EACjB,CACF;CACF;;CAGA,IAAc,sBAA8B;EAC1C,OAAO;CACT;CAEA,OAAO,sBACL,UACA,SACA,YACqC;EACrC,MAAM,iBACJH,oBAAAA,0CAA0C;GACxC;GACA,OAAO,KAAK;EACd,CAAC;EAEH,MAAM,SAAS;GACb,GAAG,KAAK,iBAAiB,SAAS,EAChC,WAAW,KACb,CAAC;GACD,UAAU;GACV,QAAQ;EACV;EACA,IAAI;EAEJ,MAAM,iBAAiB,MAAM,KAAK,oBAAoB,QAAQ,OAAO;EACrE,IAAI;EACJ,WAAW,MAAM,QAAQ,gBAAgB;GACvC,IAAI,QAAQ,QAAQ,SAClB;GAEF,MAAM,SAAS,MAAM,UAAU;GAC/B,IAAI,KAAK,OACP,QAAQ,KAAK;GAEf,IAAI,CAAC,QACH;GAGF,MAAM,EAAE,UAAU;GAClB,IAAI,CAAC,OACH;GAEF,MAAM,QAAQ,KAAK,2CACjB,OACA,MACA,WACF;GACA,cAAc,MAAM,QAAQ;GAC5B,MAAM,kBAAkB;IACtB,QAAQ,QAAQ,eAAe;IAC/B,YAAY,OAAO,SAAS;GAC9B;GACA,IAAI,OAAO,MAAM,YAAY,UAAU;IACrC,QAAQ,IACN,sFACF;IACA;GACF;GAEA,MAAM,iBAAsC,EAAE,GAAG,gBAAgB;GACjE,IAAI,OAAO,iBAAiB,MAAM;IAChC,eAAe,gBAAgB,OAAO;IAGtC,eAAe,qBAAqB,KAAK;IACzC,eAAe,aAAa,KAAK;IACjC,eAAe,eAAe,KAAK;GACrC;GACA,IAAI,KAAK,UACP,eAAe,WAAW,OAAO;GAEnC,MAAM,kBAAkB,IAAII,wBAAAA,oBAAoB;IAC9C,SAAS;IACT,MAAM,MAAM;IACZ;GACF,CAAC;GACD,MAAM;GACN,MAAM,YAAY,kBAChB,gBAAgB,QAAQ,IACxB,iBACA,KAAA,GACA,KAAA,GACA,KAAA,GACA,EAAE,OAAO,gBAAgB,CAC3B;EACF;EACA,IAAI,OAAO;GACT,MAAM,oBAAoB;IACxB,GAAI,MAAM,uBAAuB,iBAAiB,QAAQ,EACxD,OAAO,MAAM,uBAAuB,aACtC;IACA,GAAI,MAAM,uBAAuB,kBAAkB,QAAQ,EACzD,YAAY,MAAM,uBAAuB,cAC3C;IACA,GAAI,MAAM,uBAAuB,sBAAsB,QAAQ,EAC7D,gBAAgB,MAAM,uBAAuB,mBAC/C;GACF;GACA,MAAM,qBAAqB;IACzB,GAAI,MAAM,2BAA2B,iBAAiB,QAAQ,EAC5D,OAAO,MAAM,2BAA2B,aAC1C;IACA,GAAI,MAAM,2BAA2B,qBAAqB,QAAQ,EAChE,WAAW,MAAM,2BAA2B,iBAC9C;GACF;GACA,MAAM,kBAAkB,IAAIA,wBAAAA,oBAAoB;IAC9C,SAAS,IAAIC,yBAAAA,eAAe;KAC1B,SAAS;KACT,mBAAmB,EACjB,OAAO,EAAE,GAAG,MAAM,EACpB;KACA,gBAAgB;MACd,cAAc,MAAM;MACpB,eAAe,MAAM;MACrB,cAAc,MAAM;MACpB,GAAI,OAAO,KAAK,iBAAiB,CAAC,CAAC,SAAS,KAAK,EAC/C,qBAAqB,kBACvB;MACA,GAAI,OAAO,KAAK,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAChD,sBAAsB,mBACxB;KACF;IACF,CAAC;IACD,MAAM;GACR,CAAC;GACD,MAAM;GACN,MAAM,YAAY,kBAChB,gBAAgB,QAAQ,IACxB;IAAE,QAAQ;IAAG,YAAY;GAAE,GAC3B,KAAA,GACA,KAAA,GACA,KAAA,GACA,EAAE,OAAO,gBAAgB,CAC3B;EACF;EACA,IAAI,QAAQ,QAAQ,SAClB,MAAM,IAAI,MAAM,YAAY;CAEhC;CAYA,MAAM,oBACJ,SACA,gBAIA;EAGA,MAAM,EAAE,YAAY,GAAG,eAAe,kBAAkB,CAAC;EACzD,MAAM,gBAAgB,KAAK,kBAAkB,UAAU;EACvD,MAAM,oBACJ,QAAQ,mBAAmB,QAAQ,gBAAgB,SAAS;EAC9D,OAAO,KAAK,OAAO,gBAAgB,EAAE,WAAW,GAAG,YAAY;GAC7D,IAAI;IACF,IAAI,qBAAqB,CAAC,QAAQ,QAChC,OAAO,MAAM,KAAK,OAAO,KAAK,YAAY,MACxC,SACA,aACF;SAEA,OAAO,MAAM,KAAK,OAAO,KAAK,YAAY,OACxC,SACA,aACF;GAEJ,SAAS,GAAG;IAEV,MAAM,iBADQC,eAAAA,sBAAsB,CACT,GAAG,QAAQ,QAAQ;GAChD;EACF,CAAC;CACH;;;;;;;;CASA,2CAEE,OACA,aACA,aACkB;EAClB,OAAOC,oBAAAA,0CAA0C;GAC/C;GACA;GACA,oBAAoB,KAAK;GACzB;EACF,CAAC;CACH;;;;;;;;CASA,wCACE,SACA,aACa;EACb,OAAOC,oBAAAA,uCAAuC;GAC5C;GACA;GACA,oBAAoB,KAAK;EAC3B,CAAC;CACH;AACF"}
@@ -6,13 +6,13 @@ import { ModelProfile } from "@langchain/core/language_models/profile";
6
6
  import { BaseMessage, BaseMessageChunk } from "@langchain/core/messages";
7
7
  import { ChatGenerationChunk, ChatResult } from "@langchain/core/outputs";
8
8
  //#region src/chat_models/completions.d.ts
9
- interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}
9
+ export interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}
10
10
  type ChatCompletionsInvocationParams = Omit<OpenAI.Chat.Completions.ChatCompletionCreateParams, "messages">;
11
11
  /**
12
12
  * OpenAI Completions API implementation.
13
13
  * @internal
14
14
  */
15
- declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions> extends BaseChatOpenAI<CallOptions> {
15
+ export declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions> extends BaseChatOpenAI<CallOptions> {
16
16
  constructor(model: string, fields?: Omit<BaseChatOpenAIFields, "model">);
17
17
  constructor(fields?: BaseChatOpenAIFields);
18
18
  get profile(): ModelProfile;
@@ -49,5 +49,4 @@ declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCal
49
49
  protected _convertCompletionsMessageToBaseMessage(message: OpenAI.ChatCompletionMessage, rawResponse: OpenAI.ChatCompletion): BaseMessage;
50
50
  }
51
51
  //#endregion
52
- export { ChatOpenAICompletions, ChatOpenAICompletionsCallOptions };
53
52
  //# sourceMappingURL=completions.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"completions.d.cts","names":[],"sources":["../../src/chat_models/completions.ts"],"mappings":";;;;;;;;UA2CiB,yCAAyC;KAErD,kCAAkC,KACrC,OAAa,KAAK,YAAY;;;;;cAoCnB,sBACX,oBAAoB,mCAClB,0CACM,eAAe;EACvB,YAAY,eAAe,SAAS,KAAK;EACzC,YAAY,SAAS;MAQR,WAAW;;EAKf,iBACP,qCACA;IAAU;MACT;EAwGG,UACJ,UAAU,eACV,oCACA,aAAa,2BACZ,QAAQ;;;;;EA0KJ,uBACL,UAAU,eACV,oCACA,cAAc,2BACb,eAAe;;gBAwCJ;EAIP,sBACL,UAAU,eACV,oCACA,aAAa,2BACZ,eAAe;EAqIZ,oBACJ,SAAS,OAAa,KAAK,qCAC3B,iBAAiB,OAAa,iBAC7B,QAAQ,cAAc,OAAa,KAAK,YAAY;EAEjD,oBACJ,SAAS,OAAa,KAAK,wCAC3B,iBAAiB,OAAa,iBAC7B,QAAQ,OAAa,KAAK,YAAY;;;;;;;;YA0C/B,2CAER,OAAO,qBACP,aAAa,OAAa,KAAK,YAAY,qBAC3C,cAAc,OAAa,KAAK,qBAC/B;;;;;;;;YAgBO,wCACR,SAAS,OAAa,uBACtB,aAAa,OAAa,iBACzB"}
1
+ {"version":3,"file":"completions.d.cts","names":["OpenAIClient"],"sources":["../../src/chat_models/completions.ts"],"mappings":";;;;;;;;iBA2CiB,yCAAyC;KAErD,kCAAkC,KACrCA,OAAa,KAAK,YAAY;;;;;qBAoCnB,sBACX,oBAAoB,mCAClB,0CACM,eAAe;EACvB,YAAY,eAAe,SAAS,KAAK;EACzC,YAAY,SAAS;MAQR,WAAW;;EAKf,iBACP,qCACA;IAAU;MACT;EAwGG,UACJ,UAAU,eACV,oCACA,aAAa,2BACZ,QAAQ;;;;;EA0KJ,uBACL,UAAU,eACV,oCACA,cAAc,2BACb,eAAe;;gBAwCJ;EAIP,sBACL,UAAU,eACV,oCACA,aAAa,2BACZ,eAAe;EAqIZ,oBACJ,SAASA,OAAa,KAAK,qCAC3B,iBAAiBA,OAAa,iBAC7B,QAAQ,cAAcA,OAAa,KAAK,YAAY;EAEjD,oBACJ,SAASA,OAAa,KAAK,wCAC3B,iBAAiBA,OAAa,iBAC7B,QAAQA,OAAa,KAAK,YAAY;;;;;;;;YA0C/B,2CAER,OAAO,qBACP,aAAaA,OAAa,KAAK,YAAY,qBAC3C,cAAcA,OAAa,KAAK,qBAC/B;;;;;;;;YAgBO,wCACR,SAASA,OAAa,uBACtB,aAAaA,OAAa,iBACzB"}
@@ -6,13 +6,13 @@ import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
6
6
  import { ChatModelStreamEvent } from "@langchain/core/language_models/event";
7
7
  import { ModelProfile } from "@langchain/core/language_models/profile";
8
8
  //#region src/chat_models/completions.d.ts
9
- interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}
9
+ export interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}
10
10
  type ChatCompletionsInvocationParams = Omit<OpenAI.Chat.Completions.ChatCompletionCreateParams, "messages">;
11
11
  /**
12
12
  * OpenAI Completions API implementation.
13
13
  * @internal
14
14
  */
15
- declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions> extends BaseChatOpenAI<CallOptions> {
15
+ export declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions> extends BaseChatOpenAI<CallOptions> {
16
16
  constructor(model: string, fields?: Omit<BaseChatOpenAIFields, "model">);
17
17
  constructor(fields?: BaseChatOpenAIFields);
18
18
  get profile(): ModelProfile;
@@ -49,5 +49,4 @@ declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCal
49
49
  protected _convertCompletionsMessageToBaseMessage(message: OpenAI.ChatCompletionMessage, rawResponse: OpenAI.ChatCompletion): BaseMessage;
50
50
  }
51
51
  //#endregion
52
- export { ChatOpenAICompletions, ChatOpenAICompletionsCallOptions };
53
52
  //# sourceMappingURL=completions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"completions.d.ts","names":[],"sources":["../../src/chat_models/completions.ts"],"mappings":";;;;;;;;UA2CiB,yCAAyC;KAErD,kCAAkC,KACrC,OAAa,KAAK,YAAY;;;;;cAoCnB,sBACX,oBAAoB,mCAClB,0CACM,eAAe;EACvB,YAAY,eAAe,SAAS,KAAK;EACzC,YAAY,SAAS;MAQR,WAAW;;EAKf,iBACP,qCACA;IAAU;MACT;EAwGG,UACJ,UAAU,eACV,oCACA,aAAa,2BACZ,QAAQ;;;;;EA0KJ,uBACL,UAAU,eACV,oCACA,cAAc,2BACb,eAAe;;gBAwCJ;EAIP,sBACL,UAAU,eACV,oCACA,aAAa,2BACZ,eAAe;EAqIZ,oBACJ,SAAS,OAAa,KAAK,qCAC3B,iBAAiB,OAAa,iBAC7B,QAAQ,cAAc,OAAa,KAAK,YAAY;EAEjD,oBACJ,SAAS,OAAa,KAAK,wCAC3B,iBAAiB,OAAa,iBAC7B,QAAQ,OAAa,KAAK,YAAY;;;;;;;;YA0C/B,2CAER,OAAO,qBACP,aAAa,OAAa,KAAK,YAAY,qBAC3C,cAAc,OAAa,KAAK,qBAC/B;;;;;;;;YAgBO,wCACR,SAAS,OAAa,uBACtB,aAAa,OAAa,iBACzB"}
1
+ {"version":3,"file":"completions.d.ts","names":["OpenAIClient"],"sources":["../../src/chat_models/completions.ts"],"mappings":";;;;;;;;iBA2CiB,yCAAyC;KAErD,kCAAkC,KACrCA,OAAa,KAAK,YAAY;;;;;qBAoCnB,sBACX,oBAAoB,mCAClB,0CACM,eAAe;EACvB,YAAY,eAAe,SAAS,KAAK;EACzC,YAAY,SAAS;MAQR,WAAW;;EAKf,iBACP,qCACA;IAAU;MACT;EAwGG,UACJ,UAAU,eACV,oCACA,aAAa,2BACZ,QAAQ;;;;;EA0KJ,uBACL,UAAU,eACV,oCACA,cAAc,2BACb,eAAe;;gBAwCJ;EAIP,sBACL,UAAU,eACV,oCACA,aAAa,2BACZ,eAAe;EAqIZ,oBACJ,SAASA,OAAa,KAAK,qCAC3B,iBAAiBA,OAAa,iBAC7B,QAAQ,cAAcA,OAAa,KAAK,YAAY;EAEjD,oBACJ,SAASA,OAAa,KAAK,wCAC3B,iBAAiBA,OAAa,iBAC7B,QAAQA,OAAa,KAAK,YAAY;;;;;;;;YA0C/B,2CAER,OAAO,qBACP,aAAaA,OAAa,KAAK,YAAY,qBAC3C,cAAcA,OAAa,KAAK,qBAC/B;;;;;;;;YAgBO,wCACR,SAASA,OAAa,uBACtB,aAAaA,OAAa,iBACzB"}
@@ -1,5 +1,5 @@
1
1
  import { wrapOpenAIClientError } from "../utils/client.js";
2
- import { withoutFileMimeTypesUnlessSupported } from "../utils/file_mime_types.js";
2
+ import { profileForApi } from "../utils/profile.js";
3
3
  import { formatToOpenAIToolChoice } from "../utils/tools.js";
4
4
  import { isReasoningModel, normalizePromptCacheRetention } from "../utils/misc.js";
5
5
  import { BaseChatOpenAI, getChatOpenAIModelParams } from "./base.js";
@@ -23,7 +23,7 @@ var ChatOpenAICompletions = class extends BaseChatOpenAI {
23
23
  super(getChatOpenAIModelParams(modelOrFields, fieldsArg));
24
24
  }
25
25
  get profile() {
26
- return withoutFileMimeTypesUnlessSupported(super.profile, false);
26
+ return profileForApi(super.profile, false);
27
27
  }
28
28
  /** @internal */
29
29
  invocationParams(options, extra) {
@@ -1 +1 @@
1
- {"version":3,"file":"completions.js","names":[],"sources":["../../src/chat_models/completions.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n isAIMessage,\n type UsageMetadata,\n type AIMessageFields,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport {\n ChatGenerationChunk,\n type ChatGeneration,\n type ChatResult,\n} from \"@langchain/core/outputs\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport type { ModelProfile } from \"@langchain/core/language_models/profile\";\nimport { wrapOpenAIClientError } from \"../utils/client.js\";\nimport { withoutFileMimeTypesUnlessSupported } from \"../utils/file_mime_types.js\";\nimport {\n OpenAIToolChoice,\n formatToOpenAIToolChoice,\n _convertToOpenAITool,\n} from \"../utils/tools.js\";\nimport {\n isReasoningModel,\n normalizePromptCacheRetention,\n} from \"../utils/misc.js\";\nimport {\n BaseChatOpenAI,\n BaseChatOpenAICallOptions,\n BaseChatOpenAIFields,\n getChatOpenAIModelParams,\n} from \"./base.js\";\nimport {\n convertCompletionsDeltaToBaseMessageChunk,\n convertCompletionsMessageToBaseMessage,\n convertMessagesToCompletionsMessageParams,\n} from \"../converters/completions.js\";\nimport { convertOpenAICompletionsStream } from \"../utils/stream_events.js\";\n\nexport interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}\n\ntype ChatCompletionsInvocationParams = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionCreateParams,\n \"messages\"\n>;\n\nconst TOOL_IMAGE_HINT =\n \"Chat Completions does not support images in tool messages. \" +\n \"Use the Responses API (`useResponsesApi: true`) to send images from tool results.\";\n\n/** Points a 400 caused by a tool-result image at the Responses API. */\nfunction addToolImageHint(\n error: unknown,\n messages: OpenAIClient.Chat.ChatCompletionMessageParam[]\n) {\n const hasToolImage = messages.some(\n (message) =>\n message.role === \"tool\" &&\n Array.isArray(message.content) &&\n message.content.some(\n (part) => (part as { type: string }).type === \"image\"\n )\n );\n if (\n hasToolImage &&\n error instanceof Error &&\n \"status\" in error &&\n error.status === 400\n ) {\n error.message = `${error.message}\\n\\n${TOOL_IMAGE_HINT}`;\n }\n return error;\n}\n\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport class ChatOpenAICompletions<\n CallOptions extends ChatOpenAICompletionsCallOptions =\n ChatOpenAICompletionsCallOptions,\n> extends BaseChatOpenAI<CallOptions> {\n constructor(model: string, fields?: Omit<BaseChatOpenAIFields, \"model\">);\n constructor(fields?: BaseChatOpenAIFields);\n constructor(\n modelOrFields?: string | BaseChatOpenAIFields,\n fieldsArg?: Omit<BaseChatOpenAIFields, \"model\">\n ) {\n super(getChatOpenAIModelParams(modelOrFields, fieldsArg));\n }\n\n override get profile(): ModelProfile {\n return withoutFileMimeTypesUnlessSupported(super.profile, false);\n }\n\n /** @internal */\n override invocationParams(\n options?: this[\"ParsedCallOptions\"],\n extra?: { streaming?: boolean }\n ): ChatCompletionsInvocationParams {\n let strict: boolean | undefined;\n if (options?.strict !== undefined) {\n strict = options.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n\n // A `json_schema` response format goes through the SDK `.parse()` helper,\n // which requires strict function tools — but only on the NON-streaming path\n // (`completionWithRetry` uses `.parse()` only when `!request.stream`).\n // Streaming structured output uses `create()`, which doesn't need strict, so\n // don't force it there. Default to strict for the parse path unless the\n // caller set strict:false. (Re-applied here because the agent core no longer\n // forces strict for every provider.)\n const isStreaming = this.streaming || extra?.streaming;\n if (\n !isStreaming &&\n options?.response_format?.type === \"json_schema\" &&\n strict !== false\n ) {\n strict = true;\n }\n\n let streamOptionsConfig = {};\n if (options?.stream_options !== undefined) {\n streamOptionsConfig = { stream_options: options.stream_options };\n } else if (this.streamUsage && (this.streaming || extra?.streaming)) {\n streamOptionsConfig = { stream_options: { include_usage: true } };\n }\n\n const params: Partial<ChatCompletionsInvocationParams> = {\n model: this.model,\n temperature: this.temperature,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n logprobs: this.logprobs,\n top_logprobs: this.topLogprobs,\n n: this.n,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n // if include_usage is set or streamUsage then stream must be set to true.\n stream: this.streaming,\n functions: options?.functions,\n function_call: options?.function_call,\n tools: options?.tools?.length\n ? options.tools.map((tool) =>\n this._convertChatOpenAIToolToCompletionsTool(tool, { strict })\n )\n : undefined,\n tool_choice: formatToOpenAIToolChoice(\n options?.tool_choice as OpenAIToolChoice\n ),\n response_format: this._getResponseFormat(options?.response_format),\n seed: options?.seed,\n ...streamOptionsConfig,\n parallel_tool_calls: options?.parallel_tool_calls,\n ...(this.audio || options?.audio\n ? { audio: this.audio || options?.audio }\n : {}),\n ...(this.modalities || options?.modalities\n ? { modalities: this.modalities || options?.modalities }\n : {}),\n ...this.modelKwargs,\n prompt_cache_key:\n options?.promptCacheKey ??\n this.modelKwargs?.prompt_cache_key ??\n this.promptCacheKey,\n prompt_cache_retention: normalizePromptCacheRetention(\n options?.promptCacheRetention ??\n this.modelKwargs?.prompt_cache_retention ??\n this.promptCacheRetention\n ),\n prompt_cache_options:\n options?.promptCacheOptions ??\n this.modelKwargs?.prompt_cache_options ??\n this.promptCacheOptions,\n verbosity: options?.verbosity ?? this.verbosity,\n };\n if (options?.prediction !== undefined) {\n params.prediction = options.prediction;\n }\n if (this.service_tier !== undefined) {\n params.service_tier = this.service_tier;\n }\n if (options?.service_tier !== undefined) {\n params.service_tier = options.service_tier;\n }\n const reasoning = this._getReasoningParams(options);\n if (reasoning !== undefined && reasoning.effort !== undefined) {\n params.reasoning_effort = reasoning.effort;\n }\n if (isReasoningModel(params.model)) {\n params.max_completion_tokens =\n this.maxTokens === -1 ? undefined : this.maxTokens;\n } else {\n params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;\n }\n\n return params as ChatCompletionsInvocationParams;\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n options.signal?.throwIfAborted();\n const usageMetadata = {} as UsageMetadata;\n const params = this.invocationParams(options);\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n if (params.stream) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks: Record<number, ChatGenerationChunk> = {};\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n if (finalChunks[index] === undefined) {\n finalChunks[index] = chunk;\n } else {\n finalChunks[index] = finalChunks[index].concat(chunk);\n }\n }\n const generations = Object.entries(finalChunks)\n .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n .map(([_, value]) => value);\n\n const { functions, function_call } = this.invocationParams(options);\n\n // OpenAI does not support token usage report under stream mode,\n // fallback to estimation.\n\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage =\n await this._getNumTokensFromGenerations(generations);\n\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n } else {\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options?.signal,\n maxRetries: options?.maxRetries,\n ...options?.options,\n }\n );\n\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data?.usage ?? {};\n\n if (completionTokens) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n\n if (\n promptTokensDetails?.audio_tokens !== null ||\n promptTokensDetails?.cached_tokens !== null ||\n promptTokensDetails?.cache_write_tokens != null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails?.audio_tokens !== null && {\n audio: promptTokensDetails?.audio_tokens,\n }),\n ...(promptTokensDetails?.cached_tokens !== null && {\n cache_read: promptTokensDetails?.cached_tokens,\n }),\n ...(promptTokensDetails?.cache_write_tokens != null && {\n cache_creation: promptTokensDetails?.cache_write_tokens,\n }),\n };\n }\n\n if (\n completionTokensDetails?.audio_tokens !== null ||\n completionTokensDetails?.reasoning_tokens !== null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails?.audio_tokens !== null && {\n audio: completionTokensDetails?.audio_tokens,\n }),\n ...(completionTokensDetails?.reasoning_tokens !== null && {\n reasoning: completionTokensDetails?.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data?.choices ?? []) {\n const text = part.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message ?? { role: \"assistant\" },\n data\n ),\n };\n generation.generationInfo = {\n ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n // Fields are not serialized unless passed to the constructor\n // Doing this ensures all fields on the message are serialized\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith(\"lc_\")\n )\n ) as AIMessageFields\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n }\n\n /**\n * Native implementation of the content-block-centric streaming protocol\n * for OpenAI Chat Completions.\n */\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n\n const streamIterable = await this.completionWithRetry(params, options);\n const shouldStreamUsage = this.streamUsage ?? options.streamUsage;\n\n const abortableStream = async function* (\n source: AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>,\n signal?: AbortSignal\n ) {\n for await (const data of source) {\n if (signal?.aborted) {\n return;\n }\n yield data;\n }\n };\n\n yield* convertOpenAICompletionsStream(\n abortableStream(streamIterable, options.signal),\n {\n streamUsage: shouldStreamUsage ?? true,\n provider: this.streamEventProvider,\n }\n );\n }\n\n /** Provider id used in native stream protocol passthrough events. */\n protected get streamEventProvider(): string {\n return \"openai\";\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n if (options.signal?.aborted) {\n return;\n }\n const choice = data?.choices?.[0];\n if (data.usage) {\n usage = data.usage;\n }\n if (!choice) {\n continue;\n }\n\n const { delta } = choice;\n if (!delta) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index ?? 0,\n };\n if (typeof chunk.content !== \"string\") {\n console.log(\n \"[WARNING]: Received non-string content from OpenAI. This is currently not supported.\"\n );\n continue;\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const generationInfo: Record<string, any> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n // Only include system fingerprint in the last chunk for now\n // to avoid concatenation issues\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens !== null && {\n audio: usage.prompt_tokens_details?.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens !== null && {\n cache_read: usage.prompt_tokens_details?.cached_tokens,\n }),\n ...(usage.prompt_tokens_details?.cache_write_tokens != null && {\n cache_creation: usage.prompt_tokens_details?.cache_write_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens !== null && {\n audio: usage.completion_tokens_details?.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens !== null && {\n reasoning: usage.completion_tokens_details?.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: \"\",\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: \"\",\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n { prompt: 0, completion: 0 },\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParams,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<\n | AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>\n | OpenAIClient.Chat.Completions.ChatCompletion\n > {\n // The SDK has its own `maxRetries`; take it for our caller instead so\n // the two retry loops don't multiply.\n const { maxRetries, ...sdkOptions } = requestOptions ?? {};\n const clientOptions = this._getClientOptions(sdkOptions);\n const isParseableFormat =\n request.response_format && request.response_format.type === \"json_schema\";\n return this.caller.callWithOptions({ maxRetries }, async () => {\n try {\n if (isParseableFormat && !request.stream) {\n return await this.client.chat.completions.parse(\n request,\n clientOptions\n );\n } else {\n return await this.client.chat.completions.create(\n request,\n clientOptions\n );\n }\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw addToolImageHint(error, request.messages);\n }\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return convertCompletionsDeltaToBaseMessageChunk({\n delta,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n defaultRole,\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return convertCompletionsMessageToBaseMessage({\n message,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"completions.js","names":[],"sources":["../../src/chat_models/completions.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport type { ChatModelStreamEvent } from \"@langchain/core/language_models/event\";\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n isAIMessage,\n type UsageMetadata,\n type AIMessageFields,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport {\n ChatGenerationChunk,\n type ChatGeneration,\n type ChatResult,\n} from \"@langchain/core/outputs\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport type { ModelProfile } from \"@langchain/core/language_models/profile\";\nimport { wrapOpenAIClientError } from \"../utils/client.js\";\nimport { profileForApi } from \"../utils/profile.js\";\nimport {\n OpenAIToolChoice,\n formatToOpenAIToolChoice,\n _convertToOpenAITool,\n} from \"../utils/tools.js\";\nimport {\n isReasoningModel,\n normalizePromptCacheRetention,\n} from \"../utils/misc.js\";\nimport {\n BaseChatOpenAI,\n BaseChatOpenAICallOptions,\n BaseChatOpenAIFields,\n getChatOpenAIModelParams,\n} from \"./base.js\";\nimport {\n convertCompletionsDeltaToBaseMessageChunk,\n convertCompletionsMessageToBaseMessage,\n convertMessagesToCompletionsMessageParams,\n} from \"../converters/completions.js\";\nimport { convertOpenAICompletionsStream } from \"../utils/stream_events.js\";\n\nexport interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}\n\ntype ChatCompletionsInvocationParams = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionCreateParams,\n \"messages\"\n>;\n\nconst TOOL_IMAGE_HINT =\n \"Chat Completions does not support images in tool messages. \" +\n \"Use the Responses API (`useResponsesApi: true`) to send images from tool results.\";\n\n/** Points a 400 caused by a tool-result image at the Responses API. */\nfunction addToolImageHint(\n error: unknown,\n messages: OpenAIClient.Chat.ChatCompletionMessageParam[]\n) {\n const hasToolImage = messages.some(\n (message) =>\n message.role === \"tool\" &&\n Array.isArray(message.content) &&\n message.content.some(\n (part) => (part as { type: string }).type === \"image\"\n )\n );\n if (\n hasToolImage &&\n error instanceof Error &&\n \"status\" in error &&\n error.status === 400\n ) {\n error.message = `${error.message}\\n\\n${TOOL_IMAGE_HINT}`;\n }\n return error;\n}\n\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport class ChatOpenAICompletions<\n CallOptions extends ChatOpenAICompletionsCallOptions =\n ChatOpenAICompletionsCallOptions,\n> extends BaseChatOpenAI<CallOptions> {\n constructor(model: string, fields?: Omit<BaseChatOpenAIFields, \"model\">);\n constructor(fields?: BaseChatOpenAIFields);\n constructor(\n modelOrFields?: string | BaseChatOpenAIFields,\n fieldsArg?: Omit<BaseChatOpenAIFields, \"model\">\n ) {\n super(getChatOpenAIModelParams(modelOrFields, fieldsArg));\n }\n\n override get profile(): ModelProfile {\n return profileForApi(super.profile, false);\n }\n\n /** @internal */\n override invocationParams(\n options?: this[\"ParsedCallOptions\"],\n extra?: { streaming?: boolean }\n ): ChatCompletionsInvocationParams {\n let strict: boolean | undefined;\n if (options?.strict !== undefined) {\n strict = options.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n\n // A `json_schema` response format goes through the SDK `.parse()` helper,\n // which requires strict function tools — but only on the NON-streaming path\n // (`completionWithRetry` uses `.parse()` only when `!request.stream`).\n // Streaming structured output uses `create()`, which doesn't need strict, so\n // don't force it there. Default to strict for the parse path unless the\n // caller set strict:false. (Re-applied here because the agent core no longer\n // forces strict for every provider.)\n const isStreaming = this.streaming || extra?.streaming;\n if (\n !isStreaming &&\n options?.response_format?.type === \"json_schema\" &&\n strict !== false\n ) {\n strict = true;\n }\n\n let streamOptionsConfig = {};\n if (options?.stream_options !== undefined) {\n streamOptionsConfig = { stream_options: options.stream_options };\n } else if (this.streamUsage && (this.streaming || extra?.streaming)) {\n streamOptionsConfig = { stream_options: { include_usage: true } };\n }\n\n const params: Partial<ChatCompletionsInvocationParams> = {\n model: this.model,\n temperature: this.temperature,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n logprobs: this.logprobs,\n top_logprobs: this.topLogprobs,\n n: this.n,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n // if include_usage is set or streamUsage then stream must be set to true.\n stream: this.streaming,\n functions: options?.functions,\n function_call: options?.function_call,\n tools: options?.tools?.length\n ? options.tools.map((tool) =>\n this._convertChatOpenAIToolToCompletionsTool(tool, { strict })\n )\n : undefined,\n tool_choice: formatToOpenAIToolChoice(\n options?.tool_choice as OpenAIToolChoice\n ),\n response_format: this._getResponseFormat(options?.response_format),\n seed: options?.seed,\n ...streamOptionsConfig,\n parallel_tool_calls: options?.parallel_tool_calls,\n ...(this.audio || options?.audio\n ? { audio: this.audio || options?.audio }\n : {}),\n ...(this.modalities || options?.modalities\n ? { modalities: this.modalities || options?.modalities }\n : {}),\n ...this.modelKwargs,\n prompt_cache_key:\n options?.promptCacheKey ??\n this.modelKwargs?.prompt_cache_key ??\n this.promptCacheKey,\n prompt_cache_retention: normalizePromptCacheRetention(\n options?.promptCacheRetention ??\n this.modelKwargs?.prompt_cache_retention ??\n this.promptCacheRetention\n ),\n prompt_cache_options:\n options?.promptCacheOptions ??\n this.modelKwargs?.prompt_cache_options ??\n this.promptCacheOptions,\n verbosity: options?.verbosity ?? this.verbosity,\n };\n if (options?.prediction !== undefined) {\n params.prediction = options.prediction;\n }\n if (this.service_tier !== undefined) {\n params.service_tier = this.service_tier;\n }\n if (options?.service_tier !== undefined) {\n params.service_tier = options.service_tier;\n }\n const reasoning = this._getReasoningParams(options);\n if (reasoning !== undefined && reasoning.effort !== undefined) {\n params.reasoning_effort = reasoning.effort;\n }\n if (isReasoningModel(params.model)) {\n params.max_completion_tokens =\n this.maxTokens === -1 ? undefined : this.maxTokens;\n } else {\n params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;\n }\n\n return params as ChatCompletionsInvocationParams;\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n options.signal?.throwIfAborted();\n const usageMetadata = {} as UsageMetadata;\n const params = this.invocationParams(options);\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n if (params.stream) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks: Record<number, ChatGenerationChunk> = {};\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n if (finalChunks[index] === undefined) {\n finalChunks[index] = chunk;\n } else {\n finalChunks[index] = finalChunks[index].concat(chunk);\n }\n }\n const generations = Object.entries(finalChunks)\n .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n .map(([_, value]) => value);\n\n const { functions, function_call } = this.invocationParams(options);\n\n // OpenAI does not support token usage report under stream mode,\n // fallback to estimation.\n\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage =\n await this._getNumTokensFromGenerations(generations);\n\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n } else {\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options?.signal,\n maxRetries: options?.maxRetries,\n ...options?.options,\n }\n );\n\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data?.usage ?? {};\n\n if (completionTokens) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n\n if (\n promptTokensDetails?.audio_tokens !== null ||\n promptTokensDetails?.cached_tokens !== null ||\n promptTokensDetails?.cache_write_tokens != null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails?.audio_tokens !== null && {\n audio: promptTokensDetails?.audio_tokens,\n }),\n ...(promptTokensDetails?.cached_tokens !== null && {\n cache_read: promptTokensDetails?.cached_tokens,\n }),\n ...(promptTokensDetails?.cache_write_tokens != null && {\n cache_creation: promptTokensDetails?.cache_write_tokens,\n }),\n };\n }\n\n if (\n completionTokensDetails?.audio_tokens !== null ||\n completionTokensDetails?.reasoning_tokens !== null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails?.audio_tokens !== null && {\n audio: completionTokensDetails?.audio_tokens,\n }),\n ...(completionTokensDetails?.reasoning_tokens !== null && {\n reasoning: completionTokensDetails?.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data?.choices ?? []) {\n const text = part.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message ?? { role: \"assistant\" },\n data\n ),\n };\n generation.generationInfo = {\n ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n // Fields are not serialized unless passed to the constructor\n // Doing this ensures all fields on the message are serialized\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith(\"lc_\")\n )\n ) as AIMessageFields\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n }\n\n /**\n * Native implementation of the content-block-centric streaming protocol\n * for OpenAI Chat Completions.\n */\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n\n const streamIterable = await this.completionWithRetry(params, options);\n const shouldStreamUsage = this.streamUsage ?? options.streamUsage;\n\n const abortableStream = async function* (\n source: AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>,\n signal?: AbortSignal\n ) {\n for await (const data of source) {\n if (signal?.aborted) {\n return;\n }\n yield data;\n }\n };\n\n yield* convertOpenAICompletionsStream(\n abortableStream(streamIterable, options.signal),\n {\n streamUsage: shouldStreamUsage ?? true,\n provider: this.streamEventProvider,\n }\n );\n }\n\n /** Provider id used in native stream protocol passthrough events. */\n protected get streamEventProvider(): string {\n return \"openai\";\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n if (options.signal?.aborted) {\n return;\n }\n const choice = data?.choices?.[0];\n if (data.usage) {\n usage = data.usage;\n }\n if (!choice) {\n continue;\n }\n\n const { delta } = choice;\n if (!delta) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index ?? 0,\n };\n if (typeof chunk.content !== \"string\") {\n console.log(\n \"[WARNING]: Received non-string content from OpenAI. This is currently not supported.\"\n );\n continue;\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n const generationInfo: Record<string, any> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n // Only include system fingerprint in the last chunk for now\n // to avoid concatenation issues\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens !== null && {\n audio: usage.prompt_tokens_details?.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens !== null && {\n cache_read: usage.prompt_tokens_details?.cached_tokens,\n }),\n ...(usage.prompt_tokens_details?.cache_write_tokens != null && {\n cache_creation: usage.prompt_tokens_details?.cache_write_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens !== null && {\n audio: usage.completion_tokens_details?.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens !== null && {\n reasoning: usage.completion_tokens_details?.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: \"\",\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: \"\",\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n { prompt: 0, completion: 0 },\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParams,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<\n | AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>\n | OpenAIClient.Chat.Completions.ChatCompletion\n > {\n // The SDK has its own `maxRetries`; take it for our caller instead so\n // the two retry loops don't multiply.\n const { maxRetries, ...sdkOptions } = requestOptions ?? {};\n const clientOptions = this._getClientOptions(sdkOptions);\n const isParseableFormat =\n request.response_format && request.response_format.type === \"json_schema\";\n return this.caller.callWithOptions({ maxRetries }, async () => {\n try {\n if (isParseableFormat && !request.stream) {\n return await this.client.chat.completions.parse(\n request,\n clientOptions\n );\n } else {\n return await this.client.chat.completions.create(\n request,\n clientOptions\n );\n }\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw addToolImageHint(error, request.messages);\n }\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return convertCompletionsDeltaToBaseMessageChunk({\n delta,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n defaultRole,\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return convertCompletionsMessageToBaseMessage({\n message,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n });\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_file_mime_types = require("../utils/file_mime_types.cjs");
1
+ const require_profile = require("../utils/profile.cjs");
2
2
  const require_tools = require("../utils/tools.cjs");
3
3
  const require_misc = require("../utils/misc.cjs");
4
4
  const require_base = require("./base.cjs");
@@ -633,7 +633,7 @@ var ChatOpenAI = class ChatOpenAI extends require_base.BaseChatOpenAI {
633
633
  this.completions = fields?.completions ?? new require_completions.ChatOpenAICompletions(fields);
634
634
  }
635
635
  get profile() {
636
- return require_file_mime_types.withoutFileMimeTypesUnlessSupported(super.profile, this._useResponsesApi(void 0));
636
+ return require_profile.profileForApi(super.profile, this._useResponsesApi(void 0));
637
637
  }
638
638
  _useResponsesApi(options) {
639
639
  const usesBuiltInTools = options?.tools?.some(require_tools.isBuiltInTool);