File size: 4,313 Bytes
c357e49
9860e17
c357e49
 
 
 
9860e17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2830ea2
 
 
 
 
 
 
 
c357e49
 
2830ea2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9860e17
2830ea2
 
 
 
 
 
 
 
 
 
 
9860e17
 
2830ea2
 
9860e17
 
c357e49
9860e17
 
 
 
 
 
c357e49
9860e17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c357e49
9860e17
 
 
 
2830ea2
 
 
 
 
 
 
 
 
9860e17
 
 
2830ea2
9860e17
 
 
 
 
 
 
 
 
a92f417
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
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
import torch
import warnings
warnings.filterwarnings('ignore')

# Configurações
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
MAX_LENGTH = 2048

# Usar modelo público e leve
model_name = "microsoft/DialoGPT-small"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Tópicos polêmicos com versículos
CONTROVERSIAL_TOPICS = {
    "Sexualidade e Identidade": {
        "description": "Perspectivas bíblicas sobre sexualidade, identidade e relacionamentos",
        "verses": [
            "Gênesis 1:27 - Criou Deus o homem à sua imagem...",
            "1 Coríntios 6:9-11 - Não sabeis que os injustos...",
            "Gálatas 3:28 - Não há judeu nem grego..."
        ]
    },
    "Aborto e Vida": {
        "description": "Visão bíblica sobre a santidade da vida",
        "verses": [
            "Salmos 139:13-16 - Tu formaste o meu interior...",
            "Jeremias 1:5 - Antes que te formasses...",
            "Êxodo 20:13 - Não matarás"
        ]
    }
}

def process_topic(topic, history):
    """Função específica para processar tópicos selecionados via botão"""
    info = CONTROVERSIAL_TOPICS[topic]
    response = f"""
    📚 Tema: {topic}
    
    📖 Descrição:
    {info['description']}
    
    ✝️ Versículos Relevantes:
    """
    for verse in info['verses']:
        response += f"• {verse}\n"
    
    response += "\nEstes versículos nos mostram diferentes aspectos deste tema. É importante estudá-los em seu contexto completo para uma melhor compreensão."
    
    history.append((None, response))
    return history

def process_message(message, history):
    """Função para processar mensagens digitadas pelo usuário"""
    try:
        response = f"Sua pergunta: {message}\n\n"
        response += "Pesquisando nas escrituras...\n"
        
        for topic, info in CONTROVERSIAL_TOPICS.items():
            if any(word.lower() in message.lower() for word in topic.split()):
                response += f"\nVersículos relacionados a {topic}:\n"
                for verse in info['verses'][:2]:
                    response += f"• {verse}\n"
        
        history.append((message, response))
        return history
            
    except Exception as e:
        history.append((message, f"Ocorreu um erro: {str(e)}"))
        return history

# Interface Gradio
with gr.Blocks(theme=gr.themes.Soft()) as demo:
    gr.HTML("""
        <div style="text-align: center; padding: 20px;">
            <h1>📖 Análise Bíblica de Temas Contemporâneos</h1>
            <p>Explore diferentes perspectivas bíblicas sobre questões atuais</p>
        </div>
    """)
    
    with gr.Row():
        # Coluna principal do chat
        with gr.Column(scale=2):
            chatbot = gr.Chatbot(
                height=600,
                bubble_full_width=False,
                show_label=False
            )
            with gr.Row():
                msg = gr.Textbox(
                    show_label=False,
                    placeholder="Digite sua pergunta ou clique em um dos temas...",
                    scale=4
                )
                clear = gr.Button("🗑️ Limpar", scale=1)
        
        # Coluna de tópicos
        with gr.Column(scale=1):
            gr.Markdown("### 🔍 Temas para Explorar")
            
            # Criar botões para cada tema
            for topic in CONTROVERSIAL_TOPICS.keys():
                topic_btn = gr.Button(f"📚 {topic}")
                # Criar uma closure para capturar o valor do tópico
                topic_btn.click(
                    fn=lambda t=topic, h=None: process_topic(t, h if h else []),
                    inputs=[chatbot],
                    outputs=[chatbot]
                )
    
    # Eventos
    msg.submit(process_message, [msg, chatbot], [chatbot])
    clear.click(lambda: [], None, chatbot, queue=False)

    gr.Markdown("""
    ### ℹ️ Como usar:
    1. Clique em um dos temas para ver versículos relacionados
    2. Digite uma pergunta específica no campo de texto
    3. Use o botão 'Limpar' para reiniciar a conversa
    """)

# Iniciar a interface
demo.launch(share=False)