File size: 5,385 Bytes
4ad23c1
55e6cbd
 
d8257da
1d5b573
26e838b
721590a
fda4c03
 
 
 
9ac84ea
 
229d90b
9ac84ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea665d9
55e6cbd
 
 
fda4c03
229d90b
 
 
9ac84ea
 
 
 
 
 
 
 
 
 
 
ea665d9
26e838b
d8257da
55e6cbd
9ac84ea
fda4c03
55e6cbd
 
 
 
fda4c03
26e838b
d8257da
 
 
 
 
26e838b
55e6cbd
ea665d9
d8257da
9ac84ea
55e6cbd
d8257da
55e6cbd
fda4c03
55e6cbd
 
d8257da
55e6cbd
 
 
dc63621
55e6cbd
 
 
 
 
26e838b
 
 
 
 
 
 
 
 
 
 
 
 
fda4c03
 
 
721590a
 
 
fda4c03
 
 
 
 
 
 
 
 
 
 
 
 
d8257da
 
4ad23c1
1d5b573
dc63621
721590a
26e838b
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
import gradio as gr
import requests
import json
import os

# Función para generar respuestas usando DeepInfra
def generate_response(user_message):
   try:
       if not user_message.strip():
           return "Por favor, escribe una pregunta para que pueda ayudarte."
       
       # Respuestas predefinidas para preguntas simples
       user_message_lower = user_message.lower().strip()
       
       # Mapa de respuestas cortas para preguntas comunes
       respuestas_cortas = {
           "hola": "¡Hola! ¿En qué puedo ayudarte hoy?",
           "buenos días": "¡Buenos días! ¿En qué puedo ayudarte?",
           "buenas": "¡Buenas! ¿En qué puedo ayudarte?",
           "saludos": "¡Saludos! ¿En qué puedo ayudarte?",
           "hey": "¡Hey! ¿En qué puedo ayudarte?",
           "qué tal": "Muy bien, ¿y tú? ¿En qué puedo ayudarte hoy?",
           "como estas": "Estoy listo para ayudarte con tu negocio. ¿Qué necesitas?",
           "cómo estás": "Estoy listo para ayudarte con tu negocio. ¿Qué necesitas?",
           "que es byte": "Byte es un proyecto para emprendedores que ofrece herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?",
           "qué es byte": "Byte es un proyecto para emprendedores que ofrece herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?"
       }
       
       # 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
       
       # Contexto sobre Byte (versión corta)
       byte_context = "Byte es un proyecto para emprendedores con herramientas de IA, desarrollo web y servicios de contenido. BITER es el asistente de IA de Byte."
       
       # Cargar el prompt del sistema
       with open("prompt.txt", "r", encoding="utf-8") as f:
           system_prompt = f.read().strip()
       
       # Combinar el contexto de Byte con el prompt original
       system_prompt = byte_context + "\n\n" + system_prompt
       
       # Instrucciones muy estrictas sobre brevedad
       system_prompt += """

INSTRUCCIONES DE FORMATO CRÍTICAS:
1. Sé EXTREMADAMENTE conciso. Máximo 1-2 párrafos cortos.
2. Para preguntas simples o saludos, responde en una sola línea.
3. Solo para preguntas técnicas complejas puedes usar hasta 3 párrafos.
4. NUNCA uses listas largas ni explicaciones extensas.
5. Habla como un CEO ocupado: directo, práctico y sin rodeos.
6. Adapta la longitud de tu respuesta a la complejidad de la pregunta.
"""
       
       # 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"
       }
       
       # Formato de prompt para modelos de chat
       messages = [
           {"role": "system", "content": system_prompt},
           {"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": 200,  # Reducido aún más para forzar respuestas cortas
           "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
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",
   theme=gr.themes.Soft(primary_hue="blue")
)

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