File size: 4,128 Bytes
a867756
2225e44
a867756
2225e44
8ede8d4
be2ecd1
2225e44
 
a867756
2225e44
 
 
 
 
 
880ce9e
a867756
2976eb8
 
 
 
 
 
 
 
b97c53d
 
 
 
 
 
 
 
 
a867756
b97c53d
 
 
8616cb6
 
 
 
880ce9e
a867756
 
8ede8d4
880ce9e
a867756
8ede8d4
a867756
b97c53d
a867756
 
 
 
8616cb6
2225e44
a867756
 
2225e44
 
 
 
 
 
 
 
 
 
 
 
a867756
8ede8d4
2225e44
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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()