from langchain.prompts import PromptTemplate from langchain.chains import LLMChain from langchain.llms import OpenAI from load_model import call_palm from calling_apis import google_api_key, openai_api_key class email_writing: """ A class for generating emails and email marketing campaigns using a language model. """ def email_gen(self, recipient:str, recipient_position:str, sender_name:str, position_sender:str, desc:str, language='En', model_name='Google Palm 2', creativity='Original') -> str: """ Generates an email based on provided details. Args: recipient (str): Name of the email recipient. recipient_position (str): Position of the email recipient. sender_name (str): Name of the email sender. position_sender (str): Position of the email sender. desc (str): Description or context for the email. language (str): the language of the generated content (optional, default value is 'EN'). creativity (str): Optional Parameter -> Controling the randomness of the model. Default value is Original model_name (str): Optional Parameter -> select the LLM model. Default Value is Google Palm 2 Returns: email (str): Generated email content. """ temp = 0 if creativity == 'Original': temp = 0 elif creativity == 'Balanced': temp = 0.25 elif creativity == 'Creative': temp = 0.5 elif creativity == 'Spirited': temp = 0.75 elif creativity == 'Visionary': temp = 1 if model_name == 'Google Palm 2': llm = call_palm(google_api_key, temperature=temp) elif model_name == 'GPT-3.5': llm = OpenAI(model_name='gpt-3.5-turbo', openai_api_key=openai_api_key, temperature=temp) elif model_name == 'GPT-4': llm = OpenAI(model_name='gpt-4', openai_api_key=openai_api_key, temperature=temp) if language == 'En': email_prompt = f"Write a professional and well organized Email on {desc}.\nThe name of the Recipient is {recipient} and the recipient position is {recipient_position}.\nMy Name is {sender_name} and my Position is {position_sender}." email_promptTemp = PromptTemplate( input_variables=["text_input"], template="You are a professional email writer:\n{text_input}\nEmail:") elif language == 'Ar': email_prompt = f"اكتب بريدًا إلكترونيًا احترافيًا ومنظمًا حول {desc}.\nاسم المستلم هو {recipient} وموقع المستلم هو {recipient_position}.\nاسمي هو {sender_name} وموقعي هو {position_sender}." email_promptTemp = PromptTemplate( input_variables=["text_input"], template="أنت كاتب بريد إلكتروني محترف:\n{text_input}\nالبريد الإلكتروني:") email_extraction_chain = LLMChain(llm=llm, prompt=email_promptTemp) email = email_extraction_chain.run(email_prompt) return email def email_subject_gen(self, email:str, language='En', model_name='Google Palm 2', creativity='Original')->str: """ Generates a subject for a given email. Args: email (str): Email content for which the subject needs to be generated. language (str): the language of the generated content (optional, default value is 'EN'). creativity (str): Optional Parameter -> Controling the randomness of the model. Default value is Original model_name (str): Optional Parameter -> select the LLM model. Default Value is Google Palm 2 Returns: email_subject (str): Generated email subject. """ temp = 0 if creativity == 'Original': temp = 0 elif creativity == 'Balanced': temp = 0.25 elif creativity == 'Creative': temp = 0.5 elif creativity == 'Spirited': temp = 0.75 elif creativity == 'Visionary': temp = 1 if model_name == 'Google Palm 2': llm = call_palm(google_api_key, temperature=temp) elif model_name == 'GPT-3.5': llm = OpenAI(model_name='gpt-3.5-turbo', openai_api_key=openai_api_key, temperature=temp) elif model_name == 'GPT-4': llm = OpenAI(model_name='gpt-4', openai_api_key=openai_api_key, temperature=temp) if language == 'En': email_subject_prompt = f"Generate a subject for the following email:\n{email}\n" email_subject_promptTemp = PromptTemplate( input_variables=["text_input"], template="You are a professional email writer:\n{text_input}\nEmail Subject:") elif language == 'Ar': email_subject_prompt = f"أنشئ موضوعًا للبريد الإلكتروني التالي:\n{email}\n" email_subject_promptTemp = PromptTemplate( input_variables=["text_input"], template="أنت كاتب بريد إلكتروني محترف:\n{text_input}\nعنوان البريد الإلكتروني:") email_subject_extraction_chain = LLMChain(llm=llm, prompt=email_subject_promptTemp) email_subject = email_subject_extraction_chain.run(email_subject_prompt) return email_subject def email_marketing_campaigns_gen(self, product_name:str, product_description:str, target_audience:str, goal:str, language='En', model_name='Google Palm 2', creativity='Original')->str: """ Generates a subject for a given email. Args: product_name (str): Name of the product. product_description (str): Description of the product. target_audience (str): Targeted audience for the campaign. goal (str): Goal of the Campaign. language (str): the language of the generated content (optional, default value is 'EN'). Returns: email (str): Generated emails marketing campaigns. """ temp = 0 if creativity == 'Original': temp = 0 elif creativity == 'Balanced': temp = 0.25 elif creativity == 'Creative': temp = 0.5 elif creativity == 'Spirited': temp = 0.75 elif creativity == 'Visionary': temp = 1 if model_name == 'Google Palm 2': llm = call_palm(google_api_key, temperature=temp) elif model_name == 'GPT-3.5': llm = OpenAI(model_name='gpt-3.5-turbo', openai_api_key=openai_api_key, temperature=temp) elif model_name == 'GPT-4': llm = OpenAI(model_name='gpt-4', openai_api_key=openai_api_key, temperature=temp) if language == 'En': email_prompt = f"Generate a high-converting email marketing campaign for {product_name}. {product_name} is {product_description}. that is targeted at {target_audience} and has the goal of {goal}. The campaign should include a welcome email, a nurture sequence, and a promotional email." email_promptTemp = PromptTemplate( input_variables=["text_input"], template="You are a Professional Email Marketing Copywriter:\n{text_input}\nEmail Marketing Campaign:") elif language == 'Ar': email_prompt = f"أنشئ حملة تسويق بريد إلكتروني فعّالة لـ {product_name}. {product_name} هو {product_description}. مستهدفة لـ {target_audience} ولها هدف {goal}. يجب أن تتضمن الحملة رسالة ترحيب، سلسلة تغذية، ورسالة ترويجية." email_promptTemp = PromptTemplate( input_variables=["text_input"], template="أنت كاتب نصوص تسويق البريد الإلكتروني المحترف:\n{text_input}\nحملة تسويق البريد الإلكتروني:") email_extraction_chain = LLMChain(llm=llm, prompt=email_promptTemp) email = email_extraction_chain.run(email_prompt) return email