116 lines
4.3 KiB
Python
116 lines
4.3 KiB
Python
import streamlit as st
|
|
import json
|
|
|
|
from ..gpt_providers.text_generation.main_text_generation import llm_text_gen
|
|
|
|
|
|
def generate_product_description(title, details, audience, tone, length, keywords):
|
|
"""
|
|
Generates a product description using OpenAI's API.
|
|
|
|
Args:
|
|
title (str): The title of the product.
|
|
details (list): A list of product details (features, benefits, etc.).
|
|
audience (list): A list of target audience segments.
|
|
tone (str): The desired tone of the description (e.g., "Formal", "Informal").
|
|
length (str): The desired length of the description (e.g., "short", "medium", "long").
|
|
keywords (str): Keywords related to the product (comma-separated).
|
|
|
|
Returns:
|
|
str: The generated product description.
|
|
"""
|
|
prompt = f"""
|
|
Write a compelling product description for {title}.
|
|
|
|
Highlight these key features: {', '.join(details)}
|
|
|
|
Emphasize the benefits of these features for the target audience ({audience}).
|
|
Maintain a {tone} tone and aim for a length of approximately {length} words.
|
|
|
|
Use these keywords naturally throughout the description: {', '.join(keywords)}.
|
|
|
|
Remember to be persuasive and focus on the value proposition.
|
|
"""
|
|
|
|
try:
|
|
response = llm_text_gen(prompt)
|
|
return response
|
|
except Exception as err:
|
|
logger.error(f"Exit: Failed to get response from LLM: {err}")
|
|
exit(1)
|
|
|
|
|
|
def display_inputs():
|
|
st.title("📝 AI Product Description Writer 🚀")
|
|
st.markdown("**Generate compelling and accurate product descriptions with AI.**")
|
|
|
|
col1, col2 = st.columns(2)
|
|
|
|
with col1:
|
|
product_title = st.text_input("🏷️ **Product Title**", placeholder="Enter the product title (e.g., Wireless Bluetooth Headphones)")
|
|
with col2:
|
|
product_details = st.text_area("📄 **Product Details**", placeholder="Enter features, benefits, specifications, materials, etc. (e.g., Noise Cancellation, Long Battery Life, Water Resistant, Comfortable Design)")
|
|
|
|
col3, col4 = st.columns(2)
|
|
|
|
with col3:
|
|
keywords = st.text_input("🔑 **Keywords**", placeholder="Enter keywords, comma-separated (e.g., wireless headphones, noise cancelling, Bluetooth 5.0)")
|
|
with col4:
|
|
target_audience = st.multiselect(
|
|
"🎯 **Target Audience**",
|
|
["Teens", "Adults", "Seniors", "Music Lovers", "Fitness Enthusiasts", "Tech Savvy", "Busy Professionals", "Travelers", "Casual Users"],
|
|
placeholder="Select target audience (optional)"
|
|
)
|
|
|
|
col5, col6 = st.columns(2)
|
|
|
|
with col5:
|
|
description_length = st.selectbox(
|
|
"📏 **Desired Description Length**",
|
|
["Short (1-2 sentences)", "Medium (3-5 sentences)", "Long (6+ sentences)"],
|
|
help="Select the desired length of the product description"
|
|
)
|
|
with col6:
|
|
brand_tone = st.selectbox(
|
|
"🎨 **Brand Tone**",
|
|
["Formal", "Informal", "Fun & Energetic"],
|
|
help="Select the desired tone for the description"
|
|
)
|
|
|
|
return product_title, product_details, target_audience, brand_tone, description_length, keywords
|
|
|
|
|
|
def display_output(description):
|
|
if description:
|
|
st.subheader("✨ Generated Product Description:")
|
|
st.write(description)
|
|
|
|
json_ld = {
|
|
"@context": "https://schema.org",
|
|
"@type": "Product",
|
|
"name": product_title,
|
|
"description": description,
|
|
"audience": target_audience,
|
|
"brand": {
|
|
"@type": "Brand",
|
|
"name": "Your Brand Name"
|
|
},
|
|
"keywords": keywords.split(", ")
|
|
}
|
|
|
|
|
|
def write_ai_prod_desc():
|
|
product_title, product_details, target_audience, brand_tone, description_length, keywords = display_inputs()
|
|
|
|
if st.button("Generate Product Description 🚀"):
|
|
with st.spinner("Generating description..."):
|
|
description = generate_product_description(
|
|
product_title,
|
|
product_details.split(", "), # Split details into a list
|
|
target_audience,
|
|
brand_tone,
|
|
description_length.split(" ")[0].lower(), # Extract length from selectbox
|
|
keywords
|
|
)
|
|
display_output(description)
|