Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import time | |
import streamlit as st | |
import LLMHelper | |
def generate_open_source(): | |
with output_col: | |
st.session_state.running = True | |
start_time = time.time() | |
context_length = (len(st.session_state.get('resume', '').split()) + | |
len(st.session_state.get('jd', '').split()) + | |
2000) | |
cover_letter_generator = LLMHelper.generate_cover_letter_open_source( | |
job_description=st.session_state['jd'], resume=st.session_state['resume'], | |
selected_model=selected_model, context_length=context_length | |
) | |
print(f'generated text: {cover_letter_generator}') | |
generate_response(cover_letter_generator, start_time) | |
st.session_state.running = False | |
def generate_openai(): | |
with output_col: | |
start_time = time.time() | |
try: | |
cover_letter_generator = LLMHelper.generate_cover_letter_openai( | |
job_description=st.session_state['jd'], resume=st.session_state['resume'], | |
selected_model=selected_model, openai_key=open_ai_key | |
) | |
generate_response(cover_letter_generator, start_time) | |
except ValueError as e: | |
st.error("Please provide a valid Open AI API key") | |
st.session_state.running = False | |
def generate_response(cover_letter_gen, start_time): | |
with output_col: | |
if cover_letter_gen is not None: | |
with st.container(border=True): | |
with st.spinner("Generating text..."): | |
generated_text_placeholder = st.empty() | |
for chunk in cover_letter_gen: | |
st.session_state.cover_letter_stream += chunk | |
generated_text_placeholder.write(st.session_state.cover_letter_stream) | |
st.write(f"generated words: {len(st.session_state.cover_letter_stream.split())}") | |
st.write(f"generation time: {round(time.time() - start_time, 2)} seconds") | |
st.write( | |
f"tokens per second: {round(len(st.session_state.cover_letter_stream.split())/(round(time.time() - start_time, 2)))} seconds") | |
if 'running' not in st.session_state: | |
st.session_state.running = False | |
st.session_state.cover_letter_stream = "" | |
st.set_page_config(page_title='LLM Cover Letter Generator', layout="wide") | |
st.markdown("## Cover Letter Generator using Large Language Models (LLM)") | |
st.info("Please be patient with the open source LLM models, as they are running on a CPU on the server.\n " | |
"Average generation time around 5 mins.") | |
info = st.expander("Information") | |
info.write(f"This project aims to:\n" | |
f"- Explore various open-source Large Language Models (LLMs).\n" | |
f"- Compare them to OpenAI models for performance. \n" | |
f"- Highlight benefits of open-source LLMs: \n" | |
f" - Faster generation on OpenAI models due to non-local execution.\n" | |
f" - Run open-source models on CPU with 10GB RAM (Around 5-min generation time).\n" | |
f" - Significantly faster generation on GPUs. \n" | |
f" - Free of cost and user-data ownership.\n\n" | |
f"Checkout my profile: https://zayedupal.github.io") | |
input_col, output_col = st.columns(2) | |
with input_col: | |
st.session_state['jd'] = st.text_area("Job Description", | |
placeholder="Paste the job description here", | |
disabled=st.session_state.running) | |
st.write(f"{len(st.session_state.get('jd', '').split())} words") | |
st.session_state['resume'] = st.text_area("Resume Information", | |
placeholder="Paste the resume content here", | |
disabled=st.session_state.running) | |
st.write(f"{len(st.session_state.get('resume', '').split())} words") | |
with output_col: | |
llm_tab = st.radio("LLM type", ["Open Source LLMs", "Open AI LLMs"], horizontal=True) | |
if llm_tab == "Open Source LLMs": | |
cover_letter_generator = None | |
st.session_state.cover_letter_stream = "" | |
selected_model = st.selectbox("Select LLM Model", options=LLMHelper.AVAILABLE_MODELS_GGUF.keys(), | |
disabled=st.session_state.running) | |
st.button("Generate Cover Letter", key='open_source_gen_key', on_click=generate_open_source, | |
disabled=st.session_state.running) | |
elif llm_tab == "Open AI LLMs": | |
cover_letter_generator = None | |
st.session_state.cover_letter_stream = "" | |
selected_model = st.selectbox("Select Open AI Model", options=LLMHelper.AVAILABLE_MODELS_OPENAI, | |
disabled=st.session_state.running) | |
open_ai_key = st.text_input("Enter your open ai API key") | |
st.button("Generate Cover Letter", key='open_ai_gen_key', disabled=st.session_state.running, | |
on_click=generate_openai) | |