Galactica / app.py
markIA23's picture
Update app.py
ed667c5 verified
raw
history blame
2.85 kB
import os
from huggingface_hub import login
from transformers import AutoModelForCausalLM, AutoTokenizer
import gradio as gr
# Obt茅n el token desde la variable de entorno
hf_token = os.getenv("LLAMA31")
if hf_token:
# Autenticaci贸n en Hugging Face utilizando el token
login(token=hf_token)
else:
raise ValueError("Hugging Face token no encontrado. Aseg煤rate de que la variable de entorno HF_TOKEN est茅 configurada.")
# Cargar el modelo y tokenizador
model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
# Definir la funci贸n de inferencia del chatbot
def chat_fn(multimodal_message):
# Extraer el texto de la pregunta proporcionada por el usuario
question = multimodal_message["text"]
# Construir la conversaci贸n inicial con el mensaje del usuario
conversation = [{"role": "user", "content": question}]
# Generar los IDs de entrada utilizando el tokenizador del modelo
input_ids = tokenizer.apply_chat_template(conversation, return_tensors="pt")
input_ids = input_ids.to(model.device)
# Configurar el streamer para la generaci贸n progresiva de texto
streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True)
# Configurar los argumentos de generaci贸n
generate_kwargs = dict(
input_ids=input_ids,
streamer=streamer,
max_new_tokens=500, # Ajusta esto seg煤n tus necesidades
do_sample=True,
temperature=0.7, # Ajusta la temperatura seg煤n tus necesidades
)
# Iniciar la generaci贸n de texto en un hilo separado
t = Thread(target=model.generate, kwargs=generate_kwargs)
t.start()
# Iterar sobre los tokens generados y construir la respuesta
message = ""
for text in streamer:
message += text
yield message
# Crear la interfaz de usuario utilizando Gradio
with gr.Blocks() as demo:
# T铆tulo de la aplicaci贸n en espa帽ol
gr.Markdown("# 馃攳 Chatbot Analizador de Documentos")
# Cuadro de texto para mostrar la respuesta generada, etiquetado en espa帽ol
response = gr.Textbox(lines=5, label="Respuesta")
# Campo de texto multimodal para que el usuario suba un archivo e ingrese una pregunta, en espa帽ol
chat = gr.MultimodalTextbox(file_types=["image"], interactive=True,
show_label=False, placeholder="Sube una imagen del documento haciendo clic en '+' y haz una pregunta.")
# Asignar la funci贸n chat_fn para que se ejecute cuando el usuario env铆e un mensaje en el chat
chat.submit(chat_fn, inputs=chat, outputs=response)
# Lanzar la aplicaci贸n si este archivo es ejecutado directamente
if __name__ == "__main__":
demo.launch()