I'm using the ChatGPT API to generate descriptions and short descriptions of many products. I developed a tool that can generate it, but it takes around 40 seconds to generate and create it.
I would like to know if there are solutions to optimize this generation time. I tried many things, like sending two API calls in parallel or playing with the parameters of the API (for example, temperature
and so on).
Here is my code if someone has any solutions:
import openai
import random
openai.api_key = 'OPENAI-KEY'
def generateDescription(description, title):
model = "gpt-3.5-turbo"
# Generate a random word limit between 400 and 600
max_words = random.randint(400, 600)
input_text = "Reformule cette description pour qu'elle soit affichée dans un site présentant le produit" + title + \
" et qu'elle fasse entre 400 et 600 mots. Tu dois donc respecter les règles de google et du référencement naturel afin d'optimiser le référencement au maximum.Tu dois appliquer des mots clés spécifiques au produit ainsi qu'utiliser une architecture spéciale ayant 3 parties avec des balises h2: la premiere étant la présentation du produit, la deuxième étant les recommandations d'utilisations et la troisième étant les précautions lors de l'emploi du produit.Voici un exemple d'architecture d'une autre fiche produit dont tu dois t'inspirer et utiliser le même style donné dans les balises: <h2 dir=\"ltr\" style=\"text-align: center;\"><span> Les e-liquides Alfaliquid sont fabriqués en France. </span></h2> <p style=\"text-align: center;\"></p><p style=\"text-align: justify;\"><span style=\"font-family: Montserrat, sans-serif;\"> Grand acteur dans l’élaboration de e-liquide pour e-cigarette, Alfaliquid est un fabricant qui nous montre qu’il n’a pas froid aux yeux. Toujours animée de générosité et de créativité sans bornes, cette marque originaire de la France a su attirer l’attention d’un grand nombre de vapoteurs. Cette notoriété étant régulièrement mise à l’épreuve, la marque propose différentes gammes de e-liquides aux consommateurs. On retrouve notamment la gamme So Fifty qui rassemble des recettes équilibrées et savoureuses. Les e-liquides Alfaliquid sont disponibles en flacon de 10ml et 50ml. </span></p><p style=\"text-align: justify;\"><span style=\"font-family: Montserrat, sans-serif;\"><span>Les arômes utilisés sont certifiés de qualité alimentaire. Cet e-liquide ne contient ni diacétyle, ni parabène, ni ambrox.</span></span></p><p></p><h2 dir=\"ltr\" style=\"text-align: center;\"><span>Recommandation </span></h2><p style=\"text-align: center;\"></p><ul><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>Pour une efficacité optimale de vos e-liquides, veillez à les stocker dans un endroit sec à l’abri de la lumière.</span></p></li><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>Afin que la saveur ne s’altère pas, pensez à bien reboucher votre flacon après utilisation.</span></p></li></ul><p></p><h2 dir=\"ltr\" style=\"text-align: center;\"><span>Précaution d’emploi </span></h2><p style=\"text-align: center;\"></p><ul><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>Tenir hors de portée des enfants.</span></p></li><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>La nicotine liquide est toxique par contact cutané.</span></p></li><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>En cas de contact avec la peau : laver abondamment à l’eau et au savon.</span></p></li><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>En cas d’ingestion ou de malaise, contactez un centre antipoison ou un médecin et montrez l’étiquette du flacon d’e-liquide.</span></p></li><li dir=\"ltr\" aria-level=\"1\"> <p dir=\"ltr\" role=\"presentation\"><span>Produit destiné uniquement à la recharge de cigarette électronique.</span></p> </li> </ul>.Tu n'es également pas un magasin ni quelqu'un travaillant pour la marque de ce produit, donc pas de formules souhaitant la bienvenue ou formules de politesse. Tu dois rester neutre dans tes propos et uniquement présenter le produit avec ses saveurs (si c'est un liquide ou un arôme) et ses caractéristiques spécifiques. La description a reformulée est : " + description
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": input_text}
],
temperature=0.2,
n=1
)
description = response['choices'][0]['message']['content'].strip()
return description
def generateShortDescription(description, title):
model = "gpt-3.5-turbo"
# Generate a random character limit between 400 and 600
max_characters = random.randint(600, 650)
input_text = "Reformule cette description pour qu'elle soit affichée dans un site présentant le produit" + title + \
" et qu'elle fasse minimum 550 caractères et maximum 650 caractères (c'est une description courte). Tu dois donc respecter les règles de google et du référencement naturel afin d'optimiser le référencement au maximum.Tu dois appliquer des mots clés spécifiques au produit ainsi qu'utiliser une architecture spéciale.Tu n'es également pas un magasin ni quelqu'un travaillant pour la marque de ce produit, donc pas de formules souhaitant la bienvenue ou formules de politesse. Tu dois rester neutre dans tes propos et uniquement présenter le produit. La description a reformulée est : " + description
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": input_text}
],
temperature=0.2,
n=1
)
generated_text = response['choices'][0]['message']['content'].strip()
# Ensure the generated text doesn't exceed the maximum characters and ends with a complete sentence
last_sentence_end = generated_text.rfind(".", 0, max_characters)
final_description = generated_text[:last_sentence_end + 1]
return final_description
@app.route('/generationDescription', methods=['POST'])
def generate_texts():
description = request.form.get('description')
title = request.form.get('title')
shortDescription = generateShortDescription(description, title)
description = generateDescription(description, title)
response_data = {
"description": description,
"shortDescription": shortDescription
}
return jsonify(response_data)