CopyHelper / app.py
peterhartwigCF's picture
Update app.py
8616cb6 verified
import os
import gradio as gr
import openai
# Set your OpenAI API key (ensure this is set in your environment variables)
openai.api_key = os.environ["OPENAI_API_KEY"]
def generate_template(ref1, ref2, ref3, ref4, ref5):
# Collect non-empty reference copies
references = [ref.strip() for ref in [ref1, ref2, ref3, ref4, ref5] if ref.strip()]
if not references:
return "Please provide at least one piece of reference copy."
combined_references = "\n\n".join(references)
# Build a detailed prompt with properly escaped curly braces for literal output.
prompt = f"""
I need you to help me create a template that will allow us to generate the same style of e-commerce copy as the reference(s) included below.
Step 1:
Analyse what parts the references are created from. Are there specific bullet point? Are features mentioned in a specific order? What kinds of text and features are mentioned?
Step 2:
For each of those parts, break down the tone of voice, the cadence and rythm, and the perspective of the writing.
For each part, also see if there is a common length and strucutre.
Step 3:
Describe each of the parts, so a skilled copywriter could take those and use them as instructions to write about another product
Step 4:
For each part, turn it into our templating language. These are the specifications:
- If something needs to be generated, it should be inside a Generator block. These are defined by being enclosed in double curly braces.
- inside the double curly braces, we have a reference name for the block, followed by a pipe, and then a short description of the tone, then the structure, and then instructions. Like this:
- {{{{ product_feature | upbeat, 3rd person, rythmic. paragraph, 40-60 words. make sure to mention the brand name }}}}
- If we need a control structure (loop, conditional) we wrap these in single curly braces with percentage signs. These should not be written out, but if there is a generator inside, that will be used. some examples:
{{% if the product has a pattern %}}
{{{{ pattern_desciption | direct, monotone. 2 short sentences. Describe the pattern}}}}
{{% end if %}}
{{% for top 5 features of the product %}}
{{{{ feature_bullet | aspirational, humorous. A title for the feature, followed by a single sentence about the feature}}}}
{{% end %}}
Step 5:
Return only the template... no explations or anything...
**Reference Copy:**
{combined_references}
Generate the final structured template that adheres to these guidelines.
"""
# Call the OpenAI API using the new ChatCompletion interface
response = openai.ChatCompletion.create(
model="o3-mini", # or your preferred model
messages=[
{"role": "system", "content": "You are a helpful assistant that generates structured e-commerce copywriting templates."},
{"role": "user", "content": prompt}
],
max_completion_tokens=4096
)
template_output = response["choices"][0]["message"]["content"].strip()
return template_output
iface = gr.Interface(
fn=generate_template,
inputs=[
gr.Textbox(label="Reference Copy 1", lines=3, placeholder="Paste your reference copy here"),
gr.Textbox(label="Reference Copy 2 (optional)", lines=3, placeholder="Paste your reference copy here"),
gr.Textbox(label="Reference Copy 3 (optional)", lines=3, placeholder="Paste your reference copy here"),
gr.Textbox(label="Reference Copy 4 (optional)", lines=3, placeholder="Paste your reference copy here"),
gr.Textbox(label="Reference Copy 5 (optional)", lines=3, placeholder="Paste your reference copy here")
],
outputs=gr.Textbox(label="Structured Template"),
title="E-commerce Template Generator using OpenAI API",
description="Provide up to five pieces of reference copy. The app calls the OpenAI API to analyze your inputs and generate a structured template based on the e-commerce copywriting guide."
)
iface.launch()