2023-11-29 03:13:55 -08:00
|
|
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
2024-04-29 07:15:42 -07:00
|
|
|
import type { OpenAIClient } from '@langchain/openai';
|
2024-03-07 02:36:36 -08:00
|
|
|
import type { StructuredTool } from '@langchain/core/tools';
|
2023-11-29 03:13:55 -08:00
|
|
|
|
|
|
|
// 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,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2024-04-29 07:15:42 -07:00
|
|
|
export function formatToOpenAIAssistantTool(tool: StructuredTool): OpenAIClient.Beta.AssistantTool {
|
2023-11-29 03:13:55 -08:00
|
|
|
return {
|
|
|
|
type: 'function',
|
|
|
|
function: {
|
|
|
|
name: tool.name,
|
|
|
|
description: tool.description,
|
|
|
|
parameters: zodToJsonSchema(tool.schema),
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|