shopify_app / app_v2.py
sfarrukh's picture
description generator
5e15116
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from huggingface_hub import InferenceClient
import os
from dotenv import load_dotenv
load_dotenv()
hf_token = os.getenv("huggingface_api_token")
app = FastAPI()
client = InferenceClient(model="meta-llama/Llama-3.1-70B-Instruct", api_key=hf_token)
# Define request and response models for validation
class ProductDetails(BaseModel):
brand_name:str
product_name:str
product_category:str
product_features:str
tone: str='Professional'
max_tokens: int = 500
class GeneratedDescription(BaseModel):
description: str
def system_prompt_content(product_name, product_category, product_features, tone, brand_name):
prompt = f"""
You are an expert e-commerce product description writer. Generate a {tone} product description using the following structured template:
1. **Introduction**: Briefly describe the {product_name}, highlighting its main purpose and key selling points. The brand name is {brand_name}
2. **Key Features**: Provide a list of key features for the {product_name}. Explain each feature clearly, emphasizing how it benefits the user. The features are: {product_features}.
3. **Benefits**: Expand on why these features matter. Describe how they solve problems or enhance the customer experience. Focus on customer value.
4. **Call to Action**: End the description with a strong call to action, encouraging the customer to make a purchase or learn more.
Tailor the description based on the category of the product: {product_category}.
Keep the tone {tone} as specified. Ensure the description is engaging, informative, and follows a clear structure.
NOTE: Do not say anything other than description
"""
return prompt
# FastAPI endtpoint to generate product description
@app.post("/generate-description")
async def generate_description(details: ProductDetails):
try:
complete_prompt = system_prompt_content(
details.brand_name,
details.product_category,
details.product_features,
details.tone,
details.brand_name
)
response=client.text_generation(complete_prompt, max_new_tokens=details.max_tokens)
if response and isinstance(response,str):
return {"description": response}
else:
raise HTTPException(status_code=500, detail="invalid response")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))