askbyte commited on
Commit
9182c17
·
verified ·
1 Parent(s): 9ac84ea

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +117 -118
app.py CHANGED
@@ -4,128 +4,127 @@ import json
4
  import os
5
 
6
  # Función para generar respuestas usando DeepInfra
7
- def generate_response(user_message):
8
- try:
9
- if not user_message.strip():
10
- return "Por favor, escribe una pregunta para que pueda ayudarte."
11
-
12
- # Respuestas predefinidas para preguntas simples
13
- user_message_lower = user_message.lower().strip()
14
-
15
- # Mapa de respuestas cortas para preguntas comunes
16
- respuestas_cortas = {
17
- "hola": "¡Hola! ¿En qué puedo ayudarte hoy?",
18
- "buenos días": "¡Buenos días! ¿En qué puedo ayudarte?",
19
- "buenas": "¡Buenas! ¿En qué puedo ayudarte?",
20
- "saludos": "¡Saludos! ¿En qué puedo ayudarte?",
21
- "hey": "¡Hey! ¿En qué puedo ayudarte?",
22
- "qué tal": "Muy bien, ¿y tú? ¿En qué puedo ayudarte hoy?",
23
- "como estas": "Estoy listo para ayudarte con tu negocio. ¿Qué necesitas?",
24
- "cómo estás": "Estoy listo para ayudarte con tu negocio. ¿Qué necesitas?",
25
- "que es byte": "Byte es un proyecto para emprendedores que ofrece herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?",
26
- "qué es byte": "Byte es un proyecto para emprendedores que ofrece herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?"
27
- }
28
-
29
- # Verificar si es una pregunta simple
30
- for pregunta, respuesta in respuestas_cortas.items():
31
- if pregunta in user_message_lower or user_message_lower in pregunta:
32
- return respuesta
33
-
34
- # Contexto sobre Byte (versión corta)
35
- 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."
36
-
37
- # Cargar el prompt del sistema
38
- with open("prompt.txt", "r", encoding="utf-8") as f:
39
- system_prompt = f.read().strip()
40
-
41
- # Combinar el contexto de Byte con el prompt original
42
- system_prompt = byte_context + "\n\n" + system_prompt
43
-
44
- # Instrucciones muy estrictas sobre brevedad
45
- system_prompt += """
46
 
47
- INSTRUCCIONES DE FORMATO CRÍTICAS:
48
- 1. EXTREMADAMENTE conciso. Máximo 1-2 párrafos cortos.
49
- 2. Para preguntas simples o saludos, responde en una sola línea.
50
- 3. Solo para preguntas técnicas complejas puedes usar hasta 3 párrafos.
51
- 4. NUNCA uses listas largas ni explicaciones extensas.
52
- 5. Habla como un CEO ocupado: directo, práctico y sin rodeos.
53
- 6. Adapta la longitud de tu respuesta a la complejidad de la pregunta.
 
 
 
54
  """
55
-
56
- # Configurar la solicitud a DeepInfra
57
- api_key = os.environ.get("DEEPINFRA_API_KEY", "")
58
- if not api_key:
59
- return "Error: No se ha configurado la clave API."
60
-
61
- headers = {
62
- "Authorization": f"Bearer {api_key}",
63
- "Content-Type": "application/json"
64
- }
65
-
66
- # Formato de prompt para modelos de chat
67
- messages = [
68
- {"role": "system", "content": system_prompt},
69
- {"role": "user", "content": user_message}
70
- ]
71
-
72
- # Usar un modelo que sí está disponible en DeepInfra
73
- data = {
74
- "model": "meta-llama/Llama-2-7b-chat-hf",
75
- "messages": messages,
76
- "max_tokens": 200, # Reducido aún más para forzar respuestas cortas
77
- "temperature": 0.7,
78
- "top_p": 0.9
79
- }
80
-
81
- # Enviar solicitud a la API
82
- response = requests.post(
83
- "https://api.deepinfra.com/v1/openai/chat/completions",
84
- headers=headers,
85
- json=data
86
- )
87
-
88
- # Procesar la respuesta
89
- if response.status_code == 200:
90
- result = response.json()
91
- return result["choices"][0]["message"]["content"]
92
- else:
93
- # Intentar con otro modelo si el primero falla
94
- data["model"] = "mistralai/Mistral-7B-Instruct-v0.2"
95
- response = requests.post(
96
- "https://api.deepinfra.com/v1/openai/chat/completions",
97
- headers=headers,
98
- json=data
99
- )
100
-
101
- if response.status_code == 200:
102
- result = response.json()
103
- return result["choices"][0]["message"]["content"]
104
- else:
105
- return f"Error en la API: {response.status_code} - {response.text}"
106
-
107
- except Exception as e:
108
- return f"Lo siento, ha ocurrido un error: {str(e)}"
 
 
 
 
 
