|
|
import os |
|
|
import gradio as gr |
|
|
from llama_index.readers.file import PDFReader |
|
|
from llama_index.core import VectorStoreIndex |
|
|
from llama_index.core.chat_engine.types import BaseChatEngine |
|
|
|
|
|
|
|
|
os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
|
|
|
chat_engine: BaseChatEngine = None |
|
|
|
|
|
|
|
|
def process_resume(file): |
|
|
global chat_engine |
|
|
if file is None: |
|
|
return "⚠️ Please upload a PDF file." |
|
|
reader = PDFReader() |
|
|
documents = reader.load_data(file=file) |
|
|
index = VectorStoreIndex.from_documents(documents) |
|
|
chat_engine = index.as_chat_engine(chat_mode="condense_question", verbose=False) |
|
|
return "✅ Resume uploaded and indexed! You can now ask questions." |
|
|
|
|
|
|
|
|
def chat_with_resume(message, chat_history): |
|
|
global chat_engine |
|
|
if not chat_engine: |
|
|
return "⚠️ Please upload a resume first.", chat_history |
|
|
response = chat_engine.chat(message) |
|
|
chat_history.append({"role": "user", "content": message}) |
|
|
chat_history.append({"role": "assistant", "content": response.response}) |
|
|
return "", chat_history |
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown("# 📄 Resume Chatbot\nUpload your resume and ask questions about your experience, skills, and more.") |
|
|
|
|
|
with gr.Row(): |
|
|
file_input = gr.File(label="Upload Resume (PDF)", file_types=[".pdf"]) |
|
|
upload_button = gr.Button("Process Resume") |
|
|
|
|
|
upload_output = gr.Textbox(label="Status") |
|
|
|
|
|
upload_button.click(fn=process_resume, inputs=file_input, outputs=upload_output) |
|
|
|
|
|
chatbot = gr.Chatbot(label="Chat with Resume", type="messages") |
|
|
message = gr.Textbox(placeholder="Ask something like: What are my key skills?", label="Your Question") |
|
|
send = gr.Button("Send") |
|
|
|
|
|
send.click(chat_with_resume, inputs=[message, chatbot], outputs=[message, chatbot]) |
|
|
|
|
|
demo.launch() |
|
|
|