askbyte commited on
Commit
dc63621
·
verified ·
1 Parent(s): 8f8781e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -51
app.py CHANGED
@@ -1,75 +1,96 @@
1
  """
2
- Versión alternativa usando un modelo aún más pequeño y optimizado para español.
 
3
  """
4
 
5
  import gradio as gr
6
- from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
7
- import torch
8
- import gc
9
  import os
10
 
11
- # Función para cargar el prompt desde el archivo
12
- def get_system_prompt():
13
- with open("prompt.txt", "r", encoding="utf-8") as f:
14
- return f.read().strip()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
- # Función para generar respuestas
17
  def generate_response(user_message):
18
  try:
19
  if not user_message.strip():
20
  return "Por favor, escribe una pregunta para que pueda ayudarte."
21
 
22
- # Obtener el prompt del sistema
23
- system_prompt = get_system_prompt()
 
 
 
 
 
 
 
 
 
24
 
25
- # Crear el prompt completo
26
- prompt = f"{system_prompt}\n\nPregunta: {user_message}\n\nRespuesta:"
 
27
 
28
- # Generar respuesta usando el pipeline
29
- response = generator(
30
- prompt,
31
- max_new_tokens=256,
32
- temperature=0.7,
33
- top_p=0.9,
34
- do_sample=True,
35
- num_return_sequences=1
36
- )[0]["generated_text"]
37
 
38
- # Extraer solo la respuesta (después de "Respuesta:")
39
- assistant_response = response.split("Respuesta:")[-1].strip()
 
 
 
40
 
41
- # Forzar recolección de basura
42
- gc.collect()
43
- torch.cuda.empty_cache() if torch.cuda.is_available() else None
44
 
45
- return assistant_response
 
 
 
46
 
47
  except Exception as e:
48
  print(f"Error: {str(e)}")
49
  return f"Lo siento, ha ocurrido un error: {str(e)}"
50
 
51
- # Cargar el modelo y crear el pipeline
52
- print("Cargando modelo ultra ligero...")
53
-
54
- # Usar un modelo muy pequeño con soporte para español
55
- model_name = "PlanTL-GOB-ES/gpt2-base-bne" # Modelo de ~125M parámetros, extremadamente ligero
56
-
57
- # Configuración para reducir el uso de memoria
58
- tokenizer = AutoTokenizer.from_pretrained(model_name)
59
- model = AutoModelForCausalLM.from_pretrained(
60
- model_name,
61
- torch_dtype=torch.float32,
62
- low_cpu_mem_usage=True
63
- )
64
-
65
- # Crear el pipeline de generación de texto
66
- generator = pipeline(
67
- "text-generation",
68
- model=model,
69
- tokenizer=tokenizer
70
- )
71
 
72
- print("Modelo cargado correctamente!")
73
 
74
  # Crear la interfaz de Gradio
