From d69e4e712dc935c1939f457ebe47d9d1539913ce Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Mon, 12 Feb 2024 12:48:48 +0000 Subject: [PATCH] OpenAI integration: retry 400 status code because OpenAI returns this sometimes for no reason (#898) --- .changeset/ninety-moles-clap.md | 5 +++ integrations/openai/src/taskUtils.ts | 56 ++++++++++++++-------------- 2 files changed, 34 insertions(+), 27 deletions(-) create mode 100644 .changeset/ninety-moles-clap.md diff --git a/.changeset/ninety-moles-clap.md b/.changeset/ninety-moles-clap.md new file mode 100644 index 000000000..b920d03a3 --- /dev/null +++ b/.changeset/ninety-moles-clap.md @@ -0,0 +1,5 @@ +--- +"@trigger.dev/openai": patch +--- + +Retry 400 status code, OpenAI returns this sometimes for no reason... diff --git a/integrations/openai/src/taskUtils.ts b/integrations/openai/src/taskUtils.ts index 634140039..72ac2211b 100644 --- a/integrations/openai/src/taskUtils.ts +++ b/integrations/openai/src/taskUtils.ts @@ -60,11 +60,11 @@ function createTaskUsageProperties( }, ...("completion_tokens" in usage ? [ - { - label: "Completion Usage", - text: String(usage.completion_tokens), - }, - ] + { + label: "Completion Usage", + text: String(usage.completion_tokens), + }, + ] : []), ]; } @@ -83,35 +83,35 @@ function createTaskRateLimitProperties(headers: Headers | undefined) { return [ ...(remainingRequests ? [ - { - label: "Remaining Requests", - text: remainingRequests ?? "Unknown", - }, - ] + { + label: "Remaining Requests", + text: remainingRequests ?? "Unknown", + }, + ] : []), ...(resetRequests ? [ - { - label: "Reset Requests", - text: resetRequests ?? "Unknown", - }, - ] + { + label: "Reset Requests", + text: resetRequests ?? "Unknown", + }, + ] : []), ...(remainingTokens ? [ - { - label: "Remaining Tokens", - text: remainingTokens ?? "Unknown", - }, - ] + { + label: "Remaining Tokens", + text: remainingTokens ?? "Unknown", + }, + ] : []), ...(resetTokens ? [ - { - label: "Reset Tokens", - text: resetTokens ?? "Unknown", - }, - ] + { + label: "Reset Tokens", + text: resetTokens ?? "Unknown", + }, + ] : []), ]; } @@ -128,6 +128,8 @@ export function handleOpenAIError(error: unknown) { } return ( + //sometimes OpenAI returns a 400 that when retried becomes a 200… + error.status === 400 || error.status === 429 || error.status === 408 || error.status === 409 || @@ -295,7 +297,7 @@ const requestOptionsKeys: KeysEnum = { export const isRequestOptions = (obj: unknown): obj is OpenAIRequestOptions => { return ( - typeof obj === 'object' && + typeof obj === "object" && obj !== null && !isEmptyObj(obj) && Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k)) @@ -310,4 +312,4 @@ function isEmptyObj(obj: Object | null | undefined): boolean { function hasOwn(obj: Object, key: string): boolean { return Object.prototype.hasOwnProperty.call(obj, key); -} \ No newline at end of file +}