import pandas as pd import streamlit as st from dotenv import load_dotenv import openai import os # Configuración de la clave API load_dotenv() openai.api_key = os.getenv("OPENAI_API_KEY") # Clases para la gestión de pedidos class PedidoAgent: def __init__(self, menu_csv_path): self.menu_csv_path = menu_csv_path self.menu_data = self.load_menu() def load_menu(self): try: df_menu = pd.read_csv(self.menu_csv_path) productos = df_menu["Producto"].tolist() precios = df_menu["Precio"].tolist() return {"productos": productos, "precios": precios} except Exception as e: st.error(f"Error al cargar el menú: {e}") return None def realizar_pedido(self, state): if not self.menu_data: st.warning("No se pudo cargar el menú.") return productos = self.menu_data["productos"] precios = self.menu_data["precios"] # Interfaz de usuario para seleccionar productos y cantidades with st.form("pedido_form"): producto_seleccionado = st.selectbox("Producto:", productos) cantidad = st.number_input("Cantidad:", min_value=1, value=1) submitted = st.form_submit_button("Agregar al pedido") if submitted: precio = precios[productos.index(producto_seleccionado)] state.pedidos.append( {"Producto": producto_seleccionado, "Cantidad": cantidad, "Precio": precio} ) st.success("Pedido agregado correctamente") # Mostrar el pedido actual st.subheader("Pedido actual:") if state.pedidos: df_pedidos = pd.DataFrame(state.pedidos) st.table(df_pedidos) class CalculoPedidoAgent: def calcular_total(self, state): st.subheader("Resumen del Pedido") if state.pedidos: df_pedidos = pd.DataFrame(state.pedidos) st.table(df_pedidos) total = df_pedidos["Cantidad"].mul(df_pedidos["Precio"]).sum() st.markdown(f"**Total: ${total:.2f}**") else: st.info("El pedido está vacío.") # Función para obtener respuesta de OpenAI def obtener_respuesta(pregunta, modelo="gpt-4", temperatura=0.5): respuesta = openai.Completion.create( engine=modelo, prompt=f"Pregunta: {pregunta}\nRespuesta:", max_tokens=150, temperature=temperatura, ).choices[0].text.strip() return respuesta # Configuración de Streamlit st.set_page_config(page_title="Asistente Teológico", page_icon="📖") # Estilos CSS personalizados st.markdown( """ """, unsafe_allow_html=True, ) # Encabezado st.image("biblia.jpg") st.title("📖 Asistente Teológico - BOTIDINAMIX AI") st.markdown("Bienvenido al Asistente Teológico, donde puedes preguntar sobre interpretaciones y reflexiones bíblicas.") # Chat st.subheader("🗣️ Chat con el Asistente") if 'mensajes' not in st.session_state: st.session_state.mensajes = [] for mensaje in st.session_state.mensajes: with st.chat_message(mensaje["role"]): st.markdown(mensaje["content"]) pregunta_usuario = st.text_input("Escribe tu pregunta sobre la Biblia:") if st.button("Enviar"): if pregunta_usuario: st.session_state.mensajes.append({"role": "user", "content": pregunta_usuario, "timestamp": time.time()}) with st.chat_message("user"): st.markdown(pregunta_usuario) with st.spinner("Generando respuesta..."): respuesta = obtener_respuesta(pregunta_usuario) st.session_state.mensajes.append({"role": "assistant", "content": respuesta, "timestamp": time.time()}) with st.chat_message("assistant"): st.markdown(respuesta) else: st.warning("Por favor, ingresa una pregunta antes de enviar.") # Gestión de pedidos st.subheader("📋 Gestión de Pedidos") menu_csv_path = "menu.csv" # Ruta al archivo CSV del menú if 'pedidos' not in st.session_state: st.session_state.pedidos = [] pedido_agent = PedidoAgent(menu_csv_path) calculo_pedido_agent = CalculoPedidoAgent() pedido_agent.realizar_pedido(st.session_state) calculo_pedido_agent.calcular_total(st.session_state)