ai-utils.js
Version:
Build AI applications, chatbots, and agents with JavaScript and TypeScript.
58 lines (57 loc) • 1.91 kB
JavaScript
import { executeCall } from "../executeCall.js";
import { SchemaValidationError } from "./SchemaValidationError.js";
export async function generateJson(model, schemaDefinition, prompt, options) {
const expandedPrompt = prompt(schemaDefinition);
const result = await executeCall({
model,
options,
generateResponse: (options) => model.generateJsonResponse(expandedPrompt, options),
extractOutputValue: (response) => {
const json = expandedPrompt.extractJson(response);
const parseResult = schemaDefinition.schema.safeParse(json);
if (!parseResult.success) {
throw new SchemaValidationError({
schemaName: schemaDefinition.name,
value: json,
errors: parseResult.error,
});
}
return parseResult.data;
},
getStartEvent: (metadata, settings) => ({
type: "json-generation-started",
metadata,
settings,
prompt,
}),
getAbortEvent: (metadata, settings) => ({
type: "json-generation-finished",
status: "abort",
metadata,
settings,
prompt,
}),
getFailureEvent: (metadata, settings, error) => ({
type: "json-generation-finished",
status: "failure",
metadata,
settings,
prompt,
error,
}),
getSuccessEvent: (metadata, settings, response, output) => ({
type: "json-generation-finished",
status: "success",
metadata,
settings,
prompt,
response,
generatedJson: output,
}),
});
return {
value: result.output,
response: result.response,
metadata: result.metadata,
};
}