Spaces:
Running
Running
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, | |
education, | |
passion, | |
fit, | |
anecdotes, | |
max_tokens, | |
temperature, | |
top_p, | |
): | |
# Construct the system message with additional inputs | |
enhanced_system_message = ( | |
f"{system_message}\n\n" | |
f"Role, Industry, Employer and Summary of Job Ad: {role}\n" | |
f"Summary of your Education and Work Experience: {education}\n" | |
f"Why are you passionate about this job: {passion}\n" | |
f"Why do you feel you are a good fit for this job: {fit}\n" | |
f"Anecdotes: {anecdotes}\n" | |
) | |
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 write a cover letter for 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, Employer and Summary of Job Ad", placeholder="Describe the role, industry, employer and include a summary of the job Ad that you are applying to."), | |
gr.Textbox( | |
label="Education and Professional Experience", | |
placeholder="Provide a Summary of your Education and Professional Experience", | |
), | |
gr.Textbox( | |
label="Passion", | |
placeholder="Why are you Passionate about this Role and or Organization", | |
), | |
gr.Textbox( | |
label="Fit", | |
placeholder="Why are you a good fit for this role?", | |
), | |
gr.Textbox(label="Anecdotes", placeholder="Tell a few anecdotes from your career situations or key problems you solved in previous roles that may show that you will add great value to this organization"), | |
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="Cover Letter Writer!", | |
description="This Ai-powered App creates a customized cover letter 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 anecdotes that show your achievements and the value you bring, 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() |