Search code examples
javascriptnode.jsopenai-api

OpenAI API in node gives basic Await error. How do I fix?


I literally copied the code from the openAI example and it gives me a remedial Await JS error but I am unsure what it expects me to do. I just want to spin up an Express.js instance and get a hello world from openapi (eventually chatgpt). The web server works fine.

Here is my doinker:

const express = require('express')
const app = express()


const { Configuration, OpenAIApi } = require("openai");

const configuration = new Configuration({
  apiKey: "my key is here"
});
const openai = new OpenAIApi(configuration);

const completion = await openai.createCompletion({
  model: "text-davinci-002",
  prompt: "Hello world",
});
console.log(completion.data.choices[0].text);



app.get('/', function (req, res) {
  res.send('Hello World')
})

app.listen(3000)

Error:

SyntaxError: await is only valid in async functions and the top level bodies of modules
    at Object.compileFunction (node:vm:360:18)
    at wrapSafe (node:internal/modules/cjs/loader:1088:15)
    at Module._compile (node:internal/modules/cjs/loader:1123:27)
    at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
    at Module.load (node:internal/modules/cjs/loader:1037:32)
    at Module._load (node:internal/modules/cjs/loader:878:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:23:47

The original OpenAI example code is the same. Why the hell is this the example code?

const { Configuration, OpenAIApi } = require("openai");

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

const completion = await openai.createCompletion({
  model: "text-davinci-002",
  prompt: "Hello world",
});
console.log(completion.data.choices[0].text);

Solution

  • As already mentioned, you need to wrap your async code in a function:

    const express = require('express')
    const app = express()
    const { Configuration, OpenAIApi } = require("openai");
    
    const configuration = new Configuration({
      apiKey: "my key is here"
    });
    
    const openai = new OpenAIApi(configuration);
    
    const completionFunction = async () => {
      const completion = await openai.createCompletion({
        model: "text-davinci-002",
        prompt: "Hello world",
      });
      
      console.log(completion.data.choices[0].text);
    };
    
    completionFunction();
    
    app.get('/', function (req, res) {
      res.send('Hello World')
    })
    
    app.listen(3000)
    

    Also, make sure you have a package.json file with the appropriate dependencies:

    {
      "name": "sample",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "^4.18.2",
        "openai": "^3.1.0"
      }
    }