File size: 5,024 Bytes
0ab54b2
 
f4edcad
0ab54b2
 
156e4d0
0ab54b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90f58c7
0ab54b2
90f58c7
f4edcad
90f58c7
f4edcad
90f58c7
0ab54b2
90f58c7
0ab54b2
90f58c7
0ab54b2
 
 
90f58c7
0ab54b2
90f58c7
0ab54b2
f4edcad
f5fecda
0ab54b2
90f58c7
0ab54b2
a3d5d67
0ab54b2
 
90f58c7
4237769
 
90f58c7
 
a3d5d67
90f58c7
0ab54b2
90f58c7
a3d5d67
6d5dc5a
0ab54b2
 
 
 
f4edcad
0ab54b2
 
 
f4edcad
 
 
 
 
6d5dc5a
 
 
 
f4edcad
 
0ab54b2
 
 
 
 
 
 
 
 
 
 
 
 
f4edcad
 
0ab54b2
f4edcad
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
import time
import torch
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "nicholasKluge/Aira-Instruct-PT-560M"
token = "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"

device = "cuda" if torch.cuda.is_available() else "cpu"


if device == "cuda":
    model = AutoModelForCausalLM.from_pretrained(model_id, use_auth_token=token, load_in_8bit=True)
    
else:
    model = AutoModelForCausalLM.from_pretrained(model_id, use_auth_token=token)

tokenizer = AutoTokenizer.from_pretrained(model_id, use_auth_token=token)
model.to(device)

intro = """
## O que é `Aira`?

[`Aira`](https://github.com/Nkluge-correa/Aira-EXPERT) é um `chatbot` projetado para simular a forma como um humano (especialista) se comportaria durante uma rodada de perguntas e respostas (Q&A). `Aira` tem muitas iterações, desde um chatbot de domínio fechado baseado em regras pré-definidas até um chatbot de domínio aberto atingido através do ajuste fino de grandes modelos de linguagem pré-treinados. `Aira` tem uma área de especialização que inclui tópicos relacionados com a ética da IA e a investigação sobre segurança da IA. 

Desenvolvemos os nossos chatbots de conversação de domínio aberto através da geração de texto condicional/ajuste fino por instruções. Esta abordagem tem muitas limitações. Apesar de podermos criar um chatbot capaz de responder a perguntas sobre qualquer assunto, é difícil forçar o modelo a produzir respostas de boa qualidade. E por boa, queremos dizer texto **factual** e **não tóxico**. Isto leva-nos a dois dos problemas mais comuns quando lidando com modelos generativos utilizados em aplicações de conversação:

🤥 Modelos generativos podem perpetuar a geração de conteúdo pseudo-informativo, ou seja, informações falsas que podem parecer verdadeiras.
 
🤬 Em certos tipos de tarefas, modelos generativos podem produzir conteúdo prejudicial e discriminatório inspirado em estereótipos históricos.
 
`Aira` destina-se apenas à investigação académica. Para mais informações, visite o nosso [HuggingFace models](https://huggingface.co/nicholasKluge) para ver como desenvolvemos `Aira`.
"""

disclaimer = """
**Isenção de responsabilidade:** Esta demonstração deve ser utilizada apenas para fins de investigação. Os moderadores não censuram a saída do modelo, e os autores não endossam as opiniões geradas por este modelo.

Se desejar apresentar uma reclamação sobre qualquer mensagem produzida por `Aira`, por favor contatar [[email protected]](mailto:[email protected]).
"""

with gr.Blocks(theme='freddyaboulton/dracula_revamped') as demo:
 
    gr.Markdown("""<h1><center>Aira Demo (Portuguese) 🤓💬</h1></center>""")
    gr.Markdown(intro)
    
    chatbot = gr.Chatbot(label="Aira").style(height=500)

    with gr.Accordion(label="Parâmetros ⚙️", open=False):
        top_k = gr.Slider( minimum=10, maximum=100, value=15, step=5, interactive=True, label="Top-k",)
        top_p = gr.Slider( minimum=0.1, maximum=1.0, value=0.15, step=0.05, interactive=True, label="Top-p",)
        temperature = gr.Slider( minimum=0.001, maximum=2.0, value=0.1, step=0.1, interactive=True, label="Temperatura",)
        max_length = gr.Slider( minimum=10, maximum=500, value=100, step=10, interactive=True, label="Comprimento Máximo",)
    
    msg = gr.Textbox(label="Escreva uma pergunta para Aira ...", placeholder="Olá Aira, como você vai?")

    clear = gr.Button("Limpar Conversa 🧹")
    gr.Markdown(disclaimer)

    def user(user_message, chat_history):
        return gr.update(value=user_message, interactive=True), chat_history + [["👤 " + user_message, None]]

    def generate_response(user_msg, top_p, temperature, top_k, max_length, chat_history):

        inputs = tokenizer(tokenizer.bos_token + user_msg + tokenizer.eos_token, return_tensors="pt").to(device)

        generated_response = model.generate(**inputs,
            bos_token_id=tokenizer.bos_token_id,
            pad_token_id=tokenizer.pad_token_id,
            eos_token_id=tokenizer.eos_token_id,
            do_sample=True,
            early_stopping=True,   
            top_k=top_k, 
            max_length=max_length,
            top_p=top_p,
            temperature=temperature, 
            num_return_sequences=1)

        bot_message = tokenizer.decode(generated_response[0], skip_special_tokens=True).replace(user_msg, "")

        chat_history[-1][1] = "🤖 "
        for character in bot_message:
            chat_history[-1][1] += character
            time.sleep(0.005)
            yield chat_history

    response = msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        generate_response, [msg, top_p, temperature, top_k, max_length, chatbot], chatbot
    )
    response.then(lambda: gr.update(interactive=True), None, [msg], queue=False)
    msg.submit(lambda x: gr.update(value=''), [],[msg])
    clear.click(lambda: None, None, chatbot, queue=False)

demo.queue()
demo.launch()