File size: 5,214 Bytes
1e129b0
7cba34a
 
 
e341366
7cba34a
d35d511
7cba34a
 
d329e85
 
7cba34a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e341366
 
 
4d995a1
e341366
1e129b0
7cba34a
e341366
1e129b0
e341366
 
 
d35d511
1e129b0
897c746
 
1e129b0
897c746
 
7cba34a
1e129b0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7cba34a
 
 
 
 
 
 
 
 
e341366
7cba34a
 
 
 
 
e341366
7cba34a
 
 
f61af4a
1e129b0
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
108
109
110
111
112
113
114
115
 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 revisar_examen(json_path, pdf_docente, pdf_alumno):
    """Funci贸n principal para comparar los PDFs del docente y del alumno."""
    try:
        # Configurar las credenciales
        configurar_credenciales(json_path)

        # Inicializar Vertex AI
        vertexai.init(project="deploygpt", location="us-central1")

        # Leer los datos de los PDFs desde la ruta proporcionada por Gradio
        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()

        # 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",  # Cambiar a Gemini-2
            system_instruction=[textsi_1]
        )

        # Generar la revisi贸n
        response = model.generate_content(
            [document1, document2, text1],
            generation_config=generation_config,
            safety_settings=safety_settings,
            stream=False,
        )

        # Acceder al texto de la respuesta
        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="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)