import gradio as gr from transformers import AutoTokenizer, AutoModelForQuestionAnswering import torch import logging import warnings from typing import List, Tuple, Dict import random import hashlib from datetime import datetime logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) warnings.filterwarnings('ignore') # [BIBLICAL_EXAMPLES permanece o mesmo] # [DiverseBiblicalCounselor permanece o mesmo] def create_enhanced_interface(): counselor = DiverseBiblicalCounselor() # Temas organizados com ícones THEMES = { "casamento": "💑 Casamento e Família", "criacao_filhos": "👶 Criação de Filhos", "papel_mulher": "👩 Papel da Mulher", "papel_homem": "👨 Papel do Homem", "financas": "💰 Finanças", "trabalho": "💼 Trabalho" } # CSS personalizado custom_css = """ .feedback-btn { margin: 5px; min-width: 30px; font-size: 1.2em; } .container { max-width: 1200px; margin: auto; } .verse-box { background-color: #f8f9fa; padding: 15px; border-radius: 10px; margin: 10px 0; } .theme-selector { margin-bottom: 20px; } """ with gr.Blocks(theme=gr.themes.Soft(), css=custom_css) as demo: # Cabeçalho with gr.Row(elem_classes="container"): gr.Markdown(""" # 🕊️ Conselheiro Bíblico Virtual ### Orientação Espiritual Baseada nas Sagradas Escrituras _"Toda a Escritura é inspirada por Deus e útil para o ensino, para a repreensão, para a correção e para a instrução na justiça." - 2 Timóteo 3:16_ """) # Conteúdo Principal with gr.Tabs() as tabs: # Aba de Aconselhamento with gr.TabItem("📚 Aconselhamento", id=1): with gr.Row(): # Coluna Esquerda - Entrada with gr.Column(scale=1): theme = gr.Dropdown( choices=list(THEMES.items()), label="Escolha o Tema", value="casamento", elem_classes="theme-selector" ) # Versículo do Dia verse_box = gr.Textbox( label="✨ Versículo do Dia", value="Renovado diariamente...", elem_classes="verse-box", lines=3, interactive=False ) question = gr.Textbox( label="💭 Sua Pergunta", placeholder="Digite sua dúvida ou preocupação...", lines=3 ) with gr.Row(): submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary") clear_btn = gr.Button("🔄 Nova Consulta") # Coluna Direita - Saída with gr.Column(scale=1): with gr.Box(): answer_output = gr.Markdown( label="Resposta", value="Sua orientação aparecerá aqui..." ) with gr.Accordion("📖 Referências Bíblicas", open=False): references = gr.Markdown() # Feedback with gr.Row(): gr.Markdown("Esta resposta foi útil?") helpful_btn = gr.Button("👍", elem_classes="feedback-btn") not_helpful_btn = gr.Button("👎", elem_classes="feedback-btn") # Aba de Exemplos with gr.TabItem("📋 Exemplos", id=2): gr.Examples( examples=[ ["casamento", "Como resolver conflitos no casamento?"], ["casamento", "Como manter um casamento forte espiritualmente?"], ["casamento", "Qual o papel do perdão no casamento?"], ["casamento", "Como manter a fidelidade no casamento?"], ["casamento", "Como lidar com diferenças no casamento?"] ], inputs=[theme, question], outputs=[answer_output, references], fn=lambda t, q: counselor.get_unique_response(q, t), label="Exemplos de Perguntas Comuns" ) # Aba de Recursos with gr.TabItem("📚 Recursos", id=3): gr.Markdown(""" ### 📖 Recursos Disponíveis #### Temas Abordados: - 💑 **Casamento e Família** - Relacionamento conjugal - Comunicação - Resolução de conflitos - 👶 **Criação de Filhos** - Educação cristã - Disciplina - Desenvolvimento espiritual - 👩 **Papel da Mulher** - Liderança no lar - Ministério - Equilíbrio vida-trabalho - 👨 **Papel do Homem** - Liderança espiritual - Responsabilidades - Paternidade #### 🛠️ Como Usar: 1. Escolha um tema relacionado à sua dúvida 2. Digite sua pergunta de forma clara 3. Clique em "Buscar Orientação" 4. Leia a resposta e as referências bíblicas 5. Use o feedback para nos ajudar a melhorar #### 🙏 Lembretes Importantes: - Ore antes de buscar orientação - Leia o contexto completo das passagens - Consulte sua liderança espiritual local """) # Rodapé with gr.Row(elem_classes="container"): gr.Markdown(""" --- 💝 Desenvolvido para edificação do Corpo de Cristo | Atualizado: {data} _"Porque a palavra de Deus é viva e eficaz..." - Hebreus 4:12_ """.format(data=datetime.now().strftime("%d/%m/%Y"))) # Eventos def clear_outputs(): return { question: "", answer_output: "Sua orientação aparecerá aqui...", references: "" } def update_verse(): verses = [ "O Senhor é meu pastor, nada me faltará. (Salmos 23:1)", "Tudo posso naquele que me fortalece. (Filipenses 4:13)", "O amor é paciente, o amor é bondoso... (1 Coríntios 13:4)" ] return random.choice(verses) def process_feedback(helpful: bool): feedback_msg = "Obrigado pelo seu feedback! 🙏" return gr.Markdown.update(value=feedback_msg) # Eventos submit_btn.click( fn=lambda t, q: counselor.get_unique_response(q, t), inputs=[theme, question], outputs=[answer_output, references] ) clear_btn.click( fn=clear_outputs, inputs=[], outputs=[question, answer_output, references] ) helpful_btn.click( fn=lambda: process_feedback(True), inputs=[], outputs=[answer_output] ) not_helpful_btn.click( fn=lambda: process_feedback(False), inputs=[], outputs=[answer_output] ) # Atualiza versículo do dia ao iniciar demo.load( fn=update_verse, inputs=[], outputs=[verse_box] ) return demo if __name__ == "__main__": try: logger.info("Iniciando aplicação com interface aprimorada...") demo = create_enhanced_interface() demo.launch( server_name="0.0.0.0", share=True, show_error=True ) except Exception as e: logger.error(f"Erro ao iniciar aplicação: {str(e)}") raise