SlickSlick commited on
Commit
6b78499
·
verified ·
1 Parent(s): d887226

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -0
app.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM, AutoModelForCausalLM, AutoModelForSequenceClassification
3
+ import torch
4
+
5
+ # Modelo A - FLAN-T5
6
+ model_a_name = "google/flan-t5-small"
7
+ tokenizer_a = AutoTokenizer.from_pretrained(model_a_name)
8
+ model_a = AutoModelForSeq2SeqLM.from_pretrained(model_a_name)
9
+
10
+ # Modelo B - Falcon-RW
11
+ model_b_name = "tiiuae/falcon-rw-1b"
12
+ tokenizer_b = AutoTokenizer.from_pretrained(model_b_name)
13
+ model_b = AutoModelForCausalLM.from_pretrained(model_b_name)
14
+
15
+ # Árbitro - BART MNLI
16
+ arbiter_model = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
17
+
18
+ def generate_response(prompt):
19
+ # Geração com Modelo A (FLAN-T5)
20
+ input_ids_a = tokenizer_a(prompt, return_tensors="pt").input_ids
21
+ output_a = model_a.generate(input_ids_a, max_new_tokens=100)
22
+ response_a = tokenizer_a.decode(output_a[0], skip_special_tokens=True)
23
+
24
+ # Geração com Modelo B (Falcon)
25
+ input_ids_b = tokenizer_b(prompt, return_tensors="pt").input_ids
26
+ output_b = model_b.generate(input_ids_b, max_new_tokens=100)
27
+ response_b = tokenizer_b.decode(output_b[0], skip_special_tokens=True)
28
+
29
+ # Julgamento com o Árbitro
30
+ # A premissa é o prompt original, e as hipóteses são as duas respostas.
31
+ choices = [response_a, response_b]
32
+ judgment = arbiter_model(prompt, choices)
33
+
34
+ best_response = judgment['labels'][0] # Escolhe o que teve maior score
35
+
36
+ return {
37
+ "Resposta do Modelo A": response_a,
38
+ "Resposta do Modelo B": response_b,
39
+ "Resposta Escolhida pelo Árbitro": best_response
40
+ }
41
+
42
+ # Interface Gradio
43
+ iface = gr.Interface(
44
+ fn=generate_response,
45
+ inputs=gr.Textbox(lines=2, placeholder="Digite sua pergunta..."),
46
+ outputs=[
47
+ gr.Textbox(label="Resposta do Modelo A"),
48
+ gr.Textbox(label="Resposta do Modelo B"),
49
+ gr.Textbox(label="Resposta Escolhida pelo Árbitro")
50
+ ],
51
+ title="Chatbot em Cascata com Árbitro",
52
+ description="Dois modelos geram respostas. Um terceiro modelo julga qual é a melhor com base em clareza e coerência."
53
+ )
54
+
55
+ if __name__ == "__main__":
56
+ iface.launch()