| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- from ast import arg
- import openai
- from printer import Printer
- from order import Order, Item
- import threading
- from scrapper import scrap_menu
- # Reemplaza 'TU_API_KEY' con tu clave real de OpenAI
- openai.api_key = "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"
- lista = []
- def nueva_lista():
- """Elimina la lista de compras."""
- print("Lista de compras eliminada.")
- lista.clear()
- def add_to_list(*items):
- """Agrega uno o más items a la lista de compras."""
- for item in items:
- if isinstance(item, dict) and "name" in item and "quantity" in item:
- if item not in lista:
- lista.append(item)
- else:
- item["quantity"] += item["quantity"]
-
- def buy():
- """Envía la lista de compra."""
- if not lista:
- print("No hay items en la lista de compras.")
- return
- order = Order([Item(item["name"], 10, item["quantity"]) for item in lista])
- printer = Printer()
- # Lanzar impresión en segundo plano y esperar a que termine
- thread = threading.Thread(target=printer.print_order, args=(order,))
- thread.start()
- thread.join()
- print("Lista de compra enviada.")
- nueva_lista()
- function_definitions = [
- {
- "name": "add_to_list",
- "description": "Agrega items nuevos a la lista de compras",
- "parameters": {
- "type": "object",
- "properties": {
- "items": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "description": "Nombre del producto"
- },
- "quantity": {
- "type": "integer",
- "description": "Cantidad del producto"
- }
- },
- "required": ["name", "quantity"]
- },
- "description": "Lista de items a agregar"
- }
- },
- "required": ["items"]
- }
- },
- {
- "name": "buy",
- "description": "Envía la lista de compra",
- "parameters": {
- "type": "object",
- "properties": {}
- }
- }
- ]
- def handle_function_call(name, arguments):
- if name == "nueva_lista":
- nueva_lista()
- return "e vaciado la lista de compras. ¿Deseas agregar un producto?"
- elif name == "add_to_list":
- add_to_list(*arguments.get("items", []))
- print(arguments)
- return f'Claro eh agregado {", ".join([f"{item["quantity"]} {item["name"]}{"s" if item["quantity"] > 1 else ""}" for item in arguments["items"]])} a la lista de compras. ¿Deseas agregar otro producto?'
- elif name == "buy":
- buy()
- return "Tu pedido llegará en un momento"
- else:
- return "Función no reconocida."
- def main():
- print("Chat GPT-4o-mini. Escribe 'salir' para terminar.")
- messages = [
- {"role": "system", "content": "Eres un asistente de ventas, tu nombre sera 'Camilo Klein' amigable y profesional tu misión es ayudar a los clientes presentandoles tu cerveceria con sus compras cuando agregues un producto a la lista de compras confirma diciendo por ejemplo '1 [nombre del producto] agregado' y siempre pregunta si desean añadir algo más si dicen que no pregúntales si quieren enviar la lista de compras recuerda que al usar la función 'add to list' solo debes agregar el producto pedido, ignorando la lista de compras"},
- {"role": "system", "content": """solo puedes responder preguntas de o relacionadas a la siguiente tabla
-
- Pregunta Respuesta
- ¿Qué es Klein? Klein, Cervecería Klein o 'el Klein' se refieren al Biergarten Klein.
- ¿Dónde puedo ver el menú de Klein? Puedes consultar la carta en https://menu.fu.do/klein/qr-menu.
- ¿Qué cervezas tienen en Klein? Ofrecemos cervezas artesanales de la casa como Hoppy Mosh (IPA), Black Mamba (Porter), Soviet Riot (Russian Imperial Stout), Queen Burlesque (American Strong Ale), 24K Gold (Golden Ale) y Bendición Gitana (Pale Ale).
- ¿Qué comida recomiendan con la Hoppy Mosh? Prueba esta IPA con nuestro ceviche, te sorprenderá la combinación refrescante.
- ¿Qué maridaje tiene la Black Mamba? Combínala con la Capresse 3 Quesos o la Cuatro Quesos para una experiencia deliciosa.
- ¿Con qué plato va bien la Soviet Riot? Es excelente para acompañar la Mechaloca, nuestra hamburguesa de carne mechada con queso cheddar y tocino.
- ¿Qué cerveza es ideal para la Rodeo Burger? Queen Burlesque es perfecta para disfrutar con la Rodeo Burger, sus sabores a caramelo y pasas complementan los toques ahumados de la salsa BBQ.
- ¿Qué bebida es ideal para el verano? 24K Gold, una Golden Ale suave y sedosa con notas cítricas, ideal para días calurosos.
- ¿Qué cerveza recomiendan con pizza vegetariana? Bendición Gitana, una Pale Ale ligera que se lleva bien con la Vegetariana o la Doble Pepperoni.
- ¿Qué opciones de gin tienen? Tenemos opciones como Summer Klein, Tropical Bliss, Spicy Mango Xawer y Kalfuko, además de nuestra Tónica pomelo de la casa.
- ¿Qué lleva el cóctel Summer Klein? Refrescante mezcla de gin propio, jugo de naranja, jugo de limón y nuestra ginger beer de la casa.
- ¿Qué hamburguesas tienen en Klein? Ofrecemos la Rodeo Burger, Cheese Burger, Burger Play, Play Harder, Mechaloca y Veggie Marley.
- ¿Cuál es la hamburguesa más jugosa? Mechaloca, con carne mechada, queso cheddar, tocino, cebolla caramelizada, pepinillos y salsa ahumada.
- ¿Tienen hamburguesas vegetarianas? Sí, tenemos la Veggie Marley con pan pita, seitán, tomate, lechuga, coleslaw, cebolla morada y salsa ali oli. También ofrecemos la Not Burger como alternativa en nuestras hamburguesas clásicas.
- ¿Cuáles son sus pizzas? Tenemos varias opciones como Campestre, Cuatro Quesos, Pepperoni, Bianca, Piacere, Camarón al ajillo, Napolitana, Vegetariana, Doble Pepperoni, Margarita y Pollo BBQ.
- ¿Cuál es su pizza más popular? La Cuatro Quesos, con queso mozzarella, camembert, azul y edam, es una de las favoritas.
- ¿Tienen pizzas con carne mechada? Sí, la Piacere y la Campestre llevan carne mechada.
- ¿Qué pizza lleva camarón? La Camarón al ajillo, con camarón salteado, champiñón, cebolla morada y queso mozzarella.
- ¿Qué tragos con gin tienen? Puedes probar Tropical Bliss, Spicy Mango Xawer y Kalfuko, además de nuestra Tónica pomelo de la casa."""},
- {"role":"system", "content":"Lista actual de compras:\n\n{lista}\n"}
- ]
- while True:
- user_input = input("Tú: ")
- if user_input.lower() == "salir":
- break
- messages.append({"role": "user", "content": user_input})
- response = openai.chat.completions.create(
- model="gpt-4o-mini",
- messages=messages,
- functions=function_definitions,
- function_call="auto",
- temperature=0.3
- )
- reply_msg = response.choices[0].message
- if reply_msg.function_call:
- func_name = reply_msg.function_call.name
- import json
- arguments = json.loads(reply_msg.function_call.arguments)
- result = handle_function_call(func_name, arguments)
- print("Asistente:", result)
- messages.append({
- "role": "assistant",
- "content": result
- })
- else:
- reply = reply_msg.content.strip()
- print("Asistente:", reply)
- messages.append({"role": "assistant", "content": reply})
- if __name__ == "__main__":
- main()
|