DemoProfeIA / app.py
cesar's picture
Update app.py
f61af4a verified
raw
history blame
3.84 kB
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)