File size: 6,612 Bytes
38529f8 884a1b0 38529f8 884a1b0 38529f8 884a1b0 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 |
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):
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
json_str = contenido_respuesta.strip("`")
print(json_str)
# 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
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()
|