File size: 4,805 Bytes
738953f
 
af105a4
738953f
 
 
85dc520
af105a4
 
 
85dc520
 
 
8f6a207
 
 
 
 
 
 
 
 
 
 
 
0d42bdb
8f6a207
 
 
0d42bdb
 
 
 
 
 
 
af105a4
f83c8d7
af105a4
eec9db2
05721f2
af105a4
6b0c2cb
 
e6f2e4b
 
728e473
 
 
 
 
05721f2
 
728e473
05721f2
728e473
05721f2
 
728e473
05721f2
 
 
 
 
 
728e473
 
05721f2
728e473
 
05721f2
728e473
 
6b0c2cb
af105a4
f83c8d7
552b5b5
f83c8d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1caab03
f83c8d7
 
 
85dc520
 
a06c8f9
0e6616c
a93d05b
 
7744e2a
f83c8d7
 
de79f12
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
105
106
107
108
109
110
111
112
113
114
115
116
117
from huggingface_hub import InferenceClient
import gradio as gr
import requests

client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")

#manual_url = "https://script.google.com/macros/s/AKfycbzlFFMNw0Zc7IKt4Sn7KB5qggPMlh_2mdMn5uOjw93MF2L-58SPb4ZPUQKHJppLSLBi/exec"
manual_content = None

def get_manual_content():
#    global manual_content
#    response = requests.get(manual_url)
#    if response.status_code == 200:
    urldoc = "https://script.google.com/macros/s/AKfycbwQJ2LRp4C0583Bd09agFjJ2nrZMy8MZVxN1qJYlY1i_TkB18ecP3KnqPAOoE-CACJm/exec"
    resp = requests.get(urldoc)
    instruction = resp.text
    manual_content = f'''
      input: {{
        role: "system",
        content: "Tu sei BonsiAI l'assistente virtuale per studenti direttamente incaricato dal Sig.Bonsignori. Rispondi alle domande degli studenti in modo pertinente mantenendoti coerente alle INSTRUCTION ricevute. Sii cordiale, gentile e simpatico, utilizzando gerghi giovanili tipici della Generazione Z",
      }},
      messages: [
        {{
          role: "instructions",
          content: [
            {instruction}
          ],
        }},
      ''';
    print(manual_content)

     #       "Per le info sui compiti di tecnologia alimentare, rivolgersi alla Professoressa Lampugnani.",
     #       "Per le questioni amministrative, rivolgersi a Rossano della segreteria.",
     #       "Per il compito di matematica devi seguire il PDF su Classroom", 
     #       "Se vuoi lamentarti per i compiti non farlo dal preside ma chiedi un appuntamento al tuo tutor",
     #       "Per il colloquio con i genitori manda una mail a [email protected]"

def format_prompt(message, history):
    global manual_content
    #if manual_content is None or not history or not any(user_prompt for user_prompt, _ in history):
    #get_manual_content()
    prompt = "<s>"
    for user_prompt, bot_response in history:
        prompt += f"[INST] {user_prompt} [/INST]"
        prompt += f" {bot_response}"
    prompt += '</s>'    
    urldoc = "https://script.google.com/macros/s/AKfycbwQJ2LRp4C0583Bd09agFjJ2nrZMy8MZVxN1qJYlY1i_TkB18ecP3KnqPAOoE-CACJm/exec"
    resp = requests.get(urldoc)
    instruction = resp.text
    prompt += f'''[INST] 
    input: {{
      role: "system",
      content: "Tu sei BonsiAI l'assistente virtuale per studenti direttamente incaricato dal Sig.Bonsignori. Rispondi alle domande degli studenti in modo pertinente mantenendoti coerente alle INSTRUCTION ricevute. Sii cordiale, gentile e simpatico, utilizzando gerghi giovanili tipici della Generazione Z",
    }},
    messages: [
      {{
        role: "instructions",
        content: [
          "{instruction}",  
          "Per le info sui compiti di tecnologia alimentare, rivolgersi alla Professoressa Lampugnani.",
          "Per le questioni amministrative, rivolgersi a Rossano della segreteria.",
          "Per il compito di matematica devi seguire il PDF su Classroom", 
          "Se vuoi lamentarti per i compiti non farlo dal preside ma chiedi un appuntamento al tuo tutor",
          "Per il colloquio con i genitori manda una mail a [email protected]"
        ],
      }},
      {{
        "role": "user", 
        "content": "{message}"
      }}] 
    [/INST]'''
    print(prompt)
    
    return prompt

def generate(
    prompt, history, temperature=0.2, max_new_tokens=300, top_p=0.95, repetition_penalty=1.0,
):
    temperature = float(temperature)
    if temperature < 1e-2:
        temperature = 1e-2
    top_p = float(top_p)

    generate_kwargs = dict(
        temperature=temperature,
        max_new_tokens=max_new_tokens,
        top_p=top_p,
        repetition_penalty=repetition_penalty,
        do_sample=True,
        seed=42,
    )

    formatted_prompt = format_prompt(prompt, history)

    stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
    output = ""

    for response in stream:
        output += response.token.text
        yield output
    return output

mychatbot = gr.Chatbot(
    avatar_images=["./user.png", "./bonsi.jpeg"], bubble_full_width=False, show_label=False, show_copy_button=True, likeable=True,value=[[None, "Ciao sono Bonsi AI il tuo assistente personale del centro di formazione Bonsignori di Remedello"]], )

demo = gr.ChatInterface(fn=generate, 
                        chatbot=mychatbot,
                        title="Bonsi AI 🪴",
                        textbox=gr.Textbox(placeholder="Cosa posso fare per te, studente..."), 
                        theme="gradio/base", 
                        submit_btn="Invia",
                        retry_btn=None,
                        undo_btn=None,
						clear_btn="Cancella"
                       )

demo.queue().launch(show_api=True, share=True)