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