I work with the OpenAI API. I have extracted slides text from a PowerPoint presentation, and written a prompt for each slide. Now, I want to make asynchronous API calls, so that all the slides are processed at the same time.
this is the code from the async main function:
for prompt in prompted_slides_text:
task = asyncio.create_task(api_manager.generate_answer(prompt))
tasks.append(task)
results = await asyncio.gather(*tasks)
and this is generate_answer function:
@staticmethod
async def generate_answer(prompt):
"""
Send a prompt to OpenAI API and get the answer.
:param prompt: the prompt to send.
:return: the answer.
"""
completion = await openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return completion.choices[0].message.content
the problem is:
object OpenAIObject can't be used in 'await' expression
and I don't know how to await for the response in generate_answer function
Would appreciate any help!
For those landing here, the error here was probably the instantiation of the object. It has to be:
client = AsyncOpenAI(api_key=api_key)
Then you can use:
response = await client.chat.completions.create(
model="gpt-4",
messages=custom_prompt,
temperature=0.9
)
Note: With version v1 the api has changed and this answer is not valid anymore, see Graciela's answer for the new API.
You have to use openai.ChatCompletion.acreate to use the api asynchronously.
It's documented on their Github - https://github.com/openai/openai-python#async-usage
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With