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() |