Spaces:
Sleeping
Sleeping
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)
|