@langchain/openai 0.6.8 → 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +8 -8
  2. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  3. package/dist/azure/chat_models.cjs +661 -808
  4. package/dist/azure/chat_models.cjs.map +1 -0
  5. package/dist/azure/chat_models.d.cts +449 -0
  6. package/dist/azure/chat_models.d.cts.map +1 -0
  7. package/dist/azure/chat_models.d.ts +32 -28
  8. package/dist/azure/chat_models.d.ts.map +1 -0
  9. package/dist/azure/chat_models.js +660 -804
  10. package/dist/azure/chat_models.js.map +1 -0
  11. package/dist/azure/embeddings.cjs +81 -130
  12. package/dist/azure/embeddings.cjs.map +1 -0
  13. package/dist/azure/embeddings.d.cts +27 -0
  14. package/dist/azure/embeddings.d.cts.map +1 -0
  15. package/dist/azure/embeddings.d.ts +25 -20
  16. package/dist/azure/embeddings.d.ts.map +1 -0
  17. package/dist/azure/embeddings.js +80 -126
  18. package/dist/azure/embeddings.js.map +1 -0
  19. package/dist/azure/llms.cjs +109 -168
  20. package/dist/azure/llms.cjs.map +1 -0
  21. package/dist/azure/llms.d.cts +33 -0
  22. package/dist/azure/llms.d.cts.map +1 -0
  23. package/dist/azure/llms.d.ts +31 -25
  24. package/dist/azure/llms.d.ts.map +1 -0
  25. package/dist/azure/llms.js +108 -164
  26. package/dist/azure/llms.js.map +1 -0
  27. package/dist/chat_models.cjs +1951 -2763
  28. package/dist/chat_models.cjs.map +1 -0
  29. package/dist/chat_models.d.cts +930 -0
  30. package/dist/chat_models.d.cts.map +1 -0
  31. package/dist/chat_models.d.ts +365 -336
  32. package/dist/chat_models.d.ts.map +1 -0
  33. package/dist/chat_models.js +1946 -2753
  34. package/dist/chat_models.js.map +1 -0
  35. package/dist/embeddings.cjs +136 -193
  36. package/dist/embeddings.cjs.map +1 -0
  37. package/dist/embeddings.d.cts +115 -0
  38. package/dist/embeddings.d.cts.map +1 -0
  39. package/dist/embeddings.d.ts +88 -81
  40. package/dist/embeddings.d.ts.map +1 -0
  41. package/dist/embeddings.js +134 -188
  42. package/dist/embeddings.js.map +1 -0
  43. package/dist/index.cjs +47 -34
  44. package/dist/index.d.cts +16 -0
  45. package/dist/index.d.ts +16 -13
  46. package/dist/index.js +17 -13
  47. package/dist/langchain-core/dist/types/_internal.d.cts +11 -0
  48. package/dist/langchain-core/dist/types/_internal.d.cts.map +1 -0
  49. package/dist/langchain-core/dist/types/_internal.d.ts +11 -0
  50. package/dist/langchain-core/dist/types/_internal.d.ts.map +1 -0
  51. package/dist/langchain-core/dist/utils/stream.d.cts +26 -0
  52. package/dist/langchain-core/dist/utils/stream.d.cts.map +1 -0
  53. package/dist/langchain-core/dist/utils/stream.d.ts +26 -0
  54. package/dist/langchain-core/dist/utils/stream.d.ts.map +1 -0
  55. package/dist/llms.cjs +312 -468
  56. package/dist/llms.cjs.map +1 -0
  57. package/dist/llms.d.cts +123 -0
  58. package/dist/llms.d.cts.map +1 -0
  59. package/dist/llms.d.ts +93 -87
  60. package/dist/llms.d.ts.map +1 -0
  61. package/dist/llms.js +309 -462
  62. package/dist/llms.js.map +1 -0
  63. package/dist/tools/custom.cjs +25 -26
  64. package/dist/tools/custom.cjs.map +1 -0
  65. package/dist/tools/custom.d.cts +10 -0
  66. package/dist/tools/custom.d.cts.map +1 -0
  67. package/dist/tools/custom.d.ts +8 -3
  68. package/dist/tools/custom.d.ts.map +1 -0
  69. package/dist/tools/custom.js +24 -23
  70. package/dist/tools/custom.js.map +1 -0
  71. package/dist/tools/dalle.cjs +104 -194
  72. package/dist/tools/dalle.cjs.map +1 -0
  73. package/dist/tools/dalle.d.cts +123 -0
  74. package/dist/tools/dalle.d.cts.map +1 -0
  75. package/dist/tools/dalle.d.ts +111 -104
  76. package/dist/tools/dalle.d.ts.map +1 -0
  77. package/dist/tools/dalle.js +102 -189
  78. package/dist/tools/dalle.js.map +1 -0
  79. package/dist/tools/index.cjs +1 -17
  80. package/dist/tools/index.js +1 -1
  81. package/dist/types.d.cts +263 -0
  82. package/dist/types.d.cts.map +1 -0
  83. package/dist/types.d.ts +244 -234
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/utils/azure.cjs +86 -47
  86. package/dist/utils/azure.cjs.map +1 -0
  87. package/dist/utils/azure.d.cts +76 -0
  88. package/dist/utils/azure.d.cts.map +1 -0
  89. package/dist/utils/azure.d.ts +51 -9
  90. package/dist/utils/azure.d.ts.map +1 -0
  91. package/dist/utils/azure.js +85 -45
  92. package/dist/utils/azure.js.map +1 -0
  93. package/dist/utils/client.cjs +25 -0
  94. package/dist/utils/client.cjs.map +1 -0
  95. package/dist/utils/client.d.cts +5 -0
  96. package/dist/utils/client.d.cts.map +1 -0
  97. package/dist/utils/client.d.ts +5 -0
  98. package/dist/utils/client.d.ts.map +1 -0
  99. package/dist/utils/client.js +24 -0
  100. package/dist/utils/client.js.map +1 -0
  101. package/dist/utils/errors.cjs +9 -8
  102. package/dist/utils/errors.cjs.map +1 -0
  103. package/dist/utils/errors.js +9 -6
  104. package/dist/utils/errors.js.map +1 -0
  105. package/dist/utils/message_inputs.cjs +139 -0
  106. package/dist/utils/message_inputs.cjs.map +1 -0
  107. package/dist/utils/message_inputs.d.cts +9 -0
  108. package/dist/utils/message_inputs.d.cts.map +1 -0
  109. package/dist/utils/message_inputs.d.ts +9 -0
  110. package/dist/utils/message_inputs.d.ts.map +1 -0
  111. package/dist/utils/message_inputs.js +137 -0
  112. package/dist/utils/message_inputs.js.map +1 -0
  113. package/dist/utils/misc.cjs +30 -0
  114. package/dist/utils/misc.cjs.map +1 -0
  115. package/dist/utils/misc.d.cts +9 -0
  116. package/dist/utils/misc.d.cts.map +1 -0
  117. package/dist/utils/misc.d.ts +9 -0
  118. package/dist/utils/misc.d.ts.map +1 -0
  119. package/dist/utils/misc.js +27 -0
  120. package/dist/utils/misc.js.map +1 -0
  121. package/dist/utils/output.cjs +74 -0
  122. package/dist/utils/output.cjs.map +1 -0
  123. package/dist/utils/output.js +72 -0
  124. package/dist/utils/output.js.map +1 -0
  125. package/dist/utils/prompts.cjs +39 -38
  126. package/dist/utils/prompts.cjs.map +1 -0
  127. package/dist/utils/prompts.d.cts +42 -0
  128. package/dist/utils/prompts.d.cts.map +1 -0
  129. package/dist/utils/prompts.d.ts +10 -4
  130. package/dist/utils/prompts.d.ts.map +1 -0
  131. package/dist/utils/prompts.js +40 -36
  132. package/dist/utils/prompts.js.map +1 -0
  133. package/dist/utils/standard.cjs +113 -0
  134. package/dist/utils/standard.cjs.map +1 -0
  135. package/dist/utils/standard.js +111 -0
  136. package/dist/utils/standard.js.map +1 -0
  137. package/dist/utils/tools.cjs +150 -127
  138. package/dist/utils/tools.cjs.map +1 -0
  139. package/dist/utils/tools.d.cts +13 -0
  140. package/dist/utils/tools.d.cts.map +1 -0
  141. package/dist/utils/tools.d.ts +12 -42
  142. package/dist/utils/tools.d.ts.map +1 -0
  143. package/dist/utils/tools.js +146 -123
  144. package/dist/utils/tools.js.map +1 -0
  145. package/package.json +33 -41
  146. package/dist/tools/index.d.ts +0 -1
  147. package/dist/types.cjs +0 -2
  148. package/dist/types.js +0 -1
  149. package/dist/utils/errors.d.ts +0 -2
  150. package/dist/utils/headers.cjs +0 -39
  151. package/dist/utils/headers.d.ts +0 -8
  152. package/dist/utils/headers.js +0 -35
  153. package/dist/utils/openai-format-fndef.cjs +0 -80
  154. package/dist/utils/openai-format-fndef.d.ts +0 -44
  155. package/dist/utils/openai-format-fndef.js +0 -77
  156. package/dist/utils/openai.cjs +0 -127
  157. package/dist/utils/openai.d.ts +0 -15
  158. package/dist/utils/openai.js +0 -119
  159. package/index.cjs +0 -1
  160. package/index.d.cts +0 -1
  161. package/index.d.ts +0 -1
  162. package/index.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","names":["model: string","method: unknown","response_format: ResponseFormatJSONSchema","parser: (content: string) => ParsedT","zodSchema: InteropZodType","name: string","props: Omit<ResponseFormatJSONSchema.JSONSchema, \"schema\" | \"strict\" | \"name\">","toJSONSchemaV4","parseV4"],"sources":["../../src/utils/output.ts"],"sourcesContent":["import {\n InteropZodType,\n isZodSchemaV3,\n isZodSchemaV4,\n} from \"@langchain/core/utils/types\";\nimport { toJSONSchema as toJSONSchemaV4, parse as parseV4 } from \"zod/v4/core\";\nimport { ResponseFormatJSONSchema } from \"openai/resources\";\nimport { zodResponseFormat } from \"openai/helpers/zod\";\n\nconst SUPPORTED_METHODS = [\n \"jsonSchema\",\n \"functionCalling\",\n \"jsonMode\",\n] as const;\ntype SupportedMethod = (typeof SUPPORTED_METHODS)[number];\n\n/**\n * Get the structured output method for a given model. By default, it uses\n * `jsonSchema` if the model supports it, otherwise it uses `functionCalling`.\n *\n * @throws if the method is invalid, e.g. is not a string or invalid method is provided.\n * @param model - The model name.\n * @param config - The structured output method options.\n * @returns The structured output method.\n */\nexport function getStructuredOutputMethod(\n model: string,\n method: unknown\n): SupportedMethod {\n /**\n * If a method is provided, validate it.\n */\n if (\n typeof method !== \"undefined\" &&\n !SUPPORTED_METHODS.includes(method as SupportedMethod)\n ) {\n throw new Error(\n `Invalid method: ${method}. Supported methods are: ${SUPPORTED_METHODS.join(\n \", \"\n )}`\n );\n }\n\n const hasSupportForJsonSchema =\n !model.startsWith(\"gpt-3\") &&\n !model.startsWith(\"gpt-4-\") &&\n model !== \"gpt-4\";\n\n /**\n * If the model supports JSON Schema, use it by default.\n */\n if (hasSupportForJsonSchema && !method) {\n return \"jsonSchema\";\n }\n\n if (!hasSupportForJsonSchema && method === \"jsonSchema\") {\n throw new Error(\n `JSON Schema is not supported for model \"${model}\". Please use a different method, e.g. \"functionCalling\" or \"jsonMode\".`\n );\n }\n\n /**\n * If the model does not support JSON Schema, use function calling by default.\n */\n return (method as SupportedMethod) ?? \"functionCalling\";\n}\n\n// inlined from openai/lib/parser.ts\nfunction makeParseableResponseFormat<ParsedT>(\n response_format: ResponseFormatJSONSchema,\n parser: (content: string) => ParsedT\n) {\n const obj = { ...response_format };\n\n Object.defineProperties(obj, {\n $brand: {\n value: \"auto-parseable-response-format\",\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n\n return obj;\n}\n\nexport function interopZodResponseFormat(\n zodSchema: InteropZodType,\n name: string,\n props: Omit<ResponseFormatJSONSchema.JSONSchema, \"schema\" | \"strict\" | \"name\">\n) {\n if (isZodSchemaV3(zodSchema)) {\n return zodResponseFormat(zodSchema, name, props);\n }\n if (isZodSchemaV4(zodSchema)) {\n return makeParseableResponseFormat(\n {\n type: \"json_schema\",\n json_schema: {\n ...props,\n name,\n strict: true,\n schema: toJSONSchemaV4(zodSchema, {\n cycles: \"ref\", // equivalent to nameStrategy: 'duplicate-ref'\n reused: \"ref\", // equivalent to $refStrategy: 'extract-to-root'\n override(ctx) {\n ctx.jsonSchema.title = name; // equivalent to `name` property\n // TODO: implement `nullableStrategy` patch-fix (zod doesn't support openApi3 json schema target)\n // TODO: implement `openaiStrictMode` patch-fix (where optional properties without `nullable` are not supported)\n },\n /// property equivalents from native `zodResponseFormat` fn\n // openaiStrictMode: true,\n // name,\n // nameStrategy: 'duplicate-ref',\n // $refStrategy: 'extract-to-root',\n // nullableStrategy: 'property',\n }),\n },\n },\n (content) => parseV4(zodSchema, JSON.parse(content))\n );\n }\n throw new Error(\"Unsupported schema response format\");\n}\n"],"mappings":";;;;;AASA,MAAM,oBAAoB;CACxB;CACA;CACA;AACD;;;;;;;;;;AAYD,SAAgB,0BACdA,OACAC,QACiB;;;;AAIjB,KACE,OAAO,WAAW,eAClB,CAAC,kBAAkB,SAAS,OAA0B,CAEtD,OAAM,IAAI,MACR,CAAC,gBAAgB,EAAE,OAAO,yBAAyB,EAAE,kBAAkB,KACrE,KACD,EAAE;CAIP,MAAM,0BACJ,CAAC,MAAM,WAAW,QAAQ,IAC1B,CAAC,MAAM,WAAW,SAAS,IAC3B,UAAU;;;;AAKZ,KAAI,2BAA2B,CAAC,OAC9B,QAAO;AAGT,KAAI,CAAC,2BAA2B,WAAW,aACzC,OAAM,IAAI,MACR,CAAC,wCAAwC,EAAE,MAAM,uEAAuE,CAAC;;;;AAO7H,QAAQ,UAA8B;AACvC;AAGD,SAAS,4BACPC,iBACAC,QACA;CACA,MAAM,MAAM,EAAE,GAAG,gBAAiB;CAElC,OAAO,iBAAiB,KAAK;EAC3B,QAAQ;GACN,OAAO;GACP,YAAY;EACb;EACD,WAAW;GACT,OAAO;GACP,YAAY;EACb;CACF,EAAC;AAEF,QAAO;AACR;AAED,SAAgB,yBACdC,WACAC,MACAC,OACA;AACA,KAAI,cAAc,UAAU,CAC1B,QAAO,kBAAkB,WAAW,MAAM,MAAM;AAElD,KAAI,cAAc,UAAU,CAC1B,QAAO,4BACL;EACE,MAAM;EACN,aAAa;GACX,GAAG;GACH;GACA,QAAQ;GACR,QAAQC,aAAe,WAAW;IAChC,QAAQ;IACR,QAAQ;IACR,SAAS,KAAK;KACZ,IAAI,WAAW,QAAQ;IAGxB;GAOF,EAAC;EACH;CACF,GACD,CAAC,YAAYC,MAAQ,WAAW,KAAK,MAAM,QAAQ,CAAC,CACrD;AAEH,OAAM,IAAI,MAAM;AACjB"}
