Spaces:
Sleeping
Sleeping
import gradio as gr | |
from ctransformers import AutoModelForCausalLM | |
import textwrap | |
import os | |
import logging | |
from tqdm import tqdm | |
# Configurar logging | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
# Diretório para cache | |
CACHE_DIR = os.path.join(os.path.expanduser("~"), ".bible_qa_cache") | |
os.makedirs(CACHE_DIR, exist_ok=True) | |
def load_model(progress=gr.Progress()): | |
logger.info("Iniciando carregamento do modelo...") | |
progress(0, desc="Iniciando carregamento do modelo") | |
try: | |
model = AutoModelForCausalLM.from_pretrained( | |
"TheBloke/Llama-2-7B-Chat-GGML", | |
model_file="llama-2-7b-chat.ggmlv3.q4_0.bin", | |
model_type="llama", | |
max_new_tokens=512, | |
temperature=0.7, | |
context_length=2048, | |
cache_dir=CACHE_DIR | |
) | |
progress(1, desc="Modelo carregado com sucesso!") | |
logger.info("Modelo carregado com sucesso!") | |
return model | |
except Exception as e: | |
logger.error(f"Erro ao carregar o modelo: {str(e)}") | |
raise | |
def format_prompt(question): | |
return f"""Você é um assistente especializado em conhecimento bíblico. | |
Por favor, responda à seguinte pergunta com base nas escrituras bíblicas: | |
Pergunta: {question} | |
Resposta baseada na Bíblia:""" | |
def generate_biblical_response(question, model): | |
try: | |
prompt = format_prompt(question) | |
response = model(prompt, max_new_tokens=512) | |
return textwrap.fill(response, width=80) | |
except Exception as e: | |
logger.error(f"Erro ao gerar resposta: {str(e)}") | |
return f"Erro ao gerar resposta: {str(e)}" | |
def create_interface(): | |
with gr.Blocks() as demo: | |
gr.Markdown("""# Consultor Bíblico Virtual | |
Faça perguntas sobre a Bíblia e receba respostas baseadas nas escrituras.""") | |
# Carrega o modelo uma única vez | |
model = load_model() | |
with gr.Row(): | |
with gr.Column(): | |
question_input = gr.Textbox( | |
lines=2, | |
placeholder="Digite sua pergunta sobre a Bíblia aqui...", | |
label="Sua Pergunta" | |
) | |
submit_btn = gr.Button("Enviar Pergunta") | |
with gr.Column(): | |
answer_output = gr.Textbox( | |
lines=10, | |
label="Resposta" | |
) | |
# Exemplos sem cache | |
gr.Examples( | |
examples=[ | |
"O que a Bíblia diz sobre amor ao próximo?", | |
"Como é descrita a criação do mundo no livro de Gênesis?", | |
"Quais são os principais ensinamentos de Jesus sobre perdão?" | |
], | |
inputs=question_input, | |
cache_examples=False # Desativa o cache dos exemplos | |
) | |
def process_question(question): | |
logger.info(f"Processando pergunta: {question}") | |
return generate_biblical_response(question, model) | |
submit_btn.click( | |
fn=process_question, | |
inputs=question_input, | |
outputs=answer_output | |
) | |
return demo | |
if __name__ == "__main__": | |
logger.info("Iniciando aplicação...") | |
demo = create_interface() | |
demo.queue(concurrency_count=1).launch( | |
server_name="0.0.0.0", | |
share=True, | |
show_error=True, | |
cache_examples=False | |
) |