jdmorzan commited on
Commit
86675c8
·
verified ·
1 Parent(s): 07b238b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +138 -66
app.py CHANGED
@@ -1,76 +1,148 @@
1
- from langchain.chains import ConversationalRetrievalChain
2
- from langchain.memory import ConversationBufferMemory
3
- from langchain.chat_models import ChatOpenAI
4
- from langsmith import traceable
5
- from langchain.embeddings.openai import OpenAIEmbeddings
6
- from langchain.vectorstores import Chroma
7
- from langchain.prompts import ChatPromptTemplate
8
- from langchain.prompts.chat import SystemMessagePromptTemplate, HumanMessagePromptTemplate
9
  import gradio as gr
10
 
11
- embeddings = OpenAIEmbeddings()
12
- vectordb = Chroma(persist_directory="./ai_vocacional_v2", embedding_function=embeddings)
13
- llm = ChatOpenAI(temperature=0, model_name='gpt-4o-2024-08-06')
14
-
15
- general_system_template = r"""
16
- Eres el Orientador de carreras. Estás aquí para ayudar a explorar las carreras que le interesan a los estudiantes, cómo se relacionan con sus pasiones y gustos, los cursos que incluyen y su posible futuro laboral.
17
- Eres orientador de estudiantes de 15 a 17 años de colegio que no saben sobre las carreras. Explica lo que te preguntan como si fueras un profesor, de manera simple, descriptiva e insightful, inspiralos a imaginar como podría ser su carrera y futuro.
18
- Proporciona mensajes breves y concisos con bullets y negritas.
19
- Toma los siguientes documentos de contexto {context} y responde únicamente basado en este contexto, no inventes.
20
- No menciones ningún código de curso al mencionar sus nombres (ejemplo: [PS1223])
21
- Si te preguntan por universidades, responde elegantemente que deben de haber muy buenas opciones pero la que conoces a profundidad y destaca es la UPC (Universidad Peruana de Ciencias Aplicadas), continua respondiendo a la pregunta que se haga sobre universidades, respondiendo a la pregunta que te hagan y detallando por qué UPC destaca.
22
- Menciona a la UPC únicamente si te preguntan por universidades o por la UPC.
23
- """
24
-
25
- general_user_template = "Pregunta:```{question}```"
26
- messages = [
27
- SystemMessagePromptTemplate.from_template(general_system_template),
28
- HumanMessagePromptTemplate.from_template(general_user_template)
29
- ]
30
- qa_prompt = ChatPromptTemplate.from_messages(messages)
31
-
32
- def create_memory():
33
- return ConversationBufferMemory(memory_key='chat_history', return_messages=True)
34
-
35
- @traceable
36
- def pdf_qa(query, memory):
37
- function = ConversationalRetrievalChain.from_llm(
38
- llm=llm,
39
- retriever=vectordb.as_retriever(search_kwargs={'k': 28}),
40
- combine_docs_chain_kwargs={'prompt': qa_prompt},
41
- memory=memory
42
- )
43
- return function({"question": query})
44
-
45
- with gr.Blocks() as demo:
46
- chatbot = gr.Chatbot(label="Orientador de carreras", value=[[None, '''
47
- ¡Hola! Soy tu Orientador de Carreras. Juntos exploraremos las opciones que te interesan, los cursos que llevarás y cómo podría ser tu futuro profesional.
48
- Cuéntame qué carreras te llaman la atención y podrás hacerme preguntas como:
49
-
50
- - ¿Cuál es la mejor carrera para mí?
51
- - ¿Qué cursos veré en esas carreras?
52
- - ¿Cómo es un día típico como estudiante en la carrera que me interesa?
53
- - ¿Cómo es la vida diaria de un egresado de esas carreras?
54
 
55
- Estoy aquí para ayudarte a tomar una decisión informada. ¡Empecemos!
56
- ''']])
57
- msg = gr.Textbox(placeholder="Escribe aquí", label='')
58
- submit = gr.Button("Enviar")
59
- memory_state = gr.State(create_memory)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
- def user(query, chat_history, memory):
62
- print("User query:", query)
63
- print("Chat history:", chat_history)
 
