ai-utils.js
Version:
Build AI applications, chatbots, and agents with JavaScript and TypeScript.
144 lines (143 loc) • 4.74 kB
JavaScript
;
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;