DemoProfeIA / app.py
cesar's picture
Create app.py
7cba34a verified
raw
history blame
4.66 kB
import gradio as gr
import base64
import vertexai
from vertexai.generative_models import GenerativeModel, Part, SafetySetting
# Configuraci贸n del modelo y par谩metros globales
vertexai.init(project="deploygpt", location="us-central1")
generation_config = {
"max_output_tokens": 8192,
"temperature": 0,
"top_p": 0.95,
}
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 revisar_examen(pdf_docente, pdf_alumno):
"""Funci贸n principal para comparar los PDFs del docente y del alumno."""
try:
# Leer los datos de los PDFs cargados
docente_data = pdf_docente.read()
alumno_data = pdf_alumno.read()
# Codificar los datos de los PDFs a base64
document1 = Part.from_data(
mime_type="application/pdf",
data=base64.b64encode(docente_data).decode("utf-8"),
)
document2 = Part.from_data(
mime_type="application/pdf",
data=base64.b64encode(alumno_data).decode("utf-8"),
)
# Configuraci贸n del texto de instrucciones
text1 = """Informaci贸n del examen
Materia: bioquimica nutricion normal
Grado/Nivel: universidad
Tema: Metabolismo de lipidos
Formato del examen: \"Preguntas de desarrollo\"
Instrucciones para el asistente
Adjunta los archivos PDF:integracion
PDF del alumno: alumno
Solicita la revisi贸n: \"Por favor, compara las respuestas del alumno en el PDF adjunto con las preguntas y respuestas del PDF del docente. Eval煤a cada respuesta como 'Correcta', 'Incorrecta', 'Incompleta' o 'Vac铆a'. Considera que el alumno solo respondi贸 a un subconjunto de las preguntas del examen. Para cada pregunta, indica si fue 'Asignada' o 'No asignada' al alumno. Proporciona retroalimentaci贸n detallada para cada respuesta de las preguntas asignadas, incluyendo la explicaci贸n de errores, la respuesta correcta (del PDF del docente) y sugerencias de temas para reforzar. Al final, ofrece una retroalimentaci贸n general sobre el desempe帽o del alumno y calcula el porcentaje de precisi贸n, bas谩ndote solo en las preguntas que le fueron asignadas.\""""""
textsi_1 = """Rol: Act煤a como un asistente de docente experto en la materia del examen de Bioquimica.
Objetivo: Tu tarea principal es analizar las respuestas del alumno a las preguntas del examen, compar谩ndolas con la clave de respuestas y criterios de evaluaci贸n proporcionados en el PDF del docente. Debes identificar las respuestas correctas, incorrectas, incompletas y vac铆as, tomando en cuenta que el alumno pudo haber recibido un subconjunto aleatorio de las preguntas del examen. Proporciona retroalimentaci贸n detallada sobre los errores, 谩reas de mejora y temas que el alumno necesita reforzar. Adem谩s, debes calcular y mostrar el porcentaje de precisi贸n del alumno en el examen, considerando solo las preguntas que le fueron asignadas."""
# Configurar el modelo
model = GenerativeModel(
"gemini-1.5-pro-001",
system_instruction=[textsi_1]
)
# Generar la revisi贸n
responses = model.generate_content(
[document1, document2, text1],
generation_config=generation_config,
safety_settings=safety_settings,
stream=False,
)
# Concatenar las respuestas del modelo
feedback = ""
for response in responses:
feedback += response.text
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="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 PDF del docente y el PDF del alumno para recibir una evaluaci贸n detallada."
)
# Lanzar la interfaz
interface.launch(debug=True)