GenAI-Toolkit / src /features /email_writer.py
shashankheg's picture
Initial GenAI Toolkit deployment
98346d0
Raw
History Blame Contribute Delete
2.93 kB
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from src.utils.llm import get_llm
EMAIL_PROMPT = PromptTemplate(
input_variables=["email_type", "context", "tone", "recipient", "sender"],
template="""You are an expert professional email writer.
Write a {email_type} email with the following details:
- Recipient: {recipient}
- Sender: {sender}
- Tone: {tone}
- Context/Purpose: {context}
Requirements:
- Write a clear subject line
- Keep it professional and concise
- Match the requested tone exactly
- Include proper greeting and sign-off
Email:"""
)
COVER_LETTER_PROMPT = PromptTemplate(
input_variables=["job_title", "company", "skills", "experience", "name"],
template="""You are an expert cover letter writer.
Write a compelling cover letter for the following:
- Applicant Name: {name}
- Job Title: {job_title}
- Company: {company}
- Key Skills: {skills}
- Experience Summary: {experience}
Requirements:
- Start with a strong opening paragraph
- Highlight relevant skills and experience
- Show enthusiasm for the role and company
- End with a clear call to action
- Keep it to 3-4 paragraphs
Cover Letter:"""
)
def write_email(
email_type: str,
context: str,
tone: str = "professional",
recipient: str = "Team",
sender: str = "Your Name"
) -> str:
"""
Generates a professional email.
Args:
email_type: Type of email (e.g. follow-up, apology, introduction)
context: Purpose or context of the email
tone: Tone of the email (professional, friendly, formal)
recipient: Name of the recipient
sender: Name of the sender
Returns:
Generated email string
"""
if not context.strip():
return "⚠️ Please provide context for the email."
llm = get_llm()
chain = EMAIL_PROMPT | llm | StrOutputParser()
return chain.invoke({
"email_type": email_type,
"context": context,
"tone": tone,
"recipient": recipient,
"sender": sender
})
def write_cover_letter(
job_title: str,
company: str,
skills: str,
experience: str,
name: str = "Your Name"
) -> str:
"""
Generates a cover letter.
Args:
job_title: Job title applying for
company: Company name
skills: Key skills relevant to the role
experience: Brief experience summary
name: Applicant name
Returns:
Generated cover letter string
"""
if not job_title.strip() or not company.strip():
return "⚠️ Please provide job title and company name."
llm = get_llm()
chain = COVER_LETTER_PROMPT | llm | StrOutputParser()
return chain.invoke({
"job_title": job_title,
"company": company,
"skills": skills,
"experience": experience,
"name": name
})