Spaces:
Sleeping
Sleeping
File size: 3,842 Bytes
52a76cb 7cba34a e341366 7cba34a d35d511 7cba34a d329e85 7cba34a e341366 4d995a1 f61af4a e341366 f61af4a 7cba34a e341366 f61af4a e341366 d35d511 f61af4a 897c746 f61af4a 897c746 7cba34a f61af4a 7cba34a e341366 7cba34a e341366 7cba34a f61af4a |
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 |
import gradio as gr
import base64
import vertexai
from vertexai.generative_models import GenerativeModel, Part, SafetySetting
import os
# Configuraci贸n del modelo y par谩metros globales
generation_config = {
"max_output_tokens": 8192,
"temperature": 0,
"top_p": 0.75,
}
safety_settings = [
SafetySetting(
category=SafetySetting.HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold=SafetySetting.HarmBlockThreshold.OFF
),
SafetySetting(
category=SafetySetting.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold=SafetySetting.HarmBlockThreshold.OFF
),
SafetySetting(
category=SafetySetting.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
threshold=SafetySetting.HarmBlockThreshold.OFF
),
SafetySetting(
category=SafetySetting.HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold=SafetySetting.HarmBlockThreshold.OFF
),
]
def configurar_credenciales(json_path):
"""Configura las credenciales de Google Cloud usando un archivo JSON."""
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = json_path
def extraer_respuestas(pdf_data):
"""Extrae preguntas y respuestas desde un PDF."""
# Procesamiento simulado para simplificar
texto_extraido = base64.b64decode(pdf_data).decode("utf-8", errors="ignore")
preguntas_respuestas = {}
pregunta_actual = None
for linea in texto_extraido.split("\n"):
if "Pregunta" in linea:
pregunta_actual = linea.strip()
preguntas_respuestas[pregunta_actual] = ""
elif "Respuesta" in linea and pregunta_actual:
preguntas_respuestas[pregunta_actual] = linea.split(":")[-1].strip()
return preguntas_respuestas
def revisar_examen(json_path, pdf_docente, pdf_alumno):
"""Compara las respuestas del alumno con las preguntas del docente."""
try:
# Configurar las credenciales
configurar_credenciales(json_path.name)
# Inicializar Vertex AI
vertexai.init(project="deploygpt", location="us-central1")
# Leer los PDFs
with open(pdf_docente.name, "rb") as docente_file:
docente_data = docente_file.read()
with open(pdf_alumno.name, "rb") as alumno_file:
alumno_data = alumno_file.read()
# Extraer preguntas y respuestas
preguntas_docente = extraer_respuestas(docente_data)
respuestas_alumno = extraer_respuestas(alumno_data)
# Validar solo preguntas respondidas por el alumno
retroalimentacion = []
for pregunta, respuesta_correcta in preguntas_docente.items():
if pregunta in respuestas_alumno:
respuesta_alumno = respuestas_alumno[pregunta]
retroalimentacion.append(
f"Pregunta: {pregunta}\n"
f"Respuesta del alumno: {respuesta_alumno}\n"
f"Respuesta correcta: {respuesta_correcta}\n"
)
else:
retroalimentacion.append(f"Pregunta: {pregunta}\nNo fue asignada al alumno.\n")
# Unir retroalimentaci贸n
feedback = "\n".join(retroalimentacion)
return feedback
except Exception as e:
return f"Error al procesar: {str(e)}"
# Crear la interfaz con Gradio
interface = gr.Interface(
fn=revisar_examen,
inputs=[
gr.File(label="Archivo de Credenciales JSON"),
gr.File(label="PDF del Docente (Preguntas y Respuestas)"),
gr.File(label="PDF del Alumno (Respuestas)")
],
outputs=gr.Textbox(label="Retroalimentaci贸n del Examen"),
title="Revisi贸n Autom谩tica de Ex谩menes",
description="Sube el archivo de credenciales JSON de Google Cloud, el PDF del docente y el PDF del alumno para recibir una evaluaci贸n detallada."
)
# Lanzar la interfaz
interface.launch(debug=True)
|