File size: 3,104 Bytes
fda4c03
 
 
 
4ad23c1
721590a
928cd07
721590a
 
1d5b573
721590a
 
fda4c03
 
721590a
 
 
fda4c03
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
721590a
 
fda4c03
721590a
fda4c03
 
721590a
01023b1
9ba91ec
721590a
fda4c03
 
 
9ba91ec
43f1789
721590a
 
fda4c03
 
 
721590a
 
 
 
 
 
fda4c03
 
 
 
 
 
 
 
 
 
 
 
 
 
4ad23c1
1d5b573
721590a
 
fda4c03
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"""
Versión usando Phi-1.5, un modelo más pequeño que Phi-2.
"""

import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
import gc
import os

# Función para cargar el prompt desde el archivo
def get_system_prompt():
   with open("prompt.txt", "r", encoding="utf-8") as f:
       return f.read().strip()

# Función para generar respuestas
def generate_response(user_message):
   try:
       if not user_message.strip():
           return "Por favor, escribe una pregunta para que pueda ayudarte."
       
       # Obtener el prompt del sistema
       system_prompt = get_system_prompt()
       
       # Crear el prompt completo para Phi-1.5
       prompt = f"Instrucciones: {system_prompt}\n\nUsuario: {user_message}\n\nAsistente:"
       
       # Generar respuesta usando el pipeline
       response = generator(
           prompt,
           max_new_tokens=256,  # Reducido para mayor velocidad
           temperature=0.7,
           top_p=0.9,
           do_sample=True,
           num_return_sequences=1
       )[0]["generated_text"]
       
       # Extraer solo la respuesta del asistente (después de "Asistente:")
       assistant_response = response.split("Asistente:")[-1].strip()
       
       # Forzar recolección de basura
       gc.collect()
       torch.cuda.empty_cache() if torch.cuda.is_available() else None
       
       return assistant_response
   
   except Exception as e:
       print(f"Error: {str(e)}")
       return f"Lo siento, ha ocurrido un error: {str(e)}"

# Cargar el modelo y crear el pipeline
print("Cargando modelo Phi-1.5 (1.3B parámetros)...")

# Usar Phi-1.5, un modelo muy pequeño (1.3B parámetros) pero potente
model_name = "microsoft/phi-1_5"

# Configuración para reducir el uso de memoria y aumentar velocidad
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
   model_name,
   torch_dtype=torch.float32,
   low_cpu_mem_usage=True
)

# Crear el pipeline de generación de texto
generator = pipeline(
   "text-generation",
   model=model,
   tokenizer=tokenizer
)

print("Modelo cargado correctamente!")

# Crear la interfaz de Gradio
demo = gr.Interface(
   fn=generate_response,
   inputs=gr.Textbox(
       placeholder="Escribe tu pregunta sobre emprendimiento aquí...",
       label="Tu pregunta"
   ),
   outputs=gr.Textbox(label="Respuesta de BITER"),
   title="BITER - Tu Mentor en Tiempo Real para Decisiones de Negocio",
   description="BITER es un asistente de IA que responde dudas de emprendedores como si fuera un CEO experimentado.",
   examples=[
       ["¿Cómo puedo validar mi idea de negocio con poco presupuesto?"],
       ["¿Cuál es la mejor estrategia para conseguir mis primeros clientes?"],
       ["¿Debería invertir en publicidad en redes sociales o en SEO?"]
   ],
   allow_flagging="never"
)

# Lanzar la aplicación con configuración para ahorrar memoria
if __name__ == "__main__":
   # Configurar menos workers para ahorrar memoria y aumentar velocidad
   demo.queue(max_size=1).launch(share=False, debug=False)