mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-15 09:04:07 -08:00
0f7ae3f50a
Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Michael Kret <michael.k@radency.com>
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
import type { OpenAI as OpenAIClient } from 'openai';
|
|
import type { StructuredTool } from '@langchain/core/tools';
|
|
|
|
// Copied from langchain(`langchain/src/tools/convert_to_openai.ts`)
|
|
// since these functions are not exported
|
|
|
|
/**
|
|
* Formats a `StructuredTool` instance into a format that is compatible
|
|
* with OpenAI's ChatCompletionFunctions. It uses the `zodToJsonSchema`
|
|
* function to convert the schema of the `StructuredTool` into a JSON
|
|
* schema, which is then used as the parameters for the OpenAI function.
|
|
*/
|
|
export function formatToOpenAIFunction(
|
|
tool: StructuredTool,
|
|
): OpenAIClient.Chat.ChatCompletionCreateParams.Function {
|
|
return {
|
|
name: tool.name,
|
|
description: tool.description,
|
|
parameters: zodToJsonSchema(tool.schema),
|
|
};
|
|
}
|
|
|
|
export function formatToOpenAITool(tool: StructuredTool): OpenAIClient.Chat.ChatCompletionTool {
|
|
const schema = zodToJsonSchema(tool.schema);
|
|
return {
|
|
type: 'function',
|
|
function: {
|
|
name: tool.name,
|
|
description: tool.description,
|
|
parameters: schema,
|
|
},
|
|
};
|
|
}
|
|
|
|
export function formatToOpenAIAssistantTool(
|
|
tool: StructuredTool,
|
|
): OpenAIClient.Beta.AssistantCreateParams.AssistantToolsFunction {
|
|
return {
|
|
type: 'function',
|
|
function: {
|
|
name: tool.name,
|
|
description: tool.description,
|
|
parameters: zodToJsonSchema(tool.schema),
|
|
},
|
|
};
|
|
}
|