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()