Josedcape commited on
Commit
268b5e5
·
verified ·
1 Parent(s): 1056228

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -81
app.py CHANGED
@@ -16,7 +16,6 @@ from reportlab.lib.pagesizes import letter
16
  from reportlab.pdfgen import canvas
17
  import csv
18
  import pandas as pd
19
- from crewai import Agent, Task, Crew, Process
20
 
21
  # Configuración de NLTK
22
  nltk.download('punkt')
@@ -142,53 +141,69 @@ def obtener_respuesta(pregunta, texto_preprocesado, modelo, temperatura=0.5):
142
  return "Lo siento, no puedo procesar tu solicitud en este momento."
143
 
144
  # Definición de Agentes
145
- def definir_agentes_y_tareas(menu_df):
146
  pedido_tool = PedidoTool(menu_df)
147
- orden_tool = OrdenTool(menu_df)
148
-
149
- agente_pedido = Agent(
150
- role='Agente de Pedido',
151
- goal='Tomar pedidos de los clientes y verificar contra el menú.',
152
- verbose=True,
153
- memory=True,
154
- backstory='Eres experto en recibir pedidos y asegurarte de que todo esté correcto antes de pasarlo a la cocina.',
155
- tools=[pedido_tool]
156
- )
157
-
158
- agente_orden = Agent(
159
- role='Agente de Orden',
160
- goal='Calcular el costo total del pedido y procesar la orden de compra.',
161
- verbose=True,
162
- memory=True,
163
- backstory='Eres el encargado de asegurarte que todos los pedidos sean correctamente procesados y calculados.',
164
- tools=[orden_tool]
165
- )
166
-
167
- tarea_tomar_pedido = Task(
168
- description='Recibir el pedido del cliente, verificar los elementos contra el menú y confirmar el pedido.',
169
- expected_output='Un pedido confirmado con todos los elementos disponibles en el menú.',
170
- agent=agente_pedido,
171
- )
172
-
173
- tarea_procesar_orden = Task(
174
- description='Recibir el pedido confirmado, calcular el costo total y procesar la orden de compra.',
175
- expected_output='Una orden de compra procesada con el costo total calculado.',
176
- agent=agente_orden,
177
- )
178
-
179
- crew = Crew(
180
- agents=[agente_pedido, agente_orden],
181
- tasks=[tarea_tomar_pedido, tarea_procesar_orden],
182
- process=Process.sequential
183
- )
184
 
185
- return crew
 
 
 
186
 
187
  # Main App
188
  def main():
189
  # --- Diseño general ---
190
  st.set_page_config(page_title="Asistente Virtual", page_icon="🤖")
191
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  # --- Opciones adicionales ---
193
  st.markdown("---")
