DHEIVER commited on
Commit
3f3176a
1 Parent(s): 8e7e0ba

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -149
app.py CHANGED
@@ -3,85 +3,55 @@ from transformers import AutoTokenizer, AutoModelForQuestionAnswering
3
  import torch
4
  import logging
5
  import warnings
6
- from typing import List, Tuple
 
7
 
8
- # Configuração do logging
9
- logging.basicConfig(
10
- level=logging.INFO,
11
- format='%(asctime)s - %(levelname)s - %(message)s'
12
- )
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
  {
52
  "passagem": "Efésios 5:22-33",
53
- "texto": "Vós, mulheres, sujeitai-vos a vossos maridos, como ao Senhor; Porque o marido é a cabeça da mulher, como também Cristo é a cabeça da igreja... Assim devem os maridos amar as suas mulheres, como a seus próprios corpos.",
54
- "contexto": "Relacionamento conjugal"
55
- }
56
- ],
57
- "criacao_filhos": [
58
  {
59
- "passagem": "Provérbios 22:6",
60
- "texto": "Instrui o menino no caminho em que deve andar, e até quando envelhecer não se desviará dele.",
61
- "contexto": "Educação dos filhos"
 
 
62
  }
63
  ],
64
- "papel_mulher": [
65
  {
66
- "passagem": "Provérbios 31:10-31",
67
- "texto": "Mulher virtuosa, quem a achará? O seu valor muito excede o de rubis... Abre a sua boca com sabedoria, e a lei da beneficência está na sua língua.",
68
- "contexto": "Mulher virtuosa"
69
- }
70
- ],
71
- "papel_homem": [
72
  {
73
- "passagem": "1 Timóteo 5:8",
74
- "texto": "Mas, se alguém não tem cuidado dos seus, e principalmente dos da sua família, negou a fé, e é pior do que o infiel.",
75
- "contexto": "Responsabilidade familiar"
 
 
76
  }
77
  ]
78
  }
79
 
80
- class BiblicalCounselor:
81
  def __init__(self):
82
- logger.info("Inicializando conselheiro bíblico...")
83
  self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
84
  self.model_name = "pierreguillou/bert-base-cased-squad-v1.1-portuguese"
 
85
 
86
  try:
87
  self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
@@ -92,23 +62,50 @@ class BiblicalCounselor:
92
  logger.error(f"Erro ao carregar modelo: {str(e)}")
93
  raise
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,
106
  return_tensors="pt",
107
- max_length=512,
108
  truncation=True,
109
  padding="max_length"
110
  ).to(self.device)
111
 
 
112
  with torch.no_grad():
113
  outputs = self.model(**inputs)
114
 
@@ -119,104 +116,81 @@ class BiblicalCounselor:
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
 
125
- return formatted_answer, reference
126
 
127
  except Exception as e:
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()
138
- logger.info("Interface sendo criada...")
139
-
140
- with gr.Blocks(theme=gr.themes.Soft()) as demo:
141
- gr.Markdown("""
142
- # 🕊️ Conselheiro Bíblico
143
- ### Orientação baseada nas Sagradas Escrituras
144
- """)
145
-
146
- with gr.Row():
147
- with gr.Column():
148
- theme = gr.Dropdown(
149
- choices=list(BIBLICAL_PASSAGES.keys()),
150
- label="Tema de Aconselhamento",
151
- value="casamento"
152
- )
153
- question = gr.Textbox(
154
- label="Sua Pergunta",
155
- placeholder="O que gostaria de saber sobre este tema?",
156
- lines=2
157
- )
158
- submit_btn = gr.Button("🙏 Buscar Orientação")
159
-
160
- with gr.Column():
161
- answer_output = gr.Textbox(
162
- label="Conselho Bíblico",
163
- lines=4
164
- )
165
- reference_output = gr.Textbox(
166
- label="Referência Bíblica",
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],
191
- outputs=[answer_output, reference_output]
192
- )
193
-
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
206
 
207
- except Exception as e:
208
- logger.error(f"Erro ao criar interface: {str(e)}")
209
- raise
210
 
211
  if __name__ == "__main__":
212
  try:
213
- logger.info("Iniciando aplicação...")
214
- demo = create_interface()
215
- demo.launch(
216
- server_name="0.0.0.0",
217
- share=True,
218
- show_error=True
219
- )
220
  except Exception as e:
221
  logger.error(f"Erro ao iniciar aplicação: {str(e)}")
222
  raise
 
3
  import torch
4
  import logging
5
  import warnings
6
+ from typing import List, Tuple, Dict
7
+ import random
8
 
9
+ logging.basicConfig(level=logging.INFO)
 
 
 
 
10
  logger = logging.getLogger(__name__)
