Spaces:
Sleeping
Sleeping
File size: 7,359 Bytes
6e827c2 f69b9a6 4263f88 f69b9a6 3f3176a 6ad6360 20a9402 f6cb88d 20a9402 f69b9a6 6e827c2 f756686 f6cb88d f756686 f6cb88d f756686 f6cb88d f756686 f6cb88d f756686 f6cb88d f756686 f6cb88d f756686 6ad6360 f756686 f6cb88d f756686 f6cb88d f756686 6ad6360 f756686 6ad6360 f6cb88d f756686 f6cb88d f756686 f6cb88d 6ad6360 32648a9 f6cb88d 32648a9 6ad6360 f756686 3f3176a 6e827c2 20a9402 f756686 32648a9 f6cb88d 32648a9 20a9402 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
import gradio as gr
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import torch
import logging
import warnings
from typing import List, Tuple, Dict
import random
from datetime import datetime
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
warnings.filterwarnings('ignore')
class BiblicalCounselor:
def __init__(self):
logger.info("Inicializando conselheiro bíblico...")
self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
self.model_name = "pierreguillou/bert-base-cased-squad-v1.1-portuguese"
try:
self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
self.model = AutoModelForQuestionAnswering.from_pretrained(self.model_name)
self.model.to(self.device)
logger.info(f"Modelo carregado com sucesso no dispositivo: {self.device}")
except Exception as e:
logger.error(f"Erro ao carregar modelo: {str(e)}")
raise
def get_answer(self, theme: str, question: str) -> Tuple[str, str]:
try:
# Respostas pré-definidas para exemplos
responses = {
"casamento_conflitos": (
"""🕊️ Orientação Bíblica:
Com base em Efésios 4:26-27, devemos resolver os conflitos sem deixar que o sol se ponha sobre nossa ira.
O perdão e a comunicação são fundamentais no casamento cristão.
📖 Princípios Importantes:
1. Não permita que a raiva permaneça
2. Comunique-se com amor
3. Pratique o perdão mútuo
✝️ Aplicação Prática:
- Resolva os conflitos no mesmo dia
- Use palavras edificantes
- Ore juntos pela situação""",
"📚 Referência: Efésios 4:26-27\n🔍 Contexto: Resolução de Conflitos no Casamento"
),
"casamento_oracao": (
"""🕊️ Orientação Bíblica:
A oração conjunta fortalece o casamento. Conforme 1 Pedro 3:7, marido e mulher são co-herdeiros da graça da vida.
📖 Princípios Importantes:
1. Orem juntos diariamente
2. Compartilhem pedidos de oração
3. Agradeçam um pelo outro
✝️ Aplicação Prática:
- Estabeleçam um momento diário de oração
- Orem pelos desafios mútuos
- Celebrem as bênçãos juntos""",
"📚 Referência: 1 Pedro 3:7\n🔍 Contexto: Vida de Oração no Casamento"
)
}
# Tenta encontrar uma resposta pré-definida
key = f"{theme}_{question.lower().split()[0]}"
if key in responses:
return responses[key]
# Se não encontrar resposta pré-definida, usa o modelo
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."
inputs = self.tokenizer.encode_plus(
question,
passage,
return_tensors="pt",
max_length=512,
truncation=True,
padding="max_length"
).to(self.device)
with torch.no_grad():
outputs = self.model(**inputs)
answer_start = torch.argmax(outputs.start_logits)
answer_end = torch.argmax(outputs.end_logits)
tokens = self.tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
answer = tokens[answer_start:answer_end + 1]
model_answer = self.tokenizer.convert_tokens_to_string(answer)
response = f"""
🕊️ Orientação Bíblica:
{model_answer}
📖 Princípios Importantes:
1. Busque a orientação divina
2. Aplique os princípios bíblicos
3. Mantenha-se em oração
✝️ Aplicação Prática:
- Estude a Palavra regularmente
- Pratique os ensinamentos
- Busque aconselhamento pastoral quando necessário
"""
references = "📚 Referência: Efésios 5:22-33\n🔍 Contexto: Princípios Bíblicos para a Vida Cristã"
return response, references
except Exception as e:
logger.error(f"Erro ao processar pergunta: {str(e)}")
return "Perdoe-nos, ocorreu um erro ao processar sua pergunta.", "Erro no processamento"
def create_interface():
counselor = BiblicalCounselor()
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("""
# 🕊️ Conselheiro Bíblico Virtual
### Orientação Espiritual Baseada nas Sagradas Escrituras
""")
with gr.Row():
with gr.Column():
# Dropdown com valores corretos
theme = gr.Dropdown(
choices=["💑 Casamento", "👶 Criação de Filhos"],
value="💑 Casamento",
label="Escolha o Tema"
)
question = gr.Textbox(
label="💭 Sua Pergunta",
placeholder="Digite sua pergunta aqui...",
lines=3
)
submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary")
with gr.Column():
answer_output = gr.Markdown(label="Resposta")
references = gr.Textbox(label="Referências", interactive=False)
# Exemplos sem cache
with gr.Row():
gr.Markdown("""### Exemplos de Perguntas:
1. Como resolver conflitos no casamento?
2. Como orar pelo casamento?
3. Como educar filhos biblicamente?
4. Como manter a harmonia familiar?
5. Como lidar com diferenças no casamento?
""")
# Função para processar a pergunta
def process_question(theme_selected, question_text):
# Remove emojis do tema para processamento
theme_clean = "casamento" if "Casamento" in theme_selected else "criacao_filhos"
return counselor.get_answer(theme_clean, question_text)
# Eventos
submit_btn.click(
fn=process_question,
inputs=[theme, question],
outputs=[answer_output, references]
)
return demo
if __name__ == "__main__":
try:
logger.info("Iniciando aplicação...")
demo = create_interface()
demo.launch(
server_name="0.0.0.0",
share=True,
show_error=True,
cache_examples=False # Desativa cache de exemplos
)
except Exception as e:
logger.error(f"Erro ao iniciar aplicação: {str(e)}")
raise |