File size: 3,284 Bytes
738953f
 
af105a4
738953f
 
 
85dc520
af105a4
 
 
85dc520
 
 
 
605c191
 
 
af105a4
f83c8d7
af105a4
5433a48
af105a4
 
 
94d331f
6b0c2cb
 
 
605c191
6b0c2cb
af105a4
f83c8d7
928b239
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
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:
    manual_content = '[INST]Per il compito di matematica devi seguire il PDF su Classroom[/INST]'
    manual_content += '[INST]Le dispense di Tecnologia Alimentare te le ha inviate per email la prof Lampugnani[/INST]'
    manual_content += '[INST]Se vuoi lamentarti per i compiti non farlo dal preside ma chiedi un appuntamento al tuo tutor[/INST]'
    manual_content += '[INST]Per il colloquio con i genitori manda una mail a [email protected][/INST]'

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>"
    if manual_content:
        prompt += f"[INST]Leggi questo MANUALE dopo ti farò delle domande: [/INST] {manual_content}"
    for user_prompt, bot_response in history:
        prompt += f"[INST] {user_prompt} [/INST]"
        prompt += f" {bot_response}</s> "
    prompt += f"[INST]Tu sei Bonsi AI, il mio professore/assistente personale della scuola A.F.G.P. Bonsignori di Remedello. Io sono uno studente e ho bisogno di aiuto, tu rispondi in merito al manuale e istruzioni che hai ricevuto. Se la domanda che ti faccio esula dal manuale rispondi 'Non sono stato istruito per la richiesta che mi hai fatto, chiedilo al tuo Tutor' : {message} [/INST]"
    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)