pythonartificial-intelligenceopenai-apigpt-4

Getting AttributeError when using openAI python library


I'm building a new AI chatbot utilizing the openai library and I have a gradio UI set up in one file (app.py) and a predict() function in another (trainedBot.py) Every time I send a request through the gradio UI I get this error:

File "/home/user/app/trainedBot.py", line 48, in predict
    return response.choices.message.content
AttributeError: 'list' object has no attribute 'message'

I tried putting both the message and the openAI response in a variable and nothing happened. Still got the same error. The response looked like this:

{
  "id": "chatcmpl-8CHKgpOewruWDC2Et1R6ZFtdPmSQR",
  "object": "chat.completion",
  "created": 1697937254,
  "model": "gpt-4-0613",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "HIIIIIII"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 308,
    "completion_tokens": 4,
    "total_tokens": 312
  }
}

Solution

  • response = {
      "id": "chatcmpl-8CHKgpOewruWDC2Et1R6ZFtdPmSQR",
      "object": "chat.completion",
      "created": 1697937254,
      "model": "gpt-4-0613",
      "choices": [
        {
          "index": 0,
          "message": {
            "role": "assistant",
            "content": "HIIIIIII"
          },
          "finish_reason": "stop"
        }
      ],
      "usage": {
        "prompt_tokens": 308,
        "completion_tokens": 4,
        "total_tokens": 312
      }
    }
    

    Your choices is a list so access it you need to put [0]

    print(response['choices'][0]['message']['content'])
    
    'HIIIIIII'
    

    Or could be:

    response.get('choices')[0].get('message').get('content')