JeCabrera commited on
Commit
20ce570
·
verified ·
1 Parent(s): 0987651

Upload 12 files

Browse files
Files changed (1) hide show
  1. app.py +61 -84
app.py CHANGED
@@ -16,23 +16,14 @@ def is_greeting(text):
16
  """Detecta si el texto es un saludo simple"""
17
  text = text.lower().strip()
18
  greetings = ['hola', 'hey', 'saludos', 'buenos días', 'buenas tardes', 'buenas noches', 'hi', 'hello']
19
- return any(greeting in text for greeting in greetings) and len(text.split()) < 4
20
-
21
- def get_greeting_response():
22
- """Genera una respuesta amigable para saludos"""
23
- return """👋🏻 Hola
24
-
25
- Soy RoboCopy, tu asistente personal para crear Propuestas Únicas de Valor que realmente conecten con tu audiencia.
26
-
27
- Mi especialidad es ayudarte a destacar lo que hace único a tu negocio:
28
-
29
- • Transformar tus características en beneficios irresistibles
30
-
31
- • Crear mensajes que capturan la atención inmediata de tus clientes ideales
32
-
33
- • Diferenciarte de la competencia con palabras que venden
34
 
35
- Espero tu respuesta para trabajar juntos."""
 
36
 
37
  # Función para procesar mensajes (unifica la lógica de procesamiento)
38
  def process_message(prompt, is_example=False):
@@ -65,79 +56,65 @@ def process_message(prompt, is_example=False):
65
  # Añadir mensaje del usuario al historial
66
  state.add_message('user', prompt, USER_AVATAR_ICON)
67
 
68
- # Verificar si es un saludo simple
69
  if is_greeting(prompt):
70
- # Mostrar respuesta personalizada para saludos
71
- greeting_response = get_greeting_response()
72
- with st.chat_message(name=MODEL_ROLE, avatar=AI_AVATAR_ICON):
73
- st.markdown(greeting_response)
74
-
75
- # Añadir respuesta al historial
76
- state.add_message(
77
- role=MODEL_ROLE,
78
- content=greeting_response,
79
- avatar=AI_AVATAR_ICON,
80
- )
81
- state.save_chat_history()
82
- return
83
-
84
- # Procesar respuesta del modelo
85
- if prompt.strip():
86
- # Obtener el prompt del experto
87
  puv_expert_prompt = get_puv_expert_prompt()
88
-
89
- # Combinar el prompt del experto con el mensaje del usuario
90
  enhanced_prompt = f"{puv_expert_prompt}\n\nUser message: {prompt}"
91
-
92
- with st.chat_message(MODEL_ROLE, avatar=AI_AVATAR_ICON):
93
- try:
94
- if is_example:
95
- # Para ejemplos, no necesitamos streaming
96
- response = state.chat.send_message(prompt)
97
- st.markdown(response.text)
98
-
99
- # Añadir respuesta al historial
100
- state.add_message(MODEL_ROLE, response.text, AI_AVATAR_ICON)
101
- else:
102
- # Para entrada directa, usamos streaming
103
- response = state.chat.send_message(
104
- enhanced_prompt,
105
- stream=True,
106
- )
107
-
108
- message_placeholder = st.empty()
109
- full_response = ''
110
-
111
- # Añadir indicador de "escribiendo..."
112
- typing_indicator = st.empty()
113
- typing_indicator.markdown("*Generando respuesta...*")
114
-
115
- # Mostrar respuesta por fragmentos
116
- for chunk in response:
117
- for ch in chunk.text:
118
- full_response += ch
119
- time.sleep(0.01)
120
- message_placeholder.write(full_response + '▌')
121
-
122
- # Eliminar indicador de escritura
123
- typing_indicator.empty()
124
-
125
- # Mostrar respuesta completa
126
- message_placeholder.write(full_response)
127
-
128
- # Añadir respuesta al historial
129
- state.add_message(
130
- role=MODEL_ROLE,
131
- content=state.chat.history[-1].parts[0].text,
132
- avatar=AI_AVATAR_ICON,
133
- )
134
 
