UNPKG

ai-utils.js

Version:

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

43 lines (42 loc) 1.42 kB
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, }); };