File size: 3,917 Bytes
19470e5
ce2cbec
 
 
4e9d3eb
957cfbf
 
c378d70
 
 
ce2cbec
 
 
 
f0ec0e9
 
 
 
 
ce2cbec
 
 
 
4e9d3eb
 
 
f0ec0e9
 
 
 
4e9d3eb
ce2cbec
f0ec0e9
 
 
4e9d3eb
 
 
 
ce2cbec
 
 
 
 
 
4e9d3eb
ce2cbec
 
4e9d3eb
ce2cbec
 
 
 
 
 
 
 
 
 
 
 
 
4e9d3eb
ce2cbec
 
 
4e9d3eb
f0ec0e9
4e9d3eb
 
f0ec0e9
4e9d3eb
f0ec0e9
 
4e9d3eb
3a274cd
f0ec0e9
 
3a274cd
f0ec0e9
 
ce2cbec
 
 
 
 
 
 
 
 
 
f0ec0e9
 
ce2cbec
 
 
 
4e9d3eb
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import os
import gradio as gr
from huggingface_hub import InferenceClient

# Initialize the Hugging Face Inference client
HF_API_KEY = os.environ.get("HF_API_KEY")
HF_MODEL_NAME = os.environ.get("HF_MODEL_NAME")

client = InferenceClient(model=HF_MODEL_NAME, token=HF_API_KEY)

def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    segment_profile,
    value_proposition,
    promotion,
    subject,
    ask_for_subject_suggestions,
    max_tokens,
    temperature,
    top_p,
):
    # Construct the system message with additional inputs
    enhanced_system_message = (
        f"{system_message}\n\n"
        f"Segment Profile: {segment_profile}\n"
        f"Value Proposition: {value_proposition}\n"
        f"Goal and Promotion: {promotion}\n"
        f"Subject Line: {subject}\n"
    )

    # If the user wants Subject Line suggestions, modify the prompt
    if ask_for_subject_suggestions:
        enhanced_system_message += "The user is also asking for subject line suggestion to catch their customer's attention and improve Email Open Rate."

    messages = [{"role": "system", "content": enhanced_system_message}]

    # Add conversation history
    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    # Add the current user message
    messages.append({"role": "user", "content": message})

    # Generate the response
    response = ""
    for message in client.chat_completion(
        messages,
        max_tokens=max_tokens,
        stream=True,
        temperature=temperature,
        top_p=top_p,
    ):
        token = message.choices[0].delta.content
        response += token
        yield response


# Define the Gradio interface
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(
            value="You are a friendly Chatbot, a digital marketing expert and a talented copywriter. You are trying to help a user write a creative email that can achieve campaign goals, a high Open Rate, CTR and conversion rate - based on user input.",
            label="Instructions to Bot",
        ),
        gr.Textbox(label="Your Target Customer Segment Profile", placeholder="Describe the profile of your target customer segment (e.g., age, gender, interests, profession)"),
        gr.Textbox(
            label="Your Value Proposition",
            placeholder="Describe how your solution to customer problems offers them unique value",
        ),
        gr.Textbox(
            label="Campaign Goal, Special Event, Promotion and Call to Action",
            placeholder="Describe your campaign goal, a special event, promotion and Call to Action that you hope your target segment will act upon",
        ),
        gr.Textbox(label="Subject Line", placeholder="Enter the Subject Line of the Email or ask for suggestions"),
        gr.Checkbox(label="Ask for Subject Line Suggestions", value=False),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
        gr.Slider(
            minimum=0.1,
            maximum=1.0,
            value=0.95,
            step=0.05,
            label="Top-p (nucleus sampling)",
        ),
    ],
    title="Email Copywriter",
    description="This app creates a customized email that resonates with your customers to improve CTR and conversion. Based on your input. Powered by Hugging Face Inference, Design Thinking, and domain expertise. Expand Additional Inputs by clicking on the arrow, input more details about your customers, then a message describing what you need the assistant to do for you. Developed by wn. Disclaimer: AI makes mistakes. Use with caution and at your own risk!",
)


if __name__ == "__main__":
    demo.launch()