DHEIVER commited on
Commit
f6cb88d
1 Parent(s): f756686

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -107
app.py CHANGED
@@ -5,37 +5,12 @@ import logging
5
  import warnings
6
  from typing import List, Tuple, Dict
7
  import random
8
- import hashlib
9
  from datetime import datetime
10
 
11
- # Configuração de logging
12
- logging.basicConfig(
13
- level=logging.INFO,
14
- format='%(asctime)s - %(levelname)s - %(message)s'
15
- )
16
  logger = logging.getLogger(__name__)
17
  warnings.filterwarnings('ignore')
18
 
19
- # Banco de passagens bíblicas
20
- BIBLICAL_PASSAGES = {
21
- "casamento": [
22
- {
23
- "passagem": "Efésios 5:22-33",
24
- "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.""",
25
- "contexto": "Relacionamento conjugal",
26
- "resposta_base": "O casamento cristão é baseado no amor sacrificial e no respeito mútuo, refletindo a relação entre Cristo e a Igreja."
27
- }
28
- ],
29
- "criacao_filhos": [
30
- {
31
- "passagem": "Provérbios 22:6",
32
- "texto": "Instrui o menino no caminho em que deve andar, e até quando envelhecer não se desviará dele.",
33
- "contexto": "Educação dos filhos",
34
- "resposta_base": "A educação dos filhos deve ser fundamentada nos princípios bíblicos, com instrução constante e exemplo."
35
- }
36
- ]
37
- }
38
-
39
  class BiblicalCounselor:
40
  def __init__(self):
41
  logger.info("Inicializando conselheiro bíblico...")
@@ -53,15 +28,55 @@ class BiblicalCounselor:
53
 
54
  def get_answer(self, theme: str, question: str) -> Tuple[str, str]:
55
  try:
