Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -19,7 +19,6 @@ class DiverseBiblicalCounselor:
|
|
19 |
self.model_name = "pierreguillou/bert-base-cased-squad-v1.1-portuguese"
|
20 |
self.session_history = []
|
21 |
|
22 |
-
# Movendo os exemplos para dentro da classe
|
23 |
self.biblical_examples = {
|
24 |
"casamento": [
|
25 |
{
|
@@ -35,6 +34,13 @@ class DiverseBiblicalCounselor:
|
|
35 |
"texto": """É melhor serem dois do que um, porque têm melhor paga do seu trabalho. Porque se um cair, o outro levanta o seu companheiro; mas ai do que estiver só; pois, caindo, não haverá outro que o levante. Também, se dois dormirem juntos, eles se aquentarão; mas um só, como se aquentará? E, se alguém prevalecer contra um, os dois lhe resistirão; e o cordão de três dobras não se quebra tão depressa.""",
|
36 |
"resposta_base": """A força espiritual do casamento vem da união em três dimensões: o marido, a esposa e Deus. Como um cordão de três dobras, esta união proporciona apoio mútuo, fortalecimento espiritual e resistência nas adversidades.""",
|
37 |
"aplicacao": "Desenvolvimento espiritual conjunto e oração em casal"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
}
|
39 |
],
|
40 |
"familia": [
|
@@ -44,6 +50,84 @@ class DiverseBiblicalCounselor:
|
|
44 |
"texto": """Instrui o menino no caminho em que deve andar, e até quando envelhecer não se desviará dele.""",
|
45 |
"resposta_base": """A educação dos filhos deve ser fundamentada nos princípios bíblicos, com amor, disciplina e instrução constante. Os pais são responsáveis por guiar seus filhos no caminho do Senhor desde cedo.""",
|
46 |
"aplicacao": "Ensino diário dos princípios bíblicos aos filhos"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
}
|
48 |
]
|
49 |
}
|
@@ -85,6 +169,23 @@ class DiverseBiblicalCounselor:
|
|
85 |
|
86 |
return f"📖 Versículo do Dia:\n{verse['passagem']}\n\n{verse['texto']}"
|
87 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
def save_to_history(self, question: str, theme: str, response: str, metadata: Dict):
|
89 |
"""Salva a consulta no histórico com timestamp"""
|
90 |
self.session_history.append({
|
@@ -110,49 +211,57 @@ class DiverseBiblicalCounselor:
|
|
110 |
history_text += "─" * 50 + "\n"
|
111 |
return history_text
|
112 |
|
113 |
-
def get_unique_response(self, question: str, theme: str) -> Tuple[str, Dict, str]:
|
114 |
-
"""Gera uma resposta única baseada na pergunta
|
115 |
-
if theme not in self.biblical_examples:
|
116 |
-
|
117 |
|
118 |
-
question_hash = hashlib.md5(question.lower().encode()).hexdigest()
|
119 |
examples = self.biblical_examples[theme]
|
120 |
-
selected_index =
|
121 |
example = examples[selected_index]
|
122 |
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
|
|
131 |
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
|
|
|
|
141 |
|
142 |
response = f"""
|
143 |
🕊️ Conselho Bíblico:
|
144 |
{example['resposta_base']}
|
|
|
145 |
📖 Passagem Bíblica:
|
146 |
{example['passagem']}: {example['texto']}
|
|
|
147 |
✝️ Aplicação Prática:
|
148 |
{example['aplicacao']}
|
|
|
149 |
💭 Reflexão Adicional:
|
150 |
{model_answer}
|
|
|
|
|
151 |
"""
|
152 |
|
153 |
metadata = {
|
154 |
"passagem": example['passagem'],
|
155 |
-
"contexto": "Baseado em princípios bíblicos para
|
156 |
"aplicacao": example['aplicacao']
|
157 |
}
|
158 |
|
@@ -165,7 +274,7 @@ def create_interface():
|
|
165 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
166 |
gr.Markdown("""
|
167 |
# 🕊️ Conselheiro Bíblico
|
168 |
-
### Orientação Bíblica Personalizada
|
169 |
""")
|
170 |
|
171 |
with gr.Row():
|
@@ -182,12 +291,13 @@ def create_interface():
|
|
182 |
with gr.Column():
|
183 |
theme = gr.Dropdown(
|
184 |
choices=counselor.get_themes(),
|
185 |
-
label="Tema",
|
186 |
-
value="
|
|
|
187 |
)
|
188 |
question = gr.Textbox(
|
189 |
label="Sua Pergunta",
|
190 |
-
placeholder="Digite
|
191 |
lines=3
|
192 |
)
|
193 |
submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary")
|
@@ -195,7 +305,7 @@ def create_interface():
|
|
195 |
with gr.Column():
|
196 |
answer_output = gr.Textbox(
|
197 |
label="Resposta",
|
198 |
-
lines=
|
199 |
)
|
200 |
metadata_output = gr.Textbox(
|
201 |
label="Referências",
|
@@ -213,19 +323,29 @@ def create_interface():
|
|
213 |
with gr.TabItem("ℹ️ Ajuda"):
|
214 |
gr.Markdown("""
|
215 |
### Como usar o Conselheiro Bíblico:
|
216 |
-
1.
|
217 |
-
2.
|
218 |
3. Clique em "Buscar Orientação"
|
219 |
4. Receba orientação baseada em princípios bíblicos
|
220 |
-
|
221 |
### Temas Disponíveis:
|
222 |
- Casamento: Conselhos para relacionamento conjugal
|
223 |
- Família: Orientação para vida familiar
|
224 |
-
|
225 |
-
|
226 |
-
-
|
227 |
-
-
|
228 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
""")
|
230 |
|
231 |
gr.Examples(
|
@@ -238,7 +358,7 @@ def create_interface():
|
|
238 |
|
239 |
submit_btn.click(
|
240 |
fn=counselor.get_unique_response,
|
241 |
-
inputs=[
|
242 |
outputs=[answer_output, metadata_output, history_output]
|
243 |
)
|
244 |
|
@@ -251,7 +371,8 @@ if __name__ == "__main__":
|
|
251 |
demo.launch(
|
252 |
server_name="0.0.0.0",
|
253 |
share=True,
|
254 |
-
show_error=True
|
|
|
255 |
)
|
256 |
except Exception as e:
|
257 |
logger.error(f"Erro ao iniciar aplicação: {str(e)}")
|
|
|
19 |
self.model_name = "pierreguillou/bert-base-cased-squad-v1.1-portuguese"
|
20 |
self.session_history = []
|
21 |
|
|
|
22 |
self.biblical_examples = {
|
23 |
"casamento": [
|
24 |
{
|
|
|
34 |
"texto": """É melhor serem dois do que um, porque têm melhor paga do seu trabalho. Porque se um cair, o outro levanta o seu companheiro; mas ai do que estiver só; pois, caindo, não haverá outro que o levante. Também, se dois dormirem juntos, eles se aquentarão; mas um só, como se aquentará? E, se alguém prevalecer contra um, os dois lhe resistirão; e o cordão de três dobras não se quebra tão depressa.""",
|
35 |
"resposta_base": """A força espiritual do casamento vem da união em três dimensões: o marido, a esposa e Deus. Como um cordão de três dobras, esta união proporciona apoio mútuo, fortalecimento espiritual e resistência nas adversidades.""",
|
36 |
"aplicacao": "Desenvolvimento espiritual conjunto e oração em casal"
|
37 |
+
},
|
38 |
+
{
|
39 |
+
"pergunta": "Como lidar com diferenças no casamento?",
|
40 |
+
"passagem": "1 Pedro 3:8-9",
|
41 |
+
"texto": """Finalmente, sede todos de um mesmo sentimento, compassivos, amando os irmãos, entranhavelmente misericordiosos e humildes. Não torneis mal por mal, ou injúria por injúria; antes, pelo contrário, bendizei, sabendo que para isto fostes chamados, para que por herança alcanceis a bênção.""",
|
42 |
+
"resposta_base": """As diferenças no casamento devem ser tratadas com compreensão mútua, humildade e amor. O casal deve buscar unidade sem anular as individualidades.""",
|
43 |
+
"aplicacao": "Praticar empatia e respeito às diferenças"
|
44 |
}
|
45 |
],
|
46 |
"familia": [
|
|
|
50 |
"texto": """Instrui o menino no caminho em que deve andar, e até quando envelhecer não se desviará dele.""",
|
51 |
"resposta_base": """A educação dos filhos deve ser fundamentada nos princípios bíblicos, com amor, disciplina e instrução constante. Os pais são responsáveis por guiar seus filhos no caminho do Senhor desde cedo.""",
|
52 |
"aplicacao": "Ensino diário dos princípios bíblicos aos filhos"
|
53 |
+
},
|
54 |
+
{
|
55 |
+
"pergunta": "Como manter a harmonia familiar?",
|
56 |
+
"passagem": "Colossenses 3:13-14",
|
57 |
+
"texto": """Suportai-vos uns aos outros, e perdoai-vos uns aos outros, se alguém tiver queixa contra outro; assim como Cristo vos perdoou, assim fazei vós também. E, sobre tudo isto, revesti-vos de amor, que é o vínculo da perfeição.""",
|
58 |
+
"resposta_base": """A harmonia familiar é construída sobre o fundamento do amor, perdão e compreensão mútua. Cada membro deve contribuir para um ambiente de paz e respeito.""",
|
59 |
+
"aplicacao": "Cultivo diário do amor e perdão no ambiente familiar"
|
60 |
+
}
|
61 |
+
],
|
62 |
+
"vida_espiritual": [
|
63 |
+
{
|
64 |
+
"pergunta": "Como desenvolver uma vida de oração?",
|
65 |
+
"passagem": "1 Tessalonicenses 5:17-18",
|
66 |
+
"texto": """Orai sem cessar. Em tudo dai graças, porque esta é a vontade de Deus em Cristo Jesus para convosco.""",
|
67 |
+
"resposta_base": """A vida de oração é fundamental para o crescimento espiritual. Devemos manter comunicação constante com Deus, sendo gratos em todas as circunstâncias.""",
|
68 |
+
"aplicacao": "Estabelecer momentos diários de oração e gratidão"
|
69 |
+
},
|
70 |
+
{
|
71 |
+
"pergunta": "Como crescer na fé?",
|
72 |
+
"passagem": "Romanos 10:17",
|
73 |
+
"texto": """De sorte que a fé é pelo ouvir, e o ouvir pela palavra de Deus.""",
|
74 |
+
"resposta_base": """O crescimento na fé vem através do estudo e meditação na Palavra de Deus, além da prática constante dos seus ensinamentos.""",
|
75 |
+
"aplicacao": "Estudo diário da Bíblia e prática dos ensinamentos"
|
76 |
+
},
|
77 |
+
{
|
78 |
+
"pergunta": "Como vencer tentações?",
|
79 |
+
"passagem": "1 Coríntios 10:13",
|
80 |
+
"texto": """Não veio sobre vós tentação, senão humana; mas fiel é Deus, que não vos deixará tentar acima do que podeis, antes com a tentação dará também o escape, para que a possais suportar.""",
|
81 |
+
"resposta_base": """Deus é fiel em nos dar força e escape das tentações. Devemos confiar em Sua palavra e buscar Sua presença nos momentos de provação.""",
|
82 |
+
"aplicacao": "Buscar força em Deus e usar os escapes que Ele provê"
|
83 |
+
}
|
84 |
+
],
|
85 |
+
"trabalho": [
|
86 |
+
{
|
87 |
+
"pergunta": "Como ter integridade no trabalho?",
|
88 |
+
"passagem": "Colossenses 3:23",
|
89 |
+
"texto": """E tudo quanto fizerdes, fazei-o de coração, como ao Senhor e não aos homens.""",
|
90 |
+
"resposta_base": """O trabalho deve ser realizado com excelência e integridade, como um serviço ao Senhor.""",
|
91 |
+
"aplicacao": "Praticar ética e dedicação no ambiente profissional"
|
92 |
+
},
|
93 |
+
{
|
94 |
+
"pergunta": "Como lidar com pressões no trabalho?",
|
95 |
+
"passagem": "Filipenses 4:6-7",
|
96 |
+
"texto": """Não andeis ansiosos por coisa alguma; antes em tudo sejam os vossos pedidos conhecidos diante de Deus pela oração e súplica com ação de graças; E a paz de Deus, que excede todo entendimento, guardará os vossos corações e os vossos sentimentos em Cristo Jesus.""",
|
97 |
+
"resposta_base": """As pressões do trabalho devem ser entregues a Deus através da oração, mantendo a confiança em Sua provisão e direção.""",
|
98 |
+
"aplicacao": "Praticar a entrega das preocupações a Deus"
|
99 |
+
}
|
100 |
+
],
|
101 |
+
"relacionamentos": [
|
102 |
+
{
|
103 |
+
"pergunta": "Como lidar com conflitos?",
|
104 |
+
"passagem": "Mateus 5:23-24",
|
105 |
+
"texto": """Portanto, se estiveres apresentando a tua oferta no altar e aí te lembrares de que teu irmão tem alguma coisa contra ti, deixa ali a tua oferta diante do altar, e vai primeiro reconciliar-te com teu irmão; e depois vem apresentar a tua oferta.""",
|
106 |
+
"resposta_base": """A reconciliação e o perdão são prioridades nos relacionamentos cristãos.""",
|
107 |
+
"aplicacao": "Buscar reconciliação ativa nos relacionamentos"
|
108 |
+
},
|
109 |
+
{
|
110 |
+
"pergunta": "Como construir amizades verdadeiras?",
|
111 |
+
"passagem": "Provérbios 17:17",
|
112 |
+
"texto": """Em todo tempo ama o amigo, e na angústia nasce o irmão.""",
|
113 |
+
"resposta_base": """Amizades verdadeiras são construídas com amor, lealdade e presença nos momentos difíceis.""",
|
114 |
+
"aplicacao": "Cultivar amizades com dedicação e fidelidade"
|
115 |
+
}
|
116 |
+
],
|
117 |
+
"geral": [
|
118 |
+
{
|
119 |
+
"pergunta": "Como encontrar propósito na vida?",
|
120 |
+
"passagem": "Jeremias 29:11",
|
121 |
+
"texto": """Porque eu bem sei os pensamentos que tenho a vosso respeito, diz o Senhor; pensamentos de paz, e não de mal, para vos dar o fim que esperais.""",
|
122 |
+
"resposta_base": """Deus tem um propósito específico para cada pessoa, baseado em Seu plano de paz e esperança.""",
|
123 |
+
"aplicacao": "Buscar a direção de Deus para a vida"
|
124 |
+
},
|
125 |
+
{
|
126 |
+
"pergunta": "Como ter paz em tempos difíceis?",
|
127 |
+
"passagem": "João 14:27",
|
128 |
+
"texto": """Deixo-vos a paz, a minha paz vos dou; não vo-la dou como o mundo a dá. Não se turbe o vosso coração, nem se atemorize.""",
|
129 |
+
"resposta_base": """A verdadeira paz vem de Deus e permanece mesmo em meio às tribulações.""",
|
130 |
+
"aplicacao": "Confiar na paz de Deus em todas as circunstâncias"
|
131 |
}
|
132 |
]
|
133 |
}
|
|
|
169 |
|
170 |
return f"📖 Versículo do Dia:\n{verse['passagem']}\n\n{verse['texto']}"
|
171 |
|
172 |
+
def find_best_theme(self, question: str) -> str:
|
173 |
+
"""Identifica o melhor tema baseado na pergunta"""
|
174 |
+
question = question.lower()
|
175 |
+
theme_keywords = {
|
176 |
+
"casamento": ["casamento", "cônjuge", "esposa", "marido", "casal", "matrimônio", "matrimonial"],
|
177 |
+
"familia": ["família", "filhos", "pais", "criação", "lar", "familiar", "doméstico"],
|
178 |
+
"vida_espiritual": ["oração", "jejum", "adoração", "espiritual", "fé", "devoção", "santidade"],
|
179 |
+
"trabalho": ["trabalho", "emprego", "carreira", "profissão", "negócio", "profissional"],
|
180 |
+
"relacionamentos": ["amizade", "relacionamento", "conflito", "perdão", "amigo", "social"],
|
181 |
+
"geral": [] # Tema padrão se nenhum outro corresponder
|
182 |
+
}
|
183 |
+
|
184 |
+
for theme, keywords in theme_keywords.items():
|
185 |
+
if any(keyword in question for keyword in keywords):
|
186 |
+
return theme
|
187 |
+
return "geral"
|
188 |
+
|
189 |
def save_to_history(self, question: str, theme: str, response: str, metadata: Dict):
|
190 |
"""Salva a consulta no histórico com timestamp"""
|
191 |
self.session_history.append({
|
|
|
211 |
history_text += "─" * 50 + "\n"
|
212 |
return history_text
|
213 |
|
214 |
+
def get_unique_response(self, question: str, theme: str = None) -> Tuple[str, Dict, str]:
|
215 |
+
"""Gera uma resposta única baseada na pergunta, detectando o tema automaticamente se não fornecido"""
|
216 |
+
if not theme or theme not in self.biblical_examples:
|
217 |
+
theme = self.find_best_theme(question)
|
218 |
|
|
|
219 |
examples = self.biblical_examples[theme]
|
220 |
+
selected_index = random.randint(0, len(examples) - 1)
|
221 |
example = examples[selected_index]
|
222 |
|
223 |
+
try:
|
224 |
+
inputs = self.tokenizer.encode_plus(
|
225 |
+
question,
|
226 |
+
example["texto"],
|
227 |
+
return_tensors="pt",
|
228 |
+
max_length=512,
|
229 |
+
truncation=True,
|
230 |
+
padding="max_length"
|
231 |
+
).to(self.device)
|
232 |
|
233 |
+
with torch.no_grad():
|
234 |
+
outputs = self.model(**inputs)
|
235 |
+
|
236 |
+
answer_start = torch.argmax(outputs.start_logits)
|
237 |
+
answer_end = torch.argmax(outputs.end_logits)
|
238 |
+
|
239 |
+
tokens = self.tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
|
240 |
+
model_answer = tokens[answer_start:answer_end + 1]
|
241 |
+
model_answer = self.tokenizer.convert_tokens_to_string(model_answer)
|
242 |
+
except Exception as e:
|
243 |
+
logger.error(f"Erro ao gerar resposta: {str(e)}")
|
244 |
+
model_answer = "Reflexão baseada nos princípios bíblicos apresentados."
|
245 |
|
246 |
response = f"""
|
247 |
🕊️ Conselho Bíblico:
|
248 |
{example['resposta_base']}
|
249 |
+
|
250 |
📖 Passagem Bíblica:
|
251 |
{example['passagem']}: {example['texto']}
|
252 |
+
|
253 |
✝️ Aplicação Prática:
|
254 |
{example['aplicacao']}
|
255 |
+
|
256 |
💭 Reflexão Adicional:
|
257 |
{model_answer}
|
258 |
+
|
259 |
+
🙏 Lembre-se: Esta é uma orientação baseada em princípios bíblicos. Para questões específicas, consulte também sua liderança espiritual local.
|
260 |
"""
|
261 |
|
262 |
metadata = {
|
263 |
"passagem": example['passagem'],
|
264 |
+
"contexto": f"Baseado em princípios bíblicos para {theme.replace('_', ' ')}",
|
265 |
"aplicacao": example['aplicacao']
|
266 |
}
|
267 |
|
|
|
274 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
275 |
gr.Markdown("""
|
276 |
# 🕊️ Conselheiro Bíblico
|
277 |
+
### Orientação Bíblica Personalizada para Qualquer Pergunta
|
278 |
""")
|
279 |
|
280 |
with gr.Row():
|
|
|
291 |
with gr.Column():
|
292 |
theme = gr.Dropdown(
|
293 |
choices=counselor.get_themes(),
|
294 |
+
label="Tema (Opcional)",
|
295 |
+
value="geral",
|
296 |
+
info="Selecione um tema ou deixe em branco para detecção automática"
|
297 |
)
|
298 |
question = gr.Textbox(
|
299 |
label="Sua Pergunta",
|
300 |
+
placeholder="Digite qualquer pergunta sobre a Bíblia ou vida cristã...",
|
301 |
lines=3
|
302 |
)
|
303 |
submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary")
|
|
|
305 |
with gr.Column():
|
306 |
answer_output = gr.Textbox(
|
307 |
label="Resposta",
|
308 |
+
lines=12
|
309 |
)
|
310 |
metadata_output = gr.Textbox(
|
311 |
label="Referências",
|
|
|
323 |
with gr.TabItem("ℹ️ Ajuda"):
|
324 |
gr.Markdown("""
|
325 |
### Como usar o Conselheiro Bíblico:
|
326 |
+
1. Digite sua pergunta sobre qualquer tema bíblico ou da vida cristã
|
327 |
+
2. Opcionalmente, selecione um tema específico para contextualizar melhor sua pergunta
|
328 |
3. Clique em "Buscar Orientação"
|
329 |
4. Receba orientação baseada em princípios bíblicos
|
330 |
+
|
331 |
### Temas Disponíveis:
|
332 |
- Casamento: Conselhos para relacionamento conjugal
|
333 |
- Família: Orientação para vida familiar
|
334 |
+
- Vida Espiritual: Crescimento na fé e devoção
|
335 |
+
- Trabalho: Princípios bíblicos para a vida profissional
|
336 |
+
- Relacionamentos: Amizades e convivência
|
337 |
+
- Geral: Outros temas e questões diversas
|
338 |
+
|
339 |
+
### Funcionalidades:
|
340 |
+
- Versículo diário atualizado automaticamente
|
341 |
+
- Detecção automática do tema da sua pergunta
|
342 |
+
- Histórico das últimas consultas
|
343 |
+
- Respostas baseadas em princípios bíblicos com aplicações práticas
|
344 |
+
|
345 |
+
### Observações:
|
346 |
+
- As respostas são geradas com base em princípios bíblicos
|
347 |
+
- Para questões específicas, recomenda-se consultar também sua liderança espiritual
|
348 |
+
- O sistema aprende e se adapta para fornecer respostas mais relevantes
|
349 |
""")
|
350 |
|
351 |
gr.Examples(
|
|
|
358 |
|
359 |
submit_btn.click(
|
360 |
fn=counselor.get_unique_response,
|
361 |
+
inputs=[question, theme],
|
362 |
outputs=[answer_output, metadata_output, history_output]
|
363 |
)
|
364 |
|
|
|
371 |
demo.launch(
|
372 |
server_name="0.0.0.0",
|
373 |
share=True,
|
374 |
+
show_error=True,
|
375 |
+
server_port=7860
|
376 |
)
|
377 |
except Exception as e:
|
378 |
logger.error(f"Erro ao iniciar aplicação: {str(e)}")
|