Spaces:
Runtime error
Runtime error
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() | |