|
import os |
|
import gradio as gr |
|
from huggingface_hub import InferenceClient |
|
|
|
|
|
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, |
|
): |
|
|
|
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 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}] |
|
|
|
|
|
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 |
|
yield response |
|
|
|
|
|
|
|
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() |