Spaces:
Sleeping
Sleeping
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) | |