Spaces:
Running
Running
File size: 3,048 Bytes
fda4c03 8f8781e fda4c03 4ad23c1 721590a 928cd07 721590a 1d5b573 721590a fda4c03 721590a fda4c03 8f8781e fda4c03 8f8781e fda4c03 8f8781e fda4c03 721590a 8f8781e 721590a 8f8781e 721590a 8f8781e 9ba91ec 721590a fda4c03 9ba91ec 43f1789 721590a fda4c03 721590a fda4c03 4ad23c1 1d5b573 721590a 8f8781e 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 alternativa usando un modelo aún más pequeño y optimizado para español.
"""
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
prompt = f"{system_prompt}\n\nPregunta: {user_message}\n\nRespuesta:"
# Generar respuesta usando el pipeline
response = generator(
prompt,
max_new_tokens=256,
temperature=0.7,
top_p=0.9,
do_sample=True,
num_return_sequences=1
)[0]["generated_text"]
# Extraer solo la respuesta (después de "Respuesta:")
assistant_response = response.split("Respuesta:")[-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 ultra ligero...")
# Usar un modelo muy pequeño con soporte para español
model_name = "PlanTL-GOB-ES/gpt2-base-bne" # Modelo de ~125M parámetros, extremadamente ligero
# Configuración para reducir el uso de memoria
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
demo.queue(max_size=1).launch(share=False, debug=False) |