cesar commited on
Commit
f61af4a
verified
1 Parent(s): d329e85

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -47
app.py CHANGED
@@ -35,64 +35,55 @@ def configurar_credenciales(json_path):
35
  """Configura las credenciales de Google Cloud usando un archivo JSON."""
36
  os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = json_path
37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  def revisar_examen(json_path, pdf_docente, pdf_alumno):
39
- """Funci贸n principal para comparar los PDFs del docente y del alumno."""
40
  try:
41
  # Configurar las credenciales
42
- configurar_credenciales(json_path)
43
 
44
  # Inicializar Vertex AI
45
  vertexai.init(project="deploygpt", location="us-central1")
46
 
47
- # Leer los datos de los PDFs desde la ruta proporcionada por Gradio
48
  with open(pdf_docente.name, "rb") as docente_file:
49
  docente_data = docente_file.read()
50
-
51
  with open(pdf_alumno.name, "rb") as alumno_file:
52
  alumno_data = alumno_file.read()
53
 
54
- # Codificar los datos de los PDFs a base64
55
- document1 = Part.from_data(
56
- mime_type="application/pdf",
57
- data=base64.b64encode(docente_data).decode("utf-8"),
58
- )
59
-
60
- document2 = Part.from_data(
61
- mime_type="application/pdf",
62
- data=base64.b64encode(alumno_data).decode("utf-8"),
63
- )
64
-
65
- # Configuraci贸n del texto de instrucciones
66
- text1 = """Informaci贸n del examen
67
- Materia: bioquimica nutricion normal
68
- Grado/Nivel: universidad
69
- Tema: Metabolismo de lipidos
70
- Formato del examen: \\\"Preguntas de desarrollo\\\"
71
- Instrucciones para el asistente
72
- Adjunta los archivos PDF:integracion
73
- PDF del alumno: alumno
74
- 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.\\\""""
75
-
76
- textsi_1 = """Rol: Act煤a como un asistente de docente experto en la materia del examen de Bioquimica.
77
- 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."""
78
-
79
- # Configurar el modelo
80
- model = GenerativeModel(
81
- "gemini-1.5-pro-001", # Cambiar a Gemini-2
82
- system_instruction=[textsi_1]
83
- )
84
-
85
- # Generar la revisi贸n
86
- response = model.generate_content(
87
- [document1, document2, text1],
88
- generation_config=generation_config,
89
- safety_settings=safety_settings,
90
- stream=False,
91
- )
92
-
93
- # Acceder al texto de la respuesta
94
- feedback = response.text
95
-
96
  return feedback
97
 
98
  except Exception as e:
@@ -112,4 +103,4 @@ interface = gr.Interface(
112
  )
113
 
114
  # Lanzar la interfaz
115
- interface.launch(debug=True)
 
35
  """Configura las credenciales de Google Cloud usando un archivo JSON."""
36
  os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = json_path
37
 
38
+ def extraer_respuestas(pdf_data):
39
+ """Extrae preguntas y respuestas desde un PDF."""
40
+ # Procesamiento simulado para simplificar
41
+ texto_extraido = base64.b64decode(pdf_data).decode("utf-8", errors="ignore")
42
+ preguntas_respuestas = {}
43
+ pregunta_actual = None
44
+ for linea in texto_extraido.split("\n"):
45
+ if "Pregunta" in linea:
46
+ pregunta_actual = linea.strip()
47
+ preguntas_respuestas[pregunta_actual] = ""
48
+ elif "Respuesta" in linea and pregunta_actual:
49
+ preguntas_respuestas[pregunta_actual] = linea.split(":")[-1].strip()
50
+ return preguntas_respuestas
51
+
52
  def revisar_examen(json_path, pdf_docente, pdf_alumno):
53
+ """Compara las respuestas del alumno con las preguntas del docente."""
54
  try:
55
  # Configurar las credenciales
56
+ configurar_credenciales(json_path.name)
57
 
58
  # Inicializar Vertex AI
59
  vertexai.init(project="deploygpt", location="us-central1")
60
 
61
+ # Leer los PDFs
62
  with open(pdf_docente.name, "rb") as docente_file:
63
  docente_data = docente_file.read()
64
+
65
  with open(pdf_alumno.name, "rb") as alumno_file:
66
  alumno_data = alumno_file.read()
67
 
68
+ # Extraer preguntas y respuestas
69
+ preguntas_docente = extraer_respuestas(docente_data)
70
+ respuestas_alumno = extraer_respuestas(alumno_data)
71
+
72
+ # Validar solo preguntas respondidas por el alumno
73
+ retroalimentacion = []
74
+ for pregunta, respuesta_correcta in preguntas_docente.items():
75
+ if pregunta in respuestas_alumno:
76
+ respuesta_alumno = respuestas_alumno[pregunta]
77
+ retroalimentacion.append(
78
+ f"Pregunta: {pregunta}\n"
79
+ f"Respuesta del alumno: {respuesta_alumno}\n"
80
+ f"Respuesta correcta: {respuesta_correcta}\n"
81
+ )
82
+ else:
83
+ retroalimentacion.append(f"Pregunta: {pregunta}\nNo fue asignada al alumno.\n")
84
+
85
+ # Unir retroalimentaci贸n
86
+ feedback = "\n".join(retroalimentacion)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  return feedback
88
 
89
  except Exception as e:
 
103
  )
104
 
105
  # Lanzar la interfaz
106
+ interface.launch(debug=True)