File size: 2,898 Bytes
9f80f33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import utils

st.title("Welcome to the AI Cover Letter Generator :sparkles:")

# get resume uploaded
with st.container(border=True):
    
    uploaded_resume = st.file_uploader('Upload your resume :point_down:', 
                                       type=["pdf","docx"], 
                                       key="resume doc upload")


# get the job description either by uploading a pdf/docx file or by text
uploaded_job_description = None
filled_job_description = ""

with st.container(border=True):
    
    option = st.radio(
    "Job description format :briefcase:",
    ("pdf/docx", "Text"),)

    match option:
        case "pdf/docx":
            uploaded_job_description = st.file_uploader('Upload the description of the job you\'re wishing to apply for :point_down:', type=["pdf","docx"],key="job desc doc upload")

        case "Text":
            filled_job_description = st.text_area('Input the description of the job you\'re wishing to apply for :point_down:', max_chars=5000)


# get language and word count of the cover letter in a dedicated container
with st.container(border=True):
    
    language = st.radio(
    "Which language would you like to use? :scroll:",
    ("Français", "English"),)
    word_count = st.slider("How many long would you like your cover letter to be? (word count) :writing_hand:", 50, 500, 300)


# create a form in order to only run the code below if a submit button is pressed
with st.form("generator_form", border=False):

    resume_text = ""
    job_desc_text = ""

    # ingest uploaded documents
    if uploaded_resume is not None:
        resume_text += utils.ingest_document(uploaded_resume)

    if uploaded_job_description is not None:
        job_desc_text += utils.ingest_document(uploaded_job_description)
    
    elif len(filled_job_description) != 0:
        job_desc_text += filled_job_description

    # if the submit button is pressed execute code inside the if statement
    col1, col2, col3 = st.columns([1, 1, 1])

    with col2:
        submitted = st.form_submit_button("Generate Cover Letter :printer:")

    if submitted:
        # display errors if one of the files required is not uploaded
        if uploaded_resume is None:
            st.error("Your Resume is missing! :rotating_light:")

        elif uploaded_job_description is None and len(filled_job_description)==0:
            st.error("The job description is missing! :rotating_light:")

        else:
            # HF_TOKEN environement variable should be set to the huggingface token of the user
            with st.spinner(text="Generating Cover Letter..."):
                cover_maker = utils.CoverLetterMaker(resume=resume_text, job_desc=job_desc_text, language=language, word_count=word_count)
            st.write(cover_maker.generate_letter())