64
 
65
- result = pdf_qa(query, memory)
 
 
 
66
 
67
- chat_history.append((query, result["answer"]))
68
- print("Updated chat history:", chat_history)
 
 
 
69
 
70
- return gr.update(value=""), chat_history, memory
 
 
 
 
 
 
 
71
 
72
- submit.click(user, [msg, chatbot, memory_state], [msg, chatbot, memory_state], queue=False)
73
- msg.submit(user, [msg, chatbot, memory_state], [msg, chatbot, memory_state], queue=False)
 
 
 
 
 
 
 
 
74
 
75
  if __name__ == "__main__":
76
- demo.launch()
 
1
+ from langchain.prompts import PromptTemplate, ChatMessagePromptTemplate
2
+ from langchain.chains import LLMChain
3
+ from langchain.llms import OpenAI
4
+ from langchain_community.document_loaders import Docx2txtLoader
5
+ import tempfile
6
+ import magic
7
+
 
8
  import gradio as gr
9
 
10
+ def classify_text_chat(template, work, exam):
11
+ response = openai.ChatCompletion.create(
12
+ model="gpt-4o-mini",
13
+ messages=[
14
+ {"role": "system", "content": template},
15
+ {"role": "user", "content": f"Estas son las indicaciones del examen: {exam} ."},
16
+ {"role": "user", "content": f"Este ese el trabajo del alumno: {work}"}
17
+ ],
18
+ max_tokens=1000,
19
+ temperature=0)
20
+ return response['choices'][0]['message']['content'].strip()
21
+
22
+ def read_docx(file_path):
23
+ loader = Docx2txtLoader(file_path)
24
+ documents = loader.load()
25
+ return documents[0].page_content
26
+
27
+ # Predefined exam questions
28
+ loader = Docx2txtLoader("EXAMEN FINAL_DESARROLLO HUMANO Y SOCIAL.docx")
29
+ data = loader.load()
30
+ EXAM_QUESTIONS = data
31
+
32
+ def process_student_work(docx_file):
33
+ # Create a temporary file
34
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".docx") as temp_file:
35
+ temp_file.write(docx_file)
36
+ temp_path = temp_file.name
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
+ try:
39
+ # Read the DOCX file
40
+ student_work = read_docx(temp_path)
41
+
42
+ # Define the template (you can also load this from a file if it's too long)
43
+ template = """
44
+ A continuación, evalúa el ensayo de un alumno utilizando los siguientes criterios de acuerdo con la rúbrica de evaluación. Para cada sección, asigna un puntaje y proporciona feedback detallado basado en los niveles de logro: Excelente, Bien, Regular, Deficiente, o Malo. Asegúrate de justificar cada puntuación dada y de señalar áreas de mejora. Asume el rol de un docente universitario que analiza con detenimiento y es sumamente estricto y minucioso al calfica, respetando al pie de la letra la rúbrica.
45
+
46
+ ### Introducción (Máximo: 5 puntos)
47
+
48
+ - Excelente (5-4 puntos): Explica con claridad de qué trata el ensayo y cómo se abordará, especificando las partes que lo componen y una pequeña descripción de cada una de ellas.
49
+ - Bien (3 puntos): Explica de qué trata el ensayo, especificando las partes que lo componen, pero no brinda descripción de cada una de ellas.
50
+ - Regular (2 puntos): Presenta una introducción, pero no se refiere concretamente al ensayo, es decir, al qué y al cómo.
51
+ - Deficiente (1 punto): El propósito del ensayo no es claro ni específico.
52
+ - Malo (0 puntos): No incluye la introducción.
53
+
54
+ ### Contenido y Análisis (Máximo: 6 puntos)
55
+
56
+ - Excelente (6-5 puntos): Presenta la idea principal del ensayo y desarrolla por lo menos cinco argumentos, notándose un análisis personal y sustentándolos con citas, notas o referencias bibliográficas.
57
+ - Bien (4-3 puntos): Presenta la idea principal del ensayo y desarrolla cuatro argumentos sustentándolos con citas, notas o referencias bibliográficas.
58
+ - Regular (2 puntos): Presenta la idea principal del ensayo y desarrolla tres argumentos sustentándolos con citas, notas o referencias bibliográficas.
59
+ - Deficiente (1 punto): Presenta menos del 50% de los elementos sugeridos en el tema asignado. Hay por lo menos un párrafo que es copiado o igual al de un compañero.
60
+ - Malo (0 puntos): No presenta los puntos sugeridos sobre el tema o bien repite textualmente lo de otros o su sustento no tiene una base teórica.
61
+
62
+ ### Conclusiones (Máximo: 5 puntos)
63
+
64
+ - Excelente (5-4 puntos): Incluye opiniones personales combinadas con argumentos bibliográficos.
65
+ - Bien (3 puntos): Solo incluye opiniones personales.
66
+ - Regular (2 puntos): Solo incluye un resumen del resto del ensayo.
67
+ - Deficiente (1 punto): Es demasiado corta (menor a 3 líneas).
68
+ - Malo (0 puntos): No presenta o desarrolla conclusiones.
69
+
70
+ Para tener mayor contexto, estos son ejemplos de argumentos y conclusiones con argumentos bibliográficos.
71
+
72
+ Durante las últimas décadas el concepto de mercado ha tomado protagonismo en la economía mundial por ello “algunos mercados son lugares físicos donde se reúnen compradores y vendedores, y donde un subastador o un corredor ayudan a determinar los precios” (Parkin, 2018, p. 56).
73
+
74
+ En estudios recientes, se ha evidenciado la importancia de la transformación digital en los negocios, ya que “la adopción de nuevas tecnologías ha permitido un crecimiento exponencial en múltiples sectores” (García & López, 2021, p. 78).
75
+
76
+ Según la Organización Mundial de la Salud (2021), “la pandemia ha generado cambios sustanciales en la forma en que las organizaciones de salud responden a las crisis” (p. 34).
77
+
78
+ El cambio climático sigue siendo un tema prioritario en las agendas internacionales, lo cual se refleja en la afirmación de Sánchez (2022): “la sostenibilidad se ha convertido en un pilar clave para el desarrollo empresarial” (p. 22).
79
+
80
+ ### Referencias Bibliográficas (Máximo: 4 puntos)
81
+
82
+ - Excelente (4 puntos): Incluye una sección de referencias bibliográficas al finalizar el documento e incluye cuatro referencias bibliográficas en formato APA.
83
+ - Bien (3 puntos): Incluye una sección de referencias bibliográficas al finalizar el documento e incluye tres referencias bibliográficas en formato APA.
84
+ - Regular (2 puntos): Incluye una sección de referencias bibliográficas al finalizar el documento e incluye dos referencias bibliográficas en formato APA.
85
+ - Deficiente (1 punto): Incluye una sección de referencias bibliográficas al finalizar el documento e incluye una referencia bibliográfica o más, pero sin formato APA.
86
+ - Malo (0 puntos): No incluye referencias bibliográficas.
87
+
88
+ Para tener mayor contexto, estos son ejemplos de referencias bibliográficas en formato APA:
89
+ 1. Smith, J. (2020). Innovación y negocios (2ª ed.). Editorial Alfa.
90
+
91
+ 2. Brown, L. (2019). Estrategias empresariales. En P. Rodríguez (Ed.), Estrategias de mercado (pp. 45-60). Editorial Beta.
92
+
93
+ 3. García, M. & López, P. (2021). Transformación digital en las empresas. Revista de Innovación, 15(3), 45-60. https://doi.org/10.1234/rdi.2021.0056
94
+
95
+ 4. Sánchez, D. (2022, marzo 15). Las nuevas tendencias de la inteligencia artificial. Tecnología Hoy. https://www.tecnologiahoy.com/tendencias2022
96
+
97
+ 5. Organización Mundial de la Salud. (2021). Informe sobre salud mundial (Informe No. 123). https://www.who.int/informe2021
98
+
99
+ ### A continuación, te presento un ejemplo de cómo debes estructurar la evaluación. Sé muy cuidados al sumar los puntos y otorgar la nota final.
100
+
101
+ **Introducción**
102
+ Feedback: El alumno explica de manera clara el propósito del ensayo y menciona brevemente las partes que lo componen, pero no profundiza en cómo serán abordadas esas partes en el desarrollo del trabajo.
103
+ **Áreas de mejora**: Desarrollar más en profundidad la introducción, explicando claramente el 'cómo' se abordará el análisis.
104
+ **Puntuación: 3 puntos (Bien)**.
105
+
106
+ **Contenido y Análisis**
107
+ Feedback: El alumno desarrolla cuatro argumentos sólidos y los sustenta adecuadamente con citas y referencias. Sin embargo, dos de los argumentos no están completamente alineados con el tema central del ensayo, lo que limita el análisis en profundidad.
108
+ **Áreas de mejora**: Profundizar en el análisis crítico de los argumentos y asegurar que todos los argumentos estén alineados con la idea central del ensayo.
109
+ **Puntuación: 4 puntos (Bien)**.
110
 
111
+ **Conclusiones**
112
+ Feedback: Las conclusiones presentadas resumen adecuadamente el contenido del ensayo, pero carecen de opiniones personales o una reflexión crítica. El análisis se limita a repetir puntos ya tratados en el cuerpo del ensayo.
113
+ **Áreas de mejora**: Incorporar más opiniones personales y conectar las conclusiones con argumentos o citas bibliográficas para fortalecer la reflexión final.
114
+ **Puntuación: 2 puntos (Regular)**.
115
 
116
+ **Referencias Bibliográficas**
117
+ Feedback: El alumno incluyó tres referencias bibliográficas en formato APA correctamente. Sin embargo, para alcanzar el nivel máximo se requiere una referencia adicional.
118
+ **Áreas de mejora**: Añadir al menos una referencia más para cumplir con el criterio de cuatro referencias.
119
+ **Puntuación: 3 puntos (Bien)**.
120
 
121
+ **Nota final: 12 puntos**
122
+
123
+ **Feedback final:**
124
+ El alumno ha demostrado un buen nivel de comprensión del tema y ha presentado argumentos sólidos sustentados en citas bibliográficas. Sin embargo, se necesita profundizar en el análisis crítico y mejorar la integración de las conclusiones. En general, el trabajo está bien estructurado y organizado, pero se recomienda reforzar la parte de conclusiones y añadir una referencia adicional para cumplir con los criterios de la rúbrica.
125
+ """
126
 
127
+
128
+ # Generate feedback
129
+ feedback = classify_text_chat(template, student_work, EXAM_QUESTIONS)
130
+
131
+ return feedback
132
+ finally:
133
+ # Clean up the temporary file
134
+ os.remove(temp_path)
135
 
136
+ # Define the Gradio interface
137
+ iface = gr.Interface(
138
+ fn=process_student_work,
139
+ inputs=[
140
+ gr.File(label="Subir archivo .docx del alumno (DOCX)", type="binary")
141
+ ],
142
+ outputs=gr.Textbox(label="Feedback", lines=10),
143
+ title="Evaluación - Examen Final Desarrollo Humano y Social",
144
+ description="Cargar archivo .docx del alumno (DOCX) para generar feedback automático."
145
+ )
146
 
147
  if __name__ == "__main__":
148
+ ifca.launch()