File size: 5,312 Bytes
f1cf8a0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea15ad5
f1cf8a0
9f9f985
ea15ad5
9f9f985
f1cf8a0
 
 
 
 
 
 
ea15ad5
 
f1cf8a0
 
 
 
 
 
 
0f7be1e
f1cf8a0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0f7be1e
f1cf8a0
 
 
e0bd9bd
f1cf8a0
 
 
ea15ad5
 
f1cf8a0
373b8d0
ea15ad5
 
f1cf8a0
de44411
ea15ad5
de44411
 
faf87c2
de44411
 
 
 
f1cf8a0
ea15ad5
 
f1cf8a0
 
 
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
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("""
    <center>
    <h1>
    Devoluci贸n de Actividades de Aprendizaje Profundo (AAP) usando IA.
    </h1>
    <img src='data:image/jpg;base64,{}' width=200px>
    <h3>
    Este espacio permite probar la generaci贸n mediante IA de devoluciones en base a cierta r煤brica que se debe indicar.
    </h3>
    </center>
    """.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()