demoIAC / app.py
JavierIA's picture
qwerty
38529f8
raw
history blame
4.01 kB
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()