File size: 4,665 Bytes
4ad23c1
55e6cbd
 
d8257da
1d5b573
26e838b
721590a
fda4c03
 
 
 
ea665d9
 
 
229d90b
 
 
 
 
 
 
 
 
ea665d9
55e6cbd
 
 
fda4c03
229d90b
 
 
ea665d9
 
 
26e838b
d8257da
55e6cbd
d8257da
fda4c03
55e6cbd
 
 
 
fda4c03
26e838b
d8257da
 
 
 
 
26e838b
55e6cbd
ea665d9
d8257da
ea665d9
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
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."
       
       # Detectar si es un saludo simple
       saludos = ["hola", "buenos días", "buenas", "saludos", "hey", "qué tal", "como estás"]
       if user_message.lower().strip() in saludos:
           return "¡Hola! Soy BITER, el asistente de Byte para emprendedores. ¿En qué puedo ayudarte hoy? Puedes preguntarme sobre estrategia, marketing, financiación o desarrollo de producto."
       
       # Contexto sobre Byte y justbyte.es
       byte_context = """
CONTEXTO SOBRE BYTE:
Byte es un proyecto hecho por y para emprendedores que ofrece herramientas de IA, desarrollo web y servicios de agencia de contenidos enfocados en viralidad. Byte también cuenta con una newsletter para emprendedores y tiene presencia en Instagram. La web justbyte.es es el punto central donde los emprendedores pueden acceder a estos recursos y servicios.

Como BITER, eres el asistente de IA de Byte, diseñado específicamente para ayudar a los emprendedores que visitan justbyte.es a tomar mejores decisiones estratégicas para sus negocios.
"""
       
       # 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
       
       # Añadir instrucciones para respuestas concisas
       system_prompt += "\n\nIMPORTANTE: Tus respuestas deben ser concisas (máximo 3-4 párrafos). Evita listas largas y sé directo. 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. Por favor, configura la variable de entorno DEEPINFRA_API_KEY."
       
       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": 300,  # Reducido para respuestas más 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)