javascript openai dall-e 2 API拒绝请求时nodejs应用崩溃

ehxuflar  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(946)

我肯定是笨的,但是我不知道如何处理openai API拒绝的请求(对于上下文,dall-e2是一个图像生成器)
当用户尝试生成禁用图像时,我的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和尝试catch没有成功,应用程序每次都退出
我至少想首先忽略这个错误
另一方面,我希望console.log给定的消息(数据.错误.消息)
我真不知道该怎么办,甚至不明白为什么接球不管用

q35jwt9p

q35jwt9p1#

根据给出的细节,我猜测getImages返回的Promise被拒绝了。您可以通过在.catch回调和catch语句中添加一些额外的日志来调试这个问题。
如何做到这一点实际上取决于你试图用这个API做什么,目前编写的代码无论发生什么都会记录一些东西并退出。
有几种方法可以解决这个问题
1.使用你的.catch来处理这个错误。利用承诺可链接性,你可以得到如下的结果

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_errorshttps://npmjs.com/package/openai的Request Options部分

nszi6y05

nszi6y052#

编辑我找到了我的解决方案,感谢@Jackson克里斯托弗森
基本上我得到的是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);
    }   
}

相关问题