11
  warnings.filterwarnings('ignore')
12
 
13
+ # Expandindo o banco de passagens bíblicas com mais contexto
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  BIBLICAL_PASSAGES = {
15
  "casamento": [
16
  {
17
  "passagem": "Efésios 5:22-33",
18
+ "texto": """Vós, mulheres, sujeitai-vos a vossos maridos, como ao Senhor; Porque o marido é a cabeça da mulher, como também Cristo é a cabeça da igreja, sendo ele próprio o salvador do corpo. De sorte que, assim como a igreja está sujeita a Cristo, assim também as mulheres sejam em tudo sujeitas a seus maridos. Vós, maridos, amai vossas mulheres, como também Cristo amou a igreja, e a si mesmo se entregou por ela, Para a santificar, purificando-a com a lavagem da água, pela palavra, Para a apresentar a si mesmo igreja gloriosa, sem mácula, nem ruga, nem coisa semelhante, mas santa e irrepreensível. Assim devem os maridos amar as suas mulheres, como a seus próprios corpos. Quem ama a sua mulher, ama-se a si mesmo.""",
19
+ "contexto": "Relacionamento conjugal e amor sacrificial",
20
+ "aplicação": "Este texto apresenta o modelo divino para o casamento, onde o amor sacrificial e o respeito mútuo são fundamentais. O marido deve amar como Cristo amou a igreja, e a esposa deve respeitar como a igreja respeita a Cristo.",
21
+ "princípios": ["Amor sacrificial", "Respeito mútuo", "Liderança servidora", "Unidade conjugal"]
22
+ },
23
  {
24
+ "passagem": "1 Coríntios 13:4-7",
25
+ "texto": """O amor é paciente, o amor é bondoso. Não inveja, não se vangloria, não se orgulha. Não maltrata, não procura seus interesses, não se ira facilmente, não guarda rancor. O amor não se alegra com a injustiça, mas se alegra com a verdade. Tudo sofre, tudo crê, tudo espera, tudo suporta.""",
26
+ "contexto": "Definição do amor verdadeiro",
27
+ "aplicação": "Esta passagem define o amor verdadeiro e suas características práticas, essenciais para um casamento saudável.",
28
+ "princípios": ["Paciência", "Bondade", "Humildade", "Perdão", "Perseverança"]
29
  }
30
  ],
31
+ "criacao_filhos": [
32
  {
33
+ "passagem": "Deuteronômio 6:6-9",
34
+ "texto": """E estas palavras, que hoje te ordeno, estarão no teu coração; E as ensinarás a teus filhos, e delas falarás assentado em tua casa, e andando pelo caminho, e deitando-te e levantando-te. Também as atarás por sinal na tua mão, e te serão por frontais entre os teus olhos. E as escreverás nos umbrais de tua casa, e nas tuas portas.""",
35
+ "contexto": "Instrução espiritual dos filhos",
36
+ "aplicação": "Os pais têm a responsabilidade primária de ensinar os princípios divinos aos filhos em todos os momentos da vida cotidiana.",
37
+ "princípios": ["Ensino contínuo", "Exemplo pessoal", "Imersão na Palavra", "Disciplina amorosa"]
38
+ },
39
  {
40
+ "passagem": "Provérbios 22:6",
41
+ "texto": """Instrui o menino no caminho em que deve andar, e até quando envelhecer não se desviará dele.""",
42
+ "contexto": "Educação e formação de caráter",
43
+ "aplicação": "A formação espiritual e moral na infância tem impacto duradouro na vida adulta.",
44
+ "princípios": ["Instrução precoce", "Constância no ensino", "Formação de caráter"]
45
  }
46
  ]
47
  }
48
 
49
+ class EnhancedBiblicalCounselor:
50
  def __init__(self):
51
+ logger.info("Inicializando conselheiro bíblico aprimorado...")
52
  self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
53
  self.model_name = "pierreguillou/bert-base-cased-squad-v1.1-portuguese"
54
+ self.max_length = 512 # Máximo de tokens
55
 
56
  try:
57
  self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
 
62
  logger.error(f"Erro ao carregar modelo: {str(e)}")
63
  raise
64
 
