UNPKG

@openai/agents-core

Version:

The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.

69 lines 2.43 kB
import { zodResponsesFunction, zodTextFormat } from 'openai/helpers/zod'; import { UserError } from "../errors.js"; import { isZodObject } from "./typeGuards.js"; /** * Convert a string to a function tool name by replacing spaces with underscores and * non-alphanumeric characters with underscores. * @param name - The name of the tool. * @returns The function tool name. */ export function toFunctionToolName(name) { // Replace spaces with underscores name = name.replace(/\s/g, '_'); // Replace non-alphanumeric characters with underscores name = name.replace(/[^a-zA-Z0-9]/g, '_'); // Ensure the name is not empty if (name.length === 0) { throw new Error('Tool name cannot be empty'); } return name; } /** * Get the schema and parser from an input type. If the input type is a ZodObject, we will convert * it into a JSON Schema and use Zod as parser. If the input type is a JSON schema, we use the * JSON.parse function to get the parser. * @param inputType - The input type to get the schema and parser from. * @param name - The name of the tool. * @returns The schema and parser. */ export function getSchemaAndParserFromInputType(inputType, name) { const parser = (input) => JSON.parse(input); if (isZodObject(inputType)) { const formattedFunction = zodResponsesFunction({ name, parameters: inputType, function: () => { }, // empty function here to satisfy the OpenAI helper description: '', }); return { schema: formattedFunction.parameters, parser: formattedFunction.$parseRaw, }; } else if (typeof inputType === 'object' && inputType !== null) { return { schema: inputType, parser, }; } throw new UserError('Input type is not a ZodObject or a valid JSON schema'); } /** * Converts the agent output type provided to a serializable version */ export function convertAgentOutputTypeToSerializable(outputType) { if (outputType === 'text') { return 'text'; } if (isZodObject(outputType)) { const output = zodTextFormat(outputType, 'output'); return { type: output.type, name: output.name, strict: output.strict || false, schema: output.schema, }; } return outputType; } //# sourceMappingURL=tools.js.map