109
 
110
- # Crear la interfaz de Gradio
111
- demo = gr.Interface(
112
- fn=generate_response,
113
- inputs=gr.Textbox(
114
- placeholder="Escribe tu pregunta sobre emprendimiento aquí...",
115
- label="Tu pregunta"
116
- ),
117
- outputs=gr.Textbox(label="Respuesta de BITER"),
118
- title="BITER - Tu Mentor en Tiempo Real para Decisiones de Negocio",
119
- description="BITER es un asistente de IA que responde dudas de emprendedores como si fuera un CEO experimentado.",
120
- examples=[
121
- ["¿Cómo puedo validar mi idea de negocio con poco presupuesto?"],
122
- ["¿Cuál es la mejor estrategia para conseguir mis primeros clientes?"],
123
- ["¿Debería invertir en publicidad en redes sociales o en SEO?"]
124
- ],
125
- allow_flagging="never",
126
- theme=gr.themes.Soft(primary_hue="blue")
127
  )
128
 
129
  # Lanzar la aplicación
130
  if __name__ == "__main__":
131
- demo.queue(max_size=1).launch(share=False, debug=False)
 
4
  import os
5
 
6
  # Función para generar respuestas usando DeepInfra
7
+ def generate_response(user_message, chat_history):
8
+ try:
9
+ if not user_message.strip():
10
+ return "Por favor, escribe una pregunta para que pueda ayudarte."
11
+
12
+ # Respuestas predefinidas para preguntas simples (solo si no hay historial)
13
+ if len(chat_history) == 0:
14
+ user_message_lower = user_message.lower().strip()
15
+
16
+ # Mapa de respuestas cortas y naturales para preguntas comunes
17
+ respuestas_cortas = {
18
+ "hola": "¡Hola! ¿En qué puedo ayudarte hoy?",
19
+ "buenos días": "¡Buenos días! ¿Qué planes tienes para tu negocio hoy?",
20
+ "buenas": "¡Buenas! ¿En qué estás trabajando?",
21
+ "saludos": "¡Hola! ¿Qué te trae por aquí?",
22
+ "hey": "¡Hey! ¿Qué necesitas?",
23
+ "qué tal": "Bien, ¿y tú? ¿En qué puedo ayudarte?",
24
+ "como estas": "Bien, gracias. ¿Qué necesitas?",
25
+ "cómo estás": "Bien, gracias. ¿Qué necesitas?",
26
+ "estas bien": "Perfectamente. ¿En qué puedo ayudarte hoy?",
27
+ "estás bien": "Perfectamente. ¿En qué puedo ayudarte hoy?",
28
+ "que es byte": "Un proyecto con herramientas para emprendedores. ¿En qué puedo ayudarte?",
29
+ "qué es byte": "Un proyecto con herramientas para emprendedores. ¿En qué puedo ayudarte?"
30
+ }
31
+
32
+ # Verificar si es una pregunta simple
33
+ for pregunta, respuesta in respuestas_cortas.items():
34
+ if pregunta in user_message_lower or user_message_lower in pregunta:
35
+ return respuesta
36
+
37
+ # Cargar el prompt del sistema
38
+ with open("prompt.txt", "r", encoding="utf-8") as f:
39
+ system_prompt = f.read().strip()
40
+
41
+ # Instrucciones muy estrictas sobre brevedad y naturalidad
42
+ system_prompt += """
 
 
 
43
 
44
+ INSTRUCCIONES CRÍTICAS:
45
+ 1. NUNCA te presentes como BITER ni menciones que eres un asistente de IA.
46
+ 2. NUNCA expliques tu funcionamiento ni tus capacidades.
47
+ 3. Responde como un CEO humano ocupado: directo, práctico y sin rodeos.
48
+ 4. EXTREMADAMENTE conciso. Máximo 1-2 párrafos cortos.
49
+ 5. Para preguntas simples, responde en una sola línea.
50
+ 6. NUNCA uses listas largas ni explicaciones extensas.
51
+ 7. NUNCA menciones a Byte a menos que te pregunten específicamente por ello.
52
+ 8. Habla como un humano experto, no como una IA.
53
+ 9. MANTÉN EL CONTEXTO de la conversación y haz referencias a mensajes anteriores cuando sea relevante.
54
  """
