Skip to content

Commit d69e4e7

Browse files
authored
OpenAI integration: retry 400 status code because OpenAI returns this sometimes for no reason (#898)
1 parent 7fae67c commit d69e4e7

File tree

2 files changed

+34
-27
lines changed

2 files changed

+34
-27
lines changed

.changeset/ninety-moles-clap.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@trigger.dev/openai": patch
3+
---
4+
5+
Retry 400 status code, OpenAI returns this sometimes for no reason...

integrations/openai/src/taskUtils.ts

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ function createTaskUsageProperties(
6060
},
6161
...("completion_tokens" in usage
6262
? [
63-
{
64-
label: "Completion Usage",
65-
text: String(usage.completion_tokens),
66-
},
67-
]
63+
{
64+
label: "Completion Usage",
65+
text: String(usage.completion_tokens),
66+
},
67+
]
6868
: []),
6969
];
7070
}
@@ -83,35 +83,35 @@ function createTaskRateLimitProperties(headers: Headers | undefined) {
8383
return [
8484
...(remainingRequests
8585
? [
86-
{
87-
label: "Remaining Requests",
88-
text: remainingRequests ?? "Unknown",
89-
},
90-
]
86+
{
87+
label: "Remaining Requests",
88+
text: remainingRequests ?? "Unknown",
89+
},
90+
]
9191
: []),
9292
...(resetRequests
9393
? [
94-
{
95-
label: "Reset Requests",
96-
text: resetRequests ?? "Unknown",
97-
},
98-
]
94+
{
95+
label: "Reset Requests",
96+
text: resetRequests ?? "Unknown",
97+
},
98+
]
9999
: []),
100100
...(remainingTokens
101101
? [
102-
{
103-
label: "Remaining Tokens",
104-
text: remainingTokens ?? "Unknown",
105-
},
106-
]
102+
{
103+
label: "Remaining Tokens",
104+
text: remainingTokens ?? "Unknown",
105+
},
106+
]
107107
: []),
108108
...(resetTokens
109109
? [
110-
{
111-
label: "Reset Tokens",
112-
text: resetTokens ?? "Unknown",
113-
},
114-
]
110+
{
111+
label: "Reset Tokens",
112+
text: resetTokens ?? "Unknown",
113+
},
114+
]
115115
: []),
116116
];
117117
}
@@ -128,6 +128,8 @@ export function handleOpenAIError(error: unknown) {
128128
}
129129

130130
return (
131+
//sometimes OpenAI returns a 400 that when retried becomes a 200…
132+
error.status === 400 ||
131133
error.status === 429 ||
132134
error.status === 408 ||
133135
error.status === 409 ||
@@ -295,7 +297,7 @@ const requestOptionsKeys: KeysEnum<OpenAIRequestOptions> = {
295297

296298
export const isRequestOptions = (obj: unknown): obj is OpenAIRequestOptions => {
297299
return (
298-
typeof obj === 'object' &&
300+
typeof obj === "object" &&
299301
obj !== null &&
300302
!isEmptyObj(obj) &&
301303
Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k))
@@ -310,4 +312,4 @@ function isEmptyObj(obj: Object | null | undefined): boolean {
310312

311313
function hasOwn(obj: Object, key: string): boolean {
312314
return Object.prototype.hasOwnProperty.call(obj, key);
313-
}
315+
}

0 commit comments

Comments
 (0)