Spaces:
Runtime error
Runtime error
import openai | |
import streamlit as st | |
import fitz | |
# environment setup | |
key=st.text_input('Please input your OpenAI key') | |
openai.api_key=key | |
def prompt1(company,position,round,intervier_level): | |
prompt=f""" | |
I want you to act as a {intervier_level} for {round} interviews on {company} company for the position of {position}. You'll suggest the characteristics of this job interview and the characteristics of the {company}'s interview. | |
The return format should bullet point be like this: | |
Characteristics of this job interview: | |
- name: detail explanation | |
Characteristics of {company}: | |
- name: detail explanation | |
""" | |
return prompt | |
def followup1(company,position,round,bullet_point): | |
prompt=f""" | |
Can you talk the detail about {bullet_point} for {round} interviews on {company} company for the position of {position}? | |
The return format should bullet point be like this: | |
- name: detail explanation | |
""" | |
return prompt | |
def prompt2(position): | |
prompt=f""" | |
I want you to act as a talent recruiter for the position of {position}'s interviews. You'll suggest the characteristics of this job interview for both behavior requirement and technical requirement. | |
The return format should bullet point be like this: | |
Characteristics of this behavior requirement: | |
- name: detail explanation | |
Characteristics of technical requirement: | |
- name: detail explanation | |
""" | |
return prompt | |
def followup2(position,bullet_point): | |
prompt=f""" | |
Can you talk the detail about {bullet_point} for the interview of {position}? | |
The return format should bullet point be like this: | |
- name: detail impovement advice | |
""" | |
return prompt | |
def prompt3(position,resume,dis_num,ad_num): | |
prompt=f""" | |
I want you to act as a talent recruiter for hiring {position}. I will give you a resume and you'll suggest what are {dis_num}+ disadvantages and {ad_num}+ advantages of the {position} position. Please remember, the return should be highly related to the {position} position. | |
The return format should bullet point be like this: | |
Disadvatage: | |
- name: Suggestions for improvements to make the resume more appropriate for the {position} position and link to specific sentences on the resume. | |
Advantage: | |
- name: use one sentence to explain why it is advantageous for the {position} position. | |
Here is the resume: | |
{resume}. | |
""" | |
return prompt | |
def followup3(position,resume,bullet_point): | |
prompt=f""" | |
Can you talk the detail about {bullet_point} for the position of {position} based on {resume}? | |
The return format should bullet point be like this: | |
- name: detail impovement advice | |
""" | |
return prompt | |
def ask(prompt): | |
rsp = openai.ChatCompletion.create( | |
model="gpt-3.5-turbo", | |
messages=[ | |
{"role": "system", "content": prompt}, | |
] | |
) | |
output=rsp.choices[0].message.content | |
return output | |
#################### | |
st.title('InterviewPrepGPT') | |
st.subheader('A tool using to help people prepare their interview by using gpt3.5') | |
option = st.selectbox( | |
'How would you like to prepare for the interview?', | |
('Prepare for a specific interview', | |
'Understand the requirement of a specific position', | |
'Analyze resume', | |
)) | |
if "submit" not in st.session_state: | |
st.session_state["submit"] = False | |
st.write('') | |
###### option 1 | |
if option=='Prepare for a specific interview': | |
col1, col2= st.columns(2) | |
with col1: | |
company=st.text_input('Input your company','Amazon') | |
with col2: | |
position=st.text_input('Input your position','Data engineer') | |
col3, col4 = st.columns(2) | |
with col3: | |
intervier_level=st.text_input('Input your interviewer level: ','Talent Recuriter') | |
with col4: | |
round=st.radio('Select your round: ',('Phone Screen','Behavior Interview','Technical Interview', 'General')) | |
if round=='General': | |
round='' | |
st.write('Click button again if you want to regenerate a new ansewer.') | |
submit_button=st.button('Submit') | |
if st.session_state.get('button') != True: | |
st.session_state['button'] = submit_button | |
if st.session_state['button'] == True: | |
prompt=prompt1(company,position,round,intervier_level) | |
output=ask(prompt) | |
st.write(output) | |
followup_time=0 | |
followup='' | |
while True: | |
output_list=output.split('\n') | |
indexes = [i for i, word in enumerate(output_list) if '- ' in word] | |
new_list = [output_list[i] for i in indexes] | |
Cq=[i.split(':')[0].strip('- ') for i in new_list] | |
Cq = ['None']+ Cq | |
followup_radio = st.radio('I want to follow up:', tuple(Cq),key='0') | |
if followup_radio: | |
followup_time +=1 | |
if followup_radio == 'None': | |
break | |
else: | |
if followup_radio != 'None': | |
followup = followup1(company, position, round, followup_radio) | |
output = ask(followup) | |
st.write(output) | |
if followup_time>5: | |
break | |
###### option 2 | |
if option =='Understand the requirement of a specific position': | |
position=st.text_input('Input your position','Data engineer') | |
st.write('Click button again if you want to regenerate a new ansewer.') | |
submit=st.checkbox('submit') | |
if submit: | |
prompt=prompt2(position) | |
output=ask(prompt) | |
st.write(output) | |
followup='' | |
output_list=output.split('\n') | |
indexes = [i for i, word in enumerate(output_list) if '- ' in word] | |
new_list = [output_list[i] for i in indexes] | |
Cq=[i.split(':')[0].strip('- ') for i in new_list] | |
Cq = ['None']+ Cq | |
followup_radio = st.radio('I want to follow up:', tuple(Cq)) | |
if followup_radio!='None': | |
followup = followup2(position,followup_radio) | |
op = ask(followup) | |
st.write(op) | |
###### option 3 | |
if option =='Analyze resume': | |
uploaded_file = st.file_uploader("Upload your resume", type=["pdf"]) | |
if uploaded_file: | |
if "submit" not in st.session_state: | |
st.session_state["submit"] = False | |
doc = fitz.open(stream=uploaded_file.read(), filetype="pdf") | |
resume = "" | |
for page in doc: | |
resume += page.get_text() | |
col31, col32,col33= st.columns(3) | |
with col31: | |
position=st.text_input('Input your position') | |
with col32: | |
dis_num=st.text_input('Input your dis_num') | |
with col33: | |
ad_num=st.text_input('Input your ad_num') | |
st.write('Click button again if you want to regenerate a new ansewer.') | |
submit_button=st.button('Submit') | |
if st.session_state.get('button') != True: | |
st.session_state['button'] = submit_button | |
if st.session_state['button'] == True: | |
prompt=prompt3(position,resume,dis_num,ad_num) | |
output=ask(prompt) | |
st.write(output) | |
followup_time=0 | |
while True: | |
output_list=output.split('\n') | |
output_list= [element for element in output_list if element != ''] | |
ind = [i for i, word in enumerate(output_list) if 'Advantage:' in word] | |
Cdis_list=output_list[1:int(dis_num)+1] | |
Cdis=[i.split(':')[0].strip('- ') for i in Cdis_list] | |
Cdis = ['None']+ Cdis | |
followup_radio = st.radio('I want to follow up:', tuple(Cdis),key=followup_time) | |
followup_time +=1 | |
if followup_radio == 'None': | |
break | |
else: | |
followup = followup3(position,resume,followup_radio) | |
output = ask(followup) | |
st.write(output) | |
if followup_time>4: | |
break | |