UNPKG

ai-utils.js

Version:

Build AI applications, chatbots, and agents with JavaScript and TypeScript.

144 lines (143 loc) 4.74 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAIChatAutoFunctionPrompt = exports.OpenAIChatSingleFunctionPrompt = exports.OpenAIChatFunctionPrompt = void 0; const secure_json_parse_1 = __importDefault(require("secure-json-parse")); const zod_to_json_schema_1 = require("zod-to-json-schema"); exports.OpenAIChatFunctionPrompt = { forOpenAIFunctionDescription(options) { return new OpenAIChatSingleFunctionPrompt(options); }, forSchema({ messages, schemaDefinition, }) { return this.forOpenAIFunctionDescription({ messages, fn: { name: schemaDefinition.name, description: schemaDefinition.description, parameters: schemaDefinition.schema, }, }); }, forSchemaCurried(messages) { return (schemaDefinition) => this.forSchema({ messages, schemaDefinition, }); }, forTool({ messages, tool, }) { return this.forSchema({ messages, schemaDefinition: tool.inputSchemaDefinition, }); }, forToolCurried(messages) { return (tool) => this.forTool({ messages, tool }); }, forOpenAIFunctionDescriptions(options) { return new OpenAIChatAutoFunctionPrompt(options); }, forSchemas({ messages, schemaDefinitions, }) { return this.forOpenAIFunctionDescriptions({ messages, fns: schemaDefinitions.map((schemaDefinition) => ({ name: schemaDefinition.name, description: schemaDefinition.description, parameters: schemaDefinition.schema, })), }); }, forSchemasCurried(messages) { return (schemaDefinitions) => this.forSchemas({ messages, schemaDefinitions }); }, forTools({ messages, tools, }) { return this.forSchemas({ messages, schemaDefinitions: tools.map((tool) => tool.inputSchemaDefinition), }); }, forToolsCurried(messages) { return (tools) => this.forTools({ messages, tools }); }, }; class OpenAIChatSingleFunctionPrompt { constructor({ messages, fn, }) { Object.defineProperty(this, "messages", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "fn", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.messages = messages; this.fn = fn; } extractJson(response) { const jsonText = response.choices[0].message.function_call.arguments; return secure_json_parse_1.default.parse(jsonText); } get functionCall() { return { name: this.fn.name }; } get functions() { return [ { name: this.fn.name, description: this.fn.description, parameters: (0, zod_to_json_schema_1.zodToJsonSchema)(this.fn.parameters), }, ]; } } exports.OpenAIChatSingleFunctionPrompt = OpenAIChatSingleFunctionPrompt; class OpenAIChatAutoFunctionPrompt { constructor({ messages, fns, }) { Object.defineProperty(this, "messages", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "fns", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.messages = messages; this.fns = fns; } extractJsonAndText(response) { const message = response.choices[0].message; const content = message.content; const functionCall = message.function_call; return functionCall == null ? { schema: null, value: null, text: content ?? "", } : { schema: functionCall.name, value: secure_json_parse_1.default.parse(functionCall.arguments), text: content, }; } get functionCall() { return "auto"; } get functions() { return this.fns.map((fn) => ({ name: fn.name, description: fn.description, parameters: (0, zod_to_json_schema_1.zodToJsonSchema)(fn.parameters), })); } } exports.OpenAIChatAutoFunctionPrompt = OpenAIChatAutoFunctionPrompt;