markIA23 commited on
Commit
1ec0db0
1 Parent(s): 6dded28

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +67 -12
app.py CHANGED
@@ -1,17 +1,72 @@
1
-
 
 
2
  import gradio as gr
3
- from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
4
 
5
- # Cargar el tokenizador y el modelo
6
- tokenizer = AutoTokenizer.from_pretrained("facebook/galactica-30b")
7
- model = AutoModelForCausalLM.from_pretrained("facebook/galactica-30b")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
- # Crear un pipeline de texto
10
- pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
- def predict(input_text):
13
- return pipe(input_text)[0]['generated_text']
 
14
 
15
- # Crear la interfaz de Gradio
16
- iface = gr.Interface(fn=predict, inputs="text_area", outputs="text")
17
- iface.launch()
 
1
+ import os
2
+ from huggingface_hub import login
3
+ from transformers import AutoModelForCausalLM, AutoTokenizer
4
  import gradio as gr
 
5
 
6
+ # Obtén el token desde la variable de entorno
7
+ hf_token = os.getenv("HF_TOKEN")
8
+
9
+ if hf_token:
10
+ # Autenticación en Hugging Face utilizando el token
11
+ login(token=hf_token)
12
+ else:
13
+ raise ValueError("Hugging Face token no encontrado. Asegúrate de que la variable de entorno HF_TOKEN esté configurada.")
14
+
15
+ # Cargar el modelo y tokenizador
16
+ model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"
17
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
18
+ model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
19
+
20
+ # Definir la función de inferencia del chatbot
21
+ def chat_fn(multimodal_message):
22
+ # Extraer el texto de la pregunta proporcionada por el usuario
23
+ question = multimodal_message["text"]
24
+
25
+ # Construir la conversación inicial con el mensaje del usuario
26
+ conversation = [{"role": "user", "content": question}]
27
+
28
+ # Generar los IDs de entrada utilizando el tokenizador del modelo
29
+ input_ids = tokenizer.apply_chat_template(conversation, return_tensors="pt")
30
+ input_ids = input_ids.to(model.device)
31
+
32
+ # Configurar el streamer para la generación progresiva de texto
33
+ streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True)
34
+
35
+ # Configurar los argumentos de generación
36
+ generate_kwargs = dict(
37
+ input_ids=input_ids,
38
+ streamer=streamer,
39
+ max_new_tokens=500, # Ajusta esto según tus necesidades
40
+ do_sample=True,
41
+ temperature=0.7, # Ajusta la temperatura según tus necesidades
42
+ )
43
+
44
+ # Iniciar la generación de texto en un hilo separado
45
+ t = Thread(target=model.generate, kwargs=generate_kwargs)
46
+ t.start()
47
+
48
+ # Iterar sobre los tokens generados y construir la respuesta
49
+ message = ""
50
+ for text in streamer:
51
+ message += text
52
+ yield message
53
 
54
+ # Crear la interfaz de usuario utilizando Gradio
55
+ with gr.Blocks() as demo:
56
+ # Título de la aplicación en español
57
+ gr.Markdown("# 🔍 Chatbot Analizador de Documentos")
58
+
59
+ # Cuadro de texto para mostrar la respuesta generada, etiquetado en español
60
+ response = gr.Textbox(lines=5, label="Respuesta")
61
+
62
+ # Campo de texto multimodal para que el usuario suba un archivo e ingrese una pregunta, en español
63
+ chat = gr.MultimodalTextbox(file_types=["image"], interactive=True,
64
+ show_label=False, placeholder="Sube una imagen del documento haciendo clic en '+' y haz una pregunta.")
65
+
66
+ # Asignar la función chat_fn para que se ejecute cuando el usuario envíe un mensaje en el chat
67
+ chat.submit(chat_fn, inputs=chat, outputs=response)
68
 
69
+ # Lanzar la aplicación si este archivo es ejecutado directamente
70
+ if __name__ == "__main__":
71
+ demo.launch()
72