56
- if theme not in BIBLICAL_PASSAGES:
57
- return "Tema não encontrado.", "Sem referências disponíveis."
58
-
59
- passage = BIBLICAL_PASSAGES[theme][0]
60
- context = passage["texto"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  inputs = self.tokenizer.encode_plus(
63
  question,
64
- context,
65
  return_tensors="pt",
66
  max_length=512,
67
  truncation=True,
@@ -76,46 +91,34 @@ class BiblicalCounselor:
76
 
77
  tokens = self.tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
78
  answer = tokens[answer_start:answer_end + 1]
79
- answer = self.tokenizer.convert_tokens_to_string(answer)
80
 
81
- # Formata a resposta
82
  response = f"""
83
- 🕊️ Orientação Bíblica:
84
- {passage['resposta_base']}
85
-
86
- 📖 Baseado em {passage['passagem']}:
87
- {answer}
88
-
89
- ✝️ Contexto:
90
- {passage['contexto']}
 
 
 
 
91
  """
92
 
93
- references = f"📚 Referência: {passage['passagem']}\n🔍 Contexto: {passage['contexto']}"
94
 
95
  return response, references
96
 
97
  except Exception as e:
98
  logger.error(f"Erro ao processar pergunta: {str(e)}")
99
- return "Ocorreu um erro ao processar sua pergunta.", "Erro no processamento"
100
-
101
- def get_daily_verse() -> str:
102
- """Retorna um versículo diário"""
103
- verses = [
104
- "O Senhor é meu pastor, nada me faltará. (Salmos 23:1)",
105
- "Tudo posso naquele que me fortalece. (Filipenses 4:13)",
106
- "O amor é paciente, o amor é bondoso... (1 Coríntios 13:4)"
107
- ]
108
- return random.choice(verses)
109
 
110
  def create_interface():
111
  counselor = BiblicalCounselor()
112
 
113
- # Temas com ícones
114
- themes = {
115
- "casamento": "💑 Casamento",
116
- "criacao_filhos": "👶 Criação de Filhos"
117
- }
118
-
119
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
120
  gr.Markdown("""
121
  # 🕊️ Conselheiro Bíblico Virtual
@@ -124,16 +127,11 @@ def create_interface():
124
 
125
  with gr.Row():
126
  with gr.Column():
 
127
  theme = gr.Dropdown(
128
- choices=list(themes.items()),
129
- label="Tema",
130
- value="casamento"
131
- )
132
-
133
- verse_box = gr.Textbox(
134
- label="✨ Versículo do Dia",
135
- value=get_daily_verse(),
136
- interactive=False
137
  )
138
 
139
  question = gr.Textbox(
@@ -142,54 +140,35 @@ def create_interface():
142
  lines=3
143
  )
144
 
145
- with gr.Row():
146
- submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary")
147
- clear_btn = gr.Button("🔄 Limpar")
148
 
149
  with gr.Column():
150
- answer_output = gr.Markdown()
151
- references = gr.Textbox(
152
- label="📚 Referências",
153
- interactive=False
154
- )
155
 
156
- # Exemplos
157
- gr.Examples(
158
- examples=[
159
- ["casamento", "Como resolver conflitos no casamento?"],
160
- ["casamento", "Como manter um casamento forte?"],
161
- ["criacao_filhos", "Como educar filhos segundo a Bíblia?"],
162
- ["criacao_filhos", "Como disciplinar com amor?"],
163
- ["casamento", "Como orar pelo casamento?"]
164
- ],
165
- inputs=[theme, question],
166
- outputs=[answer_output, references],
167
- fn=lambda t, q: counselor.get_answer(t, q)
168
- )
 
 
169
 
170
  # Eventos
171
- def clear_outputs():
172
- return gr.Textbox.update(value=""), gr.Markdown.update(value=""), gr.Textbox.update(value="")
173
-
174
  submit_btn.click(
175
- fn=counselor.get_answer,
176
  inputs=[theme, question],
177
  outputs=[answer_output, references]
178
  )
179
 
180
- clear_btn.click(
181
- fn=clear_outputs,
182
- inputs=[],
183
- outputs=[question, answer_output, references]
184
- )
185
-
186
- # Atualiza versículo diariamente
187
- demo.load(
188
- fn=get_daily_verse,
189
- inputs=[],
190
- outputs=[verse_box]
191
- )
192
-
193
  return demo
194
 
195
  if __name__ == "__main__":
@@ -199,7 +178,8 @@ if __name__ == "__main__":
199
  demo.launch(
200
  server_name="0.0.0.0",
201
  share=True,
202
- show_error=True
 
203
  )
204
  except Exception as e:
205
  logger.error(f"Erro ao iniciar aplicação: {str(e)}")
 
5
  import warnings
6
  from typing import List, Tuple, Dict
7
  import random
 
8
  from datetime import datetime
9
 
10
+ logging.basicConfig(level=logging.INFO)
 
 
 
 
11
  logger = logging.getLogger(__name__)
12
  warnings.filterwarnings('ignore')
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  class BiblicalCounselor:
15
  def __init__(self):
16
  logger.info("Inicializando conselheiro bíblico...")
 
28
 
29
  def get_answer(self, theme: str, question: str) -> Tuple[str, str]:
30
  try:
31
+ # Respostas pré-definidas para exemplos
32
+ responses = {
33
+ "casamento_conflitos": (
34
+ """🕊️ Orientação Bíblica:
35
+ Com base em Efésios 4:26-27, devemos resolver os conflitos sem deixar que o sol se ponha sobre nossa ira.
36
+ O perdão e a comunicação são fundamentais no casamento cristão.
37
+
38
+ 📖 Princípios Importantes:
39
+ 1. Não permita que a raiva permaneça
40
+ 2. Comunique-se com amor
41
+ 3. Pratique o perdão mútuo
42
+
43
+ ✝️ Aplicação Prática:
44
+ - Resolva os conflitos no mesmo dia
45
+ - Use palavras edificantes
46
+ - Ore juntos pela situação""",
47
+
48
+ "📚 Referência: Efésios 4:26-27\n🔍 Contexto: Resolução de Conflitos no Casamento"
49
+ ),
50
+
51
+ "casamento_oracao": (
52
+ """🕊️ Orientação Bíblica:
53
+ A oração conjunta fortalece o casamento. Conforme 1 Pedro 3:7, marido e mulher são co-herdeiros da graça da vida.
54
+
55
+ 📖 Princípios Importantes:
56
+ 1. Orem juntos diariamente
57
+ 2. Compartilhem pedidos de oração
58
+ 3. Agradeçam um pelo outro
59
+
60
+ ✝️ Aplicação Prática:
61
+ - Estabeleçam um momento diário de oração
62
+ - Orem pelos desafios mútuos
63
+ - Celebrem as bênçãos juntos""",
64
+
65
+ "📚 Referência: 1 Pedro 3:7\n🔍 Contexto: Vida de Oração no Casamento"
66
+ )
67
+ }
68
+
69
+ # Tenta encontrar uma resposta pré-definida
70
+ key = f"{theme}_{question.lower().split()[0]}"
71
+ if key in responses:
72
+ return responses[key]
73
+
74
+ # Se não encontrar resposta pré-definida, usa o modelo
75
+ passage = "Efésios 5:22-33: Vós, mulheres, sujeitai-vos a vossos maridos, como ao Senhor... Assim devem os maridos amar as suas mulheres, como a seus próprios corpos."
76
 
77
  inputs = self.tokenizer.encode_plus(
78
  question,
79
+ passage,
80
  return_tensors="pt",
81
  max_length=512,
82
  truncation=True,
 
91
 
92
  tokens = self.tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
93
  answer = tokens[answer_start:answer_end + 1]
94
+ model_answer = self.tokenizer.convert_tokens_to_string(answer)
95
 
 
96
  response = f"""
97
+ 🕊️ Orientação Bíblica:
98
+ {model_answer}
99
+
100
+ 📖 Princípios Importantes:
101
+ 1. Busque a orientação divina
102
+ 2. Aplique os princípios bíblicos
103
+ 3. Mantenha-se em oração
104
+
105
+ ✝️ Aplicação Prática:
106
+ - Estude a Palavra regularmente
107
+ - Pratique os ensinamentos
108
+ - Busque aconselhamento pastoral quando necessário
109
  """
110
 
111
+ references = "📚 Referência: Efésios 5:22-33\n🔍 Contexto: Princípios Bíblicos para a Vida Cristã"
112
 
113
  return response, references
114
 
115
  except Exception as e:
116
  logger.error(f"Erro ao processar pergunta: {str(e)}")
117
+ return "Perdoe-nos, ocorreu um erro ao processar sua pergunta.", "Erro no processamento"
 
 
 
 
 
 
 
 
 
118
 
119
  def create_interface():
120
  counselor = BiblicalCounselor()
121
 
 
 
 
 
 
 
122
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
123
  gr.Markdown("""
124
  # 🕊️ Conselheiro Bíblico Virtual
 
127
 
128
  with gr.Row():
129
  with gr.Column():
130
+ # Dropdown com valores corretos
131
  theme = gr.Dropdown(
132
+ choices=["💑 Casamento", "👶 Criação de Filhos"],
133
+ value="💑 Casamento",
134
+ label="Escolha o Tema"
 
 
 
 
 
 
135
  )
136
 
137
  question = gr.Textbox(
 
140
  lines=3
141
  )
142
 
143
+ submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary")
 
 
144
 
145
  with gr.Column():
146
+ answer_output = gr.Markdown(label="Resposta")
147
+ references = gr.Textbox(label="Referências", interactive=False)
 
 
 
148
 
149
+ # Exemplos sem cache
150
+ with gr.Row():
151
+ gr.Markdown("""### Exemplos de Perguntas:
152
+ 1. Como resolver conflitos no casamento?
153
+ 2. Como orar pelo casamento?
154
+ 3. Como educar filhos biblicamente?
155
+ 4. Como manter a harmonia familiar?
156
+ 5. Como lidar com diferenças no casamento?
157
+ """)
158
+
159
+ # Função para processar a pergunta
160
+ def process_question(theme_selected, question_text):
161
+ # Remove emojis do tema para processamento
162
+ theme_clean = "casamento" if "Casamento" in theme_selected else "criacao_filhos"
163
+ return counselor.get_answer(theme_clean, question_text)
164
 
165
  # Eventos
 
 
 
166
  submit_btn.click(
167
+ fn=process_question,
168
  inputs=[theme, question],
169
  outputs=[answer_output, references]
170
  )
171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  return demo
173
 
174
  if __name__ == "__main__":
 
178
  demo.launch(
179
  server_name="0.0.0.0",
180
  share=True,
181
+ show_error=True,
182
+ cache_examples=False # Desativa cache de exemplos
183
  )
184
  except Exception as e:
185
  logger.error(f"Erro ao iniciar aplicação: {str(e)}")