1

I looked into various possible solutions:

Here is my code:

import { config } from "dotenv"
config()

// New
import OpenAI from 'openai';
import readline from "readline"

const openai = new OpenAI({
  apiKey: 'My Key', // defaults to process.env["OPENAI_API_KEY"]
});

const userInterface = new readline.createInterface({
    input: process.stdin,
    output: process.stdout

})

userInterface.prompt()
userInterface.on("line", async input => {
    const res = await openai.chat.completions.create({
        model: 'gpt-3.5-turbo',
        messages: [{ role: 'user', content: input}],
    })
    console.log(res.data.choices[0].message.content)
    userInterface.prompt()
})

When I run the code, I get the error message from the title of the post: TypeError: Cannot read properties of undefined (reading 'choices').

I tried the following to fix the issue:

  • Reload the Window with command: Developer:Reload.Window
  • Using different OpenAI API keys
  • Update package.json OpenAI to the latest version which is 4.11.1
  • Generally a different console.log code/output & code structure to solve the issue

Can anyone point me in the right direction? Everything works, besides the user input. As a guideline I used this video: https://www.youtube.com/watch?v=4qNwoAAfnk4. I updated the project as far as I could. Why does the user input not work?

Also, the code on my PC has a functioning apiKey implemented. Thanks for reading!

10
  • can u log the res and see what u get Commented Oct 6, 2023 at 15:28
  • 2
    The error means that res.data is undefined, if that's not clear. Have you logged (or checked in the debugger) what res is after await expression? Commented Oct 6, 2023 at 15:29
  • I tested more up to date versions of res.data, many people seem to have the problem as stated in :"github.com/davila7/code-gpt-docs/issues/57", I don't know if it ultimately has been resolved. That it's possibly undefined is clear to me, as they update the documentation frequently, I don't know what you guys mean with res as well as logging the res. I am completely new to this. I can post the screenshot of the full error. I never worked with JavaScript/Node.JS this is my first project. Commented Oct 6, 2023 at 15:34
  • 1
    res.choices[0].message? Commented Oct 6, 2023 at 15:44
  • 1
    Yea there's clearly not a data property. Commented Oct 6, 2023 at 15:46

2 Answers 2

5

OpenAI NodeJS SDK v4 was released on August 16, 2023, and is a complete rewrite of the SDK. Among other things, there are changes in extracting the message content. See the v3 to v4 migration guide.

• If you have the OpenAI NodeJS SDK v3:

import { Configuration, OpenAIApi } from 'openai';

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});

const openai = new OpenAIApi(configuration);

const chatCompletion = await openai.createChatCompletion({
  model: 'gpt-3.5-turbo',
  messages: [{ role: 'user', content: 'Hello!' }],
});

console.log(chatCompletion.data.choices[0].message);

• If you have the OpenAI NodeJS SDK v4:

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

const chatCompletion = await openai.chat.completions.create({
  model: 'gpt-3.5-turbo',
  messages: [{ role: 'user', content: 'Hello!'}],
});

console.log(chatCompletion.choices[0].message); // There's no "data" property
Sign up to request clarification or add additional context in comments.

Comments

2

Changing console.log(res.data.choices[0].message.content) to console.log(res.choices[0]) or console.log(res.choices[0].message.content) solved the issue and fixed the proper user input feature.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.