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