Spaces:
Sleeping
Sleeping
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 |