Spaces:
Runtime error
Runtime error
import os | |
from bs4 import BeautifulSoup | |
import gradio as gr | |
from langchain import OpenAI, ConversationChain, LLMChain, PromptTemplate | |
from langchain.memory import ConversationBufferWindowMemory | |
import openai | |
import requests | |
from langchain.chat_models import ChatOpenAI | |
import docx2txt | |
from pypdf import PdfReader | |
import requests | |
from bs4 import BeautifulSoup | |
from io import BytesIO | |
OPENAI_API_KEY = os.environ['OPENAI_API_KEY'] | |
template = ''' | |
{history} | |
{human_input} | |
''' | |
prompt = PromptTemplate( | |
input_variables=["history", "human_input"], | |
template=template | |
) | |
chatgpt_chain = LLMChain( | |
llm=ChatOpenAI(model="gpt-3.5-turbo", temperature=0.5,openai_api_key=OPENAI_API_KEY), | |
prompt=prompt, | |
verbose=True, | |
memory=ConversationBufferWindowMemory(k=0), | |
) | |
def process_files(file, url): | |
print(file.name) | |
print(file.read()) | |
# Extract text from Word or PDF files | |
if file.name.endswith('.docx'): | |
text_from_file = docx2txt.process(file.name) | |
elif file.name.endswith('.pdf'): | |
reader = PdfReader(file.name) | |
text_from_file = '' | |
print(len(reader.pages)) | |
for page_num in range(len(reader.pages)): | |
page = reader.pages[page_num] | |
#print(page.extract_text()) | |
text_from_file += page.extract_text() | |
word_list = [] | |
for i in text_from_file.split('\n'): | |
word_list.append(i.replace(' ', '')) | |
text_from_file = ' '.join(word_list) | |
del word_list | |
# Extract text from URL | |
headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"} | |
response = requests.get(url,headers=headers) | |
soup = BeautifulSoup(response.text, 'html.parser') | |
raw_text = soup.get_text() | |
text_from_url = ' '.join(raw_text.split()) | |
prompt_input = ''' | |
Here is my resume: | |
{} | |
Here is the company's job description: | |
{} | |
Write a cover letter in the first person perspective that is convincing and touching. | |
Relate points in the resume with the job description. | |
Write in the first person perspective. | |
Highlight the facts in my resume that is relevant to the job description. | |
The cover letter should convince the hiring manager that this candidate is highly valuable and an absolute must hire. | |
Start the cover letter with "Dear" | |
'''.format(text_from_file, text_from_url) | |
output=chatgpt_chain.predict(human_input=prompt_input) | |
os.remove(file.name) | |
return output | |
iface = gr.Interface( | |
fn=process_files, | |
inputs=[ | |
gr.inputs.File(type="file", label="Upload .docx or .pdf file"), | |
gr.inputs.Textbox(lines=2, label="Job Description URL",placeholder="Enter job URL here...")], | |
outputs=[ | |
gr.outputs.Textbox(label="Cover Letter") | |
], | |
title="Auto Cover Letter", | |
description="Upload your resume(make sure it is a .docx or .pdf file) and insert the URL containing the job description.\nProcess takes about 40 seconds." | |
) | |
iface.launch() |