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()