OpenAI integration: retry 400 status code because OpenAI returns this sometimes for no reason (#898)

This commit is contained in:
Matt Aitken
2024-02-12 12:48:48 +00:00
committed by GitHub
parent 7fae67c47d
commit d69e4e712d
2 changed files with 34 additions and 27 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"@trigger.dev/openai": patch
---
Retry 400 status code, OpenAI returns this sometimes for no reason...
+28 -26
View File
@@ -60,11 +60,11 @@ function createTaskUsageProperties(
}, },
...("completion_tokens" in usage ...("completion_tokens" in usage
? [ ? [
{ {
label: "Completion Usage", label: "Completion Usage",
text: String(usage.completion_tokens), text: String(usage.completion_tokens),
}, },
] ]
: []), : []),
]; ];
} }
@@ -83,35 +83,35 @@ function createTaskRateLimitProperties(headers: Headers | undefined) {
return [ return [
...(remainingRequests ...(remainingRequests
? [ ? [
{ {
label: "Remaining Requests", label: "Remaining Requests",
text: remainingRequests ?? "Unknown", text: remainingRequests ?? "Unknown",
}, },
] ]
: []), : []),
...(resetRequests ...(resetRequests
? [ ? [
{ {
label: "Reset Requests", label: "Reset Requests",
text: resetRequests ?? "Unknown", text: resetRequests ?? "Unknown",
}, },
] ]
: []), : []),
...(remainingTokens ...(remainingTokens
? [ ? [
{ {
label: "Remaining Tokens", label: "Remaining Tokens",
text: remainingTokens ?? "Unknown", text: remainingTokens ?? "Unknown",
}, },
] ]
: []), : []),
...(resetTokens ...(resetTokens
? [ ? [
{ {
label: "Reset Tokens", label: "Reset Tokens",
text: resetTokens ?? "Unknown", text: resetTokens ?? "Unknown",
}, },
] ]
: []), : []),
]; ];
} }
@@ -128,6 +128,8 @@ export function handleOpenAIError(error: unknown) {
} }
return ( return (
//sometimes OpenAI returns a 400 that when retried becomes a 200…
error.status === 400 ||
error.status === 429 || error.status === 429 ||
error.status === 408 || error.status === 408 ||
error.status === 409 || error.status === 409 ||
@@ -295,7 +297,7 @@ const requestOptionsKeys: KeysEnum<OpenAIRequestOptions> = {
export const isRequestOptions = (obj: unknown): obj is OpenAIRequestOptions => { export const isRequestOptions = (obj: unknown): obj is OpenAIRequestOptions => {
return ( return (
typeof obj === 'object' && typeof obj === "object" &&
obj !== null && obj !== null &&
!isEmptyObj(obj) && !isEmptyObj(obj) &&
Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k)) Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k))