UNPKG

@plastichub/osr-ai-tools

Version:

CLI and library for LLM tools

31 lines (30 loc) 946 B
import { RunnableToolFunctionWithParse } from 'openai/lib/RunnableFunction' import { JSONSchema } from 'openai/lib/jsonschema' import { ZodSchema, z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' // see https://github.com/openai/openai-node/blob/master/examples/tool-call-helpers-zod.ts export const zodFunction =<T extends object>({ function: fn, schema, description = '', name, }: { function: (args: T) => Promise<object> schema: ZodSchema<T> description?: string name?: string }): RunnableToolFunctionWithParse<T> => { return { type: 'function', function: { function: fn, name: name ?? fn.name, description: description, parameters: zodToJsonSchema(schema) as JSONSchema, parse(input: string): T { const obj = JSON.parse(input) return schema.parse(obj) } } } }