import gradio as gr import requests from gingerit.gingerit import GingerIt # Import GingerIt for grammar correction import os from datetime import datetime # Import datetime for date validation # Initialize GingerIt parser ginger_parser = GingerIt() # 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." # 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.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 for Groq Cloud chat completion 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." # 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." # Grammar and Tone Checker Function using GingerIt def check_grammar(email_text): corrected_text = ginger_parser.parse(email_text)["result"] 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 using GingerIt 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()