ai-utils.js
Version:
Build AI applications, chatbots, and agents with JavaScript and TypeScript.
51 lines (50 loc) • 1.95 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.failedOpenAICallResponseHandler = exports.OpenAIError = exports.openAIErrorDataSchema = void 0;
const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
const zod_1 = require("zod");
const ApiCallError_js_1 = require("../../util/api/ApiCallError.cjs");
exports.openAIErrorDataSchema = zod_1.z.object({
error: zod_1.z.object({
message: zod_1.z.string(),
type: zod_1.z.string(),
param: zod_1.z.any().nullable(),
code: zod_1.z.string().nullable(),
}),
});
class OpenAIError extends ApiCallError_js_1.ApiCallError {
constructor({ data, statusCode, url, requestBodyValues, message = data.error.message, }) {
super({
message,
statusCode,
requestBodyValues,
url,
isRetryable: (statusCode === 429 &&
// insufficient_quota is also reported as a 429, but it's not retryable:
data.error.type !== "insufficient_quota") ||
statusCode >= 500,
});
Object.defineProperty(this, "data", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.data = data;
}
}
exports.OpenAIError = OpenAIError;
const failedOpenAICallResponseHandler = async ({ response, url, requestBodyValues }) => {
const responseBody = await response.text();
const parsedError = exports.openAIErrorDataSchema.parse(secure_json_parse_1.default.parse(responseBody));
return new OpenAIError({
url,
requestBodyValues,
statusCode: response.status,
data: parsedError,
});
};
exports.failedOpenAICallResponseHandler = failedOpenAICallResponseHandler;