@langchain/openai 0.6.9 → 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.
- package/README.md +8 -8
- package/dist/_virtual/rolldown_runtime.cjs +25 -0
- package/dist/azure/chat_models.cjs +661 -808
- package/dist/azure/chat_models.cjs.map +1 -0
- package/dist/azure/chat_models.d.cts +449 -0
- package/dist/azure/chat_models.d.cts.map +1 -0
- package/dist/azure/chat_models.d.ts +32 -28
- package/dist/azure/chat_models.d.ts.map +1 -0
- package/dist/azure/chat_models.js +660 -804
- package/dist/azure/chat_models.js.map +1 -0
- package/dist/azure/embeddings.cjs +81 -130
- package/dist/azure/embeddings.cjs.map +1 -0
- package/dist/azure/embeddings.d.cts +27 -0
- package/dist/azure/embeddings.d.cts.map +1 -0
- package/dist/azure/embeddings.d.ts +25 -20
- package/dist/azure/embeddings.d.ts.map +1 -0
- package/dist/azure/embeddings.js +80 -126
- package/dist/azure/embeddings.js.map +1 -0
- package/dist/azure/llms.cjs +109 -168
- package/dist/azure/llms.cjs.map +1 -0
- package/dist/azure/llms.d.cts +33 -0
- package/dist/azure/llms.d.cts.map +1 -0
- package/dist/azure/llms.d.ts +31 -25
- package/dist/azure/llms.d.ts.map +1 -0
- package/dist/azure/llms.js +108 -164
- package/dist/azure/llms.js.map +1 -0
- package/dist/chat_models.cjs +1951 -2774
- package/dist/chat_models.cjs.map +1 -0
- package/dist/chat_models.d.cts +930 -0
- package/dist/chat_models.d.cts.map +1 -0
- package/dist/chat_models.d.ts +365 -348
- package/dist/chat_models.d.ts.map +1 -0
- package/dist/chat_models.js +1946 -2764
- package/dist/chat_models.js.map +1 -0
- package/dist/embeddings.cjs +136 -193
- package/dist/embeddings.cjs.map +1 -0
- package/dist/embeddings.d.cts +115 -0
- package/dist/embeddings.d.cts.map +1 -0
- package/dist/embeddings.d.ts +88 -81
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +134 -188
- package/dist/embeddings.js.map +1 -0
- package/dist/index.cjs +47 -34
- package/dist/index.d.cts +16 -0
- package/dist/index.d.ts +16 -13
- package/dist/index.js +17 -13
- package/dist/langchain-core/dist/types/_internal.d.cts +11 -0
- package/dist/langchain-core/dist/types/_internal.d.cts.map +1 -0
- package/dist/langchain-core/dist/types/_internal.d.ts +11 -0
- package/dist/langchain-core/dist/types/_internal.d.ts.map +1 -0
- package/dist/langchain-core/dist/utils/stream.d.cts +26 -0
- package/dist/langchain-core/dist/utils/stream.d.cts.map +1 -0
- package/dist/langchain-core/dist/utils/stream.d.ts +26 -0
- package/dist/langchain-core/dist/utils/stream.d.ts.map +1 -0
- package/dist/llms.cjs +312 -468
- package/dist/llms.cjs.map +1 -0
- package/dist/llms.d.cts +123 -0
- package/dist/llms.d.cts.map +1 -0
- package/dist/llms.d.ts +93 -87
- package/dist/llms.d.ts.map +1 -0
- package/dist/llms.js +309 -462
- package/dist/llms.js.map +1 -0
- package/dist/tools/custom.cjs +25 -26
- package/dist/tools/custom.cjs.map +1 -0
- package/dist/tools/custom.d.cts +10 -0
- package/dist/tools/custom.d.cts.map +1 -0
- package/dist/tools/custom.d.ts +8 -3
- package/dist/tools/custom.d.ts.map +1 -0
- package/dist/tools/custom.js +24 -23
- package/dist/tools/custom.js.map +1 -0
- package/dist/tools/dalle.cjs +104 -194
- package/dist/tools/dalle.cjs.map +1 -0
- package/dist/tools/dalle.d.cts +123 -0
- package/dist/tools/dalle.d.cts.map +1 -0
- package/dist/tools/dalle.d.ts +111 -104
- package/dist/tools/dalle.d.ts.map +1 -0
- package/dist/tools/dalle.js +102 -189
- package/dist/tools/dalle.js.map +1 -0
- package/dist/tools/index.cjs +1 -17
- package/dist/tools/index.js +1 -1
- package/dist/types.d.cts +263 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +244 -237
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/azure.cjs +86 -47
- package/dist/utils/azure.cjs.map +1 -0
- package/dist/utils/azure.d.cts +76 -0
- package/dist/utils/azure.d.cts.map +1 -0
- package/dist/utils/azure.d.ts +51 -9
- package/dist/utils/azure.d.ts.map +1 -0
- package/dist/utils/azure.js +85 -45
- package/dist/utils/azure.js.map +1 -0
- package/dist/utils/client.cjs +25 -0
- package/dist/utils/client.cjs.map +1 -0
- package/dist/utils/client.d.cts +5 -0
- package/dist/utils/client.d.cts.map +1 -0
- package/dist/utils/client.d.ts +5 -0
- package/dist/utils/client.d.ts.map +1 -0
- package/dist/utils/client.js +24 -0
- package/dist/utils/client.js.map +1 -0
- package/dist/utils/errors.cjs +9 -8
- package/dist/utils/errors.cjs.map +1 -0
- package/dist/utils/errors.js +9 -6
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/message_inputs.cjs +139 -0
- package/dist/utils/message_inputs.cjs.map +1 -0
- package/dist/utils/message_inputs.d.cts +9 -0
- package/dist/utils/message_inputs.d.cts.map +1 -0
- package/dist/utils/message_inputs.d.ts +9 -0
- package/dist/utils/message_inputs.d.ts.map +1 -0
- package/dist/utils/message_inputs.js +137 -0
- package/dist/utils/message_inputs.js.map +1 -0
- package/dist/utils/misc.cjs +30 -0
- package/dist/utils/misc.cjs.map +1 -0
- package/dist/utils/misc.d.cts +9 -0
- package/dist/utils/misc.d.cts.map +1 -0
- package/dist/utils/misc.d.ts +9 -0
- package/dist/utils/misc.d.ts.map +1 -0
- package/dist/utils/misc.js +27 -0
- package/dist/utils/misc.js.map +1 -0
- package/dist/utils/output.cjs +74 -0
- package/dist/utils/output.cjs.map +1 -0
- package/dist/utils/output.js +72 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/prompts.cjs +39 -38
- package/dist/utils/prompts.cjs.map +1 -0
- package/dist/utils/prompts.d.cts +42 -0
- package/dist/utils/prompts.d.cts.map +1 -0
- package/dist/utils/prompts.d.ts +10 -4
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +40 -36
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/standard.cjs +113 -0
- package/dist/utils/standard.cjs.map +1 -0
- package/dist/utils/standard.js +111 -0
- package/dist/utils/standard.js.map +1 -0
- package/dist/utils/tools.cjs +150 -127
- package/dist/utils/tools.cjs.map +1 -0
- package/dist/utils/tools.d.cts +13 -0
- package/dist/utils/tools.d.cts.map +1 -0
- package/dist/utils/tools.d.ts +12 -42
- package/dist/utils/tools.d.ts.map +1 -0
- package/dist/utils/tools.js +146 -123
- package/dist/utils/tools.js.map +1 -0
- package/package.json +32 -40
- package/dist/tools/index.d.ts +0 -1
- package/dist/types.cjs +0 -2
- package/dist/types.js +0 -1
- package/dist/utils/errors.d.ts +0 -2
- package/dist/utils/headers.cjs +0 -39
- package/dist/utils/headers.d.ts +0 -8
- package/dist/utils/headers.js +0 -35
- package/dist/utils/openai-format-fndef.cjs +0 -80
- package/dist/utils/openai-format-fndef.d.ts +0 -44
- package/dist/utils/openai-format-fndef.js +0 -77
- package/dist/utils/openai.cjs +0 -127
- package/dist/utils/openai.d.ts +0 -15
- package/dist/utils/openai.js +0 -119
- package/index.cjs +0 -1
- package/index.d.cts +0 -1
- package/index.d.ts +0 -1
- 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"}
|
package/dist/utils/prompts.cjs
CHANGED
|
@@ -1,41 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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"}
|
package/dist/utils/prompts.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
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
|
-
|
|
35
|
-
|
|
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"}
|
package/dist/utils/prompts.js
CHANGED
|
@@ -1,38 +1,42 @@
|
|
|
1
|
-
import { _convertMessagesToOpenAIParams } from "
|
|
1
|
+
import { _convertMessagesToOpenAIParams } from "./message_inputs.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/prompts.ts
|
|
2
4
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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"}
|