![](/img/trans.png)
[英]How to validate an image before sending to DALL E API with front-end javascript
[英]nodejs app crash on openai dall-e 2 api rejected request
我肯定很笨,但我无法弄清楚如何处理 openai api 被拒绝的请求(对于上下文,dall-e 2 是一个图像生成器)
当用户尝试生成禁止图像时,我的 nodejs 应用程序就退出了
async function start(arg) {
try{
// generate image
const response = openai.createImage({
prompt: arg,
n: 1,
size: "1024x1024",
});
// on success response
response.then(res =>{
console.log("ok");
})
response.catch(err =>{
console.log(err);
});
} catch(e){
console.log(e);
}
}
它在出口处给了我类似的东西:
data: {
error: {
code: null,
message: 'Your request was rejected as a result of our safety system. Your prompt may contain text that is not allowed by our safety system.',
param: null,
type: 'invalid_request_error'
}
}
尝试使用 response.catch 并尝试捕获但没有成功,应用程序每次都退出
我至少想首先忽略这个错误
另一方面,我想 console.log 给定的消息(data.error.message)
老实说,我不知道该怎么做,甚至不明白为什么 try catch 不起作用
根据给出的详细信息,我的猜测是 getImages 返回的 Promise 被拒绝了。 你可以通过在你的.catch 回调和 catch 语句中添加一些额外的日志来稍微调试一下。
如何执行此操作实际上取决于您尝试使用此 api 执行的操作,无论发生什么情况,当前编写的代码都会记录一些内容并退出。
有几种方法可以处理这个
.catch
来处理错误。 利用 promise chainability 你可以得到这样的东西openai.createImage({
prompt: arg,
n: 1,
size: "1024x1024",
user: msg.author.id,
})
.catch((e) => {
if (e.data.error.message.includes('safety system')) {
return 'something'
}
console.error(e)
})
如果您需要响应对象,则 asnwer 可能会有所不同。 看起来 openai 包是基于 axios 构建的,您可以将 axios 选项传递给它。 请参阅https://axios-http.com/docs/handling_errors和https://npmjs.com/package/openai的请求选项部分
编辑感谢@JacksonChristoffersen ,我找到了我的解决方案
基本上我得到的是 HTTP 状态 400
我刚刚添加了来自 axios 的请求选项来验证小于 500 的 http 状态
这是解决方案:
async function start(arg) {
try{
// generate image
const response = openai.createImage({
prompt: arg,
n: 1,
size: "1024x1024",
},{
validateStatus: function (status) {
return status < 500; // Resolve only if the status code is less than 500
}
});
// on success response
response.then(res =>{
console.log("ok");
})
response.catch(err =>{
console.log(err);
});
} catch(e){
console.log(e);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.