import json import gradio as gr import time from openai import OpenAI import os from dotenv import load_dotenv # Cargar las variables de entorno y configurar el cliente de OpenAI load_dotenv() client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) my_assistant = client.beta.assistants.retrieve("asst_m1mvLz5rtxcROa4DWYWcuRDr") def submit_message(assistant_id, thread, user_message): client.beta.threads.messages.create( thread_id=thread.id, role="user", content=user_message ) return client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant_id, ) def get_response(thread): return client.beta.threads.messages.list(thread_id=thread.id, order="asc") def submit_to_openai(nombre,demografia, ingresos, situacion_laboral, intereses, accesibilidad_tecnologia, complejidad): send_message = f"""Nombre del Curso: {nombre} Demografía Local: {demografia} Nivel de Ingresos: {ingresos} Situación Laboral: {situacion_laboral} Intereses Específicos de la Población: {intereses} Accesibilidad a la Tecnología: {accesibilidad_tecnologia} Complejidad del Curso: {complejidad}""" empty_thread = client.beta.threads.create() submit_message(my_assistant.id, empty_thread, send_message) time.sleep(19) # Esperar a que la respuesta esté disponible response = get_response(empty_thread) return response def curso_info(nombre, demografia, ingresos, situacion_laboral, intereses, accesibilidad_tecnologia, complejidad): # Suponiendo que submit_to_openai ya está definido y envía correctamente los parámetros respuesta_api = submit_to_openai(nombre, demografia, ingresos, situacion_laboral, intereses, accesibilidad_tecnologia, complejidad) # Extraer el contenido del segundo mensaje (índice 1) en la lista de respuestas # Asumiendo que el segundo mensaje contiene la respuesta en formato markdown (```json ...) contenido_respuesta = respuesta_api.data[1].content[0].text.value # Procesar el contenido para extraer el JSON # Eliminar los backticks triples y cualquier otro formato markdown si es necesario json_str = contenido_respuesta.strip("`") # Parsear el string JSON extraído respuesta_json = json.loads(json_str) nombre_curso = respuesta_json["nombrecurso"] calificacion = respuesta_json["calificacionfinal"] # Añadir emojis y descripciones según la calificación if calificacion >= 4.5: emoji = "🌟🌟🌟🌟🌟" descripcion = "¡Excelente! Un curso altamente recomendado." elif calificacion >= 3.5: emoji = "🌟🌟🌟🌟" descripcion = "Muy bueno. Vale la pena considerarlo." elif calificacion >= 2.5: emoji = "🌟🌟🌟" descripcion = "Bueno, pero hay margen de mejora." elif calificacion >= 1.5: emoji = "🌟🌟" descripcion = "Regular. Podría ser mejor." else: emoji = "🌟" descripcion = "Por debajo de las expectativas." # Combinar todo en un mensaje personalizado mensaje = f"Curso: {nombre_curso}\nCalificación: {calificacion} {emoji}\n{descripcion}" return mensaje with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Interface( fn=curso_info, inputs=[ gr.Textbox(label="Nombre del Curso", type="text"), gr.Slider(minimum=1, maximum=5, label="Demografía Local"), gr.Slider(minimum=1, maximum=5, label="Nivel de Ingresos"), gr.Slider(minimum=1, maximum=5, label="Situación Laboral"), gr.Slider(minimum=1, maximum=5, label="Intereses Específicos de la Población"), gr.Slider(minimum=1, maximum=5, label="Accesibilidad a la Tecnología"), gr.Slider(minimum=1, maximum=5, label="Complejidad del Curso") ], outputs="text", title="Información del Curso", description="Ajusta los deslizadores para definir los parámetros del curso y recibir recomendaciones." ) if __name__ == "__main__": demo.launch()