File size: 7,244 Bytes
38529f8
1020f78
38529f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
884a1b0
 
 
 
 
 
38529f8
 
 
 
 
 
 
 
884a1b0
 
 
 
 
 
 
 
38529f8
 
 
 
 
 
 
1020f78
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38529f8
1020f78
 
 
38529f8
884a1b0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38529f8
 
884a1b0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
import json
import re
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):
    print(nombre, demografia, ingresos, situacion_laboral, intereses, accesibilidad_tecnologia, complejidad)
    #sumar + 1 a cada variable para que coincida con el diccionario
    demografia += 1
    ingresos += 1
    situacion_laboral += 1
    intereses += 1
    accesibilidad_tecnologia += 1
    complejidad += 1
    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
    match = re.search(r'\{.*\}', contenido_respuesta, re.DOTALL)
    if match:
        json_str = match.group(0)
        print("JSON string extracted:", json_str)  # Para depuración
        try:
            respuesta_json = json.loads(json_str)
            nombre_curso = respuesta_json.get("nombrecurso", "Nombre no disponible")
            calificacion = respuesta_json.get("calificacionfinal", "Calificación no disponible")
            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."
            return f"Curso: {nombre_curso}\nCalificación: {calificacion} {emoji}\n{descripcion}"
        
        except json.JSONDecodeError as e:
                        print("Error al analizar JSON:", e)
                        # Manejar el error adecuadamente
                        return "Error al procesar la respuesta de la API."
    else:
                    print("No se encontró un patrón JSON válido en la respuesta.")
                    # Manejar la ausencia de un patrón JSON
    return "No se pudo extraer la información del curso."   

dircionarioDemografias = {
    1: "Menores de Edad",
    2: "Jóvenes",
    3: "Adultos",
    4: "Adultos Mayores",
    5: "Todos"

}
diccionarioIngresos = {
    1: "Bajo (hasta 2 salarios mínimos)",
    2: "Medio bajo (2-4 salarios mínimos)",
    3: "Medio (4-6 salarios mínimos)",
    4: "Medio alto (6-8 salarios mínimos)",
    5: "Alto (más de 8 salarios mínimos)"
}

dircionarioSituacionLaboral = {
    1: "Desempleado 5 Horas",
    2: "Estudiante 4 Horas",
    3: "Independiente 3 Horas",
    4: "Estudiante 2 Horas",
    5: "No Aplica 1 Horas"
}
dircionarioIntereses = {
    1: "Ciencia y matemáticas",
    2: "Desarrollo personal y profesional",
    3: "Artes y humanidades",
    4: "Tecnología e innovación",
    5: "Salud y bienestar"
}
dircionarioAccesibilidadTecnologia = {
    5: "Mínimo (smartphone básico)",
    4: "Bajo (computadora de escritorio antigua o laptop)",
    3: "Moderado (smartphone avanzado o tablet)",
    2: "Alto (laptop o PC moderno)",
    1: "Muy alto (múltiples dispositivos de última generación)"
}
diccionarioComplejidad = {
    5: "Introductorio (sin conocimientos previos necesarios)",
    4: "Básico (conocimientos generales del tema)",
    3: "Intermedio (alguna experiencia previa necesaria)",
    2: "Avanzado (experiencia significativa en el tema)",
    1: "Experto (para especialistas en el tema)"
}
diccionarios = {
    "Demografía Local": dircionarioDemografias,
    "Nivel de Ingresos": diccionarioIngresos ,
    "Situación Laboral": dircionarioSituacionLaboral,
    "Intereses Específicos de la Población": dircionarioIntereses,
    "Accesibilidad a la Tecnología": dircionarioAccesibilidadTecnologia,
    "Complejidad del Curso": diccionarioComplejidad
}

with gr.Blocks(theme=gr.themes.Soft()) as demo:
    with gr.Row():
        with gr.Column():
            nombre = gr.Textbox("Nombre del Curso", placeholder="Introducción a la Programación")
            demografia = gr.Dropdown(dircionarioDemografias.values(),type="index", label="Demografía Local")
            ingresos = gr.Dropdown(diccionarioIngresos.values(),type="index", label="Nivel de Ingresos")
            situacion_laboral = gr.Dropdown(dircionarioSituacionLaboral.values(),type="index", label="Situación Laboral")
            intereses = gr.Dropdown(dircionarioIntereses.values(),type="index", label="Intereses Específicos de la Población")
            accesibilidad_tecnologia = gr.Dropdown(dircionarioAccesibilidadTecnologia.values(),type="index", label="Accesibilidad a la Tecnología")
            complejidad = gr.Dropdown(diccionarioComplejidad.values(),type="index", label="Complejidad del Curso")
            button_submit = gr.Button("Enviar")
        with gr.Column():
            gr.Label("Resultado"),
            resultado = gr.Textbox("Resultado", placeholder="Aquí aparecerá el resultado",label="Resultado")
            
            button_submit.click(
            curso_info, 
            inputs=[nombre, demografia, demografia, demografia, demografia, demografia, demografia],  # Actualizar según corresponda
            outputs=resultado
            )
        

    
if __name__ == "__main__":
    demo.launch()