Chatbot-1667287 / app.py
SlickSlick's picture
Create app.py
6b78499 verified
raw
history blame
2.14 kB
import gradio as gr
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM, AutoModelForCausalLM, AutoModelForSequenceClassification
import torch
# Modelo A - FLAN-T5
model_a_name = "google/flan-t5-small"
tokenizer_a = AutoTokenizer.from_pretrained(model_a_name)
model_a = AutoModelForSeq2SeqLM.from_pretrained(model_a_name)
# Modelo B - Falcon-RW
model_b_name = "tiiuae/falcon-rw-1b"
tokenizer_b = AutoTokenizer.from_pretrained(model_b_name)
model_b = AutoModelForCausalLM.from_pretrained(model_b_name)
# Árbitro - BART MNLI
arbiter_model = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
def generate_response(prompt):
# Geração com Modelo A (FLAN-T5)
input_ids_a = tokenizer_a(prompt, return_tensors="pt").input_ids
output_a = model_a.generate(input_ids_a, max_new_tokens=100)
response_a = tokenizer_a.decode(output_a[0], skip_special_tokens=True)
# Geração com Modelo B (Falcon)
input_ids_b = tokenizer_b(prompt, return_tensors="pt").input_ids
output_b = model_b.generate(input_ids_b, max_new_tokens=100)
response_b = tokenizer_b.decode(output_b[0], skip_special_tokens=True)
# Julgamento com o Árbitro
# A premissa é o prompt original, e as hipóteses são as duas respostas.
choices = [response_a, response_b]
judgment = arbiter_model(prompt, choices)
best_response = judgment['labels'][0] # Escolhe o que teve maior score
return {
"Resposta do Modelo A": response_a,
"Resposta do Modelo B": response_b,
"Resposta Escolhida pelo Árbitro": best_response
}
# Interface Gradio
iface = gr.Interface(
fn=generate_response,
inputs=gr.Textbox(lines=2, placeholder="Digite sua pergunta..."),
outputs=[
gr.Textbox(label="Resposta do Modelo A"),
gr.Textbox(label="Resposta do Modelo B"),
gr.Textbox(label="Resposta Escolhida pelo Árbitro")
],
title="Chatbot em Cascata com Árbitro",
description="Dois modelos geram respostas. Um terceiro modelo julga qual é a melhor com base em clareza e coerência."
)
if __name__ == "__main__":
iface.launch()