File size: 4,805 Bytes
37185e0
 
 
 
 
052a8fc
37185e0
 
 
 
 
 
2bd7b24
37185e0
052a8fc
 
 
 
 
37185e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2bd7b24
 
 
052a8fc
 
 
 
 
 
 
 
 
 
2bd7b24
052a8fc
 
 
 
 
2bd7b24
052a8fc
2bd7b24
 
 
 
12d8a5c
052a8fc
2bd7b24
12d8a5c
 
 
 
2bd7b24
 
 
 
 
 
052a8fc
2bd7b24
 
 
 
12d8a5c
 
 
 
2bd7b24
 
 
 
 
 
052a8fc
2bd7b24
 
 
 
 
 
 
 
 
 
 
 
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import gradio as gr
import requests
import language_tool_python
from bs4 import BeautifulSoup
import os
from datetime import datetime  # Import datetime for date validation

# Load Groq Cloud API key from Hugging Face secrets
groq_api_key = os.getenv("GROQ_CLOUD_API_KEY")

# Scraping function to fetch user public data (for demo purposes, we will simulate this)
def fetch_public_data(name, dob, city):
    # Simulate fetched bio data for demonstration purposes
    bio = f"{name} is a software engineer from {city} with over 10 years of experience. Known for work in AI, cloud computing, and leadership in various engineering teams."
    
    # Simulate LinkedIn profile scraping (replace this with actual scraping logic)
    linkedin_profile = f"https://linkedin.com/in/{name.replace(' ', '').lower()}"
    
    return bio, linkedin_profile

# Helper function to call Groq Cloud LLM API to generate email
def generate_email_from_groq(bio, company_name, role):
    url = "https://api.groq.cloud/generate"  # Adjust based on Groq's API documentation
    headers = {
        "Authorization": f"Bearer {groq_api_key}",
        "Content-Type": "application/json",
    }
    prompt = f"Write a professional email applying for a {role} position at {company_name}. Use this bio: {bio}. The email should include an introduction, relevant experience, skills, and a closing."
    data = {
        "model": "groq-model",  # Adjust the model name based on Groq documentation
        "prompt": prompt,
        "max_tokens": 300
    }
    
    response = requests.post(url, headers=headers, json=data)
    
    if response.status_code == 200:
        return response.json().get("choices")[0].get("text").strip()
    else:
        return "Error generating email. Please check your API key or try again later."

# Grammar and Tone Checker Function
def check_grammar(email_text):
    tool = language_tool_python.LanguageTool('en-US')
    matches = tool.check(email_text)
    corrected_text = language_tool_python.utils.correct(email_text, matches)
    return corrected_text

# Function to validate the DOB format (DD-MM-YYYY)
def validate_dob(dob):
    try:
        # Attempt to parse the DOB to the expected format
        datetime.strptime(dob, "%d-%m-%Y")
        return True
    except ValueError:
        # Return False if the format is invalid
        return False

# Main function to create the email and allow for saving, editing, or copying
def create_email(name, dob, city, company_name, role, email, phone):
    # Validate the DOB format (DD-MM-YYYY)
    if not validate_dob(dob):
        return "Invalid Date of Birth format. Please use DD-MM-YYYY."

    # Step 1: Fetch public data based on user info
    bio, linkedin_profile = fetch_public_data(name, dob, city)
    
    # Step 2: Generate the email using Groq Cloud LLM
    generated_email = generate_email_from_groq(bio, company_name, role)
    
    # Step 3: Add the user's email, phone number, and LinkedIn profile to the signature
    signature = f"\n\nBest regards,\n{name}\nEmail: {email}\nPhone: {phone}\nLinkedIn: {linkedin_profile}"

    # Step 4: Run grammar and tone check
    polished_email = check_grammar(generated_email + signature)

    # Return the final polished email with the signature
    return polished_email

# Define interface with Gradio
def gradio_ui():
    # Define inputs
    name_input = gr.Textbox(label="Name", placeholder="Enter your name")
    dob_input = gr.Textbox(label="Date of Birth", placeholder="Enter your date of birth (DD-MM-YYYY)")
    city_input = gr.Textbox(label="City", placeholder="Enter your city of residence")
    
    company_name_input = gr.Textbox(label="Company Name", placeholder="Enter the name of the company you are applying to")
    role_input = gr.Textbox(label="Role", placeholder="Enter the role you are applying for")
    
    email_input = gr.Textbox(label="Email Address", placeholder="Enter your email address")
    phone_input = gr.Textbox(label="Phone Number", placeholder="Enter your phone number")
    
    # Define output for the generated email
    email_output = gr.Textbox(label="Generated Email", placeholder="Your generated email will appear here", lines=10)
    
    # Create the Gradio interface
    demo = gr.Interface(
        fn=create_email,  # Function to call when the user submits
        inputs=[name_input, dob_input, city_input, company_name_input, role_input, email_input, phone_input],
        outputs=[email_output],
        title="Email Writing AI Agent",
        description="Generate a professional email for a job application by providing your basic info.",
        allow_flagging="never"  # Disable flagging
    )
    
    # Launch the Gradio app
    demo.launch()

# Start the Gradio app when running the script
if __name__ == "__main__":
    gradio_ui()