Spaces:
Paused
Paused
import gradio as gr | |
import openai | |
import json | |
import time | |
from utils import get_trip | |
import os | |
openai.api_key = os.environ["OPENAI_API_KEY"] | |
# Tu función get_trip aquí | |
context = [{'role': 'system', 'content': """ | |
Eres CegaperGPT, un servicio automatizado para recomendar la mejor opción de transporte de la compañía Cegaper y ayudar a los usuarios a comprar sus tickets. | |
Cegaper es una compañía de transporte terrestre (autobuses, vans y camiones) que opera en México. | |
Primero, saludas al cliente diciendo tu nombre, luego preguntas por los detalles del viaje y después solicitas la información personal del comprador. | |
Esperas hasta recopilar todo el pedido, luego lo resumes y verificas. | |
Finalmente, recoges el pago. | |
Asegúrate de aclarar todas las opciones para seleccionar el viaje correcto para el usuario. | |
Respondes en un estilo amigable, conversacional y breve. \ | |
"""}] | |
def get_completion_from_messages(messages, temperature=0.1): | |
functions = [{ | |
"name": "get_trip", | |
"description": "Encuentra el mejor plan de viaje desde el origen hasta el destino en un rango de fechas dado.", | |
"parameters": { | |
"type": "object", | |
"properties": { | |
"origin": { | |
"type": "string", | |
"description": "La dirección de origen, debe cumplir con el estándar de Google Maps.", | |
}, | |
"destination": { | |
"type": "string", | |
"description": "La dirección de destino, debe cumplir con el estándar de Google Maps.", | |
}, | |
"date_from": { | |
"type": "string", | |
"description": "La fecha de inicio del rango a considerar para el viaje en formato YYYY-MM-DD", | |
}, | |
"date_to": { | |
"type": "string", | |
"description": "La fecha de fin del rango a considerar para el viaje en formato YYYY-MM-DD", | |
}, | |
"pax": { | |
"type": "integer", | |
"description": "El número de pasajeros para el viaje", | |
}, | |
"round_trip": { | |
"type": "boolean", | |
"description": "Si el viaje debe ser de ida y vuelta o no. Si es verdadero, se requiere date_to.", | |
} | |
}, | |
"required": ["origin", "destination", "date_from", "pax"], | |
} | |
}] | |
response = openai.ChatCompletion.create( | |
model="gpt-4-0613", | |
messages=messages, | |
functions=functions, | |
function_call="auto", | |
) | |
response_message = response["choices"][0]["message"] | |
if response_message.get("function_call"): | |
available_functions = { | |
"get_trip": get_trip, | |
} | |
function_name = response_message["function_call"]["name"] | |
function_to_call = available_functions[function_name] | |
function_args = json.loads( | |
response_message["function_call"]["arguments"]) | |
function_response = function_to_call( | |
origin=function_args.get("origin"), | |
destination=function_args.get("destination"), | |
date_from=function_args.get("date_from"), | |
date_to=function_args.get("date_to"), | |
round_trip=function_args.get("round_trip"), | |
pax=function_args.get("pax"), | |
) | |
messages.append(response_message) | |
messages.append( | |
{ | |
"role": "function", | |
"name": function_name, | |
"content": function_response, | |
} | |
) | |
second_response = openai.ChatCompletion.create( | |
model="gpt-4-0613", | |
messages=messages | |
) | |
if 'second_response' not in locals(): | |
messages.append(response_message) | |
second_response = openai.ChatCompletion.create( | |
model="gpt-4-0613", | |
messages=messages | |
) | |
return second_response.choices[0].message["content"] | |
def respuesta_chatbot(message, chat_history): | |
print(message) | |
context.append({'role': 'user', 'content': f"{message}"}) | |
response = get_completion_from_messages(context) | |
print(response) | |
context.append({'role': 'assistant', 'content': f"{response}"}) | |
chat_history.append((message, response)) | |
time.sleep(2) | |
return "", chat_history | |
with gr.Blocks() as demo: | |
title_and_desc = gr.Markdown( | |
"# Cegaper GPT \n Cegaper GPT es un servicio automatizado para recomendar la mejor opción de transporte de la compañía Cegaper y ayudarte a comprar tus tickets.") | |
chatbot = gr.Chatbot() | |
msg = gr.Textbox() | |
clear = gr.ClearButton([msg, chatbot]) | |
msg.submit(respuesta_chatbot, [msg, chatbot], [msg, chatbot]) | |
demo.launch() | |