简体   繁体   中英

nodejs app crash on openai dall-e 2 api rejected request

I'm surely dumb, but I'm not able to figure out how to handle openai api rejected requests ( for the context, dall-e 2 is an image generator )

when user tries to generate forbidden images, my nodejs app just exits

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);
    }   
}

it gives me something like that on the exit:

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'
      }
    }

tried using response.catch and try catch without success, the app just exits everytime

I at least want to ignore this error in the first place

in a second hand, I would like to console.log the given message (data.error.message)

I don't know what to do to by honest, don't even understand why try catch isn't working

With the details given, my guess would be that the Promise returned by getImages is being rejected. You could debug this a bit by adding some additional logs into your.catch callback and catch statement.

How to do this really depends on what you're trying to do with this api, the code as it's currently written would log something and exit no matter what happens.

There's a couple ways to handle this

  1. Use your .catch to handle the error. Utilizing promise chainability you can get something like this
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)
})

If you need the response object, the asnwer might be different. Looks like the openai package is built on axios and you can pass axios options into it. See https://axios-http.com/docs/handling_errors and the Request Options section of https://npmjs.com/package/openai

EDIT I found my solution thanks to @JacksonChristoffersen

Basically I was getting http status 400

I just added request options from axios to validate http status smaller than 500

Here's the solution:

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);
    }   
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM