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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -41
app.py CHANGED
@@ -8,8 +8,8 @@ import os
8
  # Configuraci贸n del modelo y par谩metros globales
9
  generation_config = {
10
  "max_output_tokens": 8192,
11
- "temperature": 0.75,
12
- "top_p": 0.95,
13
  }
14
 
15
  safety_settings = [
@@ -35,29 +35,11 @@ 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 extraer_respuestas(pdf_data):
39
- """Simula la extracci贸n de preguntas y respuestas desde un PDF."""
40
- # Aqu铆 puedes usar bibliotecas como PyPDF2 para procesar el contenido del PDF
41
- # Por simplicidad, asumiremos texto plano (esto es un ejemplo)
42
- try:
43
- texto_extraido = base64.b64decode(pdf_data).decode("utf-8", errors="ignore")
44
- preguntas_respuestas = {}
45
- pregunta_actual = None
46
- for linea in texto_extraido.split("\n"):
47
- if "Pregunta" in linea:
48
- pregunta_actual = linea.strip()
49
- preguntas_respuestas[pregunta_actual] = ""
50
- elif "Respuesta" in linea and pregunta_actual:
51
- preguntas_respuestas[pregunta_actual] = linea.split(":")[-1].strip()
52
- return preguntas_respuestas
53
- except Exception as e:
54
- raise ValueError(f"Error al procesar el PDF: {str(e)}")
55
-
56
  def revisar_examen(json_path, pdf_docente, pdf_alumno):
57
  """Funci贸n principal para comparar los PDFs del docente y del alumno."""
58
  try:
59
  # Configurar las credenciales
60
- configurar_credenciales(json_path.name)
61
 
62
  # Inicializar Vertex AI
63
  vertexai.init(project="deploygpt", location="us-central1")
@@ -69,25 +51,48 @@ def revisar_examen(json_path, pdf_docente, pdf_alumno):
69
  with open(pdf_alumno.name, "rb") as alumno_file:
70
  alumno_data = alumno_file.read()
71
 
72
- # Extraer preguntas y respuestas del docente y del alumno
73
- preguntas_docente = extraer_respuestas(docente_data)
74
- respuestas_alumno = extraer_respuestas(alumno_data)
75
-
76
- # Construir la retroalimentaci贸n manualmente para evitar "alucinaciones"
77
- retroalimentacion = []
78
- for pregunta, respuesta_correcta in preguntas_docente.items():
79
- respuesta_alumno = respuestas_alumno.get(pregunta, "No respondida")
80
- if respuesta_alumno == "No respondida":
81
- retroalimentacion.append(f"Pregunta: {pregunta}\nNo fue asignada al alumno.\n")
82
- else:
83
- retroalimentacion.append(
84
- f"Pregunta: {pregunta}\n"
85
- f"Respuesta del alumno: {respuesta_alumno}\n"
86
- f"Respuesta correcta: {respuesta_correcta}\n"
87
- )
88
-
89
- # Unir la retroalimentaci贸n en un solo texto
90
- feedback = "\n".join(retroalimentacion)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  return feedback
92
 
93
  except Exception as e:
@@ -107,4 +112,4 @@ interface = gr.Interface(
107
  )
108
 
109
  # Lanzar la interfaz
110
- interface.launch(debug=True)
 
8
  # Configuraci贸n del modelo y par谩metros globales
9
  generation_config = {
10
  "max_output_tokens": 8192,
11
+ "temperature": 0,
12
+ "top_p": 0.75,
13
  }
14
 
15
  safety_settings = [
 
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")
 
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
  )
113
 
114
  # Lanzar la interfaz
115
+ interface.launch(debug=True)