Spaces:
Build error
Build error
File size: 5,015 Bytes
58defd1 aada8e1 5541846 aada8e1 5541846 64e5f04 aada8e1 64e5f04 aada8e1 64e5f04 aada8e1 64e5f04 aada8e1 64e5f04 aada8e1 5541846 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | 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(
"""
<style>
body {
background: #f2f3f5;
color: #333;
}
.stButton>button {
background-color: #4CAF50;
color: white;
border-radius: 10px;
}
.stTextInput>div>div>input {
border: 1px solid #4CAF50;
border-radius: 10px;
}
.stMarkdown>div>p {
color: #4CAF50;
font-weight: bold;
}
.stAudio {
margin-top: 20px;
border: 2px solid #4CAF50;
border-radius: 10px;
}
.stFileUploader>div>div>input {
border: 1px solid #4CAF50;
border-radius: 10px;
}
</style>
""",
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)
|