File size: 3,905 Bytes
19470e5
ce2cbec
 
 
4e9d3eb
957cfbf
 
c378d70
 
 
ce2cbec
 
 
 
da4bb57
 
5d87a80
 
 
ce2cbec
 
 
 
4e9d3eb
 
 
5d87a80
 
 
 
 
4e9d3eb
ce2cbec
4e9d3eb
 
 
ce2cbec
 
 
 
 
 
4e9d3eb
ce2cbec
 
4e9d3eb
ce2cbec
 
 
 
 
 
 
 
 
 
 
 
 
4e9d3eb
ce2cbec
 
 
4e9d3eb
5d87a80
4e9d3eb
 
5d87a80
4e9d3eb
5d87a80
 
4e9d3eb
3a274cd
5d87a80
 
3a274cd
da4bb57
5d87a80
 
da4bb57
5d87a80
ce2cbec
 
 
 
 
 
 
 
 
 
5d87a80
 
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
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()