File size: 4,007 Bytes
38529f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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()