Call openai from synchronous node.js function in AWS Lambda

I’ve been struggling with this for over a week, and I’m not sure where my problem is any more :slight_smile: Essentially i have a rules engine where each rule is likely to depend on the results of previous rules, so they must be executed synchronously, in sequence. If I want to incorporate output from chatGPT, it seems I need to make an async call from the main synchronous loop, but this doesn’t work … the code simply exits without getting the result:

  "statusCode": 200,
  "headers": {
    "Content-type": "application/json"

Function Logs
START RequestId: 4e7ae355-8ed8-43ab-b4c4-0f0ec48a8e57 Version: $LATEST
2023-04-26T00:17:45.499Z	4e7ae355-8ed8-43ab-b4c4-0f0ec48a8e57	INFO	getResponse('what did the fox say?')
2023-04-26T00:17:45.794Z	4e7ae355-8ed8-43ab-b4c4-0f0ec48a8e57	INFO	make request
2023-04-26T00:17:45.833Z	4e7ae355-8ed8-43ab-b4c4-0f0ec48a8e57	INFO	output: undefined
END RequestId: 4e7ae355-8ed8-43ab-b4c4-0f0ec48a8e57

I’ve appended a stripped down example below that doesn’t work in the same way as my main code: any help or insights much appreciated (or ideas on how to avoid the async trap),


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

exports.handler = async function(event, context, callback) {

    var output;

	try {
                // call synchronous function with the input 
		output = mycaller(event.prompt);
		console.log('output: ' + output);
	catch (e){
		output = e.message;

	let response = {
		statusCode: 200,
		headers: { "Content-type" : "application/json" },
		body: JSON.stringify(output)

	return response;

// sync function that calls an async one
function mycaller(prompt)
	myFunction(prompt).then(res =>[0].text);

// async function that waits for chatGPT response
async function myFunction(prompt)
	return await getResponse(prompt);

// async function that makes chatGPT call
async function getResponse(prompt)
        console.log("getResponse('" + prompt + "')");
	const configuration = new Configuration({
		apiKey: "my-api-key-here",
	const openai = new OpenAIApi(configuration);

	return openai.createCompletion({
			model: "text-davinci-003",
			prompt: prompt,
			temperature: 0.7,
			max_tokens: 500,
			top_p: 1,
			frequency_penalty: 0,
			presence_penalty: 0,