194
  temperatura = st.slider("🌡️ Temperatura", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
@@ -228,37 +243,6 @@ def main():
228
  st.title("🤖 RESTAURANTE SAZON BURGER 🍔✨-BOTIDINAMIX AI")
229
  st.markdown("---")
230
 
231
- # --- Estilos CSS personalizados ---
232
- st.markdown(
233
- """
234
- <style>
235
- body {
236
- background-image: linear-gradient(to right, #FFA500, #FFD700);
237
- }
238
- h1, h2, h3, h4, h5, h6 {
239
- color: green !important;
240
- font-weight: bold !important;
241
- }
242
- .stChatFloatingInputContainer {
243
- background-color: rgba(255, 255, 255, 0.8);
244
- border-radius: 10px;
245
- }
246
- .stTextInput > div > div > input {
247
- color: #333;
248
- }
249
- [data-testid="stChatMessage"] {
250
- background-color: black !important;
251
- color: gold !important;
252
- border-radius: 10px;
253
- }
254
- [data-testid="stChatMessage"] p {
255
- color: gold !important;
256
- }
257
- </style>
258
- """,
259
- unsafe_allow_html=True,
260
- )
261
-
262
  # --- Botones de historial ---
263
  if st.button("Buscar Historial"):
264
  st.session_state.mostrar_historial = True
@@ -320,10 +304,11 @@ def main():
320
  with st.chat_message("user"):
321
  st.markdown(pregunta_usuario)
322
 
323
- respuesta = obtener_respuesta(pregunta_usuario, texto_preprocesado, modelo="gpt-4", temperatura=0.5)
324
- st.session_state.mensajes.append({"role": "assistant", "content": respuesta, "timestamp": time.time()})
325
- with st.chat_message("assistant"):
326
- st.markdown(respuesta)
 
327
 
328
  guardar_historial(st.session_state.mensajes)
329
  else:
@@ -331,22 +316,27 @@ def main():
331
 
332
  # --- Lectura del menú desde CSV y creación de agentes ---
333
  st.subheader("📋 Menú y Pedidos")
334
- menu_csv = st.file_uploader("menu_sazon_burger.csv", type=["csv"])
335
 
336
  if menu_csv:
337
  menu_df = leer_menu_csv(menu_csv)
338
  st.success("Menú cargado exitosamente. Listo para tomar pedidos.")
339
  st.write(menu_df)
340
 
341
- # Definir y ejecutar agentes y tareas
342
- crew = definir_agentes_y_tareas(menu_df)
343
-
344
  # Captura de pedido
345
  pedido_usuario = st.text_input("Ingresa tu pedido (separado por comas):")
346
  if st.button("Tomar Pedido"):
347
  if pedido_usuario:
348
- result = crew.kickoff(inputs={'pedido': pedido_usuario})
349
- st.info(result)
 
 
 
 
 
 
 
 
350
  else:
351
  st.warning("Por favor, ingresa el pedido antes de continuar.")
352
 
 
16
  from reportlab.pdfgen import canvas
17
  import csv
18
  import pandas as pd
 
19
 
20
  # Configuración de NLTK
21
  nltk.download('punkt')
 
141
  return "Lo siento, no puedo procesar tu solicitud en este momento."
142
 
143
  # Definición de Agentes
144
+ def tomar_pedido_agente(pedido, menu_df):
145
  pedido_tool = PedidoTool(menu_df)
146
+ confirmados = pedido_tool.tomar_pedido(pedido)
147
+ return confirmados
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
 
149
+ def procesar_orden_agente(pedido, menu_df):
150
+ orden_tool = OrdenTool(menu_df)
151
+ total = orden_tool.procesar_orden(pedido)
152
+ return total
153
 
154
  # Main App
155
  def main():
156
  # --- Diseño general ---
157
  st.set_page_config(page_title="Asistente Virtual", page_icon="🤖")
158
 
159
+ # --- Estilos CSS personalizados ---
160
+ st.markdown(
161
+ """
162
+ <style>
163
+ body {
164
+ background: rgb(241,241,234);
165
+ background: radial-gradient(circle, rgba(241,241,234,1) 4%, rgba(255,127,8,1) 36%, rgba(235,255,8,1) 94%, rgba(0,0,255,1) 99%);
166
+ }
167
+ h1, h2, h3, h4, h5, h6 {
168
+ color: green !important;
169
+ font-weight: bold !important;
170
+ }
171
+ .stChatFloatingInputContainer {
172
+ background-color: rgba(255, 255, 255, 0.8);
173
+ border-radius: 10px;
174
+ }
175
+ .stTextInput > div > div > input {
176
+ color: #333;
177
+ }
178
+ [data-testid="stChatMessage"] {
179
+ background-color: black !important;
180
+ color: gold !important;
181
+ border-radius: 10px;
182
+ }
183
+ [data-testid="stChatMessage"] p {
184
+ color: gold !important;
185
+ }
186
+ ::-webkit-scrollbar {
187
+ width: 16px;
188
+ }
189
+ ::-webkit-scrollbar-thumb {
190
+ background-color: #FFD700;
191
+ border-radius: 10px;
192
+ }
193
+ .st-spinner > div {
194
+ border-top-color: transparent;
195
+ border-right-color: transparent;
196
+ animation: spin 1s linear infinite;
197
+ }
198
+ @keyframes spin {
199
+ from { transform: rotate(0deg); }
200
+ to { transform: rotate(360deg); }
201
+ }
202
+ </style>
203
+ """,
204
+ unsafe_allow_html=True,
205
+ )
206
+
207
  # --- Opciones adicionales ---
208
  st.markdown("---")
209
  temperatura = st.slider("🌡️ Temperatura", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
 
243
  st.title("🤖 RESTAURANTE SAZON BURGER 🍔✨-BOTIDINAMIX AI")
244
  st.markdown("---")
245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
  # --- Botones de historial ---
247
  if st.button("Buscar Historial"):
248
  st.session_state.mostrar_historial = True
 
304
  with st.chat_message("user"):
305
  st.markdown(pregunta_usuario)
306
 
307
+ with st.spinner("Generando respuesta..."):
308
+ respuesta = obtener_respuesta(pregunta_usuario, texto_preprocesado, modelo="gpt-4", temperatura=0.5)
309
+ st.session_state.mensajes.append({"role": "assistant", "content": respuesta, "timestamp": time.time()})
310
+ with st.chat_message("assistant"):
311
+ st.markdown(respuesta)
312
 
313
  guardar_historial(st.session_state.mensajes)
314
  else:
 
316
 
317
  # --- Lectura del menú desde CSV y creación de agentes ---
318
  st.subheader("📋 Menú y Pedidos")
319
+ menu_csv = st.file_uploader("Sube el archivo CSV del menú", type=["csv"])
320
 
321
  if menu_csv:
322
  menu_df = leer_menu_csv(menu_csv)
323
  st.success("Menú cargado exitosamente. Listo para tomar pedidos.")
324
  st.write(menu_df)
325
 
 
 
 
326
  # Captura de pedido
327
  pedido_usuario = st.text_input("Ingresa tu pedido (separado por comas):")
328
  if st.button("Tomar Pedido"):
329
  if pedido_usuario:
330
+ confirmados = tomar_pedido_agente(pedido_usuario, menu_df)
331
+ st.info(f"Pedido confirmado: {confirmados}")
332
+
333
+ total = procesar_orden_agente(','.join(confirmados), menu_df)
334
+ st.success(f"Total del pedido: ${total}")
335
+
336
+ # Generar PDF de la orden
337
+ order_details = {item: {'price': menu_df[menu_df['item'] == item]['price'].values[0]} for item in confirmados}
338
+ pdf_path = generar_pdf_orden(order_details)
339
+ st.markdown(f"[Descargar PDF de la Orden]({pdf_path})", unsafe_allow_html=True)
340
  else:
341
  st.warning("Por favor, ingresa el pedido antes de continuar.")
342