Resumize / app.py
willn9's picture
Update app.py
972ad02 verified
import os
import gradio as gr
from huggingface_hub import InferenceClient
# Initialize the Hugging Face Inference client
HF_API_KEY = os.environ.get("HF_API_KEY")
HF_MODEL_NAME = os.environ.get("HF_MODEL_NAME")
client = InferenceClient(model=HF_MODEL_NAME, token=HF_API_KEY)
def respond(
message,
history: list[tuple[str, str]],
system_message,
role,
ad,
education,
experience,
skills,
ask_for_skills_suggestions,
max_tokens,
temperature,
top_p,
):
# Construct the system message with additional inputs
enhanced_system_message = (
f"{system_message}\n\n"
f"Role, Industry and Type of Organization: {role}\n"
f"Job Ad Responsibilities and Key Requirements: {ad}\n"
f"Education, Training and Certifications: {education}\n"
f"Work Experience: {experience}\n"
f"Skills: {skills}\n"
)
# If the user wants Subject Line suggestions, modify the prompt
if ask_for_skills_suggestions:
enhanced_system_message += "The user is also asking for suggestions of skills related to this role."
messages = [{"role": "system", "content": enhanced_system_message}]
# Add conversation history
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
# Add the current user message
messages.append({"role": "user", "content": message})
# Generate the response
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
yield response
# Define the Gradio interface
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(
value="You are a friendly Chatbot, a career coach and a talented copywriter. You are trying to help a user customize their resume according to a specific role, employer organization and job Ad - based on user input. Include tips if some items are missing.",
label="Instructions to Bot",
),
gr.Textbox(label="Role, Industry and Employer", placeholder="Describe the role, industry and employer you are applying to."),
gr.Textbox(
label="Job Ad Responsibilities and Key Requirements",
placeholder="Describe the Responsibilities and Key Requirements advertised in the job ad",
),
gr.Textbox(
label="Your Education, certifications, training, etc.",
placeholder="Describe your education, training, certifications and professional designations",
),
gr.Textbox(
label="Your Work Experience",
placeholder="Describe your work experience, previous responsibilities and key career achievements",
),
gr.Textbox(label="Skills", placeholder="List your key skills that match this job or ask for suggestions"),
gr.Checkbox(label="Ask for Skills Suggestions", value=False),
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)",
),
],
title="Resumize - Customize your CV!",
description="This app customizes your resume to best suit a specific role, industry, employer and job ad. Based on your input. Powered by Hugging Face Inference, Design Thinking, and domain expertise. Expand Additional Inputs by clicking on the arrow, input more details about your education, work experience, skills and the job you are applying for, then enter a message describing what you need the assistant to do for you. Developed by wn. Disclaimer: AI makes mistakes. Use with caution and at your own risk!",
)
if __name__ == "__main__":
demo.launch()