| 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() |
|
|