@plastichub/osr-ai-tools
Version:
CLI and library for LLM tools
31 lines (30 loc) • 946 B
text/typescript
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)
}
}
}
}