File size: 6,229 Bytes
ee53991
 
9ebcaff
3ba80aa
9ebcaff
 
 
ee53991
 
9ebcaff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ee53991
9ebcaff
 
 
 
 
 
 
 
 
 
 
ee53991
9ebcaff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66038ba
 
9ebcaff
 
 
 
 
 
ee53991
9ebcaff
 
 
 
 
 
ee53991
 
9ebcaff
ee53991
9ebcaff
 
 
ee53991
9ebcaff
 
ee53991
9ebcaff
 
 
ee53991
9ebcaff
 
 
ee53991
9ebcaff
3ba80aa
 
 
9ebcaff
 
66038ba
3ba80aa
66038ba
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
96
97
98
99
100
101
102
103
104
105
106
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()