Josedcape commited on
Commit
2fd7874
·
verified ·
1 Parent(s): 84fb546

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +149 -2
app.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import streamlit as st
3
  import openai
4
  import os
@@ -108,4 +107,152 @@ def generar_reflexion(keyword):
108
 
109
  # Función para convertir texto a voz
110
  def text_to_speech_base64(text):
111
- client = texttospeech.TextToSpeechClient
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import openai
3
  import os
 
107
 
108
  # Función para convertir texto a voz
109
  def text_to_speech_base64(text):
110
+ client = texttospeech.TextToSpeechClient()
111
+ input_text = texttospeech.SynthesisInput(text=text)
112
+ voice = texttospeech.VoiceSelectionParams(language_code="es-ES", ssml_gender=texttospeech.SsmlVoiceGender.NEUTRAL)
113
+ audio_config = texttospeech.AudioConfig(audio_encoding=texttospeech.AudioEncoding.MP3)
114
+ response = client.synthesize_speech(input=input_text, voice=voice, audio_config=audio_config)
115
+ return base64.b64encode(response.audio_content).decode("utf-8")
116
+
117
+ # Función para obtener un audio aleatorio de la carpeta "reflexiones"
118
+ def obtener_audio_aleatorio():
119
+ carpeta_reflexiones = "reflexiones" # Cambia esta ruta por la correcta
120
+ archivos = os.listdir(carpeta_reflexiones)
121
+ archivos_mp3 = [archivo for archivo in archivos if archivo.endswith(".mp3")]
122
+ if archivos_mp3:
123
+ audio_seleccionado = random.choice(archivos_mp3)
124
+ with open(os.path.join(carpeta_reflexiones, audio_seleccionado), "rb") as audio_file:
125
+ audio_bytes = audio_file.read()
126
+ return base64.b64encode(audio_bytes).decode("utf-8"), audio_seleccionado
127
+ return None, None
128
+
129
+ # Función para obtener respuesta del asistente
130
+ def obtener_respuesta(pregunta):
131
+ prompt = f"Responde a la siguiente pregunta bíblica: {pregunta}"
132
+ response = openai.ChatCompletion.create(
133
+ model="gpt-4",
134
+ messages=[{"role": "system", "content": "Eres un asistente teológico carismático, entusiasmado por ayudar a comprender la palabra de Dios."},
135
+ {"role": "user", "content": prompt}],
136
+ temperature=0.7,
137
+ max_tokens=200,
138
+ )
139
+ respuesta = response['choices'][0]['message']['content']
140
+ return respuesta
141
+
142
+ if page == "Chat Asistente":
143
+ # Chat con el asistente
144
+ st.subheader("🗣️ Chat con el Asistente")
145
+ if 'mensajes' not in st.session_state:
146
+ st.session_state.mensajes = []
147
+
148
+ for mensaje in st.session_state.mensajes:
149
+ with st.chat_message(mensaje["role"]):
150
+ if isinstance(mensaje["content"], str):
151
+ st.markdown(mensaje["content"])
152
+ elif isinstance(mensaje["content"], bytes):
153
+ st.image(mensaje["content"])
154
+
155
+ st.markdown('<div class="video-container">', unsafe_allow_html=True)
156
+ st.markdown(
157
+ """
158
+ <video autoplay loop muted playsinline style="width: 100%;">
159
+ <source src="videos/Avatar los codigos de Dios.mp4" type="video/mp4">
160
+ </video>
161
+ """,
162
+ unsafe_allow_html=True,
163
+ )
164
+ st.markdown('</div>', unsafe_allow_html=True)
165
+
166
+ pregunta_usuario = st.text_input("Escribe tu pregunta sobre la Biblia:", key="pregunta_input")
167
+ imagen_usuario = st.file_uploader("Sube una imagen (opcional):", type=["png", "jpg", "jpeg"])
168
+
169
+ if st.button("Enviar"):
170
+ if pregunta_usuario or imagen_usuario:
171
+ if pregunta_usuario:
172
+ st.session_state.mensajes.append({"role": "user", "content": pregunta_usuario, "timestamp": time.time()})
173
+ with st.chat_message("user"):
174
+ st.markdown(pregunta_usuario)
175
+
176
+ if imagen_usuario:
177
+ imagen_bytes = imagen_usuario.getvalue()
178
+ st.session_state.mensajes.append({"role": "user", "content": imagen_bytes, "timestamp": time.time()})
179
+ with st.chat_message("user"):
180
+ st.image(imagen_bytes)
181
+
182
+ # Limpiar el campo de texto usando JavaScript para evitar el error de modificación del estado
183
+ st.markdown(
184
+ """
185
+ <script>
186
+ document.querySelector('input[type="text"]').value = "";
187
+ </script>
188
+ """,
189
+ unsafe_allow_html=True,
190
+ )
191
+
192
+ with st.spinner("Meditando su respuesta..."):
193
+ with st.empty():
194
+ spinner = st.markdown('<div class="spinner"></div>', unsafe_allow_html=True)
195
+ time.sleep(1) # Simulación del tiempo de procesamiento
196
+ spinner.empty()
197
+
198
+ if pregunta_usuario:
199
+ respuesta = obtener_respuesta(pregunta_usuario)
200
+ st.session_state.mensajes.append({"role": "assistant", "content": respuesta, "timestamp": time.time()})
201
+ with st.chat_message("assistant"):
202
+ st.markdown(respuesta)
203
+
204
+ # Convertir texto a voz
205
+ audio_base64 = text_to_speech_base64(respuesta)
206
+ audio_html = f"""
207
+ <audio autoplay>
208
+ <source src="data:audio/mp3;base64,{audio_base64}" type="audio/mp3">
209
+ </audio>
210
+ """
211
+ st.markdown(audio_html, unsafe_allow_html=True)
212
+ else:
213
+ st.warning("Por favor, ingresa una pregunta antes de enviar.")
214
+
215
+ elif page == "Generador de Frases Bíblicas":
216
+ # Función para generar una imagen y reflexión
217
+ def generar_imagen_y_reflexion(keyword):
218
+ try:
219
+ reflexion = generar_reflexion(keyword)
220
+ audio_base64 = text_to_speech_base64(reflexion)
221
+ imagenes = listar_imagenes("imagenes") # Cambia "imagenes" por la ruta de tu carpeta de imágenes
222
+ if imagenes:
223
+ imagen_seleccionada = random.choice(imagenes)
224
+ st.image(imagen_seleccionada)
225
+ st.markdown(reflexion)
226
+ audio_html = f"""
227
+ <audio autoplay>
228
+ <source src="data:audio/mp3;base64,{audio_base64}" type="audio/mp3">
229
+ </audio>
230
+ """
231
+ st.markdown(audio_html, unsafe_allow_html=True)
232
+ else:
233
+ st.warning("No se encontraron imágenes en la carpeta especificada.")
234
+ except Exception as e:
235
+ st.error(f"Error al generar la imagen y reflexión: {e}")
236
+
237
+ st.subheader("✨ Generador de Frases Bíblicas")
238
+ keyword = st.text_input("Introduce una palabra clave:")
239
+ if st.button("Generar"):
240
+ if keyword:
241
+ generar_imagen_y_reflexion(keyword)
242
+ else:
243
+ st.warning("Por favor, introduce una palabra clave.")
244
+
245
+ elif page == "Recibir Reflexión":
246
+ st.subheader("🔊 Recibir Reflexión")
247
+ if st.button("Reproducir Reflexión"):
248
+ audio_base64, audio_nombre = obtener_audio_aleatorio()
249
+ if audio_base64:
250
+ st.markdown(f"Reproduciendo: {audio_nombre}")
251
+ audio_html = f"""
252
+ <audio autoplay>
253
+ <source src="data:audio/mp3;base64,{audio_base64}" type="audio/mp3">
254
+ </audio>
255
+ """
256
+ st.markdown(audio_html, unsafe_allow_html=True)
257
+ else:
258
+ st.warning("No se encontraron reflexiones en la carpeta especificada.")