mistraltextst / app.py
RodriiS's picture
Update app.py
2f4d994 verified
import os
from dotenv import load_dotenv
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
# Carrega variáveis de ambiente
load_dotenv()
api_key = os.getenv("HF_API_TOKEN")
if not api_key:
raise ValueError("Erro: HF_API_TOKEN não encontrado. Configure-o nas secrets do Space.")
# Configuração de quantização
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype="bfloat16"
)
# Inicializa o modelo e o tokenizer
model_id = "Qwen/Qwen2-7B-Instruct-GPTQ-Int4" # Modelo GPTQ oficial da Qwen
tokenizer = AutoTokenizer.from_pretrained(model_id, token=api_key)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=quant_config,
device_map="auto",
token=api_key
)
# Função do chatbot
def chat_with_llm(message, history):
try:
# Constrói o histórico de mensagens
messages = []
for user_msg, bot_msg in history:
messages.append({"role": "user", "content": user_msg})
if bot_msg:
messages.append({"role": "assistant", "content": bot_msg})
messages.append({"role": "user", "content": message})
# Tokeniza a entrada
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to("cuda")
# Gera a resposta
outputs = model.generate(
inputs,
max_new_tokens=500,
temperature=0.5,
top_p=0.9,
do_sample=True
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
except Exception as e:
return f"Erro: {str(e)}. Verifique o token API, conexão com a internet ou requisitos de hardware."
# Interface Gradio
demo = gr.ChatInterface(
fn=chat_with_llm,
title="Chatbot com Qwen2-7B Quantizado",
description="Chatbot usando Qwen2-7B quantizado em 4-bit para maior eficiência.",
)
if __name__ == "__main__":
demo.launch()