File size: 6,500 Bytes
4ad23c1
55e6cbd
 
d8257da
1d5b573
26e838b
9182c17
 
 
 
 
 
 
 
 
 
 
c592ad7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9182c17
 
 
 
 
 
 
 
 
 
 
c592ad7
9182c17
9ac84ea
9182c17
c592ad7
 
9182c17
 
 
 
 
 
 
c592ad7
9ac84ea
9182c17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
721590a
9182c17
 
 
 
 
 
 
 
 
 
 
4ad23c1
1d5b573
dc63621
721590a
9182c17
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import gradio as gr
import requests
import json
import os

# Función para generar respuestas usando DeepInfra
def generate_response(user_message, chat_history):
    try:
        if not user_message.strip():
            return "Por favor, escribe una pregunta para que pueda ayudarte."
        
        # Respuestas predefinidas para preguntas simples (solo si no hay historial)
        if len(chat_history) == 0:
            user_message_lower = user_message.lower().strip()
            
            # Mapa de respuestas cortas y naturales para preguntas comunes
            respuestas_cortas = {
                "hola": "¡Hola! Soy BITER. ¿En qué puedo ayudarte hoy?",
                "buenos días": "¡Buenos días! Soy BITER. ¿Qué planes tienes para tu negocio hoy?",
                "buenas": "¡Buenas! Soy BITER. ¿En qué estás trabajando?",
                "saludos": "¡Hola! Soy BITER. ¿Qué te trae por aquí?",
                "hey": "¡Hey! Soy BITER. ¿Qué necesitas?",
                "qué tal": "Bien, gracias. Soy BITER. ¿En qué puedo ayudarte?",
                "como estas": "Bien, gracias. Soy BITER. ¿Qué necesitas?",
                "cómo estás": "Bien, gracias. Soy BITER. ¿Qué necesitas?",
                "estas bien": "Perfectamente. Soy BITER. ¿En qué puedo ayudarte hoy?",
                "estás bien": "Perfectamente. Soy BITER. ¿En qué puedo ayudarte hoy?",
                "que es byte": "Byte es un proyecto para emprendedores con herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?",
                "qué es byte": "Byte es un proyecto para emprendedores con herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?",
                "quien eres": "Soy BITER, tu mentor de negocios. Estoy aquí para ayudarte con decisiones estratégicas para tu emprendimiento.",
                "quién eres": "Soy BITER, tu mentor de negocios. Estoy aquí para ayudarte con decisiones estratégicas para tu emprendimiento.",
                "cómo te llamas": "Me llamo BITER. Soy tu mentor de negocios para ayudarte con tu emprendimiento.",
                "como te llamas": "Me llamo BITER. Soy tu mentor de negocios para ayudarte con tu emprendimiento."
            }
            
            # Verificar si es una pregunta simple
            for pregunta, respuesta in respuestas_cortas.items():
                if pregunta in user_message_lower or user_message_lower in pregunta:
                    return respuesta
        
        # Cargar el prompt del sistema
        with open("prompt.txt", "r", encoding="utf-8") as f:
            system_prompt = f.read().strip()
        
        # Instrucciones actualizadas permitiendo que se presente como BITER
        system_prompt += """

INSTRUCCIONES CRÍTICAS:
1. Puedes presentarte como BITER, pero hazlo de forma natural y breve.
2. NUNCA expliques que eres una IA ni detalles sobre tu funcionamiento.
3. Responde como un CEO humano ocupado: directo, práctico y sin rodeos.
4. Sé EXTREMADAMENTE conciso. Máximo 1-2 párrafos cortos.
5. Para preguntas simples, responde en una sola línea.
6. NUNCA uses listas largas ni explicaciones extensas.
7. NUNCA menciones a Byte a menos que te pregunten específicamente por ello.
8. Habla como un humano experto, no como una IA.
9. MANTÉN EL CONTEXTO de la conversación y haz referencias a mensajes anteriores cuando sea relevante.
10. Si te preguntan quién eres, puedes decir: "Soy BITER, tu mentor de negocios para ayudarte con decisiones estratégicas."
"""
        
        # Configurar la solicitud a DeepInfra
        api_key = os.environ.get("DEEPINFRA_API_KEY", "")
        if not api_key:
            return "Error: No se ha configurado la clave API."
        
        headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
        
        # Preparar los mensajes para la API incluyendo el historial
        messages = [{"role": "system", "content": system_prompt}]
        
        # Convertir el historial de chat de Gradio al formato que espera la API
        for human, assistant in chat_history:
            messages.append({"role": "user", "content": human})
            messages.append({"role": "assistant", "content": assistant})
        
        # Añadir el mensaje actual del usuario
        messages.append({"role": "user", "content": user_message})
        
        # Usar un modelo que sí está disponible en DeepInfra
        data = {
            "model": "meta-llama/Llama-2-7b-chat-hf",
            "messages": messages,
            "max_tokens": 150,
            "temperature": 0.7,
            "top_p": 0.9
        }
        
        # Enviar solicitud a la API
        response = requests.post(
            "https://api.deepinfra.com/v1/openai/chat/completions",
            headers=headers,
            json=data
        )
        
        # Procesar la respuesta
        if response.status_code == 200:
            result = response.json()
            return result["choices"][0]["message"]["content"]
        else:
            # Intentar con otro modelo si el primero falla
            data["model"] = "mistralai/Mistral-7B-Instruct-v0.2"
            response = requests.post(
                "https://api.deepinfra.com/v1/openai/chat/completions",
                headers=headers,
                json=data
            )
            
            if response.status_code == 200:
                result = response.json()
                return result["choices"][0]["message"]["content"]
            else:
                return f"Error en la API: {response.status_code} - {response.text}"
    
    except Exception as e:
        return f"Lo siento, ha ocurrido un error: {str(e)}"

# Crear la interfaz de Gradio con historial de chat
demo = gr.ChatInterface(
    fn=generate_response,
    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?"]
    ],
    theme=gr.themes.Soft(primary_hue="blue")
)

# Lanzar la aplicación
if __name__ == "__main__":
    demo.queue(max_size=1).launch(share=False, debug=False)