File size: 4,656 Bytes
7cba34a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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)