55
+
56
+ # Configurar la solicitud a DeepInfra
57
+ api_key = os.environ.get("DEEPINFRA_API_KEY", "")
58
+ if not api_key:
59
+ return "Error: No se ha configurado la clave API."
60
+
61
+ headers = {
62
+ "Authorization": f"Bearer {api_key}",
63
+ "Content-Type": "application/json"
64
+ }
65
+
66
+ # Preparar los mensajes para la API incluyendo el historial
67
+ messages = [{"role": "system", "content": system_prompt}]
68
+
69
+ # Convertir el historial de chat de Gradio al formato que espera la API
70
+ for human, assistant in chat_history:
71
+ messages.append({"role": "user", "content": human})
72
+ messages.append({"role": "assistant", "content": assistant})
73
+
74
+ # Añadir el mensaje actual del usuario
75
+ messages.append({"role": "user", "content": user_message})
76
+
77
+ # Usar un modelo que sí está disponible en DeepInfra
78
+ data = {
79
+ "model": "meta-llama/Llama-2-7b-chat-hf",
80
+ "messages": messages,
81
+ "max_tokens": 150,
82
+ "temperature": 0.7,
83
+ "top_p": 0.9
84
+ }
85
+
86
+ # Enviar solicitud a la API
87
+ response = requests.post(
88
+ "https://api.deepinfra.com/v1/openai/chat/completions",
89
+ headers=headers,
90
+ json=data
91
+ )
92
+
93
+ # Procesar la respuesta
94
+ if response.status_code == 200:
95
+ result = response.json()
96
+ return result["choices"][0]["message"]["content"]
97
+ else:
98
+ # Intentar con otro modelo si el primero falla
99
+ data["model"] = "mistralai/Mistral-7B-Instruct-v0.2"
100
+ response = requests.post(
101
+ "https://api.deepinfra.com/v1/openai/chat/completions",
102
+ headers=headers,
103
+ json=data
104
+ )
105
+
106
+ if response.status_code == 200:
107
+ result = response.json()
108
+ return result["choices"][0]["message"]["content"]
109
+ else:
110
+ return f"Error en la API: {response.status_code} - {response.text}"
111
+
112
+ except Exception as e:
113
+ return f"Lo siento, ha ocurrido un error: {str(e)}"
114
 
115
+ # Crear la interfaz de Gradio con historial de chat
116
+ demo = gr.ChatInterface(
117
+ fn=generate_response,
118
+ title="BITER - Tu Mentor en Tiempo Real para Decisiones de Negocio",
119
+ description="BITER es un asistente de IA que responde dudas de emprendedores como si fuera un CEO experimentado.",
120
+ examples=[
121
+ ["¿Cómo puedo validar mi idea de negocio con poco presupuesto?"],
122
+ ["¿Cuál es la mejor estrategia para conseguir mis primeros clientes?"],
123
+ ["¿Debería invertir en publicidad en redes sociales o en SEO?"]
124
+ ],
125
+ theme=gr.themes.Soft(primary_hue="blue")
 
 
 
 
 
 
126
  )
127
 
128
  # Lanzar la aplicación
129
  if __name__ == "__main__":
130
+ demo.queue(max_size=1).launch(share=False, debug=False)