Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from huggingface_hub import InferenceClient | |
| import PyPDF2 | |
| from langchain.prompts import PromptTemplate | |
| # Initialize the Hugging Face client with gemma2-9b-it | |
| client = InferenceClient("HuggingFaceH4/gemma2-9b-it") | |
| # Function to read text from a PDF file | |
| def pdf_to_text(pdf_path): | |
| with open(pdf_path, 'rb') as file: | |
| pdf_reader = PyPDF2.PdfReader(file) | |
| text = '' | |
| for page in range(len(pdf_reader.pages)): | |
| text += pdf_reader.pages[page].extract_text() | |
| return text | |
| # Function to analyze CV content | |
| def analyze_cv(cv_text): | |
| if not cv_text or not isinstance(cv_text, str): | |
| raise ValueError("The CV text must be a non-empty string.") | |
| prompt_template = PromptTemplate.from_template(''' | |
| You are an AI designed to extract structured information from unstructured text. Your task is to analyze the content of a candidate's resume or CV and extract the following details: | |
| **CV** | |
| {cv_text} | |
| **Information Extraction and Output Format** | |
| For the given resume, extract and present the following details in the specified format: | |
| 1. Candidate Information | |
| - Full Name | |
| - Contact Information (Phone, Email, Address, etc.) | |
| - Date of Birth (if available) | |
| - Habitat (if specified, e.g., location, region, or country of residence) | |
| 2. Education | |
| - Degree Name (e.g., Bachelor's, Master's, Ph.D.) | |
| - Field of Study (e.g., Computer Science, Business Administration) | |
| - Institution Name | |
| - Year(s) of Graduation | |
| 3. Professional Experience | |
| - For each job extract: | |
| - Job Title | |
| - Company Name | |
| - Duration (start and end dates, or years of experience) | |
| - Summary of Key Responsibilities and Achievements | |
| 4. Skills | |
| - List of Skills (include technical, soft, and industry-specific skills mentioned in the resume) | |
| 5. Certifications | |
| - Certification Name | |
| - Issuing Organization | |
| - Year of Issuance | |
| 6. Language Proficiency | |
| - Languages Mentioned (include proficiency levels if specified in the resume) | |
| Do not explain, comment or make up any more information that is not relative to the list of Information extraction. Respond in Vietnamese. Let's work this out in a step by step way to ensure the correct answer. [END]. | |
| ''') | |
| prompt = prompt_template.format(cv_text=cv_text) | |
| response = client.text_generation(prompt, max_tokens=2048, temperature=0.0) | |
| return response | |
| # Chatbot with PDF and CV analysis | |
| def chatbot_with_pdf(pdf_file, user_message, history, system_message, max_tokens, temperature, top_p): | |
| if pdf_file is not None: | |
| pdf_text = pdf_to_text(pdf_file.name) | |
| cv_analysis = analyze_cv(pdf_text) # Call analyze_cv with the extracted PDF text | |
| user_message = f"CV Analysis:\n{cv_analysis}\n\nUser Message:\n{user_message}" | |
| response_gen = respond( | |
| user_message, history, system_message, max_tokens, temperature, top_p | |
| ) | |
| return list(response_gen)[-1], history + [(user_message, "")] | |
| # Define Gradio interface | |
| interface = gr.Interface( | |
| fn=chatbot_with_pdf, | |
| inputs=[ | |
| gr.File(label="Upload a PDF File"), | |
| gr.Textbox(label="Your Message"), | |
| gr.State(label="Chat History"), | |
| gr.Textbox(label="System Message", value="You are an AI assistant."), | |
| gr.Slider(label="Max Tokens", minimum=1, maximum=1000, value=200), | |
| gr.Slider(label="Temperature", minimum=0.0, maximum=1.0, value=0.7, step=0.1), | |
| gr.Slider(label="Top P", minimum=0.0, maximum=1.0, value=0.9, step=0.1), | |
| ], | |
| outputs=[ | |
| gr.Textbox(label="Response"), | |
| gr.State(label="Chat History"), | |
| ], | |
| title="Chatbot with CV Analysis and PDF Integration", | |
| ) | |
| # Launch Gradio app | |
| interface.launch() | |