Update app.py
Browse files
app.py
CHANGED
@@ -3,10 +3,7 @@ from transformers import AutoTokenizer, AutoModelForQuestionAnswering
|
|
3 |
import torch
|
4 |
import logging
|
5 |
import warnings
|
6 |
-
import
|
7 |
-
from datetime import datetime
|
8 |
-
import random
|
9 |
-
from pathlib import Path
|
10 |
|
11 |
# Configuração do logging
|
12 |
logging.basicConfig(
|
@@ -16,7 +13,39 @@ logging.basicConfig(
|
|
16 |
logger = logging.getLogger(__name__)
|
17 |
warnings.filterwarnings('ignore')
|
18 |
|
19 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
BIBLICAL_PASSAGES = {
|
21 |
"casamento": [
|
22 |
{
|
@@ -65,14 +94,12 @@ class BiblicalCounselor:
|
|
65 |
|
66 |
def get_answer(self, theme: str, question: str) -> tuple:
|
67 |
try:
|
68 |
-
# Obtém o contexto bíblico para o tema
|
69 |
if theme not in BIBLICAL_PASSAGES:
|
70 |
return "Tema não encontrado em nossa base.", "Sem referências disponíveis."
|
71 |
|
72 |
passage = BIBLICAL_PASSAGES[theme][0]
|
73 |
context = passage["texto"]
|
74 |
|
75 |
-
# Tokenização
|
76 |
inputs = self.tokenizer.encode_plus(
|
77 |
question,
|
78 |
context,
|
@@ -82,7 +109,6 @@ class BiblicalCounselor:
|
|
82 |
padding="max_length"
|
83 |
).to(self.device)
|
84 |
|
85 |
-
# Obtenção da resposta
|
86 |
with torch.no_grad():
|
87 |
outputs = self.model(**inputs)
|
88 |
|
@@ -93,7 +119,6 @@ class BiblicalCounselor:
|
|
93 |
answer = tokens[answer_start:answer_end + 1]
|
94 |
answer = self.tokenizer.convert_tokens_to_string(answer)
|
95 |
|
96 |
-
# Formatação da resposta
|
97 |
formatted_answer = f"Com base na palavra de Deus, {answer}"
|
98 |
reference = f"📖 {passage['passagem']}\n✝️ Contexto: {passage['contexto']}"
|
99 |
|
@@ -103,6 +128,10 @@ class BiblicalCounselor:
|
|
103 |
logger.error(f"Erro ao processar pergunta: {str(e)}")
|
104 |
return "Perdoe-nos, ocorreu um erro ao processar sua pergunta.", "Erro no processamento"
|
105 |
|
|
|
|
|
|
|
|
|
106 |
def create_interface():
|
107 |
try:
|
108 |
counselor = BiblicalCounselor()
|
@@ -138,6 +167,24 @@ def create_interface():
|
|
138 |
lines=2
|
139 |
)
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
submit_btn.click(
|
142 |
fn=lambda t, q: counselor.get_answer(t, q),
|
143 |
inputs=[theme, question],
|
@@ -147,6 +194,12 @@ def create_interface():
|
|
147 |
gr.Markdown("""
|
148 |
---
|
149 |
💝 Desenvolvido para edificação | Baseado nas Sagradas Escrituras
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
""")
|
151 |
|
152 |
return demo
|
|
|
3 |
import torch
|
4 |
import logging
|
5 |
import warnings
|
6 |
+
from typing import List, Tuple
|
|
|
|
|
|
|
7 |
|
8 |
# Configuração do logging
|
9 |
logging.basicConfig(
|
|
|
13 |
logger = logging.getLogger(__name__)
|
14 |
warnings.filterwarnings('ignore')
|
15 |
|
16 |
+
# Exemplos de perguntas por tema
|
17 |
+
THEME_EXAMPLES = {
|
18 |
+
"casamento": [
|
19 |
+
["casamento", "Como manter um casamento feliz segundo a Bíblia?"],
|
20 |
+
["casamento", "Quais são os princípios bíblicos para resolver conflitos no casamento?"],
|
21 |
+
["casamento", "Como demonstrar amor ao cônjuge de acordo com a Bíblia?"],
|
22 |
+
["casamento", "O que a Bíblia diz sobre perdão no casamento?"],
|
23 |
+
["casamento", "Como orar pelo meu casamento?"]
|
24 |
+
],
|
25 |
+
"criacao_filhos": [
|
26 |
+
["criacao_filhos", "Como disciplinar os filhos segundo a Bíblia?"],
|
27 |
+
["criacao_filhos", "Qual a importância de ensinar a Palavra de Deus aos filhos?"],
|
28 |
+
["criacao_filhos", "Como criar filhos tementes a Deus?"],
|
29 |
+
["criacao_filhos", "Como lidar com filhos rebeldes de forma bíblica?"],
|
30 |
+
["criacao_filhos", "Como ensinar valores cristãos aos filhos pequenos?"]
|
31 |
+
],
|
32 |
+
"papel_mulher": [
|
33 |
+
["papel_mulher", "Qual o papel da mulher cristã no lar?"],
|
34 |
+
["papel_mulher", "Como ser uma mãe segundo o coração de Deus?"],
|
35 |
+
["papel_mulher", "O que significa ser uma mulher virtuosa?"],
|
36 |
+
["papel_mulher", "Como equilibrar trabalho e família como mulher cristã?"],
|
37 |
+
["papel_mulher", "Como desenvolver uma vida de oração como mulher?"]
|
38 |
+
],
|
39 |
+
"papel_homem": [
|
40 |
+
["papel_homem", "Quais as responsabilidades do homem como líder do lar?"],
|
41 |
+
["papel_homem", "Como ser um pai presente segundo a Bíblia?"],
|
42 |
+
["papel_homem", "O que significa ser o sacerdote do lar?"],
|
43 |
+
["papel_homem", "Como liderar a família espiritualmente?"],
|
44 |
+
["papel_homem", "Como demonstrar amor à esposa segundo as escrituras?"]
|
45 |
+
]
|
46 |
+
}
|
47 |
+
|
48 |
+
# Banco de passagens bíblicas [mantido o mesmo de antes]
|
49 |
BIBLICAL_PASSAGES = {
|
50 |
"casamento": [
|
51 |
{
|
|
|
94 |
|
95 |
def get_answer(self, theme: str, question: str) -> tuple:
|
96 |
try:
|
|
|
97 |
if theme not in BIBLICAL_PASSAGES:
|
98 |
return "Tema não encontrado em nossa base.", "Sem referências disponíveis."
|
99 |
|
100 |
passage = BIBLICAL_PASSAGES[theme][0]
|
101 |
context = passage["texto"]
|
102 |
|
|
|
103 |
inputs = self.tokenizer.encode_plus(
|
104 |
question,
|
105 |
context,
|
|
|
109 |
padding="max_length"
|
110 |
).to(self.device)
|
111 |
|
|
|
112 |
with torch.no_grad():
|
113 |
outputs = self.model(**inputs)
|
114 |
|
|
|
119 |
answer = tokens[answer_start:answer_end + 1]
|
120 |
answer = self.tokenizer.convert_tokens_to_string(answer)
|
121 |
|
|
|
122 |
formatted_answer = f"Com base na palavra de Deus, {answer}"
|
123 |
reference = f"📖 {passage['passagem']}\n✝️ Contexto: {passage['contexto']}"
|
124 |
|
|
|
128 |
logger.error(f"Erro ao processar pergunta: {str(e)}")
|
129 |
return "Perdoe-nos, ocorreu um erro ao processar sua pergunta.", "Erro no processamento"
|
130 |
|
131 |
+
def get_theme_examples(theme: str) -> List[List[str]]:
|
132 |
+
"""Retorna exemplos para um tema específico"""
|
133 |
+
return THEME_EXAMPLES.get(theme, [])
|
134 |
+
|
135 |
def create_interface():
|
136 |
try:
|
137 |
counselor = BiblicalCounselor()
|
|
|
167 |
lines=2
|
168 |
)
|
169 |
|
170 |
+
# Exemplos dinâmicos baseados no tema
|
171 |
+
examples = gr.Examples(
|
172 |
+
examples=THEME_EXAMPLES["casamento"], # Exemplos iniciais
|
173 |
+
inputs=[theme, question],
|
174 |
+
outputs=[answer_output, reference_output],
|
175 |
+
fn=lambda t, q: counselor.get_answer(t, q),
|
176 |
+
label="Exemplos de Perguntas"
|
177 |
+
)
|
178 |
+
|
179 |
+
# Atualiza exemplos quando o tema muda
|
180 |
+
def update_examples(new_theme):
|
181 |
+
examples.update(examples=THEME_EXAMPLES[new_theme])
|
182 |
+
|
183 |
+
theme.change(
|
184 |
+
fn=update_examples,
|
185 |
+
inputs=[theme]
|
186 |
+
)
|
187 |
+
|
188 |
submit_btn.click(
|
189 |
fn=lambda t, q: counselor.get_answer(t, q),
|
190 |
inputs=[theme, question],
|
|
|
194 |
gr.Markdown("""
|
195 |
---
|
196 |
💝 Desenvolvido para edificação | Baseado nas Sagradas Escrituras
|
197 |
+
|
198 |
+
#### Como usar:
|
199 |
+
1. Selecione um tema de seu interesse
|
200 |
+
2. Digite sua pergunta ou use um dos exemplos abaixo
|
201 |
+
3. Clique em "Buscar Orientação" para receber o conselho bíblico
|
202 |
+
4. Medite na resposta e nas referências fornecidas
|
203 |
""")
|
204 |
|
205 |
return demo
|