Spaces:
Build error
Build error
| import streamlit as st | |
| import openai | |
| from utils.constants import model_family_mapping, model_name_mapping | |
| from utils.utils import PitchPerfect, pdf_loader | |
| st.set_page_config( | |
| page_title = "Pitch Perfect", | |
| page_icon = "📝", | |
| layout = "wide" | |
| ) | |
| def initialize_session_state(): | |
| if 'api_configured' not in st.session_state: | |
| st.session_state.api_configured = False | |
| if 'pitch_perfect' not in st.session_state: | |
| st.session_state.pitch_perfect = None | |
| initialize_session_state() | |
| with st.sidebar: | |
| st.title("Model API Configuration") | |
| model_options = [ | |
| "GPT-4o mini", | |
| "GPT-4o", | |
| "o1", | |
| "o3-mini", | |
| "Deepseek-V3", | |
| "Deepseek-r1", | |
| "Mistral Small 24B", | |
| "LLaMa 3.3 70B", | |
| "DeepSeek R1 Distill", | |
| "Mistral 7B v0.3" | |
| ] | |
| selected_model = st.selectbox("Select which LLM to use", model_options, key = "selected_model") | |
| model_name = model_name_mapping.get(selected_model) | |
| model_family = model_family_mapping.get(selected_model) | |
| if model_family == "gpt": | |
| token = st.text_input("OpenAI API Key", type="password", key="openai_key") | |
| else: | |
| token = st.text_input("Hugging Face Token", type="password", key="hf_token") | |
| if token != "": | |
| if st.button("Initialize with the provided keys"): | |
| try: | |
| st.session_state.pitch_perfect = PitchPerfect(model = model_name, model_family = model_family, token = token) | |
| if st.session_state.pitch_perfect.client == "INVALID": | |
| st.error(st.session_state.pitch_perfect.error) | |
| else: | |
| st.session_state.api_configured = True | |
| st.success("Successfully configured the API clients with provided keys!") | |
| except Exception as e: | |
| st.error(f"Error initializing API clients: {str(e)}") | |
| st.session_state.api_configured = False | |
| if st.session_state.api_configured: | |
| upload_cv = st.file_uploader("Upload CV in PDF format", type=["pdf"]) | |
| if upload_cv is not None: | |
| st.success(f"File uploaded successfully: {upload_cv.name}") | |
| temp_file = "./temp.pdf" | |
| with open(temp_file, "wb") as file: | |
| file.write(upload_cv.getvalue()) | |
| file_name = upload_cv.name | |
| cv_data = pdf_loader(temp_file) | |
| if not st.session_state.api_configured: | |
| st.warning("Please configure the models in the sidebar to proceed") | |
| st.stop() | |
| st.title("Pitch Perfect") | |
| st.subheader("A cutting-edge app that crafts the perfect cover letter, tailored to land your dream job effortlessly!") | |
| col1, col2 = st.columns(2) | |
| # with col1: | |
| # upload_cv = st.file_uploader("Upload CV in PDF format", type=["pdf"]) | |
| # if upload_cv is not None: | |
| # st.success(f"File uploaded successfully: {upload_cv.name}") | |
| # temp_file = "./temp.pdf" | |
| # with open(temp_file, "wb") as file: | |
| # file.write(upload_cv.getvalue()) | |
| # file_name = upload_cv.name | |
| # cv_data = pdf_loader(temp_file) | |
| with col1: | |
| job_title = st.text_input("Job Title", key="job_title") | |
| with col2: | |
| company_name = st.text_input("Company Name", key="company_name") | |
| # if upload_cv: | |
| # st.write(cv_data) | |
| job_description = st.text_area("Please paste the entire job description here:") | |
| if st.button("Generate Cover Letter"): | |
| with st.spinner("Generating Cover Letter....."): | |
| client = st.session_state.pitch_perfect | |
| cover_letter, reason = client.generate_cover_letter(job_title = job_title, | |
| company = company_name, | |
| job_desc = job_description, | |
| cv_data = cv_data) | |
| st.success("Cover Letter Generated") | |
| st.markdown(cover_letter) | |
| with st.expander("Model Reasoning:"): | |
| st.write(reason) |