File size: 5,091 Bytes
067e9c0
4b26f79
 
 
96a810e
 
 
 
 
067e9c0
6cc67d2
 
96a810e
 
4b26f79
a1c83d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4b26f79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1c83d0
 
4b26f79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29320a2
96a810e
 
a1c83d0
96a810e
 
 
 
 
 
 
 
 
 
 
29320a2
96a810e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1c83d0
4b26f79
 
 
 
a1c83d0
4b26f79
 
 
c200462
 
 
 
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
import os
import pandas as pd
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import openai
import tempfile
from google.cloud import texttospeech
import time

# Configura la variable de entorno para las credenciales de Google Cloud
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "botidinamix-g.json"

# Instancia el cliente de Text-to-Speech
client = texttospeech.TextToSpeechClient()

# Menú definido directamente en el código
menu = [
    {"item": "Hamburguesa sencilla (200g)", "price": 14000},
    {"item": "Hamburguesa doble (400g)", "price": 19000},
    {"item": "Hamburguesa triple (600g)", "price": 24000},
    {"item": "Hamburguesa napolitana", "price": 18000},
    {"item": "Hamburguesa de la casa", "price": 22000},
    {"item": "Perro caliente sencillo", "price": 11000},
    {"item": "Perro caliente mixto (con tocino, queso y jalapeños)", "price": 16000},
    {"item": "Jalapeños", "price": 2000},
    {"item": "Tocineta", "price": 3000},
    {"item": "Queso cheddar", "price": 3500},
    {"item": "Queso americano", "price": 3500},
    {"item": "Papas fritas naturales", "price": 4000},
    {"item": "Papas fritas con limón", "price": 4500},
    {"item": "Papas fritas con pollo BBQ", "price": 5000},
    {"item": "Papas fritas con jalapeños y queso", "price": 5500},
    {"item": "Papas fritas con tocineta y queso", "price": 6000},
    {"item": "Cerveza Pilsen", "price": 4000},
    {"item": "Cerveza Águila", "price": 5000},
    {"item": "Cerveza Club Social", "price": 7000},
    {"item": "Batido de chocolate", "price": 6000},
    {"item": "Batido de vainilla", "price": 5500},
    {"item": "Batido de fresa", "price": 6500},
    {"item": "Agua mineral con gas", "price": 3000},
    {"item": "Agua aromatizada", "price": 2500},
    {"item": "Leche", "price": 3500},
    {"item": "Jugo natural (en agua o leche)", "price": 4000}
]

menu_df = pd.DataFrame(menu)

class PedidoTool:
    def __init__(self, menu_df):
        self.menu_df = menu_df

    def tomar_pedido(self, pedido):
        items = pedido.split(',')
        confirmados = []
        for item in items:
            if item.strip() in self.menu_df['item'].values:
                confirmados.append(item.strip())
        return confirmados

class OrdenTool:
    def __init__(self, menu_df):
        self.menu_df = menu_df

    def procesar_orden(self, pedido):
        items = pedido.split(',')
        total = 0
        for item in items:
            price = self.menu_df[self.menu_df['item'] == item.strip()]['price'].values[0]
            total += price
        return total

def generar_pdf_orden(order_details, filepath='orden_compra.pdf'):
    c = canvas.Canvas(filepath, pagesize=letter)
    width, height = letter
    c.drawString(100, height - 100, "Orden de Compra")
    y = height - 120
    total = 0
    for item, details in order_details.items():
        c.drawString(100, y, f"{item}: ${details['price']}")
        y -= 20
        total += details['price']
    c.drawString(100, y - 20, f"Total: ${total}")
    c.save()
    return filepath

def obtener_respuesta(pregunta, texto_preprocesado, modelo="gpt-4-turbo", temperatura=0.5):
    try:
        response = openai.ChatCompletion.create(
            model=modelo,
            messages=[
                {"role": "system", "content": "Actua como Ana una asesora de ventas del restaurante Sazon Burguer, tienes un tono muy amable y cordial"},
                {"role": "user", "content": f"{pregunta}\n\nContexto: {texto_preprocesado}"}
            ],
            temperature=temperatura
        )
        respuesta = response.choices[0].message['content'].strip()

        # Configura la solicitud de síntesis de voz
        input_text = texttospeech.SynthesisInput(text=respuesta)
        voice = texttospeech.VoiceSelectionParams(
            language_code="es-ES", ssml_gender=texttospeech.SsmlVoiceGender.FEMALE,
        )
        audio_config = texttospeech.AudioConfig(
            audio_encoding=texttospeech.AudioEncoding.MP3
        )

        # Realiza la solicitud de síntesis de voz
        response = client.synthesize_speech(
            input=input_text, voice=voice, audio_config=audio_config
        )

        # Guarda el audio en un archivo temporal
        audio_path = tempfile.mktemp(suffix=".mp3")
        with open(audio_path, "wb") as audio_file:
            audio_file.write(response.audio_content)

        return respuesta, audio_path

    except openai.OpenAIError as e:
        return f"Error al comunicarse con OpenAI: {e}", None

def tomar_pedido_agente(pedido):
    pedido_tool = PedidoTool(menu_df)
    confirmados = pedido_tool.tomar_pedido(pedido)
    return confirmados

def procesar_orden_agente(pedido):
    orden_tool = OrdenTool(menu_df)
    total = orden_tool.procesar_orden(pedido)
    return total

def generar_mensaje_automatico(confirmados):
    mensaje = f"¡Gracias por tu pedido! Has ordenado: {', '.join(confirmados)}. ¿Te gustaría agregar algo más a tu pedido? Tenemos opciones deliciosas como papas fritas, batidos y mucho más."
    return mensaje