DHEIVER's picture
Update app.py
f6cb88d verified
raw
history blame
7.36 kB
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