File size: 4,129 Bytes
19470e5
ce2cbec
 
 
4e9d3eb
957cfbf
 
c378d70
 
 
ce2cbec
 
 
 
da4bb57
 
 
 
 
 
ce2cbec
 
 
 
4e9d3eb
 
 
da4bb57
 
 
 
 
4e9d3eb
ce2cbec
f0ec0e9
da4bb57
 
4e9d3eb
 
 
 
ce2cbec
 
 
 
 
 
4e9d3eb
ce2cbec
 
4e9d3eb
ce2cbec
 
 
 
 
 
 
 
 
 
 
 
 
4e9d3eb
ce2cbec
 
 
4e9d3eb
e717a69
4e9d3eb
 
da4bb57
4e9d3eb
da4bb57
 
4e9d3eb
3a274cd
da4bb57
 
3a274cd
da4bb57
 
 
 
 
 
ce2cbec
 
 
 
 
 
 
 
 
 
da4bb57
972ad02
ce2cbec
 
 
 
4e9d3eb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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()