DHEIVER's picture
Update app.py
4263f88 verified
raw
history blame
3.5 kB
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
)