adride00
Update app.py to switch to a smaller Spanish-compatible model for improved performance. Introduce a new ECOMMERCE_INFO dictionary for predefined responses related to online sales, enhancing the answer function to prioritize these responses. Refine the Gradio interface title and description to better reflect the focus on ecommerce assistance.
9ebcaff
import gradio as gr | |
import torch | |
from transformers import AutoModelForCausalLM, AutoTokenizer | |
# Usar un modelo más pequeño pero compatible con español | |
model_name = "DeepESP/gpt2-spanish" | |
tokenizer = AutoTokenizer.from_pretrained(model_name, padding_side='left') | |
model = AutoModelForCausalLM.from_pretrained(model_name) | |
# Conocimiento sobre ecommerce y ventas online | |
ECOMMERCE_INFO = { | |
"productos": "Para vender productos online necesitas una tienda virtual. Los precios dependen del tipo de producto y mercado objetivo.", | |
"tienda": "Una tienda online básica puede costar desde $500 hasta $5000 dependiendo de funcionalidades.", | |
"plataforma": "Puedes usar plataformas como Shopify, WooCommerce, PrestaShop o Magento para tu tienda.", | |
"pagos": "Los métodos de pago más comunes son tarjetas de crédito, PayPal, transferencias y pago contra reembolso.", | |
"marketing": "Es importante invertir en SEO, redes sociales y posiblemente publicidad para atraer clientes.", | |
"envíos": "Los costos de envío dependen del peso, dimensiones y distancia. Puedes trabajar con empresas de logística.", | |
"legal": "Necesitas cumplir con normativas de comercio electrónico, protección de datos y derechos del consumidor.", | |
"cómo": "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?", | |
"cómo empezar": "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?", | |
"cómo vender": "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?", | |
"cómo vender productos": "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?", | |
"cómo vender productos online": "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?", | |
"cómo vender productos online fácilmente": "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?", | |
"cómo vender productos online fácilmente y barato": "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?", | |
"cómo vender productos online fácilmente y barato y rápidamente": "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?", | |
} | |
def get_ecommerce_response(query): | |
"""Genera una respuesta basada en palabras clave del ecommerce.""" | |
query = query.lower() | |
# Buscar palabras clave en la consulta | |
for keyword, info in ECOMMERCE_INFO.items(): | |
if keyword in query: | |
return info | |
# Respuesta genérica si no hay coincidencias | |
return "Para empezar una tienda online necesitas elegir una plataforma, configurar métodos de pago, añadir productos y gestionar envíos. ¿Tienes alguna pregunta específica sobre precios, plataformas o marketing?" | |
def generate_model_response(prompt, max_length=100): | |
"""Genera texto usando el modelo (backup si las reglas no coinciden).""" | |
inputs = tokenizer(prompt, return_tensors="pt", padding=True) | |
with torch.no_grad(): | |
outputs = model.generate( | |
inputs["input_ids"], | |
max_length=max_length, | |
do_sample=True, | |
temperature=0.7, | |
top_p=0.92, | |
top_k=50, | |
pad_token_id=tokenizer.eos_token_id | |
) | |
response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
# Extraer solo la parte después del prompt | |
if prompt in response: | |
response = response[len(prompt):].strip() | |
return response | |
def answer(message, history): | |
"""Genera respuestas para preguntas de ecommerce.""" | |
# Si es una pregunta sobre ecommerce, usar respuestas predefinidas | |
ecommerce_response = get_ecommerce_response(message) | |
# Construir prompt con contexto | |
prompt = "Esta es una conversación sobre ventas online y comercio electrónico:\n\n" | |
# Añadir historial reciente (últimos 3 intercambios como máximo) | |
recent_history = history[-3:] if len(history) > 3 else history | |
for h in recent_history: | |
prompt += f"Cliente: {h['content']}\n" | |
if h['role'] == 'assistant': | |
prompt += f"Asistente: {h['content']}\n" | |
# Añadir mensaje actual | |
prompt += f"Cliente: {message}\nAsistente: " | |
# Si tenemos respuesta de ecommerce, usarla directamente | |
if ecommerce_response: | |
return ecommerce_response | |
# Si no, generar respuesta con el modelo | |
model_response = generate_model_response(prompt) | |
# Limpiar la respuesta | |
if "\n" in model_response: | |
model_response = model_response.split("\n")[0] | |
# Si la respuesta está vacía o es muy corta, dar respuesta por defecto | |
if len(model_response) < 10: | |
return "Puedo ayudarte con preguntas sobre cómo vender tus productos online, crear una tienda virtual o estrategias de marketing digital. ¿Qué te gustaría saber específicamente?" | |
return model_response | |
demo = gr.ChatInterface( | |
fn=answer, | |
title="IA de Cikode - Asistente de Ecommerce", | |
description="Haz preguntas sobre cómo vender tus productos online, costos de implementación, plataformas y más.", | |
type="messages") | |
demo.queue(default_concurrency_limit=1).launch() | |