askbyte commited on
Commit
721590a
·
verified ·
1 Parent(s): ca4f45e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -37
app.py CHANGED
@@ -1,50 +1,92 @@
1
  import gradio as gr
2
- from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
3
  import torch
 
 
4
 
5
- # Carga del modelo ligero en español
6
- model_name = "mrm8488/t5-base-finetuned-spanish-summarization"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  tokenizer = AutoTokenizer.from_pretrained(model_name)
8
- model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
9
-
10
- # Prompt base para BITER
11
- base_prompt = (
12
- "Eres BITER, un mentor experto en negocios. Responde SIEMPRE en español, "
13
- "con consejos breves, claros y con visión estratégica. Ayudas a emprendedores "
14
- "a tomar buenas decisiones. Sé directo, profesional y humano.\n"
15
- "Usuario: {pregunta}\n"
16
- "BITER:"
17
  )
18
 
19
- # Función de respuesta
20
- def responder(pregunta):
21
- prompt = base_prompt.format(pregunta=pregunta)
22
- input_ids = tokenizer.encode(prompt, return_tensors="pt", truncation=True)
23
-
24
- # Generar respuesta
25
- with torch.no_grad():
26
- output_ids = model.generate(
27
- input_ids,
28
- max_new_tokens=100,
29
- num_beams=4,
30
- early_stopping=True
31
- )
32
-
33
- respuesta = tokenizer.decode(output_ids[0], skip_special_tokens=True)
34
- return respuesta.strip()
35
-
36
- # Interfaz Gradio
37
- iface = gr.Interface(
38
- fn=responder,
39
- inputs=gr.Textbox(lines=3, placeholder="¿Cuál es tu duda sobre tu negocio?", label="Tu pregunta"),
40
  outputs=gr.Textbox(label="Respuesta de BITER"),
41
- title="BITER - Tu Mentor IA para Decisiones de Negocio",
42
- description="BITER responde dudas de emprendedores como si fuera un CEO experimentado. Modelo: T5 ligero afinado en español.",
43
  examples=[
44
  ["¿Cómo puedo validar mi idea de negocio con poco presupuesto?"],
45
  ["¿Cuál es la mejor estrategia para conseguir mis primeros clientes?"],
46
- ["¿Debería invertir en publicidad o en SEO?"]
47
  ],
 
48
  )
49
 
50
- iface.launch()
 
 
 
 
1
  import gradio as gr
2
+ from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
3
  import torch
4
+ import gc
5
+ import os
6
 
7
+ # Función para cargar el prompt desde el archivo
8
+ def get_system_prompt():
9
+ with open("prompt.txt", "r", encoding="utf-8") as f:
10
+ return f.read().strip()
11
+
12
+ # Función para generar respuestas
13
+ def generate_response(user_message):
14
+ try:
15
+ if not user_message.strip():
16
+ return "Por favor, escribe una pregunta para que pueda ayudarte."
17
+
18
+ # Obtener el prompt del sistema
19
+ system_prompt = get_system_prompt()
20
+
21
+ # Crear el prompt completo
22
+ prompt = f"{system_prompt}\n\nPregunta: {user_message}\n\nRespuesta:"
23
+
24
+ # Generar respuesta usando el pipeline
25
+ response = generator(
26
+ prompt,
27
+ max_new_tokens=512,
28
+ temperature=0.7,
29
+ top_p=0.9,
30
+ do_sample=True,
31
+ num_return_sequences=1
32
+ )[0]["generated_text"]
33
+
34
+ # Extraer solo la respuesta (después de "Respuesta:")
35
+ assistant_response = response.split("Respuesta:")[-1].strip()
36
+
37
+ # Forzar recolección de basura
38
+ gc.collect()
39
+ torch.cuda.empty_cache() if torch.cuda.is_available() else None
40
+
41
+ return assistant_response
42
+
43
+ except Exception as e:
44
+ print(f"Error: {str(e)}")
45
+ return f"Lo siento, ha ocurrido un error: {str(e)}"
46
+
47
+ # Cargar el modelo y crear el pipeline
48
+ print("Cargando modelo ligero...")
49
+
50
+ # Usar un modelo pequeño optimizado para español
51
+ model_name = "microsoft/phi-2" # Modelo de 2.7B parámetros, mucho más ligero que 7B
52
+
53
+ # Configuración para reducir el uso de memoria
54
  tokenizer = AutoTokenizer.from_pretrained(model_name)
55
+ model = AutoModelForCausalLM.from_pretrained(
56
+ model_name,
57
+ torch_dtype=torch.float32,
58
+ low_cpu_mem_usage=True,
59
+ device_map="auto"
 
 
 
 
60
  )
61
 
62
+ # Crear el pipeline de generación de texto
63
+ generator = pipeline(
64
+ "text-generation",
65
+ model=model,
66
+ tokenizer=tokenizer
67
+ )
68
+
69
+ print("Modelo cargado correctamente!")
70
+
71
+ # Crear la interfaz de Gradio
72
+ demo = gr.Interface(
73
+ fn=generate_response,
74
+ inputs=gr.Textbox(
75
+ placeholder="Escribe tu pregunta sobre emprendimiento aquí...",
76
+ label="Tu pregunta"
77
+ ),
 
 
 
 
 
78
  outputs=gr.Textbox(label="Respuesta de BITER"),
79
+ title="BITER - Tu Mentor en Tiempo Real para Decisiones de Negocio",
80
+ description="BITER es un asistente de IA que responde dudas de emprendedores como si fuera un CEO experimentado.",
81
  examples=[
82
  ["¿Cómo puedo validar mi idea de negocio con poco presupuesto?"],
83
  ["¿Cuál es la mejor estrategia para conseguir mis primeros clientes?"],
84
+ ["¿Debería invertir en publicidad en redes sociales o en SEO?"]
85
  ],
86
+ allow_flagging="never"
87
  )
88
 
89
+ # Lanzar la aplicación con configuración para ahorrar memoria
90
+ if __name__ == "__main__":
91
+ # Configurar menos workers para ahorrar memoria
92
+ demo.queue(max_size=1).launch(share=False, debug=False)