Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -5,156 +5,42 @@ import logging
|
|
5 |
from typing import Tuple, Dict
|
6 |
import warnings
|
7 |
import json
|
8 |
-
from
|
|
|
9 |
warnings.filterwarnings('ignore')
|
10 |
|
11 |
-
|
12 |
-
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
"casamento": [
|
17 |
-
{
|
18 |
-
"passagem": "Efésios 5:22-33",
|
19 |
-
"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. Quem ama a sua mulher, ama-se a si mesmo... Por isso deixará o homem seu pai e sua mãe, e se unirá a sua mulher; e serão dois numa só carne.""",
|
20 |
-
"contexto": "Relacionamento conjugal e amor sacrificial"
|
21 |
-
},
|
22 |
-
{
|
23 |
-
"passagem": "1 Coríntios 13:4-7",
|
24 |
-
"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.""",
|
25 |
-
"contexto": "Definição do amor verdadeiro"
|
26 |
-
}
|
27 |
-
],
|
28 |
-
"criacao_filhos": [
|
29 |
-
{
|
30 |
-
"passagem": "Provérbios 22:6",
|
31 |
-
"texto": """Instrui o menino no caminho em que deve andar, e até quando envelhecer não se desviará dele.""",
|
32 |
-
"contexto": "Educação dos filhos"
|
33 |
-
},
|
34 |
-
{
|
35 |
-
"passagem": "Efésios 6:4",
|
36 |
-
"texto": """E vós, pais, não provoqueis vossos filhos à ira, mas criai-os na disciplina e na admoestação do Senhor.""",
|
37 |
-
"contexto": "Responsabilidade dos pais"
|
38 |
-
}
|
39 |
-
],
|
40 |
-
"papel_mulher": [
|
41 |
-
{
|
42 |
-
"passagem": "Provérbios 31:10-31",
|
43 |
-
"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. Olha pelo governo de sua casa, e não come o pão da preguiça.""",
|
44 |
-
"contexto": "Mulher virtuosa"
|
45 |
-
},
|
46 |
-
{
|
47 |
-
"passagem": "Tito 2:4-5",
|
48 |
-
"texto": """Para que ensinem as mulheres jovens a amarem seus maridos e filhos, a serem prudentes, castas, boas donas de casa, sujeitas a seus maridos, a fim de que a palavra de Deus não seja blasfemada.""",
|
49 |
-
"contexto": "Papel da mulher na família"
|
50 |
-
}
|
51 |
-
],
|
52 |
-
"papel_homem": [
|
53 |
-
{
|
54 |
-
"passagem": "1 Timóteo 5:8",
|
55 |
-
"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.""",
|
56 |
-
"contexto": "Responsabilidade do homem como provedor"
|
57 |
-
},
|
58 |
-
{
|
59 |
-
"passagem": "Colossenses 3:19",
|
60 |
-
"texto": """Vós, maridos, amai vossas mulheres, e não vos irriteis contra elas.""",
|
61 |
-
"contexto": "Dever do marido"
|
62 |
-
}
|
63 |
-
],
|
64 |
-
"financas": [
|
65 |
-
{
|
66 |
-
"passagem": "Provérbios 3:9-10",
|
67 |
-
"texto": """Honra ao Senhor com os teus bens, e com as primícias de toda a tua renda; E se encherão os teus celeiros abundantemente, e transbordarão de mosto os teus lagares.""",
|
68 |
-
"contexto": "Mordomia financeira"
|
69 |
-
}
|
70 |
-
],
|
71 |
-
"trabalho": [
|
72 |
-
{
|
73 |
-
"passagem": "Colossenses 3:23",
|
74 |
-
"texto": """E tudo quanto fizerdes, fazei-o de coração, como ao Senhor, e não aos homens.""",
|
75 |
-
"contexto": "Ética do trabalho"
|
76 |
-
}
|
77 |
-
]
|
78 |
-
}
|
79 |
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
self.model.to(self.device)
|
88 |
-
logger.info(f"Modelo carregado no dispositivo: {self.device}")
|
89 |
|
90 |
-
def
|
91 |
-
"""Retorna passagens bíblicas
|
92 |
if theme in BIBLICAL_PASSAGES:
|
93 |
passages = BIBLICAL_PASSAGES[theme]
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
"
|
107 |
-
|
108 |
-
"Na luz da palavra de Deus, "
|
109 |
-
]
|
110 |
-
|
111 |
-
pastoral_conclusions = [
|
112 |
-
f"\n\nQue o Espírito Santo ilumine seu entendimento sobre esta verdade. ({passage_ref})",
|
113 |
-
f"\n\nMedite nesta palavra e permita que Deus fale ao seu coração. ({passage_ref})",
|
114 |
-
f"\n\nQue esta verdade bíblica traga direção para sua vida. ({passage_ref})",
|
115 |
-
f"\n\nBusque sempre a orientação divina através das Escrituras. ({passage_ref})",
|
116 |
-
]
|
117 |
-
|
118 |
-
from random import choice
|
119 |
-
return f"{choice(pastoral_prefixes)}{answer}{choice(pastoral_conclusions)}"
|
120 |
-
|
121 |
-
def answer_question(self, theme: str, question: str) -> Tuple[str, Dict]:
|
122 |
-
context = self.get_biblical_context(theme, question)
|
123 |
-
if not context:
|
124 |
-
return "Perdoe-me, não encontrei passagens específicas para este tema.", {}
|
125 |
-
|
126 |
-
inputs = self.tokenizer.encode_plus(
|
127 |
-
question, context,
|
128 |
-
add_special_tokens=True,
|
129 |
-
return_tensors="pt",
|
130 |
-
max_length=512,
|
131 |
-
truncation=True,
|
132 |
-
padding="max_length"
|
133 |
-
).to(self.device)
|
134 |
-
|
135 |
-
with torch.no_grad():
|
136 |
-
outputs = self.model(**inputs)
|
137 |
-
|
138 |
-
answer_start = torch.argmax(outputs.start_logits)
|
139 |
-
answer_end = torch.argmax(outputs.end_logits)
|
140 |
-
|
141 |
-
tokens = self.tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
|
142 |
-
answer = tokens[answer_start:answer_end + 1]
|
143 |
-
answer = self.tokenizer.convert_tokens_to_string(answer)
|
144 |
-
|
145 |
-
# Encontra a referência da passagem usada
|
146 |
-
passage_ref = context.split(':')[0] if ':' in context else "Bíblia Sagrada"
|
147 |
-
|
148 |
-
pastoral_answer = self.format_pastoral_response(answer, theme, passage_ref)
|
149 |
-
|
150 |
-
return pastoral_answer, {
|
151 |
-
"tema": theme,
|
152 |
-
"passagem": passage_ref,
|
153 |
-
"contexto_completo": context[:200] + "..."
|
154 |
-
}
|
155 |
-
|
156 |
-
def create_biblical_counselor_interface():
|
157 |
-
qa_model = BiblicalCounselorModel()
|
158 |
|
159 |
def process_counseling(theme: str, question: str) -> Tuple[str, str]:
|
160 |
try:
|
@@ -169,56 +55,121 @@ def create_biblical_counselor_interface():
|
|
169 |
logger.error(f"Erro ao processar pergunta: {str(e)}")
|
170 |
return "Perdoe-nos, houve uma dificuldade em processar sua pergunta. Vamos orar e tentar novamente.", "N/A"
|
171 |
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
216 |
|
217 |
return demo
|
218 |
|
219 |
if __name__ == "__main__":
|
220 |
-
logger.info("Iniciando ministério de aconselhamento bíblico...")
|
221 |
-
demo =
|
222 |
demo.launch(
|
223 |
server_name="0.0.0.0",
|
224 |
share=True,
|
|
|
5 |
from typing import Tuple, Dict
|
6 |
import warnings
|
7 |
import json
|
8 |
+
from datetime import datetime
|
9 |
+
import random
|
10 |
warnings.filterwarnings('ignore')
|
11 |
|
12 |
+
# [O código das constantes BIBLICAL_PASSAGES permanece o mesmo]
|
13 |
+
# [A classe BiblicalCounselorModel permanece a mesma]
|
14 |
|
15 |
+
def create_enhanced_interface():
|
16 |
+
qa_model = BiblicalCounselorModel()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
18 |
+
def get_verse_of_day():
|
19 |
+
"""Retorna um versículo diário aleatório"""
|
20 |
+
all_verses = []
|
21 |
+
for theme_verses in BIBLICAL_PASSAGES.values():
|
22 |
+
all_verses.extend(theme_verses)
|
23 |
+
verse = random.choice(all_verses)
|
24 |
+
return f"📖 {verse['passagem']}\n\n{verse['texto']}"
|
|
|
|
|
25 |
|
26 |
+
def get_theme_summary(theme: str) -> str:
|
27 |
+
"""Retorna um resumo das passagens bíblicas do tema"""
|
28 |
if theme in BIBLICAL_PASSAGES:
|
29 |
passages = BIBLICAL_PASSAGES[theme]
|
30 |
+
summary = f"📚 Principais passagens sobre {theme.replace('_', ' ').title()}:\n\n"
|
31 |
+
for p in passages:
|
32 |
+
summary += f"• {p['passagem']}: {p['texto'][:100]}...\n\n"
|
33 |
+
return summary
|
34 |
+
return "Tema não encontrado."
|
35 |
+
|
36 |
+
def save_testimony(testimony: str) -> str:
|
37 |
+
"""Salva um testemunho compartilhado"""
|
38 |
+
if testimony.strip():
|
39 |
+
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
40 |
+
with open("testimonies.txt", "a", encoding="utf-8") as f:
|
41 |
+
f.write(f"\n[{timestamp}] {testimony}\n")
|
42 |
+
return "🙏 Obrigado por compartilhar seu testemunho! Que ele possa edificar outros irmãos."
|
43 |
+
return "Por favor, escreva seu testemunho antes de enviar."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
def process_counseling(theme: str, question: str) -> Tuple[str, str]:
|
46 |
try:
|
|
|
55 |
logger.error(f"Erro ao processar pergunta: {str(e)}")
|
56 |
return "Perdoe-nos, houve uma dificuldade em processar sua pergunta. Vamos orar e tentar novamente.", "N/A"
|
57 |
|
58 |
+
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
59 |
+
gr.Markdown(
|
60 |
+
"""
|
61 |
+
# 🕊️ Conselheiro Bíblico Virtual
|
62 |
+
### Centro de Aconselhamento e Edificação
|
63 |
+
|
64 |
+
_"Toda a Escritura é inspirada por Deus e útil para o ensino, para a repreensão,
|
65 |
+
para a correção e para a instrução na justiça." - 2 Timóteo 3:16_
|
66 |
+
"""
|
67 |
+
)
|
68 |
+
|
69 |
+
with gr.Tabs():
|
70 |
+
# Aba de Aconselhamento
|
71 |
+
with gr.Tab("📚 Aconselhamento Bíblico"):
|
72 |
+
with gr.Row():
|
73 |
+
with gr.Column():
|
74 |
+
theme = gr.Dropdown(
|
75 |
+
choices=[
|
76 |
+
"casamento",
|
77 |
+
"criacao_filhos",
|
78 |
+
"papel_mulher",
|
79 |
+
"papel_homem",
|
80 |
+
"financas",
|
81 |
+
"trabalho"
|
82 |
+
],
|
83 |
+
label="Tema de Aconselhamento",
|
84 |
+
value="casamento"
|
85 |
+
)
|
86 |
+
question = gr.Textbox(
|
87 |
+
label="Sua Pergunta",
|
88 |
+
placeholder="Qual sua dúvida sobre este tema?",
|
89 |
+
lines=2
|
90 |
+
)
|
91 |
+
submit_btn = gr.Button("🙏 Buscar Orientação Bíblica", variant="primary")
|
92 |
+
|
93 |
+
with gr.Column():
|
94 |
+
theme_info = gr.Textbox(
|
95 |
+
label="Passagens Relacionadas ao Tema",
|
96 |
+
lines=5
|
97 |
+
)
|
98 |
+
theme.change(fn=get_theme_summary, inputs=[theme], outputs=[theme_info])
|
99 |
+
|
100 |
+
counseling_output = gr.Textbox(label="Conselho Bíblico", lines=5)
|
101 |
+
references = gr.Textbox(label="Referências Bíblicas", lines=3)
|
102 |
+
|
103 |
+
submit_btn.click(
|
104 |
+
fn=process_counseling,
|
105 |
+
inputs=[theme, question],
|
106 |
+
outputs=[counseling_output, references]
|
107 |
+
)
|
108 |
+
|
109 |
+
# Aba de Versículo do Dia
|
110 |
+
with gr.Tab("✨ Versículo do Dia"):
|
111 |
+
gr.Markdown("### Palavra para Reflexão")
|
112 |
+
verse_output = gr.Textbox(label="", lines=4)
|
113 |
+
refresh_btn = gr.Button("🔄 Novo Versículo")
|
114 |
+
refresh_btn.click(fn=get_verse_of_day, inputs=[], outputs=[verse_output])
|
115 |
+
|
116 |
+
# Aba de Testemunhos
|
117 |
+
with gr.Tab("💝 Compartilhe seu Testemunho"):
|
118 |
+
gr.Markdown("""
|
119 |
+
### Compartilhe sua Experiência
|
120 |
+
Conte como a Palavra de Deus tem transformado sua vida
|
121 |
+
""")
|
122 |
+
testimony_input = gr.Textbox(
|
123 |
+
label="Seu Testemunho",
|
124 |
+
placeholder="Compartilhe aqui sua experiência...",
|
125 |
+
lines=5
|
126 |
+
)
|
127 |
+
share_btn = gr.Button("❤️ Compartilhar Testemunho")
|
128 |
+
testimony_output = gr.Textbox(label="Status")
|
129 |
+
share_btn.click(
|
130 |
+
fn=save_testimony,
|
131 |
+
inputs=[testimony_input],
|
132 |
+
outputs=[testimony_output]
|
133 |
+
)
|
134 |
+
|
135 |
+
# Aba de Recursos
|
136 |
+
with gr.Tab("📖 Recursos"):
|
137 |
+
gr.Markdown("""
|
138 |
+
### Recursos para Estudo Bíblico
|
139 |
+
|
140 |
+
#### 📚 Temas Disponíveis:
|
141 |
+
- Casamento e Família
|
142 |
+
- Criação de Filhos
|
143 |
+
- Papel da Mulher
|
144 |
+
- Papel do Homem
|
145 |
+
- Finanças
|
146 |
+
- Trabalho e Vocação
|
147 |
+
|
148 |
+
#### 🙏 Como Usar:
|
149 |
+
1. Escolha um tema de seu interesse
|
150 |
+
2. Faça sua pergunta específica
|
151 |
+
3. Receba orientação baseada nas Escrituras
|
152 |
+
4. Medite nas passagens fornecidas
|
153 |
+
|
154 |
+
#### ✝️ Lembre-se:
|
155 |
+
- Ore antes de buscar orientação
|
156 |
+
- Leia o contexto completo das passagens
|
157 |
+
- Busque aconselhamento pastoral presencial quando necessário
|
158 |
+
""")
|
159 |
+
|
160 |
+
# Rodapé
|
161 |
+
gr.Markdown("""
|
162 |
+
---
|
163 |
+
💖 Desenvolvido para edificação do Corpo de Cristo | Versão 2.0
|
164 |
+
|
165 |
+
_"Porque a palavra de Deus é viva e eficaz..." - Hebreus 4:12_
|
166 |
+
""")
|
167 |
|
168 |
return demo
|
169 |
|
170 |
if __name__ == "__main__":
|
171 |
+
logger.info("Iniciando ministério de aconselhamento bíblico aprimorado...")
|
172 |
+
demo = create_enhanced_interface()
|
173 |
demo.launch(
|
174 |
server_name="0.0.0.0",
|
175 |
share=True,
|