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() | |