import os import openai from transformers import pipeline, Conversation import gradio as gr import json from dotenv import load_dotenv # Load environment variables from the .env file de forma local load_dotenv() import base64 with open("Iso_Logotipo_Ceibal.png", "rb") as image_file: encoded_image = base64.b64encode(image_file.read()).decode() openai.api_key = os.environ['OPENAI_API_KEY'] def clear_chat(message, chat_history): return "", [] def add_new_message(message, consigna, rubrica, devolucion, chat_history): new_chat = [] new_chat.append({"role": "system", "content": '{}. La rúbrica que debes seguir es la siguiente:{}. {}'.format(consigna, rubrica, devolucion)}) for turn in chat_history: user, bot = turn new_chat.append({"role": "user", "content": user}) new_chat.append({"role": "assistant","content":bot}) new_chat.append({"role": "user","content":message}) return new_chat def respond(message, consigna, rubrica, devolucion, chat_history): prompt = add_new_message(message, consigna, rubrica, devolucion, chat_history) # stream = client.generate_stream(prompt, # max_new_tokens=1024, # stop_sequences=["\nUser:", "<|endoftext|>"], # temperature=temperature) # #stop_sequences to not generate the user answer # acc_text = "" response = openai.ChatCompletion.create( model="gpt-4-1106-preview", messages= prompt, temperature=0.5, max_tokens=1000, stream=True, )#.choices[0].message.content #chat_history.append((message, response)) token_counter = 0 partial_words = "" counter=0 for chunk in response: chunk_message = chunk['choices'][0]['delta'] if(len(chat_history))<1: # print("entró acaá") partial_words += chunk_message.content chat_history.append([message,chunk_message.content]) else: # print("antes", chat_history) if(len(chunk_message)!=0): if(len(chunk_message)==2): partial_words += chunk_message.content chat_history.append([message,chunk_message.content]) else: partial_words += chunk_message.content chat_history[-1] =([message,partial_words]) yield "",chat_history with gr.Blocks() as demo: gr.Markdown("""

Devolución de Actividades de Aprendizaje Profundo (AAP) usando IA.

Este espacio permite probar la generación mediante IA de devoluciones en base a cierta rúbrica que se debe indicar.

""".format(encoded_image)) with gr.Row(): consigna = gr.Textbox(value="Sos un evaluador del sistema educativo que debe generar una devolución de un informe que recibes como entrada. El contexto es en educación primaria y el informe fue realizado por un/a docente en base a una actividad desarrollada con su grupo de clase durante el año.", lines=5, label="Escribe la consigna de la tarea planteada.") with gr.Row(): rubrica = gr.Textbox(value="Debe incluir el objetivo de la actividad. Debe indicar la cantidad de alumnos y características del grupo de clase. Debe especificar los materiales utilizados. Debe comentar el desarrollo de la actividad. Debe discutir los principales hallazgos de la experiencia.", lines=5, label="Escribe la rúbrica que quieres usar para generar la devolución.") with gr.Row(): devolucion = gr.Textbox(value="En base al informe y la rúbrica te pido que generes una devolución de máximo 300 palabras. En la devolución se debe fundamentar si el informe se ajusta a lo solicitado en la rúbrica y marcando las fortalezas y debilidades en cada punto.", lines=5, label="Escribe las caracterísitas de la devolución que se pretende.") with gr.Row(): with gr.Column(scale=4): msg = gr.Textbox(value="La actividad fue con hormigas. Se estudió el tema en aula y luego se hicieron salidas tanto dentro como fuera del edificio. En dichas salidas se buscó la presencia de hormigas y se estudió su comportamiento. Se observó que el trabajo en campo genera una motivación adicional en los estudiantes, logrando así un mayor involucramiento que luego se traduce en los aprendizajes alcanzados.", lines=5, label="Texto de entrada para ser evaluado y generar devolución.") with gr.Column(scale=1): btn = gr.Button("Enviar") with gr.Row(): with gr.Column(scale=4): chatbot = gr.Chatbot(lines=10) #just to fit the notebook with gr.Column(scale=1): clear = gr.ClearButton(components=[msg, chatbot], value="Borrar chat") btn.click(respond, inputs=[msg, consigna, rubrica, devolucion, chatbot], outputs=[msg, chatbot]) msg.submit(respond, inputs=[msg, consigna, rubrica, devolucion,chatbot], outputs=[msg, chatbot]) #Press enter to submit clear.click(clear_chat,inputs=[msg, chatbot], outputs=[msg, chatbot]) demo.queue() demo.launch()