File size: 4,240 Bytes
db23382
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7ebc3b3
db23382
 
 
 
 
 
 
 
 
 
 
 
 
7ebc3b3
db23382
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
da53fa4
db23382
 
 
 
 
 
 
 
 
 
 
 
da53fa4
db23382
da53fa4
db23382
178b1f0
db23382
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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,topic,age_range, chat_history):
     new_chat = []
     
     new_chat.append({"role": "system", "content": 'La idea es que te comportes como juego de chat de preguntas y respuestas. También deberás contabilizar los puntos del juego. Es un juego de preguntas y respuestas sobre el tema {} para estudiantes {}. Empieza con la introducción del juego y la primera pregunta. Es muy importante que solo hagas una pregunta por vez, así el usuario puede ir respondiendo una a una las preguntas. Será un total de 4 preguntas y al finalizar debes indicar el resultado final. Cada respuesta correcta vale 10 puntos y debes dar 3 opciones de respuesta por cada pregunta.'.format(topic,age_range)})
   
     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, person,age_range, chat_history):
    prompt = add_new_message(message, person, age_range, chat_history)
    response = openai.ChatCompletion.create(
        model="gpt-4-0125-preview",
        messages= prompt,
        temperature=0.5,
        max_tokens=1000,
        stream=True,
        )

    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



def start( person,age_range, chat_history):
    message=  "Quiero empezar!"
    yield "",respond(message, person,age_range, chat_history)




with gr.Blocks() as demo:
    gr.Markdown("""
    <center>
    <img src='data:image/jpg;base64,{}' width=200px>
    <h3>
    En este espacio podrás jugar a responder preguntas sobre el tema que te guste y sumar puntos!
    </h3>
    </center>
    """.format(encoded_image))
    with gr.Row():
        topic = gr.Textbox(label="Escribí el tema:")
        choice_age = gr.Radio(
                [
                    ("<12", "menores de 12 años"),
                    ("12-15", "entre 12 y 15 años"),
                    ("15-18", "entre 15 y 18 años"),
                    (">18" ,"mayores de 18"),
                ],
                label="Selecciona según tu edad:",
            )
        start_btn = gr.Button("¡Quiero comenzar!")
    with gr.Row():
        chatbot = gr.Chatbot( height=250) #just to fit the notebook
    with gr.Row():
        with gr.Row():
            with gr.Column(scale=4):
                msg = gr.Textbox(label="Texto de entrada", value="Empecemos")
            with gr.Column(scale=1):
                btn = gr.Button("Enviar")
                clear = gr.ClearButton(components=[msg, chatbot], value="Borrar chat")

   


    btn.click(respond, inputs=[msg,topic,choice_age, chatbot], outputs=[msg, chatbot])
    msg.submit(respond, inputs=[msg, topic,choice_age,chatbot], outputs=[msg, chatbot]) #Press enter to submit
    clear.click(clear_chat,inputs=[msg, chatbot], outputs=[msg, chatbot])
    start_btn.click(respond, inputs=[msg,topic,choice_age, chatbot], outputs=[msg, chatbot])
demo.queue()
demo.launch()