Spaces:
Sleeping
Sleeping
File size: 7,836 Bytes
5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 46e62a6 d247f78 46e62a6 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 5d62c16 d247f78 d7ebe92 d247f78 5d62c16 d247f78 5d62c16 |
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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
import gradio as gr
import cohere
import os
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
import pypandoc
from datetime import datetime
# Get the API key from environment variables
cohere_api_key = os.getenv('COHERE_API_KEY')
if not cohere_api_key:
raise ValueError("Please set the COHERE_API_KEY environment variable")
# Initialize Cohere client with your API key
co = cohere.Client(cohere_api_key)
def generate_body(job_description, language):
model = 'command-xlarge-nightly'
prompt = f"Write a professional job application letter in {language} without a greeting. Only generate the body text based on this job description:\n{job_description}"
response = co.generate(
model=model,
prompt=prompt,
max_tokens=250,
temperature=0.7,
)
return response.generations[0].text.strip()
def create_application_letter(name, sender_street, sender_zip, sender_city, email, phone, job_position, employer_name, employer_street, employer_zip, employer_city, greeting_option, employer_contact_name, job_id, start_date, job_description, language, output_format):
body = generate_body(job_description, language)
doc = Document()
header = doc.sections[0].header
header_paragraph = header.paragraphs[0]
header_paragraph.text = f"{name} | {sender_street}, {sender_zip} {sender_city} | {email} | {phone}"
header_paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
for run in header_paragraph.runs:
run.font.size = Pt(10)
doc.add_paragraph(f"{employer_name}\n{employer_contact_name if greeting_option == 'Known' else ''}\n{employer_street}\n{employer_zip} {employer_city}")
current_date = datetime.now().strftime('%d.%m.%Y')
paragraph = doc.add_paragraph()
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
run = paragraph.add_run(f"{employer_city}, {current_date}")
run.font.size = Pt(11)
doc.add_paragraph(f"Bewerbung als {job_position}\nKennnummer {job_id}\n", style='Heading 2')
if language == "German":
if greeting_option == "Known" and employer_contact_name:
doc.add_paragraph(f"Sehr geehrter Herr {employer_contact_name},\n")
else:
doc.add_paragraph("Sehr geehrte Damen und Herren,\n")
else:
if greeting_option == "Known" and employer_contact_name:
doc.add_paragraph(f"Dear {employer_contact_name},\n")
else:
doc.add_paragraph("Dear Sir/Madam,\n")
doc.add_paragraph(body)
closing_text = (
f"\nIch unterstütze Ihr Team gerne ab dem {start_date} und freue mich über die Einladung zu einem persönlichen Vorstellungsgespräch."
if language == "German" else
f"\nI am eager to join your team starting on {start_date} and look forward to the opportunity to discuss my application further."
)
doc.add_paragraph(closing_text)
doc.add_paragraph("\nMit freundlichen Grüßen,\n\n" if language == "German" else "\nSincerely,\n\n")
doc.add_paragraph(f"{name}\n")
for paragraph in doc.paragraphs:
for run in paragraph.runs:
run.font.size = Pt(11)
output_filename_docx = f'{name}_application_letter.docx'
doc.save(output_filename_docx)
if output_format == "PDF":
output_filename_pdf = f'{name}_application_letter.pdf'
pypandoc.convert_file(output_filename_docx, 'pdf', outputfile=output_filename_pdf)
os.remove(output_filename_docx)
return output_filename_pdf
else:
return output_filename_docx
def generate_and_download(name, sender_street, sender_zip, sender_city, email, phone, job_position, employer_name, employer_street, employer_zip, employer_city, greeting_option, employer_contact_name, job_id, start_date, job_description, language, output_format):
output_filename = create_application_letter(name, sender_street, sender_zip, sender_city, email, phone, job_position, employer_name, employer_street, employer_zip, employer_city, greeting_option, employer_contact_name, job_id, start_date, job_description, language, output_format)
return output_filename
description = """
# Professional Job Application Letter Generator
Welcome to the ultimate tool for crafting professional job application letters with ease. This tool leverages the power of **Cohere**, a state-of-the-art language model, to automatically generate a tailored application letter body based on the job description you provide.
Simply fill in the required details, and within seconds, you'll have a beautifully formatted job application letter ready to download in either DOCX or PDF format.
Start your journey to your next career opportunity with a compelling application letter generated just for you!
"""
with gr.Blocks() as demo:
gr.Markdown(description)
name = gr.Textbox(label="Name", placeholder="Enter your full name", value="Maximilian Müller")
sender_street = gr.Textbox(label="Sender Street", placeholder="Enter your street address", value="Beispielstraße 42")
sender_zip = gr.Textbox(label="Sender Postal Code", placeholder="Enter your postal code", value="10115")
sender_city = gr.Textbox(label="Sender City", placeholder="Enter your city", value="Berlin")
email = gr.Textbox(label="Email", placeholder="Enter your email", value="max.mueller@example.com")
phone = gr.Textbox(label="Phone", placeholder="Enter your phone number", value="+49 170 1234567")
job_position = gr.Textbox(label="Job Position", placeholder="Enter the job position", value="Softwareentwickler")
employer_name = gr.Textbox(label="Employer Name", placeholder="Enter the employer's name", value="Tech Innovations GmbH")
employer_street = gr.Textbox(label="Employer Street", placeholder="Enter the employer's street address", value="Innovationsstraße 1")
employer_zip = gr.Textbox(label="Employer Postal Code", placeholder="Enter the employer's postal code", value="10115")
employer_city = gr.Textbox(label="Employer City", placeholder="Enter the employer's city", value="Berlin")
greeting_option = gr.Dropdown(choices=["Known", "Unknown"], label="Is the recipient's name known?", value="Known")
employer_contact_name = gr.Textbox(label="Employer Contact Name", placeholder="Enter the contact person's name (if known)", value="Herr Dr. Felix Schmidt", visible=True)
job_id = gr.Textbox(label="Job ID", placeholder="Enter the job ID", value="DEV-2024-01")
start_date = gr.Textbox(label="Start Date", placeholder="Enter the start date (e.g., 15.05.2020)", value="01.09.2024")
job_description = gr.Textbox(label="Job Description", placeholder="Paste the job description here", lines=7, value="We are seeking a dedicated Software Developer to join our team in creating innovative applications. Experience in Python and Java, as well as knowledge of agile methodologies, is required.")
language = gr.Dropdown(choices=["English", "German"], label="Select Language", value="German")
output_format = gr.Dropdown(choices=["DOCX", "PDF"], label="Select Output Format", value="PDF")
def update_visibility(greeting_option):
return gr.update(visible=(greeting_option == "Known"))
greeting_option.change(update_visibility, inputs=greeting_option, outputs=employer_contact_name)
generate_button = gr.Button("Generate Application Letter")
output = gr.File(label="Download your application letter")
generate_button.click(generate_and_download,
inputs=[name, sender_street, sender_zip, sender_city, email, phone, job_position, employer_name, employer_street, employer_zip, employer_city, greeting_option, employer_contact_name, job_id, start_date, job_description, language, output_format],
outputs=output)
demo.launch(debug=True)
|