SlickSlick commited on
Commit
1716406
·
verified ·
1 Parent(s): a696596

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -32
app.py CHANGED
@@ -1,44 +1,65 @@
1
  import gradio as gr
2
  from transformers import pipeline
3
- import time
4
 
5
- # Configuração segura com fallback
6
- try:
7
- modelo_rapido = pipeline("text-generation", model="facebook/bart-base", max_length=50)
8
- modelo_detalhado = pipeline("text-generation", model="gpt2", max_length=70)
9
- arbitro = pipeline("text-classification", model="distilbert-base-uncased")
10
- except:
11
- # Fallback para modelos mais leves se falhar
12
- modelo_rapido = pipeline("text-generation", model="distilgpt2", max_length=40)
13
- modelo_detalhado = modelo_rapido
14
- arbitro = lambda x: {"label": "1"} # Arbitro mock
15
 
16
- def avaliar_resposta(prompt, respostas):
17
- try:
18
- resultado = arbitro(f"Prompt: {prompt}\nResposta: {respostas}")[0]
19
- return respostas[0] if resultado['label'] == "LABEL_1" else respostas[1]
20
- except:
21
- return respostas[0] # Fallback para primeira resposta
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
  def chatbot(prompt):
24
- time.sleep(1) # Evita timeout
 
 
 
 
 
 
 
 
 
25
 
26
- try:
27
- respostas = [
28
- modelo_rapido(prompt)[0]['generated_text'],
29
- modelo_detalhado(prompt)[0]['generated_text']
30
- ]
31
- return avaliar_resposta(prompt, respostas)
32
- except Exception as e:
33
- return f"⚠️ Erro: {str(e)}"
34
 
35
- # Interface otimizada
36
- with gr.Blocks(title="Chatbot Acadêmico") as app:
37
- gr.Markdown("## 🤖 Chatbot de Exemplo (Funcionamento em Cascata)")
38
  with gr.Row():
39
- entrada = gr.Textbox(label="Faça sua pergunta")
40
- saida = gr.Textbox(label="Resposta", interactive=False)
41
  btn = gr.Button("Enviar")
42
  btn.click(chatbot, inputs=entrada, outputs=saida)
 
 
 
 
43
 
44
- app.launch(server_name="0.0.0.0", server_port=7860)
 
1
  import gradio as gr
2
  from transformers import pipeline
 
3
 
4
+ # Configura modelos com instruções em português
5
+ modelo_rapido = pipeline(
6
+ "text-generation",
7
+ model="pierreguillou/bert-base-cased-squad-v1.1-portuguese",
8
+ max_length=50
9
+ )
 
 
 
 
10
 
11
+ modelo_detalhado = pipeline(
12
+ "text-generation",
13
+ model="pucpr/portuguese-gpt2-small",
14
+ max_length=100
15
+ )
16
+
17
+ arbitro = pipeline(
18
+ "text-classification",
19
+ model="neuralmind/bert-base-portuguese-cased"
20
+ )
21
+
22
+ def avaliar_respostas(prompt, respostas):
23
+ instrucao = f"""
24
+ Avalie qual resposta é melhor para o prompt '{prompt}':
25
+ 1. {respostas[0]}
26
+ 2. {respostas[1]}
27
+
28
+ Critérios:
29
+ - Clareza (0-5)
30
+ - Precisão científica (0-5)
31
+ - Adequação ao português brasileiro (0-5)
32
+ """
33
+
34
+ # Força avaliação em PT-BR
35
+ veredito = arbitro(instrucao[:512])[0] # Limita ao tamanho máximo do BERT
36
+ return respostas[0] if veredito['label'] == "LABEL_1" else respostas[1]
37
 
38
  def chatbot(prompt):
39
+ # Adiciona instrução explícita de idioma
40
+ prompt_pt = f"Responda em português brasileiro: {prompt}"
41
+
42
+ # Gera respostas com modelos específicos
43
+ resposta_curta = modelo_rapido(prompt_pt, num_return_sequences=1)[0]['generated_text']
44
+ resposta_long = modelo_detalhado(prompt_pt, num_return_sequences=1)[0]['generated_text']
45
+
46
+ # Limpa respostas duplicadas
47
+ resposta_curta = resposta_curta.split(".")[0] + "."
48
+ resposta_long = resposta_long.split("\n")[0]
49
 
50
+ return avaliar_respostas(prompt, [resposta_curta, resposta_long])
 
 
 
 
 
 
 
51
 
52
+ # Interface com exemplos em PT-BR
53
+ with gr.Blocks(title="Chatbot ABNT") as app:
54
+ gr.Markdown("## 🇧🇷 Chatbot Acadêmico (Português Brasileiro)")
55
  with gr.Row():
56
+ entrada = gr.Textbox(label="Digite sua pergunta", placeholder="Ex: Qual a fórmula da água?")
57
+ saida = gr.Textbox(label="Resposta ABNT", lines=5)
58
  btn = gr.Button("Enviar")
59
  btn.click(chatbot, inputs=entrada, outputs=saida)
60
+ gr.Examples(
61
+ examples=["Qual a fórmula da água?", "Explique a teoria da relatividade"],
62
+ inputs=entrada
63
+ )
64
 
65
+ app.launch()