File size: 2,810 Bytes
4e95fe4
 
 
 
 
 
 
 
67f6272
 
 
 
 
 
 
4e95fe4
67f6272
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4e95fe4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acb5b80
4e95fe4
eb656b8
4e95fe4
 
 
 
 
 
 
 
 
 
1adc8be
2d2233c
494305a
4e95fe4
 
 
7095ebd
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
import gradio as gr
from huggingface_hub import InferenceClient

"""
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")

def login_screen():
  username = gr.Textbox("Username: ").value
  password = gr.Textbox("Password: ", type="password").value
  if username == "admin" and password == "pass1234":
    return None  # Login successful, no output
  else:
    return "Incorrect credentials. Please try again."

def chat(message):
  if not hasattr(chat, 'authorized'):
    chat.authorized = None  # Flag for login status

  if chat.authorized is None:
    response = login_screen()
    if response is None:
      chat.authorized = True
      return "Welcome! How can I help you generate a job description?"
    else:
      return response
  else:
    # Call the actual job description generation function
    return generate_job_description(message, max_tokens, temperature, top_p)

def generate_job_description(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    messages = [{"role": "system", "content": 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

"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
demo = gr.ChatInterface(
    generate_job_description,
    additional_inputs=[
        gr.Textbox(value="You are an expert in generating job descriptions.", label="System message"),
        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="Job Description Generator expert!",
    description="This agent generates job description based upon input text below. Be clear and concise on the role, level, expectations, starting salary, etc. for the position. Happy finding the right talent. ", 
    analytics_enabled=True
)

if __name__ == "__main__":
    demo.launch()