@@ -1,41 +1,42 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertPromptToOpenAI = convertPromptToOpenAI;
4
- const chat_models_js_1 = require("../chat_models.cjs");
1
+ const require_message_inputs = require('./message_inputs.cjs');
2
+
3
+ //#region src/utils/prompts.ts
5
4
  /**
6
- * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
7
- * a format expected by OpenAI's JS SDK.
8
- *
9
- * Requires the "@langchain/openai" package to be installed in addition
10
- * to the OpenAI SDK.
11
- *
12
- * @example
13
- * ```ts
14
- * import { convertPromptToOpenAI } from "langsmith/utils/hub/openai";
15
- * import { pull } from "langchain/hub";
16
- *
17
- * import OpenAI from 'openai';
18
- *
19
- * const prompt = await pull("jacob/joke-generator");
20
- * const formattedPrompt = await prompt.invoke({
21
- * topic: "cats",
22
- * });
23
- *
24
- * const { messages } = convertPromptToOpenAI(formattedPrompt);
25
- *
26
- * const openAIClient = new OpenAI();
27
- *
28
- * const openaiResponse = await openAIClient.chat.completions.create({
29
- * model: "gpt-4o-mini",
30
- * messages,
31
- * });
32
- * ```
33
- * @param formattedPrompt
34
- * @returns A partial OpenAI payload.
35
- */
5
+ * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
6
+ * a format expected by OpenAI's JS SDK.
7
+ *
8
+ * Requires the "@langchain/openai" package to be installed in addition
9
+ * to the OpenAI SDK.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { convertPromptToOpenAI } from "langsmith/utils/hub/openai";
14
+ * import { pull } from "langchain/hub";
15
+ *
16
+ * import OpenAI from 'openai';
17
+ *
18
+ * const prompt = await pull("jacob/joke-generator");
19
+ * const formattedPrompt = await prompt.invoke({
20
+ * topic: "cats",
21
+ * });
22
+ *
23
+ * const { messages } = convertPromptToOpenAI(formattedPrompt);
24
+ *
25
+ * const openAIClient = new OpenAI();
26
+ *
27
+ * const openaiResponse = await openAIClient.chat.completions.create({
28
+ * model: "gpt-4o-mini",
29
+ * messages,
30
+ * });
31
+ * ```
32
+ * @param formattedPrompt
33
+ * @returns A partial OpenAI payload.
34
+ */
36
35
  function convertPromptToOpenAI(formattedPrompt) {
37
- const messages = formattedPrompt.toChatMessages();
38
- return {
39
- messages: (0, chat_models_js_1._convertMessagesToOpenAIParams)(messages),
40
- };
36
+ const messages = formattedPrompt.toChatMessages();
37
+ return { messages: require_message_inputs._convertMessagesToOpenAIParams(messages) };
41
38
  }
39
+
40
+ //#endregion
41
+ exports.convertPromptToOpenAI = convertPromptToOpenAI;
42
+ //# sourceMappingURL=prompts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.cjs","names":["formattedPrompt: BasePromptValue","_convertMessagesToOpenAIParams"],"sources":["../../src/utils/prompts.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport type { BasePromptValue } from \"@langchain/core/prompt_values\";\nimport type { OpenAI } from \"openai\";\n\nimport { _convertMessagesToOpenAIParams } from \"./message_inputs.js\";\n\n/**\n * Convert a formatted LangChain prompt (e.g. pulled from the hub) into\n * a format expected by OpenAI's JS SDK.\n *\n * Requires the \"@langchain/openai\" package to be installed in addition\n * to the OpenAI SDK.\n *\n * @example\n * ```ts\n * import { convertPromptToOpenAI } from \"langsmith/utils/hub/openai\";\n * import { pull } from \"langchain/hub\";\n *\n * import OpenAI from 'openai';\n *\n * const prompt = await pull(\"jacob/joke-generator\");\n * const formattedPrompt = await prompt.invoke({\n * topic: \"cats\",\n * });\n *\n * const { messages } = convertPromptToOpenAI(formattedPrompt);\n *\n * const openAIClient = new OpenAI();\n *\n * const openaiResponse = await openAIClient.chat.completions.create({\n * model: \"gpt-4o-mini\",\n * messages,\n * });\n * ```\n * @param formattedPrompt\n * @returns A partial OpenAI payload.\n */\nexport function convertPromptToOpenAI(formattedPrompt: BasePromptValue): {\n messages: OpenAI.Chat.ChatCompletionMessageParam[];\n} {\n const messages = formattedPrompt.toChatMessages();\n return {\n messages: _convertMessagesToOpenAIParams(\n messages\n ) as OpenAI.Chat.ChatCompletionMessageParam[],\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAgB,sBAAsBA,iBAEpC;CACA,MAAM,WAAW,gBAAgB,gBAAgB;AACjD,QAAO,EACL,UAAUC,sDACR,SACD,CACF;AACF"}
@@ -0,0 +1,42 @@
1
+ import { OpenAI as OpenAI$1 } from "openai";
2
+ import { BasePromptValue } from "@langchain/core/prompt_values";
3
+
4
+ //#region src/utils/prompts.d.ts
5
+
6
+ /**
7
+ * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
8
+ * a format expected by OpenAI's JS SDK.
9
+ *
10
+ * Requires the "@langchain/openai" package to be installed in addition
11
+ * to the OpenAI SDK.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { convertPromptToOpenAI } from "langsmith/utils/hub/openai";
16
+ * import { pull } from "langchain/hub";
17
+ *
18
+ * import OpenAI from 'openai';
19
+ *
20
+ * const prompt = await pull("jacob/joke-generator");
21
+ * const formattedPrompt = await prompt.invoke({
22
+ * topic: "cats",
23
+ * });
24
+ *
25
+ * const { messages } = convertPromptToOpenAI(formattedPrompt);
26
+ *
27
+ * const openAIClient = new OpenAI();
28
+ *
29
+ * const openaiResponse = await openAIClient.chat.completions.create({
30
+ * model: "gpt-4o-mini",
31
+ * messages,
32
+ * });
33
+ * ```
34
+ * @param formattedPrompt
35
+ * @returns A partial OpenAI payload.
36
+ */
37
+ declare function convertPromptToOpenAI(formattedPrompt: BasePromptValue): {
38
+ messages: OpenAI$1.Chat.ChatCompletionMessageParam[];
39
+ };
40
+ //#endregion
41
+ export { convertPromptToOpenAI };
42
+ //# sourceMappingURL=prompts.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.cts","names":["BasePromptValue","OpenAI","convertPromptToOpenAI","Chat","ChatCompletionMessageParam"],"sources":["../../src/utils/prompts.d.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport type { BasePromptValue } from \"@langchain/core/prompt_values\";\nimport type { OpenAI } from \"openai\";\n/**\n * Convert a formatted LangChain prompt (e.g. pulled from the hub) into\n * a format expected by OpenAI's JS SDK.\n *\n * Requires the \"@langchain/openai\" package to be installed in addition\n * to the OpenAI SDK.\n *\n * @example\n * ```ts\n * import { convertPromptToOpenAI } from \"langsmith/utils/hub/openai\";\n * import { pull } from \"langchain/hub\";\n *\n * import OpenAI from 'openai';\n *\n * const prompt = await pull(\"jacob/joke-generator\");\n * const formattedPrompt = await prompt.invoke({\n * topic: \"cats\",\n * });\n *\n * const { messages } = convertPromptToOpenAI(formattedPrompt);\n *\n * const openAIClient = new OpenAI();\n *\n * const openaiResponse = await openAIClient.chat.completions.create({\n * model: \"gpt-4o-mini\",\n * messages,\n * });\n * ```\n * @param formattedPrompt\n * @returns A partial OpenAI payload.\n */\nexport declare function convertPromptToOpenAI(formattedPrompt: BasePromptValue): {\n messages: OpenAI.Chat.ChatCompletionMessageParam[];\n};\n"],"mappings":";;;;;;AAkCA;;;;AACoD;;;;;;;;;;;;;;;;;;;;;;;;;;iBAD5BE,qBAAAA,kBAAuCF;YACjDC,QAAAA,CAAOE,IAAAA,CAAKC"}
@@ -1,5 +1,8 @@
1
- import type { BasePromptValue } from "@langchain/core/prompt_values";
2
- import type { OpenAI } from "openai";
1
+ import { OpenAI as OpenAI$1 } from "openai";
2
+ import { BasePromptValue } from "@langchain/core/prompt_values";
3
+
4
+ //#region src/utils/prompts.d.ts
5
+
3
6
  /**
4
7
  * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
5
8
  * a format expected by OpenAI's JS SDK.
@@ -31,6 +34,9 @@ import type { OpenAI } from "openai";
31
34
  * @param formattedPrompt
32
35
  * @returns A partial OpenAI payload.
33
36
  */
