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()
|