65
+ def format_contextual_response(self, answer: str, passage: Dict, question: str) -> str:
66
+ """Formata uma resposta contextualizada e detalhada"""
67
+
68
+ response_template = f"""
69
+ 🕊️ Resposta Pastoral:
70
+ Com base nas Sagradas Escrituras, especialmente em {passage['passagem']}, {answer}
71
+
72
+ 📖 Contexto Bíblico:
73
+ {passage['contexto']}
74
+
75
+ ✝️ Princípios Bíblicos Aplicáveis:
76
+ {' • '.join(passage['princípios'])}
77
+
78
+ 🙏 Aplicação Prática:
79
+ {passage['aplicação']}
80
+
81
+ 📚 Passagem Completa para Meditação:
82
+ "{passage['texto']}"
83
+
84
+ 💭 Reflexão Final:
85
+ Medite nesta palavra e permita que o Espírito Santo a aplique em sua vida. Lembre-se que a Palavra de Deus é viva e eficaz para todas as áreas de nossa vida.
86
+ """
87
+ return response_template
88
+
89
+ def get_comprehensive_answer(self, theme: str, question: str) -> Tuple[str, str]:
90
  try:
91
  if theme not in BIBLICAL_PASSAGES:
92
  return "Tema não encontrado em nossa base.", "Sem referências disponíveis."
93
 
94
+ # Seleciona uma passagem relevante
95
+ passage = BIBLICAL_PASSAGES[theme][0] # Poderia ser randomizado entre as disponíveis
96
  context = passage["texto"]
97
 
98
+ # Prepara o input com máximo de tokens
99
  inputs = self.tokenizer.encode_plus(
100
  question,
101
  context,
102
  return_tensors="pt",
103
+ max_length=self.max_length,
104
  truncation=True,
105
  padding="max_length"
106
  ).to(self.device)
107
 
108
+ # Gera a resposta
109
  with torch.no_grad():
110
  outputs = self.model(**inputs)
111
 
 
116
  answer = tokens[answer_start:answer_end + 1]
117
  answer = self.tokenizer.convert_tokens_to_string(answer)
118
 
119
+ # Formata resposta contextualizada
120
+ detailed_answer = self.format_contextual_response(answer, passage, question)
121
+
122
+ # Prepara metadados
123
+ metadata = f"""
124
+ 📚 Referências Adicionais:
125
+ • Passagem Principal: {passage['passagem']}
126
+ • Tema: {theme.replace('_', ' ').title()}
127
+ • Contexto: {passage['contexto']}
128
+ """
129
 
130
+ return detailed_answer, metadata
131
 
132
  except Exception as e:
133
  logger.error(f"Erro ao processar pergunta: {str(e)}")
134
  return "Perdoe-nos, ocorreu um erro ao processar sua pergunta.", "Erro no processamento"
135
 
136
+ def create_enhanced_interface():
137
+ counselor = EnhancedBiblicalCounselor()
138
+
139
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
140
+ gr.Markdown("""
141
+ # 🕊️ Conselheiro Bíblico Aprofundado
142
+ ### Orientação Bíblica Contextualizada e Detalhada
143
+ """)
144
+
145
+ with gr.Row():
146
+ with gr.Column():
147
+ theme = gr.Dropdown(
148
+ choices=list(BIBLICAL_PASSAGES.keys()),
149
+ label="Tema de Aconselhamento",
150
+ value="casamento"
151
+ )
152
+ question = gr.Textbox(
153
+ label="Sua Pergunta",
154
+ placeholder="Compartilhe sua dúvida para receber orientação bíblica...",
155
+ lines=3
156
+ )
157
+ submit_btn = gr.Button("🙏 Buscar Orientação Aprofundada")
158
+
159
+ with gr.Column():
160
+ answer_output = gr.Textbox(
161
+ label="Conselho Bíblico Detalhado",
162
+ lines=15
163
+ )
164
+ reference_output = gr.Textbox(
165
+ label="Referências e Contexto",
166
+ lines=5
167
+ )
168
+
169
+ submit_btn.click(
170
+ fn=lambda t, q: counselor.get_comprehensive_answer(t, q),
171
+ inputs=[theme, question],
172
+ outputs=[answer_output, reference_output]
173
+ )
174
 
175
+ gr.Markdown("""
176
+ ---
177
+ 💝 Desenvolvido para edificação profunda na Palavra | Baseado nas Sagradas Escrituras
178
+
179
+ #### Como aproveitar ao máximo este recurso:
180
+ 1. Escolha o tema específico de sua dúvida
181
+ 2. Faça uma pergunta clara e específica
182
+ 3. Leia atentamente a resposta contextualizada
183
+ 4. Medite nas passagens bíblicas fornecidas
184
+ 5. Ore pedindo sabedoria para aplicar os princípios
185
+ """)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
 
187
+ return demo
 
 
188
 
189
  if __name__ == "__main__":
190
  try:
191
+ logger.info("Iniciando aplicação de aconselhamento bíblico aprofundado...")
192
+ demo = create_enhanced_interface()
193
+ demo.launch(server_name="0.0.0.0", share=True, show_error=True)
 
 
 
 
194
  except Exception as e:
195
  logger.error(f"Erro ao iniciar aplicação: {str(e)}")
196
  raise