75
  demo = gr.Interface(
@@ -89,7 +110,6 @@ demo = gr.Interface(
89
  allow_flagging="never"
90
  )
91
 
92
- # Lanzar la aplicación con configuración para ahorrar memoria
93
  if __name__ == "__main__":
94
- # Configurar menos workers para ahorrar memoria
95
  demo.queue(max_size=1).launch(share=False, debug=False)
 
1
  """
2
+ Versión ultra ligera usando respuestas predefinidas.
3
+ Esta versión no genera texto completo, sino que selecciona respuestas predefinidas.
4
  """
5
 
6
  import gradio as gr
7
+ import json
8
+ import random
 
9
  import os
10
 
11
+ # Cargar respuestas predefinidas
12
+ def load_responses():
13
+ try:
14
+ with open("responses.json", "r", encoding="utf-8") as f:
15
+ return json.load(f)
16
+ except:
17
+ # Respuestas por defecto si no existe el archivo
18
+ return {
19
+ "validacion": [
20
+ "Para validar tu idea con poco presupuesto, comienza con entrevistas a potenciales clientes. Habla con al menos 20 personas que encajen en tu público objetivo y pregúntales sobre sus problemas, no sobre tu solución. Luego, crea un MVP (Producto Mínimo Viable) lo más simple posible para probar si resuelve el problema. Puedes usar herramientas gratuitas como Google Forms para encuestas, Canva para diseños y páginas de aterrizaje gratuitas como Carrd.co. Lo importante es obtener datos reales antes de invertir mucho tiempo o dinero. ¿Has identificado ya quiénes son tus potenciales clientes?",
21
+ "La validación más efectiva y económica es crear una página de aterrizaje que describa tu producto/servicio y un formulario de pre-registro o lista de espera. Invierte un pequeño presupuesto (50-100€) en anuncios de Facebook o Google dirigidos a tu público objetivo. Si las personas se registran sin haber visto aún el producto real, tienes una señal positiva. Complementa esto con 5-10 entrevistas profundas para entender mejor las necesidades. Recuerda: el objetivo no es que te digan que les gusta tu idea, sino que demuestren interés con acciones concretas."
22
+ ],
23
+ "clientes": [
24
+ "Para conseguir tus primeros clientes, enfócate en estas estrategias: 1) Identifica dónde está tu público objetivo (foros, grupos de Facebook, eventos) y participa genuinamente aportando valor. 2) Ofrece una prueba gratuita o versión limitada para reducir la barrera de entrada. 3) Contacta personalmente a 20-30 potenciales clientes ideales y ofréceles un descuento especial por ser early adopters. 4) Pide referidos a cada cliente satisfecho, idealmente con algún incentivo. Lo más importante es que tus primeros clientes queden extremadamente satisfechos, incluso si implica dar más de lo prometido. ¿En qué canales crees que está tu público objetivo?",
25
+ "La estrategia más efectiva para primeros clientes es lo que llamo "venta manual": identifica 50 clientes ideales y contáctalos uno por uno con mensajes personalizados. No hables de características, sino de cómo resuelves su problema específico. Ofrece un descuento o beneficio exclusivo por ser pioneros. Paralelamente, crea contenido útil y específico para tu nicho y compártelo en LinkedIn o el canal donde esté tu audiencia. La clave es la personalización y seguimiento: estos primeros clientes necesitan sentir que están recibiendo un trato VIP."
26
+ ],
27
+ "marketing": [
28
+ "Entre SEO y redes sociales, la decisión depende de tu modelo de negocio y ciclo de venta. El SEO es una inversión a largo plazo (3-6 meses para ver resultados) pero con mayor retorno sostenible. Las redes sociales dan resultados inmediatos pero requieren inversión continua. Si vendes productos/servicios de decisión rápida o bajo costo, empieza con redes sociales. Si tu producto tiene un ciclo de venta más largo o mayor valor, invierte en SEO mientras complementas con una presencia básica en redes. Lo ideal es no verlo como una dicotomía sino como canales complementarios. ¿Cuál es el tiempo que puedes esperar para ver resultados?",
29
+ "Ni uno ni otro exclusivamente. Comienza con una estrategia híbrida: 70% en publicidad de redes sociales para resultados inmediatos y 30% en crear contenido SEO para el largo plazo. En redes, no disperses esfuerzos: elige una plataforma donde esté tu audiencia y domínala antes de expandirte. Para SEO, enfócate en keywords de nicho con menor competencia. Mide resultados cada 2 semanas y ajusta la distribución según el ROI que obtengas. Recuerda que el mejor marketing siempre será tener un producto excepcional que genere recomendaciones."
30
+ ],
31
+ "financiacion": [
32
+ "Para financiar tu startup en etapa temprana, considera estas opciones en orden: 1) Bootstrapping: usa tus propios recursos y reinvierte los ingresos; te da control total pero crecimiento más lento. 2) FFF (Family, Friends & Fools): pequeñas inversiones de tu círculo cercano; documenta todo formalmente para evitar problemas. 3) Subvenciones y ayudas públicas: en España hay programas como ENISA o CDTI; requieren tiempo pero no diluyen tu participación. 4) Ángeles inversores: para cuando ya tienes un MVP y primeros usuarios. Antes de buscar financiación externa, pregúntate: ¿realmente la necesito ahora o puedo validar mi modelo con menos recursos?",
33
+ "La mejor estrategia de financiación depende de tu etapa. Si estás empezando, enfócate en conseguir un MVP con recursos propios o FFF (familia y amigos). Una vez tengas tracción inicial, busca programas de aceleración que ofrezcan financiación semilla (como Lanzadera, Wayra o SeedRocket). Para rondas más grandes, necesitarás métricas de crecimiento. Considera también opciones alternativas como crowdfunding (ideal para productos B2C) o financiación pública (ENISA, CDTI). Recuerda que cada euro de inversión externa tiene un costo: no solo en equity, sino en tiempo reportando a inversores y presión por crecer rápido."
34
+ ],
35
+ "producto": [
36
+ "Para desarrollar un producto que realmente conecte con tus usuarios, sigue estos principios: 1) Obsesiónate con el problema, no con tu solución. 2) Construye la versión más simple que resuelva el problema central (MVP). 3) Establece un ciclo de feedback continuo con usuarios reales. 4) Mide comportamientos, no opiniones. 5) Itera rápidamente basándote en datos. El error más común es añadir demasiadas funcionalidades demasiado pronto. Enfócate en hacer una cosa excepcionalmente bien antes de expandir. ¿Has identificado claramente cuál es el problema principal que resuelves?",
37
+ "El desarrollo de producto exitoso sigue un patrón: primero, identifica un problema doloroso para un grupo específico de personas. Luego, crea la solución más simple posible que resuelva ese problema y ponla en manos de usuarios reales lo antes posible. Después, establece un ciclo de mejora continua basado en métricas de uso real, no en opiniones. Prioriza siempre las funcionalidades que resuelven los problemas más críticos de tus usuarios principales, no las que te parecen más interesantes a ti. Recuerda que un producto exitoso no es el que tiene más funcionalidades, sino el que resuelve mejor un problema específico."
38
+ ],
39
+ "general": [
40
+ "Para tomar esa decisión, necesitas evaluar tres factores clave: 1) Tu público objetivo y dónde se encuentra, 2) Tu presupuesto y recursos disponibles, y 3) Tus objetivos a corto y largo plazo. Sin conocer estos detalles, es difícil darte una recomendación específica. ¿Podrías compartir más información sobre tu negocio, a quién te diriges y qué recursos tienes disponibles? Con esos datos podré ofrecerte una estrategia más personalizada.",
41
+ "Antes de responder, necesito entender mejor tu situación específica. ¿Podrías compartir más detalles sobre tu negocio, objetivos y recursos disponibles? Cada decisión estratégica debe estar alineada con tu contexto particular. Con más información, podré ofrecerte una recomendación verdaderamente útil y adaptada a tus circunstancias.",
42
+ "Hola, soy BITER, tu mentor de negocios. Estoy aquí para ayudarte con tus dudas sobre emprendimiento y estrategia empresarial. ¿En qué puedo ayudarte hoy? Puedes preguntarme sobre validación de ideas, adquisición de clientes, marketing, financiación o desarrollo de producto."
43
+ ]
44
+ }
45
 
46
+ # Función para clasificar la pregunta y seleccionar una respuesta
47
  def generate_response(user_message):
48
  try:
49
  if not user_message.strip():
50
  return "Por favor, escribe una pregunta para que pueda ayudarte."
51
 
52
+ # Palabras clave para clasificación simple
53
+ keywords = {
54
+ "validacion": ["validar", "idea", "mvp", "viable", "testear", "probar", "hipótesis", "problema", "solución", "encuesta"],
55
+ "clientes": ["cliente", "usuario", "vender", "captar", "adquirir", "retener", "fidelizar", "early adopter", "primeros", "target"],
56
+ "marketing": ["marketing", "publicidad", "redes", "social", "seo", "anuncio", "promoción", "contenido", "tráfico", "visibilidad"],
57
+ "financiacion": ["financiar", "dinero", "inversión", "capital", "fondo", "préstamo", "subvención", "ayuda", "bootstrap", "revenue"],
58
+ "producto": ["producto", "servicio", "desarrollo", "feature", "funcionalidad", "diseño", "ux", "experiencia", "usuario", "iterar"]
59
+ }
60
+
61
+ # Clasificación simple basada en palabras clave
62
+ user_message_lower = user_message.lower()
63
 
64
+ # Si es un saludo simple
65
+ if user_message_lower in ["hola", "buenos días", "buenas", "saludos", "hey"]:
66
+ return random.choice(all_responses["general"])
67
 
68
+ # Buscar coincidencias de palabras clave
69
+ max_matches = 0
70
+ category = "general"
 
 
 
 
 
 
71
 
72
+ for cat, words in keywords.items():
73
+ matches = sum(1 for word in words if word in user_message_lower)
74
+ if matches > max_matches:
75
+ max_matches = matches
76
+ category = cat
77
 
78
+ # Obtener respuestas para esa categoría
79
+ responses = all_responses.get(category, all_responses["general"])
 
80
 
81
+ # Seleccionar una respuesta aleatoria de esa categoría
82
+ response = random.choice(responses)
83
+
84
+ return response
85
 
86
  except Exception as e:
87
  print(f"Error: {str(e)}")
88
  return f"Lo siento, ha ocurrido un error: {str(e)}"
89
 
90
+ # Cargar respuestas predefinidas
91
+ all_responses = load_responses()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
+ print("Sistema de respuestas predefinidas cargado correctamente!")
94
 
95
  # Crear la interfaz de Gradio
96
  demo = gr.Interface(
 
110
  allow_flagging="never"
111
  )
112
 
113
+ # Lanzar la aplicación
114
  if __name__ == "__main__":
 
115
  demo.queue(max_size=1).launch(share=False, debug=False)