34
- export declare function convertPromptToOpenAI(formattedPrompt: BasePromptValue): {
35
- messages: OpenAI.Chat.ChatCompletionMessageParam[];
37
+ declare function convertPromptToOpenAI(formattedPrompt: BasePromptValue): {
38
+ messages: OpenAI$1.Chat.ChatCompletionMessageParam[];
36
39
  };
40
+ //#endregion
41
+ export { convertPromptToOpenAI };
42
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","names":["BasePromptValue","OpenAI","convertPromptToOpenAI","Chat","ChatCompletionMessageParam"],"sources":["../../src/utils/prompts.d.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport type { BasePromptValue } from \"@langchain/core/prompt_values\";\nimport type { OpenAI } from \"openai\";\n/**\n * Convert a formatted LangChain prompt (e.g. pulled from the hub) into\n * a format expected by OpenAI's JS SDK.\n *\n * Requires the \"@langchain/openai\" package to be installed in addition\n * to the OpenAI SDK.\n *\n * @example\n * ```ts\n * import { convertPromptToOpenAI } from \"langsmith/utils/hub/openai\";\n * import { pull } from \"langchain/hub\";\n *\n * import OpenAI from 'openai';\n *\n * const prompt = await pull(\"jacob/joke-generator\");\n * const formattedPrompt = await prompt.invoke({\n * topic: \"cats\",\n * });\n *\n * const { messages } = convertPromptToOpenAI(formattedPrompt);\n *\n * const openAIClient = new OpenAI();\n *\n * const openaiResponse = await openAIClient.chat.completions.create({\n * model: \"gpt-4o-mini\",\n * messages,\n * });\n * ```\n * @param formattedPrompt\n * @returns A partial OpenAI payload.\n */\nexport declare function convertPromptToOpenAI(formattedPrompt: BasePromptValue): {\n messages: OpenAI.Chat.ChatCompletionMessageParam[];\n};\n"],"mappings":";;;;;;AAkCA;;;;AACoD;;;;;;;;;;;;;;;;;;;;;;;;;;iBAD5BE,qBAAAA,kBAAuCF;YACjDC,QAAAA,CAAOE,IAAAA,CAAKC"}
@@ -1,38 +1,42 @@
1
- import { _convertMessagesToOpenAIParams } from "../chat_models.js";
1
+ import { _convertMessagesToOpenAIParams } from "./message_inputs.js";
2
+
3
+ //#region src/utils/prompts.ts
2
4
  /**
3
- * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
4
- * a format expected by OpenAI's JS SDK.
5
- *
6
- * Requires the "@langchain/openai" package to be installed in addition
7
- * to the OpenAI SDK.
8
- *
9
- * @example
10
- * ```ts
11
- * import { convertPromptToOpenAI } from "langsmith/utils/hub/openai";
12
- * import { pull } from "langchain/hub";
13
- *
14
- * import OpenAI from 'openai';
15
- *
16
- * const prompt = await pull("jacob/joke-generator");
17
- * const formattedPrompt = await prompt.invoke({
18
- * topic: "cats",
19
- * });
20
- *
21
- * const { messages } = convertPromptToOpenAI(formattedPrompt);
22
- *
23
- * const openAIClient = new OpenAI();
24
- *
25
- * const openaiResponse = await openAIClient.chat.completions.create({
26
- * model: "gpt-4o-mini",
27
- * messages,
28
- * });
29
- * ```
30
- * @param formattedPrompt
31
- * @returns A partial OpenAI payload.
32
- */
33
- export function convertPromptToOpenAI(formattedPrompt) {
34
- const messages = formattedPrompt.toChatMessages();
35
- return {
36
- messages: _convertMessagesToOpenAIParams(messages),
37
- };
5
+ * Convert a formatted LangChain prompt (e.g. pulled from the hub) into
6
+ * a format expected by OpenAI's JS SDK.
7
+ *
8
+ * Requires the "@langchain/openai" package to be installed in addition
9
+ * to the OpenAI SDK.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { convertPromptToOpenAI } from "langsmith/utils/hub/openai";
14
+ * import { pull } from "langchain/hub";
15
+ *
16
+ * import OpenAI from 'openai';
17
+ *
18
+ * const prompt = await pull("jacob/joke-generator");
19
+ * const formattedPrompt = await prompt.invoke({
20
+ * topic: "cats",
21
+ * });
22
+ *
23
+ * const { messages } = convertPromptToOpenAI(formattedPrompt);
24
+ *
25
+ * const openAIClient = new OpenAI();
26
+ *
27
+ * const openaiResponse = await openAIClient.chat.completions.create({
28
+ * model: "gpt-4o-mini",
29
+ * messages,
30
+ * });
31
+ * ```
32
+ * @param formattedPrompt
33
+ * @returns A partial OpenAI payload.
34
+ */
35
+ function convertPromptToOpenAI(formattedPrompt) {
36
+ const messages = formattedPrompt.toChatMessages();
37
+ return { messages: _convertMessagesToOpenAIParams(messages) };
38
38
  }
39
+
40
+ //#endregion
41
+ export { convertPromptToOpenAI };
42
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","names":["formattedPrompt: BasePromptValue"],"sources":["../../src/utils/prompts.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport type { BasePromptValue } from \"@langchain/core/prompt_values\";\nimport type { OpenAI } from \"openai\";\n\nimport { _convertMessagesToOpenAIParams } from \"./message_inputs.js\";\n\n/**\n * Convert a formatted LangChain prompt (e.g. pulled from the hub) into\n * a format expected by OpenAI's JS SDK.\n *\n * Requires the \"@langchain/openai\" package to be installed in addition\n * to the OpenAI SDK.\n *\n * @example\n * ```ts\n * import { convertPromptToOpenAI } from \"langsmith/utils/hub/openai\";\n * import { pull } from \"langchain/hub\";\n *\n * import OpenAI from 'openai';\n *\n * const prompt = await pull(\"jacob/joke-generator\");\n * const formattedPrompt = await prompt.invoke({\n * topic: \"cats\",\n * });\n *\n * const { messages } = convertPromptToOpenAI(formattedPrompt);\n *\n * const openAIClient = new OpenAI();\n *\n * const openaiResponse = await openAIClient.chat.completions.create({\n * model: \"gpt-4o-mini\",\n * messages,\n * });\n * ```\n * @param formattedPrompt\n * @returns A partial OpenAI payload.\n */\nexport function convertPromptToOpenAI(formattedPrompt: BasePromptValue): {\n messages: OpenAI.Chat.ChatCompletionMessageParam[];\n} {\n const messages = formattedPrompt.toChatMessages();\n return {\n messages: _convertMessagesToOpenAIParams(\n messages\n ) as OpenAI.Chat.ChatCompletionMessageParam[],\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAgB,sBAAsBA,iBAEpC;CACA,MAAM,WAAW,gBAAgB,gBAAgB;AACjD,QAAO,EACL,UAAU,+BACR,SACD,CACF;AACF"}
@@ -0,0 +1,113 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_misc = require('./misc.cjs');
3
+ const __langchain_core_messages = require_rolldown_runtime.__toESM(require("@langchain/core/messages"));
4
+
5
+ //#region src/utils/standard.ts
6
+ function _convertToChatCompletionsData(block) {
7
+ if (block.type === "image") {
8
+ if (block.url) return {
9
+ type: "image_url",
10
+ image_url: { url: block.url }
11
+ };
12
+ else if (block.data) return {
13
+ type: "image_url",
14
+ image_url: { url: `data:${block.mimeType};base64,${block.data}` }
15
+ };
16
+ }
17
+ if (block.type === "audio") {
18
+ if (block.data) {
19
+ const format = require_misc.iife(() => {
20
+ const [, format$1] = block.mimeType.split("/");
21
+ if (format$1 === "wav" || format$1 === "mp3") return format$1;
22
+ return "wav";
23
+ });
24
+ return {
25
+ type: "input_audio",
26
+ input_audio: {
27
+ data: block.data.toString(),
28
+ format
29
+ }
30
+ };
31
+ }
32
+ }
33
+ if (block.type === "file") {
34
+ if (block.data) return {
35
+ type: "file",
36
+ file: { file_data: block.data.toString() }
37
+ };
38
+ if (block.fileId) return {
39
+ type: "file",
40
+ file: { file_id: block.fileId }
41
+ };
42
+ }
43
+ return void 0;
44
+ }
45
+ function _convertToCompletionsMessageFromV1(message, model) {
46
+ let role = require_misc.messageToOpenAIRole(message);
47
+ if (role === "system" && require_misc.isReasoningModel(model)) role = "developer";
48
+ if (role === "developer") return {
49
+ role: "developer",
50
+ content: message.contentBlocks.filter((block) => block.type === "text")
51
+ };
52
+ else if (role === "system") return {
53
+ role: "system",
54
+ content: message.contentBlocks.filter((block) => block.type === "text")
55
+ };
56
+ else if (role === "assistant") return {
57
+ role: "assistant",
58
+ content: message.contentBlocks.filter((block) => block.type === "text")
59
+ };
60
+ else if (role === "tool" && (0, __langchain_core_messages.isToolMessage)(message)) return {
61
+ role: "tool",
62
+ tool_call_id: message.tool_call_id,
63
+ content: message.contentBlocks.filter((block) => block.type === "text")
64
+ };
65
+ else if (role === "function") return {
66
+ role: "function",
67
+ name: message.name ?? "",
68
+ content: message.contentBlocks.filter((block) => block.type === "text").join("")
69
+ };
70
+ function* iterateUserContent(blocks) {
71
+ for (const block of blocks) {
72
+ if (block.type === "text") yield {
73
+ type: "text",
74
+ text: block.text
75
+ };
76
+ const data = _convertToChatCompletionsData(block);
77
+ if (data) yield data;
78
+ }
79
+ }
80
+ return {
81
+ role: "user",
82
+ content: Array.from(iterateUserContent(message.contentBlocks))
83
+ };
84
+ }
85
+ function _convertToResponsesMessageFromV1(message) {
86
+ function* iterateContent() {
87
+ for (const block of message.contentBlocks) if (block.type === "text") yield {
88
+ type: "message",
89
+ role: "assistant",
90
+ content: block.text
91
+ };
92
+ else if (block.type === "reasoning") yield {
93
+ id: block.id ?? "",
94
+ type: "reasoning",
95
+ summary: [{
96
+ type: "summary_text",
97
+ text: block.reasoning
98
+ }]
99
+ };
100
+ else if (block.type === "tool_call") yield {
101
+ type: "function_call",
102
+ name: block.name,
103
+ call_id: block.id ?? "",
104
+ arguments: JSON.stringify(block.args)
105
+ };
106
+ }
107
+ return Array.from(iterateContent());
108
+ }
109
+
110
+ //#endregion
111
+ exports._convertToCompletionsMessageFromV1 = _convertToCompletionsMessageFromV1;
112
+ exports._convertToResponsesMessageFromV1 = _convertToResponsesMessageFromV1;
113
+ //# sourceMappingURL=standard.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard.cjs","names":["block: ContentBlock.Standard","iife","format","message: AIMessage","model?: string","messageToOpenAIRole","isReasoningModel","blocks: ContentBlock.Standard[]"],"sources":["../../src/utils/standard.ts"],"sourcesContent":["import type { OpenAI as OpenAIClient } from \"openai\";\nimport {\n isToolMessage,\n type AIMessage,\n type ContentBlock,\n} from \"@langchain/core/messages\";\nimport { iife, isReasoningModel, messageToOpenAIRole } from \"./misc.js\";\n\ntype ChatCompletionContentData =\n | OpenAIClient.Chat.Completions.ChatCompletionContentPartImage\n | OpenAIClient.Chat.Completions.ChatCompletionContentPartInputAudio\n | OpenAIClient.Chat.Completions.ChatCompletionContentPart.File;\n\nfunction _convertToChatCompletionsData(\n block: ContentBlock.Standard\n): ChatCompletionContentData | undefined {\n if (block.type === \"image\") {\n if (block.url) {\n return {\n type: \"image_url\",\n image_url: {\n url: block.url,\n },\n };\n } else if (block.data) {\n return {\n type: \"image_url\",\n image_url: {\n url: `data:${block.mimeType};base64,${block.data}`,\n },\n };\n }\n }\n if (block.type === \"audio\") {\n if (block.data) {\n const format = iife(() => {\n const [, format] = block.mimeType.split(\"/\");\n if (format === \"wav\" || format === \"mp3\") {\n return format;\n }\n return \"wav\";\n });\n return {\n type: \"input_audio\",\n input_audio: {\n data: block.data.toString(),\n format,\n },\n };\n }\n }\n if (block.type === \"file\") {\n if (block.data) {\n return {\n type: \"file\",\n file: {\n file_data: block.data.toString(),\n },\n };\n }\n if (block.fileId) {\n return {\n type: \"file\",\n file: {\n file_id: block.fileId,\n },\n };\n }\n }\n return undefined;\n}\n\nexport function _convertToCompletionsMessageFromV1(\n message: AIMessage,\n model?: string\n): OpenAIClient.Chat.Completions.ChatCompletionMessageParam {\n let role = messageToOpenAIRole(message);\n if (role === \"system\" && isReasoningModel(model)) {\n role = \"developer\";\n }\n if (role === \"developer\") {\n return {\n role: \"developer\",\n content: message.contentBlocks.filter((block) => block.type === \"text\"),\n };\n } else if (role === \"system\") {\n return {\n role: \"system\",\n content: message.contentBlocks.filter((block) => block.type === \"text\"),\n };\n } else if (role === \"assistant\") {\n return {\n role: \"assistant\",\n content: message.contentBlocks.filter((block) => block.type === \"text\"),\n };\n } else if (role === \"tool\" && isToolMessage(message)) {\n return {\n role: \"tool\",\n tool_call_id: message.tool_call_id,\n content: message.contentBlocks.filter((block) => block.type === \"text\"),\n };\n } else if (role === \"function\") {\n return {\n role: \"function\",\n name: message.name ?? \"\",\n content: message.contentBlocks\n .filter((block) => block.type === \"text\")\n .join(\"\"),\n };\n }\n // Default to user message handling\n function* iterateUserContent(blocks: ContentBlock.Standard[]) {\n for (const block of blocks) {\n if (block.type === \"text\") {\n yield {\n type: \"text\" as const,\n text: block.text,\n };\n }\n const data = _convertToChatCompletionsData(block);\n if (data) {\n yield data;\n }\n }\n }\n return {\n role: \"user\",\n content: Array.from(iterateUserContent(message.contentBlocks)),\n };\n}\n\nexport function _convertToResponsesMessageFromV1(message: AIMessage) {\n function* iterateContent(): Generator<OpenAIClient.Responses.ResponseInputItem> {\n for (const block of message.contentBlocks) {\n if (block.type === \"text\") {\n yield {\n type: \"message\" as const,\n role: \"assistant\",\n content: block.text,\n };\n } else if (block.type === \"reasoning\") {\n yield {\n id: block.id ?? \"\",\n type: \"reasoning\" as const,\n summary: [\n {\n type: \"summary_text\",\n text: block.reasoning,\n },\n ],\n };\n } else if (block.type === \"tool_call\") {\n yield {\n type: \"function_call\" as const,\n name: block.name,\n call_id: block.id ?? \"\",\n arguments: JSON.stringify(block.args),\n };\n }\n }\n }\n return Array.from(iterateContent());\n}\n"],"mappings":";;;;;AAaA,SAAS,8BACPA,OACuC;AACvC,KAAI,MAAM,SAAS,SACjB;MAAI,MAAM,IACR,QAAO;GACL,MAAM;GACN,WAAW,EACT,KAAK,MAAM,IACZ;EACF;WACQ,MAAM,KACf,QAAO;GACL,MAAM;GACN,WAAW,EACT,KAAK,CAAC,KAAK,EAAE,MAAM,SAAS,QAAQ,EAAE,MAAM,MAAM,CACnD;EACF;CACF;AAEH,KAAI,MAAM,SAAS,SACjB;MAAI,MAAM,MAAM;GACd,MAAM,SAASC,kBAAK,MAAM;IACxB,MAAM,GAAGC,SAAO,GAAG,MAAM,SAAS,MAAM,IAAI;AAC5C,QAAIA,aAAW,SAASA,aAAW,MACjC,QAAOA;AAET,WAAO;GACR,EAAC;AACF,UAAO;IACL,MAAM;IACN,aAAa;KACX,MAAM,MAAM,KAAK,UAAU;KAC3B;IACD;GACF;EACF;;AAEH,KAAI,MAAM,SAAS,QAAQ;AACzB,MAAI,MAAM,KACR,QAAO;GACL,MAAM;GACN,MAAM,EACJ,WAAW,MAAM,KAAK,UAAU,CACjC;EACF;AAEH,MAAI,MAAM,OACR,QAAO;GACL,MAAM;GACN,MAAM,EACJ,SAAS,MAAM,OAChB;EACF;CAEJ;AACD,QAAO;AACR;AAED,SAAgB,mCACdC,SACAC,OAC0D;CAC1D,IAAI,OAAOC,iCAAoB,QAAQ;AACvC,KAAI,SAAS,YAAYC,8BAAiB,MAAM,EAC9C,OAAO;AAET,KAAI,SAAS,YACX,QAAO;EACL,MAAM;EACN,SAAS,QAAQ,cAAc,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;CACxE;UACQ,SAAS,SAClB,QAAO;EACL,MAAM;EACN,SAAS,QAAQ,cAAc,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;CACxE;UACQ,SAAS,YAClB,QAAO;EACL,MAAM;EACN,SAAS,QAAQ,cAAc,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;CACxE;UACQ,SAAS,uDAAwB,QAAQ,CAClD,QAAO;EACL,MAAM;EACN,cAAc,QAAQ;EACtB,SAAS,QAAQ,cAAc,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;CACxE;UACQ,SAAS,WAClB,QAAO;EACL,MAAM;EACN,MAAM,QAAQ,QAAQ;EACtB,SAAS,QAAQ,cACd,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO,CACxC,KAAK,GAAG;CACZ;CAGH,UAAU,mBAAmBC,QAAiC;AAC5D,OAAK,MAAM,SAAS,QAAQ;AAC1B,OAAI,MAAM,SAAS,QACjB,MAAM;IACJ,MAAM;IACN,MAAM,MAAM;GACb;GAEH,MAAM,OAAO,8BAA8B,MAAM;AACjD,OAAI,MACF,MAAM;EAET;CACF;AACD,QAAO;EACL,MAAM;EACN,SAAS,MAAM,KAAK,mBAAmB,QAAQ,cAAc,CAAC;CAC/D;AACF;AAED,SAAgB,iCAAiCJ,SAAoB;CACnE,UAAU,iBAAsE;AAC9E,OAAK,MAAM,SAAS,QAAQ,cAC1B,KAAI,MAAM,SAAS,QACjB,MAAM;GACJ,MAAM;GACN,MAAM;GACN,SAAS,MAAM;EAChB;WACQ,MAAM,SAAS,aACxB,MAAM;GACJ,IAAI,MAAM,MAAM;GAChB,MAAM;GACN,SAAS,CACP;IACE,MAAM;IACN,MAAM,MAAM;GACb,CACF;EACF;WACQ,MAAM,SAAS,aACxB,MAAM;GACJ,MAAM;GACN,MAAM,MAAM;GACZ,SAAS,MAAM,MAAM;GACrB,WAAW,KAAK,UAAU,MAAM,KAAK;EACtC;CAGN;AACD,QAAO,MAAM,KAAK,gBAAgB,CAAC;AACpC"}
@@ -0,0 +1,111 @@
1
+ import { iife, isReasoningModel, messageToOpenAIRole } from "./misc.js";
2
+ import { isToolMessage } from "@langchain/core/messages";
3
+
4
+ //#region src/utils/standard.ts
5
+ function _convertToChatCompletionsData(block) {
6
+ if (block.type === "image") {
7
+ if (block.url) return {
8
+ type: "image_url",
9
+ image_url: { url: block.url }
10
+ };
11
+ else if (block.data) return {
12
+ type: "image_url",
13
+ image_url: { url: `data:${block.mimeType};base64,${block.data}` }
14
+ };
15
+ }
16
+ if (block.type === "audio") {
17
+ if (block.data) {
18
+ const format = iife(() => {
19
+ const [, format$1] = block.mimeType.split("/");
20
+ if (format$1 === "wav" || format$1 === "mp3") return format$1;
21
+ return "wav";
22
+ });
23
+ return {
24
+ type: "input_audio",
25
+ input_audio: {
26
+ data: block.data.toString(),
27
+ format
28
+ }
29
+ };
30
+ }
31
+ }
32
+ if (block.type === "file") {
33
+ if (block.data) return {
34
+ type: "file",
35
+ file: { file_data: block.data.toString() }
36
+ };
37
+ if (block.fileId) return {
38
+ type: "file",
39
+ file: { file_id: block.fileId }
40
+ };
41
+ }
42
+ return void 0;
43
+ }
44
+ function _convertToCompletionsMessageFromV1(message, model) {
45
+ let role = messageToOpenAIRole(message);
46
+ if (role === "system" && isReasoningModel(model)) role = "developer";
47
+ if (role === "developer") return {
48
+ role: "developer",
49
+ content: message.contentBlocks.filter((block) => block.type === "text")
50
+ };
51
+ else if (role === "system") return {
52
+ role: "system",
53
+ content: message.contentBlocks.filter((block) => block.type === "text")
54
+ };
55
+ else if (role === "assistant") return {
56
+ role: "assistant",
57
+ content: message.contentBlocks.filter((block) => block.type === "text")
58
+ };
59
+ else if (role === "tool" && isToolMessage(message)) return {
60
+ role: "tool",
61
+ tool_call_id: message.tool_call_id,
62
+ content: message.contentBlocks.filter((block) => block.type === "text")
63
+ };
64
+ else if (role === "function") return {
65
+ role: "function",
66
+ name: message.name ?? "",
67
+ content: message.contentBlocks.filter((block) => block.type === "text").join("")
68
+ };
69
+ function* iterateUserContent(blocks) {
70
+ for (const block of blocks) {
71
+ if (block.type === "text") yield {
72
+ type: "text",
73
+ text: block.text
74
+ };
75
+ const data = _convertToChatCompletionsData(block);
76
+ if (data) yield data;
77
+ }
78
+ }
79
+ return {
80
+ role: "user",
81
+ content: Array.from(iterateUserContent(message.contentBlocks))
82
+ };
83
+ }
84
+ function _convertToResponsesMessageFromV1(message) {
85
+ function* iterateContent() {
86
+ for (const block of message.contentBlocks) if (block.type === "text") yield {
87
+ type: "message",
88
+ role: "assistant",
89
+ content: block.text
90
+ };
91
+ else if (block.type === "reasoning") yield {
92
+ id: block.id ?? "",
93
+ type: "reasoning",
94
+ summary: [{
95
+ type: "summary_text",
96
+ text: block.reasoning
97
+ }]
98
+ };
99
+ else if (block.type === "tool_call") yield {
100
+ type: "function_call",
101
+ name: block.name,
102
+ call_id: block.id ?? "",
103
+ arguments: JSON.stringify(block.args)
104
+ };
105
+ }
106
+ return Array.from(iterateContent());
107
+ }
108
+
109
+ //#endregion
110
+ export { _convertToCompletionsMessageFromV1, _convertToResponsesMessageFromV1 };
111
+ //# sourceMappingURL=standard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard.js","names":["block: ContentBlock.Standard","format","message: AIMessage","model?: string","blocks: ContentBlock.Standard[]"],"sources":["../../src/utils/standard.ts"],"sourcesContent":["import type { OpenAI as OpenAIClient } from \"openai\";\nimport {\n isToolMessage,\n type AIMessage,\n type ContentBlock,\n} from \"@langchain/core/messages\";\nimport { iife, isReasoningModel, messageToOpenAIRole } from \"./misc.js\";\n\ntype ChatCompletionContentData =\n | OpenAIClient.Chat.Completions.ChatCompletionContentPartImage\n | OpenAIClient.Chat.Completions.ChatCompletionContentPartInputAudio\n | OpenAIClient.Chat.Completions.ChatCompletionContentPart.File;\n\nfunction _convertToChatCompletionsData(\n block: ContentBlock.Standard\n): ChatCompletionContentData | undefined {\n if (block.type === \"image\") {\n if (block.url) {\n return {\n type: \"image_url\",\n image_url: {\n url: block.url,\n },\n };\n } else if (block.data) {\n return {\n type: \"image_url\",\n image_url: {\n url: `data:${block.mimeType};base64,${block.data}`,\n },\n };\n }\n }\n if (block.type === \"audio\") {\n if (block.data) {\n const format = iife(() => {\n const [, format] = block.mimeType.split(\"/\");\n if (format === \"wav\" || format === \"mp3\") {\n return format;\n }\n return \"wav\";\n });\n return {\n type: \"input_audio\",\n input_audio: {\n data: block.data.toString(),\n format,\n },\n };\n }\n }\n if (block.type === \"file\") {\n if (block.data) {\n return {\n type: \"file\",\n file: {\n file_data: block.data.toString(),\n },\n };\n }\n if (block.fileId) {\n return {\n type: \"file\",\n file: {\n file_id: block.fileId,\n },\n };\n }\n }\n return undefined;\n}\n\nexport function _convertToCompletionsMessageFromV1(\n message: AIMessage,\n model?: string\n): OpenAIClient.Chat.Completions.ChatCompletionMessageParam {\n let role = messageToOpenAIRole(message);\n if (role === \"system\" && isReasoningModel(model)) {\n role = \"developer\";\n }\n if (role === \"developer\") {\n return {\n role: \"developer\",\n content: message.contentBlocks.filter((block) => block.type === \"text\"),\n };\n } else if (role === \"system\") {\n return {\n role: \"system\",\n content: message.contentBlocks.filter((block) => block.type === \"text\"),\n };\n } else if (role === \"assistant\") {\n return {\n role: \"assistant\",\n content: message.contentBlocks.filter((block) => block.type === \"text\"),\n };\n } else if (role === \"tool\" && isToolMessage(message)) {\n return {\n role: \"tool\",\n tool_call_id: message.tool_call_id,\n content: message.contentBlocks.filter((block) => block.type === \"text\"),\n };\n } else if (role === \"function\") {\n return {\n role: \"function\",\n name: message.name ?? \"\",\n content: message.contentBlocks\n .filter((block) => block.type === \"text\")\n .join(\"\"),\n };\n }\n // Default to user message handling\n function* iterateUserContent(blocks: ContentBlock.Standard[]) {\n for (const block of blocks) {\n if (block.type === \"text\") {\n yield {\n type: \"text\" as const,\n text: block.text,\n };\n }\n const data = _convertToChatCompletionsData(block);\n if (data) {\n yield data;\n }\n }\n }\n return {\n role: \"user\",\n content: Array.from(iterateUserContent(message.contentBlocks)),\n };\n}\n\nexport function _convertToResponsesMessageFromV1(message: AIMessage) {\n function* iterateContent(): Generator<OpenAIClient.Responses.ResponseInputItem> {\n for (const block of message.contentBlocks) {\n if (block.type === \"text\") {\n yield {\n type: \"message\" as const,\n role: \"assistant\",\n content: block.text,\n };\n } else if (block.type === \"reasoning\") {\n yield {\n id: block.id ?? \"\",\n type: \"reasoning\" as const,\n summary: [\n {\n type: \"summary_text\",\n text: block.reasoning,\n },\n ],\n };\n } else if (block.type === \"tool_call\") {\n yield {\n type: \"function_call\" as const,\n name: block.name,\n call_id: block.id ?? \"\",\n arguments: JSON.stringify(block.args),\n };\n }\n }\n }\n return Array.from(iterateContent());\n}\n"],"mappings":";;;;AAaA,SAAS,8BACPA,OACuC;AACvC,KAAI,MAAM,SAAS,SACjB;MAAI,MAAM,IACR,QAAO;GACL,MAAM;GACN,WAAW,EACT,KAAK,MAAM,IACZ;EACF;WACQ,MAAM,KACf,QAAO;GACL,MAAM;GACN,WAAW,EACT,KAAK,CAAC,KAAK,EAAE,MAAM,SAAS,QAAQ,EAAE,MAAM,MAAM,CACnD;EACF;CACF;AAEH,KAAI,MAAM,SAAS,SACjB;MAAI,MAAM,MAAM;GACd,MAAM,SAAS,KAAK,MAAM;IACxB,MAAM,GAAGC,SAAO,GAAG,MAAM,SAAS,MAAM,IAAI;AAC5C,QAAIA,aAAW,SAASA,aAAW,MACjC,QAAOA;AAET,WAAO;GACR,EAAC;AACF,UAAO;IACL,MAAM;IACN,aAAa;KACX,MAAM,MAAM,KAAK,UAAU;KAC3B;IACD;GACF;EACF;;AAEH,KAAI,MAAM,SAAS,QAAQ;AACzB,MAAI,MAAM,KACR,QAAO;GACL,MAAM;GACN,MAAM,EACJ,WAAW,MAAM,KAAK,UAAU,CACjC;EACF;AAEH,MAAI,MAAM,OACR,QAAO;GACL,MAAM;GACN,MAAM,EACJ,SAAS,MAAM,OAChB;EACF;CAEJ;AACD,QAAO;AACR;AAED,SAAgB,mCACdC,SACAC,OAC0D;CAC1D,IAAI,OAAO,oBAAoB,QAAQ;AACvC,KAAI,SAAS,YAAY,iBAAiB,MAAM,EAC9C,OAAO;AAET,KAAI,SAAS,YACX,QAAO;EACL,MAAM;EACN,SAAS,QAAQ,cAAc,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;CACxE;UACQ,SAAS,SAClB,QAAO;EACL,MAAM;EACN,SAAS,QAAQ,cAAc,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;CACxE;UACQ,SAAS,YAClB,QAAO;EACL,MAAM;EACN,SAAS,QAAQ,cAAc,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;CACxE;UACQ,SAAS,UAAU,cAAc,QAAQ,CAClD,QAAO;EACL,MAAM;EACN,cAAc,QAAQ;EACtB,SAAS,QAAQ,cAAc,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO;CACxE;UACQ,SAAS,WAClB,QAAO;EACL,MAAM;EACN,MAAM,QAAQ,QAAQ;EACtB,SAAS,QAAQ,cACd,OAAO,CAAC,UAAU,MAAM,SAAS,OAAO,CACxC,KAAK,GAAG;CACZ;CAGH,UAAU,mBAAmBC,QAAiC;AAC5D,OAAK,MAAM,SAAS,QAAQ;AAC1B,OAAI,MAAM,SAAS,QACjB,MAAM;IACJ,MAAM;IACN,MAAM,MAAM;GACb;GAEH,MAAM,OAAO,8BAA8B,MAAM;AACjD,OAAI,MACF,MAAM;EAET;CACF;AACD,QAAO;EACL,MAAM;EACN,SAAS,MAAM,KAAK,mBAAmB,QAAQ,cAAc,CAAC;CAC/D;AACF;AAED,SAAgB,iCAAiCF,SAAoB;CACnE,UAAU,iBAAsE;AAC9E,OAAK,MAAM,SAAS,QAAQ,cAC1B,KAAI,MAAM,SAAS,QACjB,MAAM;GACJ,MAAM;GACN,MAAM;GACN,SAAS,MAAM;EAChB;WACQ,MAAM,SAAS,aACxB,MAAM;GACJ,IAAI,MAAM,MAAM;GAChB,MAAM;GACN,SAAS,CACP;IACE,MAAM;IACN,MAAM,MAAM;GACb,CACF;EACF;WACQ,MAAM,SAAS,aACxB,MAAM;GACJ,MAAM;GACN,MAAM,MAAM;GACZ,SAAS,MAAM,MAAM;GACrB,WAAW,KAAK,UAAU,MAAM,KAAK;EACtC;CAGN;AACD,QAAO,MAAM,KAAK,gBAAgB,CAAC;AACpC"}