135
- state.gemini_history = state.chat.history
 
 
136
 
137
- # Guardar historial actualizado
138
- state.save_chat_history()
139
- except ValueError as e:
140
- st.error("Error: El mensaje no puede estar vacío. Por favor, escribe algo.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
  # Función para cargar CSS personalizado
143
  def load_css(file_path):
 
16
  """Detecta si el texto es un saludo simple"""
17
  text = text.lower().strip()
18
  greetings = ['hola', 'hey', 'saludos', 'buenos días', 'buenas tardes', 'buenas noches', 'hi', 'hello']
19
+
20
+ # Solo considerar como saludo si es el primer mensaje del usuario
21
+ # y es un saludo simple
22
+ is_simple_greeting = any(greeting in text for greeting in greetings) and len(text.split()) < 4
23
+ return is_simple_greeting and len(state.messages) == 0
 
 
 
 
 
 
 
 
 
 
24
 
25
+ # Eliminamos la función get_greeting_response() ya que queremos que el modelo genere
26
+ # sus propias respuestas de saludo
27
 
28
  # Función para procesar mensajes (unifica la lógica de procesamiento)
29
  def process_message(prompt, is_example=False):
 
56
  # Añadir mensaje del usuario al historial
57
  state.add_message('user', prompt, USER_AVATAR_ICON)
58
 
59
+ # Verificar si es un saludo simple y es el primer mensaje
60
  if is_greeting(prompt):
61
+ # En lugar de usar una respuesta predefinida, dejamos que el modelo genere su propia respuesta
62
+ # pero le damos un contexto específico para que sepa que es un saludo inicial
63
+ enhanced_prompt = f"El usuario te ha saludado con '{prompt}'. Responde con un saludo amigable y breve que explique que eres RoboCopy, un asistente para crear Propuestas Únicas de Valor. No uses una plantilla predefinida, sé natural y conversacional."
64
+ else:
65
+ # Para mensajes normales, usamos el prompt del experto
 
 
 
 
 
 
 
 
 
 
 
 
66
  puv_expert_prompt = get_puv_expert_prompt()
 
 
67
  enhanced_prompt = f"{puv_expert_prompt}\n\nUser message: {prompt}"
68
+
69
+ with st.chat_message(MODEL_ROLE, avatar=AI_AVATAR_ICON):
70
+ try:
71
+ if is_example:
72
+ # Para ejemplos, no necesitamos streaming
73
+ response = state.chat.send_message(prompt)
74
+ st.markdown(response.text)
75
+
76
+ # Añadir respuesta al historial
77
+ state.add_message(MODEL_ROLE, response.text, AI_AVATAR_ICON)
78
+ else:
79
+ # Para entrada directa, usamos streaming
80
+ response = state.chat.send_message(
81
+ enhanced_prompt,
82
+ stream=True,
83
+ )
84
+
85
+ message_placeholder = st.empty()
86
+ full_response = ''
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
+ # Añadir indicador de "escribiendo..."
89
+ typing_indicator = st.empty()
90
+ typing_indicator.markdown("*Generando respuesta...*")
91
 
92
+ # Mostrar respuesta por fragmentos
93
+ for chunk in response:
94
+ for ch in chunk.text:
95
+ full_response += ch
96
+ time.sleep(0.01)
97
+ message_placeholder.write(full_response + '▌')
98
+
99
+ # Eliminar indicador de escritura
100
+ typing_indicator.empty()
101
+
102
+ # Mostrar respuesta completa
103
+ message_placeholder.write(full_response)
104
+
105
+ # Añadir respuesta al historial
106
+ state.add_message(
107
+ role=MODEL_ROLE,
108
+ content=state.chat.history[-1].parts[0].text,
109
+ avatar=AI_AVATAR_ICON,
110
+ )
111
+
112
+ state.gemini_history = state.chat.history
113
+
114
+ # Guardar historial actualizado
115
+ state.save_chat_history()
116
+ except ValueError as e:
117
+ st.error("Error: El mensaje no puede estar vacío. Por favor, escribe algo.")
118
 
119
  # Función para cargar CSS personalizado
120
  def load_css(file_path):