ai-utils.js
Version:
Build AI applications, chatbots, and agents with JavaScript and TypeScript.
43 lines (42 loc) • 1.42 kB
JavaScript
import SecureJSON from "secure-json-parse";
import { z } from "zod";
import { ApiCallError } from "../../util/api/ApiCallError.js";
export const openAIErrorDataSchema = z.object({
error: z.object({
message: z.string(),
type: z.string(),
param: z.any().nullable(),
code: z.string().nullable(),
}),
});
export class OpenAIError extends 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;
}
}
export const failedOpenAICallResponseHandler = async ({ response, url, requestBodyValues }) => {
const responseBody = await response.text();
const parsedError = openAIErrorDataSchema.parse(SecureJSON.parse(responseBody));
return new OpenAIError({
url,
requestBodyValues,
statusCode: response.status,
data: parsedError,
});
};