File size: 5,136 Bytes
37185e0
 
 
052a8fc
37185e0
c0d54a6
37185e0
 
 
 
2bd7b24
37185e0
052a8fc
31f8b4d
 
052a8fc
 
37185e0
87ccea1
 
3be9484
37185e0
c0d54a6
37185e0
 
3be9484
87ccea1
 
 
 
 
 
c0d54a6
3be9484
37185e0
3be9484
 
 
 
 
 
 
37185e0
 
 
 
 
3be9484
 
37185e0
c0d54a6
 
37185e0
 
052a8fc
 
 
 
 
 
 
 
 
 
2bd7b24
31f8b4d
052a8fc
 
 
 
31f8b4d
 
2bd7b24
 
87ccea1
2bd7b24
12d8a5c
052a8fc
2bd7b24
12d8a5c
87ccea1
2bd7b24
 
 
 
 
052a8fc
2bd7b24
 
 
 
12d8a5c
 
 
31f8b4d
12d8a5c
2bd7b24
 
 
 
 
 
31f8b4d
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
113
114
115
116
import gradio as gr
import requests
import os
from datetime import datetime  # Import datetime for date validation

# Load Groq Cloud API key securely from environment variables
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."
    
    # Since we're asking the user to input their LinkedIn URL, we'll no longer scrape LinkedIn.
    linkedin_profile = None
    
    return bio, linkedin_profile

# Helper function to call Groq Cloud LLM API to generate and correct the email
def generate_and_correct_email(bio, company_name, role):
    url = "https://api.groq.com/openai/v1/chat/completions"  # Updated API URL for Groq Cloud
    headers = {
        "Authorization": f"Bearer {groq_api_key}",  # Use the API key securely from environment
        "Content-Type": "application/json",
    }
    
    # Updated prompt to ask the model to generate AND correct the email
    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.
    Ensure that the email is grammatically correct and formal.
    """
    
    # Construct the data payload for the API request
    data = {
        "messages": [
            {
                "role": "user",
                "content": prompt
            }
        ],
        "model": "llama3-8b-8192"  # Use the appropriate model from Groq Cloud
    }
    
    response = requests.post(url, headers=headers, json=data)
    
    if response.status_code == 200:
        # Extract the generated email content from the API response
        return response.json()["choices"][0]["message"]["content"].strip()
    else:
        # Print or log the error for debugging
        print(f"Error: {response.status_code}, {response.text}")
        return "Error generating email. Please check your API key or try again later."

# 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, linkedin_profile):
    # 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 (no need to scrape LinkedIn anymore)
    bio, _ = fetch_public_data(name, dob, city)  # We'll use the provided LinkedIn URL
    
    # Step 2: Generate the email using Groq Cloud LLM
    generated_email = generate_and_correct_email(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}"

    # Return the final polished email with the signature
    return generated_email + signature

# 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")
    linkedin_input = gr.Textbox(label="LinkedIn URL", placeholder="Enter your LinkedIn profile URL")  # New input field for LinkedIn URL
    
    # 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, linkedin_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()