Spaces:
Runtime error
Runtime error
import gradio as gr | |
import requests | |
from gramformer import Gramformer | |
import os | |
from datetime import datetime # Import datetime for date validation | |
# Initialize Gramformer (set corrector mode to True) | |
gf = Gramformer(models=1, use_gpu=False) # We set 'use_gpu=False' for Hugging Face Spaces | |
# 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 Gramformer | |
def check_grammar(email_text): | |
corrected_sentences = list(gf.correct(email_text)) | |
# Return the first corrected sentence (gramformer may return multiple suggestions) | |
return corrected_sentences[0] if corrected_sentences else email_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 Gramformer | |
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() | |