File size: 3,820 Bytes
397e766 20eae19 397e766 a08d191 20eae19 b7bd810 20eae19 a08d191 397e766 b7bd810 156f08c 397e766 a08d191 20eae19 1665597 20eae19 a08d191 4c6b01f a08d191 4c6b01f 58be8e9 4c6b01f a08d191 4c6b01f 1665597 a08d191 1665597 4c6b01f a08d191 397e766 4c6b01f 397e766 6d1db57 397e766 75ef3f7 397e766 4c6b01f a08d191 397e766 20eae19 |
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
import gradio as gr
from huggingface_hub import InferenceClient
import fitz # PyMuPDF
"""
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
def extract_text_from_pdf(pdf_path):
# Open the provided PDF file
doc = fitz.open(pdf_path)
text = ""
# Extract text from each page
for page in doc:
text += page.get_text()
doc.close() # Ensure the PDF file is closed
return text
def respond(message, history, system_message, max_tokens, temperature, top_p):
messages = [{"role": "system", "content": system_message}]
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
messages.append({"role": "user", "content": message})
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
print(f"Token: {token}") # Debugging statement to trace tokens
yield response # Yield the complete response up to this point
def process_resume_and_respond(pdf_file, message, history, system_message, max_tokens, temperature, top_p):
# Extract text from the PDF file
resume_text = extract_text_from_pdf(pdf_file.name)
# Combine the resume text with the user message
combined_message = f"Resume:\n{resume_text}\n\nUser message:\n{message}"
# Respond using the combined message
response_gen = respond(combined_message, history, system_message, max_tokens, temperature, top_p)
response = "".join([token for token in response_gen])
return response
# Store the uploaded PDF content globally
uploaded_resume_text = ""
def upload_resume(pdf_file):
global uploaded_resume_text
uploaded_resume_text = extract_text_from_pdf(pdf_file.name)
return "Resume uploaded successfully! now click on chat with job advisor right above this tab to start chatting!"
def respond_with_resume(message, history, system_message, max_tokens, temperature, top_p):
global uploaded_resume_text
# Combine the uploaded resume text with the user message
combined_message = f"Resume:\n{uploaded_resume_text}\n\nUser message:\n{message}"
# Respond using the combined message
response_gen = respond(combined_message, history, system_message, max_tokens, temperature, top_p)
# Collect all tokens generated
response = ""
for token in response_gen:
response = token # Update the response with the latest token
return response
"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
upload_interface = gr.Interface(
upload_resume,
inputs=gr.File(label="Upload Resume PDF"),
outputs=gr.Textbox(label="Upload Status"),
)
chat_interface = gr.ChatInterface(
respond_with_resume,
additional_inputs=[
gr.Textbox(value="You are a Job Advisor Chatbot.", label="System message"),
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p (nucleus sampling)",
),
],
)
demo = gr.TabbedInterface(
[upload_interface, chat_interface],
["Upload Resume", "Chat with Job Advisor"]
)
if __name__ == "__main__":
demo.launch()
|