Search code examples
flaskflask-restfulopenai-apigpt-3

Getting 400 Bad Request from Open AI API using Python Flask


I want to get response using Flask from OpenAI API. Whether I am getting Status 400 Bad Request from Browser through http://127.0.0.1:5000/chat

Bad Request

The browser (or proxy) sent a request that this server could not understand.

Also I am checking this from Postman

from flask import Flask, request, render_template
import requests

app = Flask(__name__)

@app.route('/')
def index():
    return 'Welcome to ChatGPT app!'

@app.route('/chat', methods=['GET', 'POST'])
def chat():
    user_input = request.form['text']
    # Use OpenAI's API to generate a response from ChatGPT
    response = generate_response_from_chatgpt(user_input)
    return response

def generate_response_from_chatgpt(user_input):
    api_key = "YOUR_API_KEY"
    url = "https://api.openai.com/v1/engines/davinci/completions"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {api_key}"
    }
    data = {
        "prompt": user_input,
        "engine": "davinci"
    }
    response = requests.post(url, headers=headers, json=data)
    return response.json()["choices"][0]["text"]


if __name__ == '__main__':
    app.run()

Solution

  • It would be best if you check the openai documentation to make sure you are using the correct endpoint and data format in your request. Also, you should check your API key, if it is correct and if you have reached the limit of requests.

    Also, it's worth noting that the code you provided is missing the import statement for Flask. You will need to add the following line at the top of your file:

    from flask import Flask, request Also, I see that you're using request.form['text'] but you should check if the request is a GET or POST request.

    if request.method == 'POST':
        user_input = request.form['text']
    else:
        user_input = request.args.get('text')
    

    This is to avoid a KeyError being raised when the request is a GET request.